Skip to content

Commit 61553d1

Browse files
authored
Rollup merge of rust-lang#103994 - clubby789:break-unlabeled, r=TaKO8Ki
Specify that `break` cannot be used outside of loop *or* labeled block Closes rust-lang#103981 `@rustbot` label +A-diagnostics
2 parents 2d8f083 + 2f882c0 commit 61553d1

File tree

14 files changed

+37
-30
lines changed

14 files changed

+37
-30
lines changed

compiler/rustc_error_messages/locales/en-US/passes.ftl

+8-2
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,14 @@ passes_break_inside_async_block =
451451
.async_block_label = enclosing `async` block
452452
453453
passes_outside_loop =
454-
`{$name}` outside of a loop
455-
.label = cannot `{$name}` outside of a loop
454+
`{$name}` outside of a loop{$is_break ->
455+
[true] {" or labeled block"}
456+
*[false] {""}
457+
}
458+
.label = cannot `{$name}` outside of a loop{$is_break ->
459+
[true] {" or labeled block"}
460+
*[false] {""}
461+
}
456462
457463
passes_unlabeled_in_labeled_block =
458464
unlabeled `{$cf_type}` inside of a labeled block

compiler/rustc_passes/src/errors.rs

+1
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,7 @@ pub struct OutsideLoop<'a> {
956956
#[label]
957957
pub span: Span,
958958
pub name: &'a str,
959+
pub is_break: bool,
959960
}
960961

961962
#[derive(Diagnostic)]

compiler/rustc_passes/src/loops.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ impl<'a, 'hir> CheckLoopVisitor<'a, 'hir> {
193193
self.sess.emit_err(BreakInsideAsyncBlock { span, closure_span, name });
194194
}
195195
Normal | AnonConst => {
196-
self.sess.emit_err(OutsideLoop { span, name });
196+
self.sess.emit_err(OutsideLoop { span, name, is_break: name == "break" });
197197
}
198198
}
199199
}

src/test/ui/array-slice-vec/array-break-length.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
error[E0268]: `break` outside of a loop
1+
error[E0268]: `break` outside of a loop or labeled block
22
--> $DIR/array-break-length.rs:3:17
33
|
44
LL | |_: [_; break]| {}
5-
| ^^^^^ cannot `break` outside of a loop
5+
| ^^^^^ cannot `break` outside of a loop or labeled block
66

77
error[E0268]: `continue` outside of a loop
88
--> $DIR/array-break-length.rs:7:17

src/test/ui/closures/closure-array-break-length.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ error[E0268]: `continue` outside of a loop
1010
LL | while |_: [_; continue]| {} {}
1111
| ^^^^^^^^ cannot `continue` outside of a loop
1212

13-
error[E0268]: `break` outside of a loop
13+
error[E0268]: `break` outside of a loop or labeled block
1414
--> $DIR/closure-array-break-length.rs:6:19
1515
|
1616
LL | while |_: [_; break]| {} {}
17-
| ^^^^^ cannot `break` outside of a loop
17+
| ^^^^^ cannot `break` outside of a loop or labeled block
1818

1919
error: aborting due to 3 previous errors
2020

src/test/ui/error-codes/E0268.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
error[E0268]: `break` outside of a loop
1+
error[E0268]: `break` outside of a loop or labeled block
22
--> $DIR/E0268.rs:2:5
33
|
44
LL | break;
5-
| ^^^^^ cannot `break` outside of a loop
5+
| ^^^^^ cannot `break` outside of a loop or labeled block
66

77
error: aborting due to previous error
88

src/test/ui/for-loop-while/break-outside-loop.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ LL | break 'lab;
99
|
1010
= note: labels are unreachable through functions, closures, async blocks and modules
1111

12-
error[E0268]: `break` outside of a loop
12+
error[E0268]: `break` outside of a loop or labeled block
1313
--> $DIR/break-outside-loop.rs:10:15
1414
|
1515
LL | let pth = break;
16-
| ^^^^^ cannot `break` outside of a loop
16+
| ^^^^^ cannot `break` outside of a loop or labeled block
1717

1818
error[E0268]: `continue` outside of a loop
1919
--> $DIR/break-outside-loop.rs:11:17
@@ -38,11 +38,11 @@ LL | if cond() { break }
3838
LL | if cond() { continue }
3939
| ^^^^^^^^ cannot `continue` inside of a closure
4040

41-
error[E0268]: `break` outside of a loop
41+
error[E0268]: `break` outside of a loop or labeled block
4242
--> $DIR/break-outside-loop.rs:24:25
4343
|
4444
LL | let unconstrained = break;
45-
| ^^^^^ cannot `break` outside of a loop
45+
| ^^^^^ cannot `break` outside of a loop or labeled block
4646

4747
error[E0267]: `break` inside of a closure
4848
--> $DIR/break-outside-loop.rs:30:13

src/test/ui/issues/issue-28105.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ error[E0268]: `continue` outside of a loop
44
LL | continue
55
| ^^^^^^^^ cannot `continue` outside of a loop
66

7-
error[E0268]: `break` outside of a loop
7+
error[E0268]: `break` outside of a loop or labeled block
88
--> $DIR/issue-28105.rs:6:5
99
|
1010
LL | break
11-
| ^^^^^ cannot `break` outside of a loop
11+
| ^^^^^ cannot `break` outside of a loop or labeled block
1212

1313
error: aborting due to 2 previous errors
1414

src/test/ui/issues/issue-43162.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
error[E0268]: `break` outside of a loop
1+
error[E0268]: `break` outside of a loop or labeled block
22
--> $DIR/issue-43162.rs:3:5
33
|
44
LL | break true;
5-
| ^^^^^^^^^^ cannot `break` outside of a loop
5+
| ^^^^^^^^^^ cannot `break` outside of a loop or labeled block
66

7-
error[E0268]: `break` outside of a loop
7+
error[E0268]: `break` outside of a loop or labeled block
88
--> $DIR/issue-43162.rs:7:5
99
|
1010
LL | break {};
11-
| ^^^^^^^^ cannot `break` outside of a loop
11+
| ^^^^^^^^ cannot `break` outside of a loop or labeled block
1212

1313
error[E0308]: mismatched types
1414
--> $DIR/issue-43162.rs:1:13

src/test/ui/issues/issue-50576.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ error[E0426]: use of undeclared label `'L`
44
LL | |bool: [u8; break 'L]| 0;
55
| ^^ undeclared label `'L`
66

7-
error[E0268]: `break` outside of a loop
7+
error[E0268]: `break` outside of a loop or labeled block
88
--> $DIR/issue-50576.rs:2:17
99
|
1010
LL | |bool: [u8; break 'L]| 0;
11-
| ^^^^^^^^ cannot `break` outside of a loop
11+
| ^^^^^^^^ cannot `break` outside of a loop or labeled block
1212

13-
error[E0268]: `break` outside of a loop
13+
error[E0268]: `break` outside of a loop or labeled block
1414
--> $DIR/issue-50576.rs:5:16
1515
|
1616
LL | Vec::<[u8; break]>::new();
17-
| ^^^^^ cannot `break` outside of a loop
17+
| ^^^^^ cannot `break` outside of a loop or labeled block
1818

1919
error: aborting due to 3 previous errors
2020

src/test/ui/issues/issue-50581.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
error[E0268]: `break` outside of a loop
1+
error[E0268]: `break` outside of a loop or labeled block
22
--> $DIR/issue-50581.rs:2:14
33
|
44
LL | |_: [u8; break]| ();
5-
| ^^^^^ cannot `break` outside of a loop
5+
| ^^^^^ cannot `break` outside of a loop or labeled block
66

77
error: aborting due to previous error
88

src/test/ui/issues/issue-83048.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// compile-flags: -Z unpretty=thir-tree
22

33
pub fn main() {
4-
break; //~ ERROR: `break` outside of a loop [E0268]
4+
break; //~ ERROR: `break` outside of a loop or labeled block [E0268]
55
}

src/test/ui/issues/issue-83048.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
error[E0268]: `break` outside of a loop
1+
error[E0268]: `break` outside of a loop or labeled block
22
--> $DIR/issue-83048.rs:4:5
33
|
44
LL | break;
5-
| ^^^^^ cannot `break` outside of a loop
5+
| ^^^^^ cannot `break` outside of a loop or labeled block
66

77
error: aborting due to previous error
88

src/test/ui/track-diagnostics/track.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ LL | break rust
55
| ^^^^ not found in this scope
66
-Ztrack-diagnostics: created at compiler/rustc_resolve/src/late/diagnostics.rs:LL:CC
77

8-
error[E0268]: `break` outside of a loop
8+
error[E0268]: `break` outside of a loop or labeled block
99
--> $DIR/track.rs:LL:CC
1010
|
1111
LL | break rust
12-
| ^^^^^^^^^^ cannot `break` outside of a loop
12+
| ^^^^^^^^^^ cannot `break` outside of a loop or labeled block
1313
-Ztrack-diagnostics: created at compiler/rustc_passes/src/loops.rs:LL:CC
1414

1515
error: internal compiler error: It looks like you're trying to break rust; would you like some ICE?

0 commit comments

Comments
 (0)