1 // gate-test-let_chains
3 // Here we test feature gating for ´let_chains`.
4 // See `disallowed-positions.rs` for the grammar
5 // defining the language for gated allowed positions.
7 #![allow(irrefutable_let_patterns)]
12 if let 0 = 1 {} // Stable!
15 //~^ ERROR `let` expressions in this position are experimental [E0658]
18 //~^ ERROR `let` expressions in this position are experimental [E0658]
20 if true && let 0 = 1 {}
21 //~^ ERROR `let` expressions in this position are experimental [E0658]
23 if let 0 = 1 && true {}
24 //~^ ERROR `let` expressions in this position are experimental [E0658]
26 if (let 0 = 1) && true {}
27 //~^ ERROR `let` expressions in this position are experimental [E0658]
29 if true && (let 0 = 1) {}
30 //~^ ERROR `let` expressions in this position are experimental [E0658]
32 if (let 0 = 1) && (let 0 = 1) {}
33 //~^ ERROR `let` expressions in this position are experimental [E0658]
34 //~| ERROR `let` expressions in this position are experimental [E0658]
36 if let 0 = 1 && let 1 = 2 && (let 2 = 3 && let 3 = 4 && let 4 = 5) {}
37 //~^ ERROR `let` expressions in this position are experimental [E0658]
38 //~| ERROR `let` expressions in this position are experimental [E0658]
39 //~| ERROR `let` expressions in this position are experimental [E0658]
40 //~| ERROR `let` expressions in this position are experimental [E0658]
41 //~| ERROR `let` expressions in this position are experimental [E0658]
43 if let Range { start: _, end: _ } = (true..true) && false {}
44 //~^ ERROR `let` expressions in this position are experimental [E0658]
48 while let 0 = 1 {} // Stable!
51 //~^ ERROR `let` expressions in this position are experimental [E0658]
53 while (((let 0 = 1))) {}
54 //~^ ERROR `let` expressions in this position are experimental [E0658]
56 while true && let 0 = 1 {}
57 //~^ ERROR `let` expressions in this position are experimental [E0658]
59 while let 0 = 1 && true {}
60 //~^ ERROR `let` expressions in this position are experimental [E0658]
62 while (let 0 = 1) && true {}
63 //~^ ERROR `let` expressions in this position are experimental [E0658]
65 while true && (let 0 = 1) {}
66 //~^ ERROR `let` expressions in this position are experimental [E0658]
68 while (let 0 = 1) && (let 0 = 1) {}
69 //~^ ERROR `let` expressions in this position are experimental [E0658]
70 //~| ERROR `let` expressions in this position are experimental [E0658]
72 while let 0 = 1 && let 1 = 2 && (let 2 = 3 && let 3 = 4 && let 4 = 5) {}
73 //~^ ERROR `let` expressions in this position are experimental [E0658]
74 //~| ERROR `let` expressions in this position are experimental [E0658]
75 //~| ERROR `let` expressions in this position are experimental [E0658]
76 //~| ERROR `let` expressions in this position are experimental [E0658]
77 //~| ERROR `let` expressions in this position are experimental [E0658]
79 while let Range { start: _, end: _ } = (true..true) && false {}
80 //~^ ERROR `let` expressions in this position are experimental [E0658]
84 macro_rules! noop_expr { ($e:expr) => {}; }
86 noop_expr!((let 0 = 1));
87 //~^ ERROR `let` expressions in this position are experimental [E0658]
89 macro_rules! use_expr {
95 use_expr!((let 0 = 1 && 0 == 0));
96 //~^ ERROR `let` expressions in this position are experimental [E0658]
97 use_expr!((let 0 = 1));
98 //~^ ERROR `let` expressions in this position are experimental [E0658]
99 #[cfg(FALSE)] (let 0 = 1);
100 //~^ ERROR `let` expressions in this position are experimental [E0658]
101 use_expr!(let 0 = 1);
102 //~^ ERROR no rules expected the token `let`
103 // ^--- FIXME(53667): Consider whether `Let` can be added to `ident_can_begin_expr`.