diff options
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0571.md')
-rw-r--r-- | compiler/rustc_error_codes/src/error_codes/E0571.md | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0571.md b/compiler/rustc_error_codes/src/error_codes/E0571.md new file mode 100644 index 000000000..eadae05aa --- /dev/null +++ b/compiler/rustc_error_codes/src/error_codes/E0571.md @@ -0,0 +1,31 @@ +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; +}; +``` |