extended information for E0571 break with value in non-loop
loop
This commit is contained in:
parent
3f977baf34
commit
78d1442808
@ -223,6 +223,40 @@ To fix this, add a label specifying which loop is being broken out of:
|
||||
```
|
||||
'foo: while break 'foo {}
|
||||
```
|
||||
"##,
|
||||
|
||||
E0571: r##"
|
||||
A `break` statement with an argument appeared in a non-`loop` loop.
|
||||
|
||||
Example of erroneous code:
|
||||
|
||||
```compile_fail,E0571
|
||||
# let mut i = 1;
|
||||
# fn satisfied(n: usize) -> bool { n % 23 == 0 }
|
||||
let result = while true {
|
||||
if satisfied(i) {
|
||||
break 2*i; // error: `break` with value from a `while` loop
|
||||
}
|
||||
i += 1;
|
||||
};
|
||||
```
|
||||
|
||||
The `break` statement can take an argument (which will be the value of the loop
|
||||
expression if the `break` statement is executed) in `loop` loops, but not
|
||||
`for`, `while`, or `while let` loops.
|
||||
|
||||
Make sure `break value;` statements only occur in `loop` loops:
|
||||
|
||||
```
|
||||
# let mut i = 1;
|
||||
# fn satisfied(n: usize) -> bool { n % 23 == 0 }
|
||||
let result = loop { // ok!
|
||||
if satisfied(i) {
|
||||
break 2*i;
|
||||
}
|
||||
i += 1;
|
||||
};
|
||||
```
|
||||
"##
|
||||
}
|
||||
|
||||
@ -230,5 +264,4 @@ register_diagnostics! {
|
||||
E0226, // only a single explicit lifetime bound is permitted
|
||||
E0472, // asm! is unsupported on this target
|
||||
E0561, // patterns aren't allowed in function pointer types
|
||||
E0571, // `break` with a value in a non-`loop`-loop
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user