Skip to content

Commit a86854c

Browse files
committed
wip: add test
1 parent 9437d81 commit a86854c

5 files changed

+346
-464
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
//@ check-pass
2+
//@ edition:2018
3+
4+
5+
type FnF = i8;
6+
type BindingF = i16;
7+
8+
fn main() {}
9+
10+
fn f_without_definition_f(f: impl Fn() -> BindingF) {
11+
let a: BindingF = m!();
12+
macro_rules! m {() => ( f() )}
13+
use m;
14+
}
15+
16+
fn fn0(f: impl Fn() -> BindingF) {
17+
// param f -> fn f -> macro m
18+
19+
let a0: FnF = m!();
20+
fn f() -> FnF { 42 }
21+
let a1: FnF = m!();
22+
macro_rules! m {() => ( f() )}
23+
use m;
24+
let a2: FnF = m!();
25+
}
26+
27+
fn fn1(f: impl Fn() -> BindingF) {
28+
// param f -> macro m -> fn f
29+
30+
let a0: FnF = m!();
31+
macro_rules! m {() => ( f() )}
32+
use m;
33+
let a1: FnF = m!();
34+
fn f() -> FnF { 42 }
35+
let a2: FnF = m!();
36+
}
37+
38+
fn closure() {
39+
let c_without_definition_f = |f: Binding| -> {
40+
let a1: Binding = m!();
41+
macro_rules! m {() => ( f )}
42+
use m;
43+
};
44+
45+
let c0 = |f: BindingF| {
46+
// param f -> fn f -> macro m
47+
let a0: FnF = m!();
48+
fn f() -> FnF { 42 }
49+
let a1: FnF = m!();
50+
macro_rules! m {() => ( f() )}
51+
use m;
52+
let a2: FnF = m!();
53+
};
54+
55+
let c1 = |f: BindingF| {
56+
// param f -> macro m -> fn f
57+
let a0: FnF = m!();
58+
macro_rules! m {() => ( f() )}
59+
use m;
60+
let a1: FnF = m!();
61+
fn f() -> FnF { 42 }
62+
let a2: FnF = m!();
63+
};
64+
}
65+
66+
67+
fn for_loop() {
68+
// for f -> macro m -> fn f
69+
for f in 0..42 as BindingF {
70+
let a0: FnF = m!();
71+
macro_rules! m {() => ( f() )}
72+
use m;
73+
let a1: FnF = m!();
74+
fn f() -> FnF { 42 }
75+
let a2: FnF = m!();
76+
}
77+
78+
// for f -> fn f -> macro m
79+
for f in 0..42 as BindingF {
80+
let a0: FnF = m!();
81+
fn f() -> FnF { 42 }
82+
let a1: FnF = m!();
83+
macro_rules! m {() => ( f() )}
84+
use m;
85+
let a2: FnF = m!();
86+
}
87+
}
88+
89+
90+
fn match_arm() {
91+
// match f -> macro m -> fn f
92+
match 42 as BindingF {
93+
f => {
94+
let a0: FnF = m!();
95+
macro_rules! m {() => ( f() )}
96+
use m;
97+
let a1: FnF = m!();
98+
fn f() -> FnF { 42 }
99+
let a2: FnF = m!();
100+
}
101+
}
102+
103+
// match f -> fn f -> macro m
104+
match 42 as BindingF {
105+
f => {
106+
let a0: FnF = m!();
107+
fn f() -> FnF { 42 }
108+
let a1: FnF = m!();
109+
macro_rules! m {() => ( f() )}
110+
use m;
111+
let a2: FnF = m!();
112+
}
113+
}
114+
}

tests/ui/resolve/fresh-should-shadow-definitation-in-decl-macro-expand.rs

Lines changed: 44 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
#![feature(decl_macro)]
77

88
type FnF = i8;
9-
type LetF = i16;
9+
type BindingF = i16;
1010

1111
fn f_without_definition_f() {
12-
let f = || -> LetF { 42 };
13-
let a: LetF = m!();
12+
let f = || -> BindingF { 42 };
13+
let a: BindingF = m!();
1414
macro m() { f() }
1515
}
1616

@@ -21,171 +21,75 @@ fn f_without_closure_f() {
2121
}
2222

2323
fn f0() {
24-
let f = || -> LetF { 42 };
25-
fn f() -> FnF { 42 }
26-
let a: LetF = m!();
27-
macro m() { f() }
28-
}
29-
30-
fn f1() {
31-
let f = || -> LetF { 42 };
32-
let a: LetF = m!();
33-
fn f() -> FnF { 42 }
34-
macro m() { f() }
35-
}
36-
37-
fn f2() {
38-
let f = || -> LetF { 42 };
39-
let a: LetF = m!();
40-
macro m() { f() }
41-
fn f() -> FnF { 42 }
42-
}
43-
44-
fn f3() {
45-
let f = || -> LetF { 42 };
46-
macro m() { f() }
47-
let a: LetF = m!();
48-
fn f() -> FnF { 42 }
49-
}
50-
51-
fn f4() {
52-
let f = || -> LetF { 42 };
53-
macro m() { f() }
54-
fn f() -> FnF { 42 }
55-
let a: LetF = m!();
56-
}
57-
58-
fn f5() {
59-
let f = || -> LetF { 42 };
60-
fn f() -> FnF { 42 }
61-
macro m() { f() }
62-
let a: LetF = m!();
63-
}
64-
65-
fn f6() {
66-
fn f() -> FnF { 42 }
67-
let f = || -> LetF { 42 };
68-
let a: LetF = m!();
69-
macro m() { f() }
70-
}
71-
72-
fn f7() {
73-
fn f() -> FnF { 42 }
74-
let f = || -> LetF { 42 };
75-
macro m() { f() }
76-
let a: LetF = m!();
77-
}
78-
79-
fn f8() {
80-
fn f() -> FnF { 42 }
81-
let a: FnF = m!();
82-
let f = || -> LetF { 42 };
83-
macro m() { f() }
84-
}
85-
86-
fn f9() {
87-
fn f() -> FnF { 42 }
88-
let a: FnF = m!();
89-
macro m() { f() }
90-
let f = || -> LetF { 42 };
91-
}
24+
// let f -> macro m -> fn f
9225

93-
fn f10() {
94-
fn f() -> FnF { 42 }
26+
let a0: BindingF = m!(); // TODO: ERROR: defined later
27+
let f = || -> BindingF { 42 };
28+
let a1: BindingF = m!();
9529
macro m() { f() }
96-
let a: FnF = m!();
97-
let f = || -> LetF { 42 };
98-
}
99-
100-
fn f11() {
30+
let a2: BindingF = m!();
10131
fn f() -> FnF { 42 }
102-
macro m() { f() }
103-
let f = || -> LetF { 42 };
104-
let a: FnF = m!();
32+
let a3: BindingF = m!();
10533
}
10634

107-
fn f12() {
108-
let a: FnF = m!();
109-
fn f() -> FnF { 42 }
110-
let f = || -> LetF { 42 };
111-
macro m() { f() }
112-
}
35+
fn f1() {
36+
// let f -> fn f -> macro m
11337

114-
fn f13() {
115-
let a: FnF = m!();
116-
let f = || -> LetF { 42 };
38+
let a0: BindingF = m!(); // TODO: ERROR: defined later
39+
let f = || -> BindingF { 42 };
40+
let a1: BindingF = m!();
11741
fn f() -> FnF { 42 }
42+
let a2: BindingF = m!();
11843
macro m() { f() }
44+
let a3: BindingF = m!();
11945
}
12046

121-
fn f14() {
122-
let a: FnF = m!();
123-
let f = || -> LetF { 42 };
124-
macro m() { f() }
125-
fn f() -> FnF { 42 }
126-
}
47+
fn f2() {
48+
// fn f -> let f -> macro m
12749

128-
fn f15() {
129-
let a: FnF = m!();
130-
macro m() { f() }
131-
let f = || -> LetF { 42 };
50+
let a0: BindingF = m!(); // TODO: ERROR: defined later
13251
fn f() -> FnF { 42 }
133-
}
134-
135-
fn f16() {
136-
let a: FnF = m!();
52+
let a1: BindingF = m!(); // TODO: ERROR: defined later
53+
let f = || -> BindingF { 42 };
54+
let a2: BindingF = m!();
13755
macro m() { f() }
138-
fn f() -> FnF { 42 }
139-
let f = || -> LetF { 42 };
56+
let a3: BindingF = m!();
14057
}
14158

142-
fn f17() {
143-
let a: FnF = m!();
144-
fn f() -> FnF { 42 }
145-
macro m() { f() }
146-
let f = || -> LetF { 42 };
147-
}
59+
fn f3() {
60+
// fn f -> macro m -> let f
14861

149-
fn f18() {
150-
macro m() { f() }
151-
let a: FnF = m!();
62+
let a0: FnF = m!();
15263
fn f() -> FnF { 42 }
153-
let f = || -> LetF { 42 };
154-
}
155-
156-
fn f19() {
64+
let a1: FnF = m!();
15765
macro m() { f() }
158-
fn f() -> FnF { 42 }
159-
let a: FnF = m!();
160-
let f = || -> LetF { 42 };
66+
let a2: FnF = m!();
67+
let f = || -> BindingF { 42 };
68+
let a3: FnF = m!();
16169
}
16270

163-
fn f20() {
164-
macro m() { f() }
165-
fn f() -> FnF { 42 }
166-
let f = || -> LetF { 42 };
167-
let a: FnF = m!();
168-
}
71+
fn f4() {
72+
// macro m -> fn f -> let f;
16973

170-
fn f21() {
74+
let a0: FnF = m!();
17175
macro m() { f() }
172-
let a: FnF = m!();
173-
let f = || -> LetF { 42 };
76+
let a1: FnF = m!();
17477
fn f() -> FnF { 42 }
78+
let a2: FnF = m!();
79+
let f = || -> BindingF { 42 };
80+
let a3: FnF = m!();
17581
}
17682

177-
fn f22() {
178-
macro m() { f() }
179-
let f = || -> LetF { 42 };
180-
fn f() -> FnF { 42 }
181-
let a: FnF = m!();
182-
}
83+
fn f5() {
84+
// macro m -> let f -> fn f;
18385

184-
fn f23() {
86+
let a0: FnF = m!();
18587
macro m() { f() }
186-
let f = || -> LetF { 42 };
187-
let a: FnF = m!();
88+
let a1: FnF = m!();
89+
let f = || -> BindingF { 42 };
90+
let a2: FnF = m!();
18891
fn f() -> FnF { 42 }
92+
let a3: FnF = m!();
18993
}
19094

19195
fn main () {}

0 commit comments

Comments
 (0)