Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e1182fa

Browse files
committedNov 5, 2024·
Check for both StmtKind::MacCall and ExprKind::MacCall
1 parent 096277e commit e1182fa

File tree

6 files changed

+465
-36
lines changed

6 files changed

+465
-36
lines changed
 

‎compiler/rustc_ast/src/ast.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,7 +1194,7 @@ impl Expr {
11941194
///
11951195
/// Does not ensure that the path resolves to a const param, the caller should check this.
11961196
pub fn is_potential_trivial_const_arg(&self, strip_identity_block: bool) -> bool {
1197-
let this = if strip_identity_block { self.maybe_unwrap_block().1 } else { self };
1197+
let this = if strip_identity_block { self.maybe_unwrap_block() } else { self };
11981198

11991199
if let ExprKind::Path(None, path) = &this.kind
12001200
&& path.is_potential_trivial_const_arg()
@@ -1206,14 +1206,41 @@ impl Expr {
12061206
}
12071207

12081208
/// Returns an expression with (when possible) *one* outter brace removed
1209-
pub fn maybe_unwrap_block(&self) -> (bool, &Expr) {
1209+
pub fn maybe_unwrap_block(&self) -> &Expr {
12101210
if let ExprKind::Block(block, None) = &self.kind
12111211
&& let [stmt] = block.stmts.as_slice()
12121212
&& let StmtKind::Expr(expr) = &stmt.kind
12131213
{
1214-
(true, expr)
1214+
expr
12151215
} else {
1216-
(false, self)
1216+
self
1217+
}
1218+
}
1219+
1220+
/// Determines whether this expression is a macro call optionally wrapped in braces . If
1221+
/// `already_stripped_block` is set then we do not attempt to peel off a layer of braces.
1222+
///
1223+
/// Returns the [`NodeId`] of the macro call and whether a layer of braces has been peeled
1224+
/// either before, or part of, this function.
1225+
pub fn optionally_braced_mac_call(
1226+
&self,
1227+
already_stripped_block: bool,
1228+
) -> Option<(bool, NodeId)> {
1229+
match &self.kind {
1230+
ExprKind::Block(block, None)
1231+
if let [stmt] = &*block.stmts
1232+
&& !already_stripped_block =>
1233+
{
1234+
match &stmt.kind {
1235+
StmtKind::MacCall(_) => Some((true, stmt.id)),
1236+
StmtKind::Expr(expr) if let ExprKind::MacCall(_) = &expr.kind => {
1237+
Some((true, expr.id))
1238+
}
1239+
_ => None,
1240+
}
1241+
}
1242+
ExprKind::MacCall(_) => Some((already_stripped_block, self.id)),
1243+
_ => None,
12171244
}
12181245
}
12191246

‎compiler/rustc_resolve/src/def_collector.rs

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,16 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
130130
&self,
131131
anon_const: &'a AnonConst,
132132
) -> Option<(PendingAnonConstInfo, NodeId)> {
133-
let (block_was_stripped, expr) = anon_const.value.maybe_unwrap_block();
134-
match expr {
135-
Expr { kind: ExprKind::MacCall(..), id, .. } => Some((
133+
anon_const.value.optionally_braced_mac_call(false).map(|(block_was_stripped, id)| {
134+
(
136135
PendingAnonConstInfo {
137136
id: anon_const.id,
138137
span: anon_const.value.span,
139138
block_was_stripped,
140139
},
141-
*id,
142-
)),
143-
_ => None,
144-
}
140+
id,
141+
)
142+
})
145143
}
146144

147145
/// Determines whether the expression `const_arg_sub_expr` is a simple macro call, sometimes
@@ -161,18 +159,10 @@ impl<'a, 'ra, 'tcx> DefCollector<'a, 'ra, 'tcx> {
161159
panic!("Checking expr is trivial macro call without having entered anon const: `{const_arg_sub_expr:?}`"),
162160
);
163161

164-
let (block_was_stripped, expr) = if pending_anon.block_was_stripped {
165-
(true, const_arg_sub_expr)
166-
} else {
167-
const_arg_sub_expr.maybe_unwrap_block()
168-
};
169-
170-
match expr {
171-
Expr { kind: ExprKind::MacCall(..), id, .. } => {
172-
Some((PendingAnonConstInfo { block_was_stripped, ..pending_anon }, *id))
173-
}
174-
_ => None,
175-
}
162+
const_arg_sub_expr.optionally_braced_mac_call(pending_anon.block_was_stripped).map(
163+
|(block_was_stripped, id)| PendingAnonConstInfo { block_was_stripped, ..pending_anon },
164+
id,
165+
)
176166
}
177167
}
178168

‎tests/crashes/131915.rs

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Regression test for #131915 where we did not handle macro calls as
2+
// statements correctly when determining if a const argument should
3+
// have a `DefId` created or not.
4+
5+
macro_rules! y {
6+
( $($matcher:tt)*) => {
7+
x
8+
//~^ ERROR: cannot find value `x` in this scope
9+
};
10+
}
11+
12+
const _: A<
13+
//~^ ERROR: free constant item without body
14+
//~| ERROR: cannot find type `A` in this scope
15+
{
16+
y! { test.tou8 }
17+
},
18+
>;
19+
20+
fn main() {}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
error: free constant item without body
2+
--> $DIR/const_arg_trivial_macro_expansion-2.rs:12:1
3+
|
4+
LL | / const _: A<
5+
LL | |
6+
LL | |
7+
LL | | {
8+
LL | | y! { test.tou8 }
9+
LL | | },
10+
LL | | >;
11+
| | ^ help: provide a definition for the constant: `= <expr>;`
12+
| |__|
13+
|
14+
15+
error[E0412]: cannot find type `A` in this scope
16+
--> $DIR/const_arg_trivial_macro_expansion-2.rs:12:10
17+
|
18+
LL | const _: A<
19+
| ^ not found in this scope
20+
21+
error[E0425]: cannot find value `x` in this scope
22+
--> $DIR/const_arg_trivial_macro_expansion-2.rs:7:9
23+
|
24+
LL | x
25+
| ^ not found in this scope
26+
...
27+
LL | y! { test.tou8 }
28+
| ---------------- in this macro invocation
29+
|
30+
= note: this error originates in the macro `y` (in Nightly builds, run with -Z macro-backtrace for more info)
31+
help: you might be missing a const parameter
32+
|
33+
LL | const _<const x: /* Type */>: A<
34+
| +++++++++++++++++++++
35+
36+
error: aborting due to 3 previous errors
37+
38+
Some errors have detailed explanations: E0412, E0425.
39+
For more information about an error, try `rustc --explain E0412`.
Lines changed: 366 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,366 @@
1+
//@ known-bug: #132647
2+
//@ dont-check-compiler-stderr
3+
#![allow(unused_braces)]
4+
5+
// FIXME(bootstrap): This isn't a known bug, we just don't want to write any error annotations.
6+
// this is hard because macro expansion errors have their span be inside the *definition* of the
7+
// macro rather than the line *invoking* it. This means we would wind up with hundreds of error
8+
// annotations on the macro definitions below rather than on any of the actual lines
9+
// that act as a "test".
10+
//
11+
// It's also made more complicated by the fact that compiletest generates "extra" expected
12+
// notes to give an assertable macro backtrace as otherwise there would *nothing* to annotate
13+
// on the actual test lines. All of these extra notes result in needing to write hundreds of
14+
// unnecessary notes on almost every line in this file.
15+
//
16+
// Even though this is marked `known-bug` it should still fail if this test starts ICEing which
17+
// is "enough" in this case.
18+
19+
// Test that we correctly create definitions for anon consts even when
20+
// the trivial-ness of the expression is obscured by macro expansions.
21+
//
22+
// Acts as a regression test for: #131915 130321 128016
23+
24+
// macros expanding to idents
25+
26+
macro_rules! unbraced_ident {
27+
() => {
28+
ident
29+
};
30+
}
31+
32+
macro_rules! braced_ident {
33+
() => {{ ident }};
34+
}
35+
36+
macro_rules! unbraced_unbraced_ident {
37+
() => {
38+
unbraced_ident!()
39+
};
40+
}
41+
42+
macro_rules! braced_unbraced_ident {
43+
() => {{ unbraced_ident!() }};
44+
}
45+
46+
macro_rules! unbraced_braced_ident {
47+
() => {
48+
braced_ident!()
49+
};
50+
}
51+
52+
macro_rules! braced_braced_ident {
53+
() => {{ braced_ident!() }};
54+
}
55+
56+
// macros expanding to complex expr
57+
58+
macro_rules! unbraced_expr {
59+
() => {
60+
ident.other
61+
};
62+
}
63+
64+
macro_rules! braced_expr {
65+
() => {{ ident.otherent }};
66+
}
67+
68+
macro_rules! unbraced_unbraced_expr {
69+
() => {
70+
unbraced_expr!()
71+
};
72+
}
73+
74+
macro_rules! braced_unbraced_expr {
75+
() => {{ unbraced_expr!() }};
76+
}
77+
78+
macro_rules! unbraced_braced_expr {
79+
() => {
80+
braced_expr!()
81+
};
82+
}
83+
84+
macro_rules! braced_braced_expr {
85+
() => {{ braced_expr!() }};
86+
}
87+
88+
#[rustfmt::skip]
89+
mod array_paren_call {
90+
// Arrays where the expanded result is a `Res::Err`
91+
fn array_0() -> [(); unbraced_unbraced_ident!()] { loop {} }
92+
fn array_1() -> [(); braced_unbraced_ident!()] { loop {} }
93+
fn array_2() -> [(); unbraced_braced_ident!()] { loop {} }
94+
fn array_3() -> [(); braced_braced_ident!()] { loop {} }
95+
fn array_4() -> [(); { unbraced_unbraced_ident!() }] { loop {} }
96+
fn array_5() -> [(); { braced_unbraced_ident!() }] { loop {} }
97+
fn array_6() -> [(); { unbraced_braced_ident!() }] { loop {} }
98+
fn array_7() -> [(); { braced_braced_ident!() }] { loop {} }
99+
fn array_8() -> [(); unbraced_ident!()] { loop {} }
100+
fn array_9() -> [(); braced_ident!()] { loop {} }
101+
fn array_10() -> [(); { unbraced_ident!() }] { loop {} }
102+
fn array_11() -> [(); { braced_ident!() }] { loop {} }
103+
104+
// Arrays where the expanded result is a `Res::ConstParam`
105+
fn array_12<const ident: usize>() -> [(); unbraced_unbraced_ident!()] { loop {} }
106+
fn array_13<const ident: usize>() -> [(); braced_unbraced_ident!()] { loop {} }
107+
fn array_14<const ident: usize>() -> [(); unbraced_braced_ident!()] { loop {} }
108+
fn array_15<const ident: usize>() -> [(); braced_braced_ident!()] { loop {} }
109+
fn array_16<const ident: usize>() -> [(); { unbraced_unbraced_ident!() }] { loop {} }
110+
fn array_17<const ident: usize>() -> [(); { braced_unbraced_ident!() }] { loop {} }
111+
fn array_18<const ident: usize>() -> [(); { unbraced_braced_ident!() }] { loop {} }
112+
fn array_19<const ident: usize>() -> [(); { braced_braced_ident!() }] { loop {} }
113+
fn array_20<const ident: usize>() -> [(); unbraced_ident!()] { loop {} }
114+
fn array_21<const ident: usize>() -> [(); braced_ident!()] { loop {} }
115+
fn array_22<const ident: usize>() -> [(); { unbraced_ident!() }] { loop {} }
116+
fn array_23<const ident: usize>() -> [(); { braced_ident!() }] { loop {} }
117+
118+
// Arrays where the expanded result is a complex expr
119+
fn array_24() -> [(); unbraced_unbraced_expr!()] { loop {} }
120+
fn array_25() -> [(); braced_unbraced_expr!()] { loop {} }
121+
fn array_26() -> [(); unbraced_braced_expr!()] { loop {} }
122+
fn array_27() -> [(); braced_braced_expr!()] { loop {} }
123+
fn array_28() -> [(); { unbraced_unbraced_expr!() }] { loop {} }
124+
fn array_29() -> [(); { braced_unbraced_expr!() }] { loop {} }
125+
fn array_30() -> [(); { unbraced_braced_expr!() }] { loop {} }
126+
fn array_31() -> [(); { braced_braced_expr!() }] { loop {} }
127+
fn array_32() -> [(); unbraced_expr!()] { loop {} }
128+
fn array_33() -> [(); braced_expr!()] { loop {} }
129+
fn array_34() -> [(); { unbraced_expr!() }] { loop {} }
130+
fn array_35() -> [(); { braced_expr!() }] { loop {} }
131+
}
132+
133+
#[rustfmt::skip]
134+
mod array_brace_call {
135+
// Arrays where the expanded result is a `Res::Err`
136+
fn array_0() -> [(); unbraced_unbraced_ident!{}] { loop {} }
137+
fn array_1() -> [(); braced_unbraced_ident!{}] { loop {} }
138+
fn array_2() -> [(); unbraced_braced_ident!{}] { loop {} }
139+
fn array_3() -> [(); braced_braced_ident!{}] { loop {} }
140+
fn array_4() -> [(); { unbraced_unbraced_ident!{} }] { loop {} }
141+
fn array_5() -> [(); { braced_unbraced_ident!{} }] { loop {} }
142+
fn array_6() -> [(); { unbraced_braced_ident!{} }] { loop {} }
143+
fn array_7() -> [(); { braced_braced_ident!{} }] { loop {} }
144+
fn array_8() -> [(); unbraced_ident!{}] { loop {} }
145+
fn array_9() -> [(); braced_ident!{}] { loop {} }
146+
fn array_10() -> [(); { unbraced_ident!{} }] { loop {} }
147+
fn array_11() -> [(); { braced_ident!{} }] { loop {} }
148+
149+
// Arrays where the expanded result is a `Res::ConstParam`
150+
fn array_12<const ident: usize>() -> [(); unbraced_unbraced_ident!{}] { loop {} }
151+
fn array_13<const ident: usize>() -> [(); braced_unbraced_ident!{}] { loop {} }
152+
fn array_14<const ident: usize>() -> [(); unbraced_braced_ident!{}] { loop {} }
153+
fn array_15<const ident: usize>() -> [(); braced_braced_ident!{}] { loop {} }
154+
fn array_16<const ident: usize>() -> [(); { unbraced_unbraced_ident!{} }] { loop {} }
155+
fn array_17<const ident: usize>() -> [(); { braced_unbraced_ident!{} }] { loop {} }
156+
fn array_18<const ident: usize>() -> [(); { unbraced_braced_ident!{} }] { loop {} }
157+
fn array_19<const ident: usize>() -> [(); { braced_braced_ident!{} }] { loop {} }
158+
fn array_20<const ident: usize>() -> [(); unbraced_ident!{}] { loop {} }
159+
fn array_21<const ident: usize>() -> [(); braced_ident!{}] { loop {} }
160+
fn array_22<const ident: usize>() -> [(); { unbraced_ident!{} }] { loop {} }
161+
fn array_23<const ident: usize>() -> [(); { braced_ident!{} }] { loop {} }
162+
163+
// Arrays where the expanded result is a complex expr
164+
fn array_24() -> [(); unbraced_unbraced_expr!{}] { loop {} }
165+
fn array_25() -> [(); braced_unbraced_expr!{}] { loop {} }
166+
fn array_26() -> [(); unbraced_braced_expr!{}] { loop {} }
167+
fn array_27() -> [(); braced_braced_expr!{}] { loop {} }
168+
fn array_28() -> [(); { unbraced_unbraced_expr!{} }] { loop {} }
169+
fn array_29() -> [(); { braced_unbraced_expr!{} }] { loop {} }
170+
fn array_30() -> [(); { unbraced_braced_expr!{} }] { loop {} }
171+
fn array_31() -> [(); { braced_braced_expr!{} }] { loop {} }
172+
fn array_32() -> [(); unbraced_expr!{}] { loop {} }
173+
fn array_33() -> [(); braced_expr!{}] { loop {} }
174+
fn array_34() -> [(); { unbraced_expr!{} }] { loop {} }
175+
fn array_35() -> [(); { braced_expr!{} }] { loop {} }
176+
}
177+
178+
#[rustfmt::skip]
179+
mod array_square_call {
180+
// Arrays where the expanded result is a `Res::Err`
181+
fn array_0() -> [(); unbraced_unbraced_ident![]] { loop {} }
182+
fn array_1() -> [(); braced_unbraced_ident![]] { loop {} }
183+
fn array_2() -> [(); unbraced_braced_ident![]] { loop {} }
184+
fn array_3() -> [(); braced_braced_ident![]] { loop {} }
185+
fn array_4() -> [(); { unbraced_unbraced_ident![] }] { loop {} }
186+
fn array_5() -> [(); { braced_unbraced_ident![] }] { loop {} }
187+
fn array_6() -> [(); { unbraced_braced_ident![] }] { loop {} }
188+
fn array_7() -> [(); { braced_braced_ident![] }] { loop {} }
189+
fn array_8() -> [(); unbraced_ident![]] { loop {} }
190+
fn array_9() -> [(); braced_ident![]] { loop {} }
191+
fn array_10() -> [(); { unbraced_ident![] }] { loop {} }
192+
fn array_11() -> [(); { braced_ident![] }] { loop {} }
193+
194+
// Arrays where the expanded result is a `Res::ConstParam`
195+
fn array_12<const ident: usize>() -> [(); unbraced_unbraced_ident![]] { loop {} }
196+
fn array_13<const ident: usize>() -> [(); braced_unbraced_ident![]] { loop {} }
197+
fn array_14<const ident: usize>() -> [(); unbraced_braced_ident![]] { loop {} }
198+
fn array_15<const ident: usize>() -> [(); braced_braced_ident![]] { loop {} }
199+
fn array_16<const ident: usize>() -> [(); { unbraced_unbraced_ident![] }] { loop {} }
200+
fn array_17<const ident: usize>() -> [(); { braced_unbraced_ident![] }] { loop {} }
201+
fn array_18<const ident: usize>() -> [(); { unbraced_braced_ident![] }] { loop {} }
202+
fn array_19<const ident: usize>() -> [(); { braced_braced_ident![] }] { loop {} }
203+
fn array_20<const ident: usize>() -> [(); unbraced_ident![]] { loop {} }
204+
fn array_21<const ident: usize>() -> [(); braced_ident![]] { loop {} }
205+
fn array_22<const ident: usize>() -> [(); { unbraced_ident![] }] { loop {} }
206+
fn array_23<const ident: usize>() -> [(); { braced_ident![] }] { loop {} }
207+
208+
// Arrays where the expanded result is a complex expr
209+
fn array_24() -> [(); unbraced_unbraced_expr![]] { loop {} }
210+
fn array_25() -> [(); braced_unbraced_expr![]] { loop {} }
211+
fn array_26() -> [(); unbraced_braced_expr![]] { loop {} }
212+
fn array_27() -> [(); braced_braced_expr![]] { loop {} }
213+
fn array_28() -> [(); { unbraced_unbraced_expr![] }] { loop {} }
214+
fn array_29() -> [(); { braced_unbraced_expr![] }] { loop {} }
215+
fn array_30() -> [(); { unbraced_braced_expr![] }] { loop {} }
216+
fn array_31() -> [(); { braced_braced_expr![] }] { loop {} }
217+
fn array_32() -> [(); unbraced_expr![]] { loop {} }
218+
fn array_33() -> [(); braced_expr![]] { loop {} }
219+
fn array_34() -> [(); { unbraced_expr![] }] { loop {} }
220+
fn array_35() -> [(); { braced_expr![] }] { loop {} }
221+
}
222+
223+
struct Foo<const N: usize>;
224+
225+
#[rustfmt::skip]
226+
mod adt_paren_call {
227+
use super::Foo;
228+
229+
// An ADT where the expanded result is a `Res::Err`
230+
fn adt_0() -> Foo<unbraced_unbraced_ident!()> { loop {} }
231+
fn adt_1() -> Foo<braced_unbraced_ident!()> { loop {} }
232+
fn adt_2() -> Foo<unbraced_braced_ident!()> { loop {} }
233+
fn adt_3() -> Foo<braced_braced_ident!()> { loop {} }
234+
fn adt_4() -> Foo<{ unbraced_unbraced_ident!() }> { loop {} }
235+
fn adt_5() -> Foo<{ braced_unbraced_ident!() }> { loop {} }
236+
fn adt_6() -> Foo<{ unbraced_braced_ident!() }> { loop {} }
237+
fn adt_7() -> Foo<{ braced_braced_ident!() }> { loop {} }
238+
fn adt_8() -> Foo<unbraced_ident!()> { loop {} }
239+
fn adt_9() -> Foo<braced_ident!()> { loop {} }
240+
fn adt_10() -> Foo<{ unbraced_ident!() }> { loop {} }
241+
fn adt_11() -> Foo<{ braced_ident!() }> { loop {} }
242+
243+
// An ADT where the expanded result is a `Res::ConstParam`
244+
fn adt_12<const ident: usize>() -> Foo<unbraced_unbraced_ident!()> { loop {} }
245+
fn adt_13<const ident: usize>() -> Foo<braced_unbraced_ident!()> { loop {} }
246+
fn adt_14<const ident: usize>() -> Foo<unbraced_braced_ident!()> { loop {} }
247+
fn adt_15<const ident: usize>() -> Foo<braced_braced_ident!()> { loop {} }
248+
fn adt_16<const ident: usize>() -> Foo<{ unbraced_unbraced_ident!() }> { loop {} }
249+
fn adt_17<const ident: usize>() -> Foo<{ braced_unbraced_ident!() }> { loop {} }
250+
fn adt_18<const ident: usize>() -> Foo<{ unbraced_braced_ident!() }> { loop {} }
251+
fn adt_19<const ident: usize>() -> Foo<{ braced_braced_ident!() }> { loop {} }
252+
fn adt_20<const ident: usize>() -> Foo<unbraced_ident!()> { loop {} }
253+
fn adt_21<const ident: usize>() -> Foo<braced_ident!()> { loop {} }
254+
fn adt_22<const ident: usize>() -> Foo<{ unbraced_ident!() }> { loop {} }
255+
fn adt_23<const ident: usize>() -> Foo<{ braced_ident!() }> { loop {} }
256+
257+
// An ADT where the expanded result is a complex expr
258+
fn array_24() -> Foo<unbraced_unbraced_expr!()> { loop {} }
259+
fn array_25() -> Foo<braced_unbraced_expr!()> { loop {} }
260+
fn array_26() -> Foo<unbraced_braced_expr!()> { loop {} }
261+
fn array_27() -> Foo<braced_braced_expr!()> { loop {} }
262+
fn array_28() -> Foo<{ unbraced_unbraced_expr!() }> { loop {} }
263+
fn array_29() -> Foo<{ braced_unbraced_expr!() }> { loop {} }
264+
fn array_30() -> Foo<{ unbraced_braced_expr!() }> { loop {} }
265+
fn array_31() -> Foo<{ braced_braced_expr!() }> { loop {} }
266+
fn array_32() -> Foo<unbraced_expr!()> { loop {} }
267+
fn array_33() -> Foo<braced_expr!()> { loop {} }
268+
fn array_34() -> Foo<{ unbraced_expr!() }> { loop {} }
269+
fn array_35() -> Foo<{ braced_expr!() }> { loop {} }
270+
}
271+
272+
#[rustfmt::skip]
273+
mod adt_brace_call {
274+
use super::Foo;
275+
276+
// An ADT where the expanded result is a `Res::Err`
277+
fn adt_0() -> Foo<unbraced_unbraced_ident!{}> { loop {} }
278+
fn adt_1() -> Foo<braced_unbraced_ident!{}> { loop {} }
279+
fn adt_2() -> Foo<unbraced_braced_ident!{}> { loop {} }
280+
fn adt_3() -> Foo<braced_braced_ident!{}> { loop {} }
281+
fn adt_4() -> Foo<{ unbraced_unbraced_ident!{} }> { loop {} }
282+
fn adt_5() -> Foo<{ braced_unbraced_ident!{} }> { loop {} }
283+
fn adt_6() -> Foo<{ unbraced_braced_ident!{} }> { loop {} }
284+
fn adt_7() -> Foo<{ braced_braced_ident!{} }> { loop {} }
285+
fn adt_8() -> Foo<unbraced_ident!{}> { loop {} }
286+
fn adt_9() -> Foo<braced_ident!{}> { loop {} }
287+
fn adt_10() -> Foo<{ unbraced_ident!{} }> { loop {} }
288+
fn adt_11() -> Foo<{ braced_ident!{} }> { loop {} }
289+
290+
// An ADT where the expanded result is a `Res::ConstParam`
291+
fn adt_12<const ident: usize>() -> Foo<unbraced_unbraced_ident!{}> { loop {} }
292+
fn adt_13<const ident: usize>() -> Foo<braced_unbraced_ident!{}> { loop {} }
293+
fn adt_14<const ident: usize>() -> Foo<unbraced_braced_ident!{}> { loop {} }
294+
fn adt_15<const ident: usize>() -> Foo<braced_braced_ident!{}> { loop {} }
295+
fn adt_16<const ident: usize>() -> Foo<{ unbraced_unbraced_ident!{} }> { loop {} }
296+
fn adt_17<const ident: usize>() -> Foo<{ braced_unbraced_ident!{} }> { loop {} }
297+
fn adt_18<const ident: usize>() -> Foo<{ unbraced_braced_ident!{} }> { loop {} }
298+
fn adt_19<const ident: usize>() -> Foo<{ braced_braced_ident!{} }> { loop {} }
299+
fn adt_20<const ident: usize>() -> Foo<unbraced_ident!{}> { loop {} }
300+
fn adt_21<const ident: usize>() -> Foo<braced_ident!{}> { loop {} }
301+
fn adt_22<const ident: usize>() -> Foo<{ unbraced_ident!{} }> { loop {} }
302+
fn adt_23<const ident: usize>() -> Foo<{ braced_ident!{} }> { loop {} }
303+
304+
// An ADT where the expanded result is a complex expr
305+
fn array_24() -> Foo<unbraced_unbraced_expr!{}> { loop {} }
306+
fn array_25() -> Foo<braced_unbraced_expr!{}> { loop {} }
307+
fn array_26() -> Foo<unbraced_braced_expr!{}> { loop {} }
308+
fn array_27() -> Foo<braced_braced_expr!{}> { loop {} }
309+
fn array_28() -> Foo<{ unbraced_unbraced_expr!{} }> { loop {} }
310+
fn array_29() -> Foo<{ braced_unbraced_expr!{} }> { loop {} }
311+
fn array_30() -> Foo<{ unbraced_braced_expr!{} }> { loop {} }
312+
fn array_31() -> Foo<{ braced_braced_expr!{} }> { loop {} }
313+
fn array_32() -> Foo<unbraced_expr!{}> { loop {} }
314+
fn array_33() -> Foo<braced_expr!{}> { loop {} }
315+
fn array_34() -> Foo<{ unbraced_expr!{} }> { loop {} }
316+
fn array_35() -> Foo<{ braced_expr!{} }> { loop {} }
317+
}
318+
319+
#[rustfmt::skip]
320+
mod adt_square_call {
321+
use super::Foo;
322+
323+
// An ADT where the expanded result is a `Res::Err`
324+
fn adt_0() -> Foo<unbraced_unbraced_ident![]> { loop {} }
325+
fn adt_1() -> Foo<braced_unbraced_ident![]> { loop {} }
326+
fn adt_2() -> Foo<unbraced_braced_ident![]> { loop {} }
327+
fn adt_3() -> Foo<braced_braced_ident![]> { loop {} }
328+
fn adt_4() -> Foo<{ unbraced_unbraced_ident![] }> { loop {} }
329+
fn adt_5() -> Foo<{ braced_unbraced_ident![] }> { loop {} }
330+
fn adt_6() -> Foo<{ unbraced_braced_ident![] }> { loop {} }
331+
fn adt_7() -> Foo<{ braced_braced_ident![] }> { loop {} }
332+
fn adt_8() -> Foo<unbraced_ident![]> { loop {} }
333+
fn adt_9() -> Foo<braced_ident![]> { loop {} }
334+
fn adt_10() -> Foo<{ unbraced_ident![] }> { loop {} }
335+
fn adt_11() -> Foo<{ braced_ident![] }> { loop {} }
336+
337+
// An ADT where the expanded result is a `Res::ConstParam`
338+
fn adt_12<const ident: usize>() -> Foo<unbraced_unbraced_ident![]> { loop {} }
339+
fn adt_13<const ident: usize>() -> Foo<braced_unbraced_ident![]> { loop {} }
340+
fn adt_14<const ident: usize>() -> Foo<unbraced_braced_ident![]> { loop {} }
341+
fn adt_15<const ident: usize>() -> Foo<braced_braced_ident![]> { loop {} }
342+
fn adt_16<const ident: usize>() -> Foo<{ unbraced_unbraced_ident![] }> { loop {} }
343+
fn adt_17<const ident: usize>() -> Foo<{ braced_unbraced_ident![] }> { loop {} }
344+
fn adt_18<const ident: usize>() -> Foo<{ unbraced_braced_ident![] }> { loop {} }
345+
fn adt_19<const ident: usize>() -> Foo<{ braced_braced_ident![] }> { loop {} }
346+
fn adt_20<const ident: usize>() -> Foo<unbraced_ident![]> { loop {} }
347+
fn adt_21<const ident: usize>() -> Foo<braced_ident![]> { loop {} }
348+
fn adt_22<const ident: usize>() -> Foo<{ unbraced_ident![] }> { loop {} }
349+
fn adt_23<const ident: usize>() -> Foo<{ braced_ident![] }> { loop {} }
350+
351+
// An ADT where the expanded result is a complex expr
352+
fn array_24() -> Foo<unbraced_unbraced_expr![]> { loop {} }
353+
fn array_25() -> Foo<braced_unbraced_expr![]> { loop {} }
354+
fn array_26() -> Foo<unbraced_braced_expr![]> { loop {} }
355+
fn array_27() -> Foo<braced_braced_expr![]> { loop {} }
356+
fn array_28() -> Foo<{ unbraced_unbraced_expr![] }> { loop {} }
357+
fn array_29() -> Foo<{ braced_unbraced_expr![] }> { loop {} }
358+
fn array_30() -> Foo<{ unbraced_braced_expr![] }> { loop {} }
359+
fn array_31() -> Foo<{ braced_braced_expr![] }> { loop {} }
360+
fn array_32() -> Foo<unbraced_expr![]> { loop {} }
361+
fn array_33() -> Foo<braced_expr![]> { loop {} }
362+
fn array_34() -> Foo<{ unbraced_expr![] }> { loop {} }
363+
fn array_35() -> Foo<{ braced_expr![] }> { loop {} }
364+
}
365+
366+
fn main() {}

0 commit comments

Comments
 (0)
Please sign in to comment.