]> git.lizzy.rs Git - rust.git/blob - src/test/ui/rfc-2497-if-let-chains/feature-gate.rs
Rollup merge of #89468 - FabianWolff:issue-89358, r=jackh726
[rust.git] / src / test / ui / rfc-2497-if-let-chains / feature-gate.rs
1 // gate-test-let_chains
2
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.
6
7 #![allow(irrefutable_let_patterns)]
8
9 use std::ops::Range;
10
11 fn _if() {
12     if let 0 = 1 {} // Stable!
13
14     if (let 0 = 1) {}
15     //~^ ERROR `let` expressions in this position are experimental [E0658]
16
17     if (((let 0 = 1))) {}
18     //~^ ERROR `let` expressions in this position are experimental [E0658]
19
20     if true && let 0 = 1 {}
21     //~^ ERROR `let` expressions in this position are experimental [E0658]
22
23     if let 0 = 1 && true {}
24     //~^ ERROR `let` expressions in this position are experimental [E0658]
25
26     if (let 0 = 1) && true {}
27     //~^ ERROR `let` expressions in this position are experimental [E0658]
28
29     if true && (let 0 = 1) {}
30     //~^ ERROR `let` expressions in this position are experimental [E0658]
31
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]
35
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]
42
43     if let Range { start: _, end: _ } = (true..true) && false {}
44     //~^ ERROR `let` expressions in this position are experimental [E0658]
45 }
46
47 fn _while() {
48     while let 0 = 1 {} // Stable!
49
50     while (let 0 = 1) {}
51     //~^ ERROR `let` expressions in this position are experimental [E0658]
52
53     while (((let 0 = 1))) {}
54     //~^ ERROR `let` expressions in this position are experimental [E0658]
55
56     while true && let 0 = 1 {}
57     //~^ ERROR `let` expressions in this position are experimental [E0658]
58
59     while let 0 = 1 && true {}
60     //~^ ERROR `let` expressions in this position are experimental [E0658]
61
62     while (let 0 = 1) && true {}
63     //~^ ERROR `let` expressions in this position are experimental [E0658]
64
65     while true && (let 0 = 1) {}
66     //~^ ERROR `let` expressions in this position are experimental [E0658]
67
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]
71
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]
78
79     while let Range { start: _, end: _ } = (true..true) && false {}
80     //~^ ERROR `let` expressions in this position are experimental [E0658]
81 }
82
83 fn _macros() {
84     macro_rules! noop_expr { ($e:expr) => {}; }
85
86     noop_expr!((let 0 = 1));
87     //~^ ERROR `let` expressions in this position are experimental [E0658]
88
89     macro_rules! use_expr {
90         ($e:expr) => {
91             if $e {}
92             while $e {}
93         }
94     }
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`.
104 }
105
106 fn main() {}