]> git.lizzy.rs Git - rust.git/blob - src/test/ui/macros/restricted-shadowing-modern.rs
Auto merge of #54624 - arielb1:evaluate-outlives, r=nikomatsakis
[rust.git] / src / test / ui / macros / restricted-shadowing-modern.rs
1 // Legend:
2 // `N` - number of combination, from 0 to 4*4*4=64
3 // `Outer < Invoc` means that expansion that produced macro definition `Outer`
4 // is a strict ancestor of expansion that produced macro definition `Inner`.
5 // `>`, `=` and `Unordered` mean "strict descendant", "same" and
6 // "not in ordering relation" for parent expansions.
7 // `+` - possible configuration
8 // `-` - configuration impossible due to properties of partial ordering
9 // `-?` - configuration impossible due to block/scope syntax
10 // `+?` - configuration possible only with legacy scoping
11
12 //  N | Outer ~ Invoc | Invoc ~ Inner | Outer ~ Inner | Possible |
13 //  1 |       <       |       <       |       <       |    +     |
14 //  2 |       <       |       <       |       =       |    -     |
15 //  3 |       <       |       <       |       >       |    -     |
16 //  4 |       <       |       <       |   Unordered   |    -     |
17 //  5 |       <       |       =       |       <       |    +     |
18 //  6 |       <       |       =       |       =       |    -     |
19 //  7 |       <       |       =       |       >       |    -     |
20 //  8 |       <       |       =       |   Unordered   |    -     |
21 //  9 |       <       |       >       |       <       |    +     |
22 // 10 |       <       |       >       |       =       |    +     |
23 // 11 |       <       |       >       |       >       |    -?    |
24 // 12 |       <       |       >       |   Unordered   |    -?    |
25 // 13 |       <       |   Unordered   |       <       |    +     |
26 // 14 |       <       |   Unordered   |       =       |    -     |
27 // 15 |       <       |   Unordered   |       >       |    -     |
28 // 16 |       <       |   Unordered   |   Unordered   |    -?    |
29 // 17 |       =       |       <       |       <       |    +     |
30 // 18 |       =       |       <       |       =       |    -     |
31 // 19 |       =       |       <       |       >       |    -     |
32 // 20 |       =       |       <       |   Unordered   |    -     |
33 // 21 |       =       |       =       |       <       |    -     |
34 // 22 |       =       |       =       |       =       |    +     |
35 // 23 |       =       |       =       |       >       |    -     |
36 // 24 |       =       |       =       |   Unordered   |    -     |
37 // 25 |       =       |       >       |       <       |    -     |
38 // 26 |       =       |       >       |       =       |    -     |
39 // 27 |       =       |       >       |       >       |    -?    |
40 // 28 |       =       |       >       |   Unordered   |    -     |
41 // 29 |       =       |   Unordered   |       <       |    -     |
42 // 30 |       =       |   Unordered   |       =       |    -     |
43 // 31 |       =       |   Unordered   |       >       |    -     |
44 // 32 |       =       |   Unordered   |   Unordered   |    -?    |
45 // 33 |       >       |       <       |       <       |    -?    |
46 // 34 |       >       |       <       |       =       |    -?    |
47 // 35 |       >       |       <       |       >       |    -?    |
48 // 36 |       >       |       <       |   Unordered   |    +     |
49 // 37 |       >       |       =       |       <       |    -     |
50 // 38 |       >       |       =       |       =       |    -     |
51 // 39 |       >       |       =       |       >       |    +     |
52 // 40 |       >       |       =       |   Unordered   |    -     |
53 // 41 |       >       |       >       |       <       |    -     |
54 // 42 |       >       |       >       |       =       |    -     |
55 // 43 |       >       |       >       |       >       |    -?    |
56 // 44 |       >       |       >       |   Unordered   |    -     |
57 // 45 |       >       |   Unordered   |       <       |    -     |
58 // 46 |       >       |   Unordered   |       =       |    -     |
59 // 47 |       >       |   Unordered   |       >       |    -?    |
60 // 48 |       >       |   Unordered   |   Unordered   |    -?    |
61 // 49 |   Unordered   |       <       |       <       |    -?    |
62 // 50 |   Unordered   |       <       |       =       |    -     |
63 // 51 |   Unordered   |       <       |       >       |    -     |
64 // 52 |   Unordered   |       <       |   Unordered   |    +     |
65 // 53 |   Unordered   |       =       |       <       |    -     |
66 // 54 |   Unordered   |       =       |       =       |    -     |
67 // 55 |   Unordered   |       =       |       >       |    -     |
68 // 56 |   Unordered   |       =       |   Unordered   |    +     |
69 // 57 |   Unordered   |       >       |       <       |    -     |
70 // 58 |   Unordered   |       >       |       =       |    -     |
71 // 59 |   Unordered   |       >       |       >       |    +     |
72 // 60 |   Unordered   |       >       |   Unordered   |    +     |
73 // 61 |   Unordered   |   Unordered   |       <       |    -?    |
74 // 62 |   Unordered   |   Unordered   |       =       |    -?    |
75 // 63 |   Unordered   |   Unordered   |       >       |    -?    |
76 // 64 |   Unordered   |   Unordered   |   Unordered   |    +     |
77
78 #![feature(decl_macro, rustc_attrs)]
79
80 struct Right;
81 // struct Wrong; // not defined
82
83 #[rustc_transparent_macro]
84 macro include() {
85     #[rustc_transparent_macro]
86     macro gen_outer() {
87         macro m() { Wrong }
88     }
89     #[rustc_transparent_macro]
90     macro gen_inner() {
91         macro m() { Right }
92     }
93     #[rustc_transparent_macro]
94     macro gen_invoc() {
95         m!()
96     }
97
98     // -----------------------------------------------------------
99
100     fn check1() {
101         macro m() {}
102         {
103             #[rustc_transparent_macro]
104             macro gen_gen_inner_invoc() {
105                 gen_inner!();
106                 m!(); //~ ERROR `m` is ambiguous
107             }
108             gen_gen_inner_invoc!();
109         }
110     }
111
112     fn check5() {
113         macro m() { Wrong }
114         {
115             #[rustc_transparent_macro]
116             macro gen_inner_invoc() {
117                 macro m() { Right }
118                 m!(); // OK
119             }
120             gen_inner_invoc!();
121         }
122     }
123
124     fn check9() {
125         macro m() { Wrong }
126         {
127             #[rustc_transparent_macro]
128             macro gen_inner_gen_invoc() {
129                 macro m() { Right }
130                 gen_invoc!(); // OK
131             }
132             gen_inner_gen_invoc!();
133         }
134     }
135
136     fn check10() {
137         macro m() { Wrong }
138         {
139             macro m() { Right }
140             gen_invoc!(); // OK
141         }
142     }
143
144     fn check13() {
145         macro m() {}
146         {
147             gen_inner!();
148             #[rustc_transparent_macro]
149             macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
150             gen_invoc!();
151         }
152     }
153
154     fn check17() {
155         macro m() {}
156         {
157             gen_inner!();
158             m!(); //~ ERROR `m` is ambiguous
159         }
160     }
161
162     fn check22() {
163         macro m() { Wrong }
164         {
165             macro m() { Right }
166             m!(); // OK
167         }
168     }
169
170     fn check36() {
171         gen_outer!();
172         {
173             gen_inner!();
174             m!(); //~ ERROR `m` is ambiguous
175         }
176     }
177
178     fn check39() {
179         gen_outer!();
180         {
181             macro m() { Right }
182             m!(); // OK
183         }
184     }
185
186     fn check52() {
187         gen_outer!();
188         {
189             #[rustc_transparent_macro]
190             macro gen_gen_inner_invoc() {
191                 gen_inner!();
192                 m!(); //~ ERROR `m` is ambiguous
193             }
194             gen_gen_inner_invoc!();
195         }
196     }
197
198     fn check56() {
199         gen_outer!();
200         {
201             #[rustc_transparent_macro]
202             macro gen_inner_invoc() {
203                 macro m() { Right }
204                 m!(); // OK
205             }
206             gen_inner_invoc!();
207         }
208     }
209
210     fn check59() {
211         gen_outer!();
212         {
213             macro m() { Right }
214             gen_invoc!(); // OK
215         }
216     }
217
218     fn check60() {
219         gen_outer!();
220         {
221             #[rustc_transparent_macro]
222             macro gen_inner_gen_invoc() {
223                 macro m() { Right }
224                 gen_invoc!(); // OK
225             }
226             gen_inner_gen_invoc!();
227         }
228     }
229
230     fn check64() {
231         gen_outer!();
232         {
233             gen_inner!();
234             #[rustc_transparent_macro]
235             macro gen_invoc() { m!() } //~ ERROR `m` is ambiguous
236             gen_invoc!();
237         }
238     }
239 }
240
241 include!();
242
243 fn main() {}