Skip to content

Commit b21631d

Browse files
Add tests for more complex cases of } before else in let..else statement
1 parent 1176883 commit b21631d

File tree

2 files changed

+215
-32
lines changed

2 files changed

+215
-32
lines changed

tests/ui/parser/bad-let-else-statement.rs

+88-22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
#![feature(inline_const)]
2+
#![feature(yeet_expr)]
3+
#![allow(incomplete_features)] // Necessary for now, while explicit_tail_calls is incomplete
4+
#![feature(explicit_tail_calls)]
5+
26
fn a() {
37
let foo = {
48
1
@@ -47,10 +51,10 @@ fn e() {
4751
};
4852
}
4953

50-
struct X {}
54+
struct X {a: i32}
5155
fn f() {
5256
let foo = X {
53-
57+
a: 1
5458
} else {
5559
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
5660
return;
@@ -75,24 +79,86 @@ fn h() {
7579
};
7680
}
7781

78-
fn main() {}
82+
fn i() {
83+
let foo = &{
84+
1
85+
} else {
86+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
87+
return;
88+
};
89+
}
90+
91+
fn j() {
92+
let bar = 0;
93+
let foo = bar = {
94+
1
95+
} else {
96+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
97+
return;
98+
};
99+
}
79100

80-
/*
81-
AddrOf(_, _, e)
82-
| Assign(_, e, _)
83-
| AssignOp(_, _, e)
84-
| Binary(_, _, e)
85-
| Break(_, Some(e))
86-
| Let(_, e, _, _)
87-
| Range(_, Some(e), _)
88-
| Ret(Some(e))
89-
| Unary(_, e)
90-
| Yield(Some(e))
91-
| Yeet(Some(e))
92-
| Become(e) => {
93-
expr = e;
94-
}
95-
Closure(closure) => {
96-
expr = &closure.body;
97-
}
98-
*/
101+
fn k() {
102+
let foo = 1 + {
103+
1
104+
} else {
105+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
106+
return;
107+
};
108+
}
109+
110+
fn l() {
111+
let foo = 1..{
112+
1
113+
} else {
114+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
115+
return;
116+
};
117+
}
118+
119+
fn m() {
120+
let foo = return {
121+
()
122+
} else {
123+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
124+
return;
125+
};
126+
}
127+
128+
fn n() {
129+
let foo = -{
130+
1
131+
} else {
132+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
133+
return;
134+
};
135+
}
136+
137+
fn o() -> Result<(), ()> {
138+
let foo = do yeet {
139+
()
140+
} else {
141+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
142+
return Ok(());
143+
};
144+
}
145+
146+
fn p() {
147+
let foo = become {
148+
()
149+
} else {
150+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
151+
return;
152+
};
153+
}
154+
155+
fn q() {
156+
let foo = |x: i32| {
157+
x
158+
} else {
159+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
160+
return;
161+
};
162+
}
163+
164+
fn main() {}

tests/ui/parser/bad-let-else-statement.stderr

+127-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: right curly brace `}` before `else` in a `let...else` statement not allowed
2-
--> $DIR/bad-let-else-statement.rs:5:5
2+
--> $DIR/bad-let-else-statement.rs:9:5
33
|
44
LL | } else {
55
| ^
@@ -12,7 +12,7 @@ LL ~ }) else {
1212
|
1313

1414
error: `for...else` loops are not supported
15-
--> $DIR/bad-let-else-statement.rs:14:7
15+
--> $DIR/bad-let-else-statement.rs:18:7
1616
|
1717
LL | let foo = for i in 1..2 {
1818
| --- `else` is attached to this loop
@@ -27,7 +27,7 @@ LL | | };
2727
= note: consider moving this `else` clause to a separate `if` statement and use a `bool` variable to control if it should run
2828

2929
error: right curly brace `}` before `else` in a `let...else` statement not allowed
30-
--> $DIR/bad-let-else-statement.rs:25:5
30+
--> $DIR/bad-let-else-statement.rs:29:5
3131
|
3232
LL | } else {
3333
| ^
@@ -42,7 +42,7 @@ LL ~ }) else {
4242
|
4343

4444
error: `loop...else` loops are not supported
45-
--> $DIR/bad-let-else-statement.rs:34:7
45+
--> $DIR/bad-let-else-statement.rs:38:7
4646
|
4747
LL | let foo = loop {
4848
| ---- `else` is attached to this loop
@@ -57,7 +57,7 @@ LL | | };
5757
= note: consider moving this `else` clause to a separate `if` statement and use a `bool` variable to control if it should run
5858

5959
error: right curly brace `}` before `else` in a `let...else` statement not allowed
60-
--> $DIR/bad-let-else-statement.rs:44:5
60+
--> $DIR/bad-let-else-statement.rs:48:5
6161
|
6262
LL | } else {
6363
| ^
@@ -71,20 +71,20 @@ LL ~ }) else {
7171
|
7272

7373
error: right curly brace `}` before `else` in a `let...else` statement not allowed
74-
--> $DIR/bad-let-else-statement.rs:54:5
74+
--> $DIR/bad-let-else-statement.rs:58:5
7575
|
7676
LL | } else {
7777
| ^
7878
|
7979
help: wrap the expression in parentheses
8080
|
8181
LL ~ let foo = (X {
82-
LL |
82+
LL | a: 1
8383
LL ~ }) else {
8484
|
8585

8686
error: `while...else` loops are not supported
87-
--> $DIR/bad-let-else-statement.rs:63:7
87+
--> $DIR/bad-let-else-statement.rs:67:7
8888
|
8989
LL | let foo = while false {
9090
| ----- `else` is attached to this loop
@@ -99,7 +99,7 @@ LL | | };
9999
= note: consider moving this `else` clause to a separate `if` statement and use a `bool` variable to control if it should run
100100

101101
error: right curly brace `}` before `else` in a `let...else` statement not allowed
102-
--> $DIR/bad-let-else-statement.rs:72:5
102+
--> $DIR/bad-let-else-statement.rs:76:5
103103
|
104104
LL | } else {
105105
| ^
@@ -111,5 +111,122 @@ LL | 1
111111
LL ~ }) else {
112112
|
113113

114-
error: aborting due to 8 previous errors
114+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
115+
--> $DIR/bad-let-else-statement.rs:85:5
116+
|
117+
LL | } else {
118+
| ^
119+
|
120+
help: wrap the expression in parentheses
121+
|
122+
LL ~ let foo = &({
123+
LL | 1
124+
LL ~ }) else {
125+
|
126+
127+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
128+
--> $DIR/bad-let-else-statement.rs:95:5
129+
|
130+
LL | } else {
131+
| ^
132+
|
133+
help: wrap the expression in parentheses
134+
|
135+
LL ~ let foo = bar = ({
136+
LL | 1
137+
LL ~ }) else {
138+
|
139+
140+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
141+
--> $DIR/bad-let-else-statement.rs:104:5
142+
|
143+
LL | } else {
144+
| ^
145+
|
146+
help: wrap the expression in parentheses
147+
|
148+
LL ~ let foo = 1 + ({
149+
LL | 1
150+
LL ~ }) else {
151+
|
152+
153+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
154+
--> $DIR/bad-let-else-statement.rs:113:5
155+
|
156+
LL | } else {
157+
| ^
158+
|
159+
help: wrap the expression in parentheses
160+
|
161+
LL ~ let foo = 1..({
162+
LL | 1
163+
LL ~ }) else {
164+
|
165+
166+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
167+
--> $DIR/bad-let-else-statement.rs:122:5
168+
|
169+
LL | } else {
170+
| ^
171+
|
172+
help: wrap the expression in parentheses
173+
|
174+
LL ~ let foo = return ({
175+
LL | ()
176+
LL ~ }) else {
177+
|
178+
179+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
180+
--> $DIR/bad-let-else-statement.rs:131:5
181+
|
182+
LL | } else {
183+
| ^
184+
|
185+
help: wrap the expression in parentheses
186+
|
187+
LL ~ let foo = -({
188+
LL | 1
189+
LL ~ }) else {
190+
|
191+
192+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
193+
--> $DIR/bad-let-else-statement.rs:140:5
194+
|
195+
LL | } else {
196+
| ^
197+
|
198+
help: wrap the expression in parentheses
199+
|
200+
LL ~ let foo = do yeet ({
201+
LL | ()
202+
LL ~ }) else {
203+
|
204+
205+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
206+
--> $DIR/bad-let-else-statement.rs:149:5
207+
|
208+
LL | } else {
209+
| ^
210+
|
211+
help: wrap the expression in parentheses
212+
|
213+
LL ~ let foo = become ({
214+
LL | ()
215+
LL ~ }) else {
216+
|
217+
218+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
219+
--> $DIR/bad-let-else-statement.rs:158:5
220+
|
221+
LL | } else {
222+
| ^
223+
|
224+
help: wrap the expression in parentheses
225+
|
226+
LL ~ let foo = |x: i32| ({
227+
LL | x
228+
LL ~ }) else {
229+
|
230+
231+
error: aborting due to 17 previous errors
115232

0 commit comments

Comments
 (0)