| 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 { // This is now a "loop" loop. | |
| if satisfied(i) { | |
| break 2 * i; // ok! | |
| } | |
| i += 1; | |
| }; | |
| ``` |