| 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; |
| }; |
| ``` |