diff options
| author | bors <bors@rust-lang.org> | 2024-10-08 08:49:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-10-08 08:49:07 +0000 |
| commit | d9c8d976cbcb3dfee324b47fa8bee57c6bb54203 (patch) | |
| tree | 5bcb436b3412d54620e1df4beb59260b40c68013 /tests/ui | |
| parent | 6f4bf9057ab632a4b1c786d350bd530b0a69c954 (diff) | |
| parent | 99ce411ed67fd73fc9d3e4afebbdf3472d25bd10 (diff) | |
| download | rust-d9c8d976cbcb3dfee324b47fa8bee57c6bb54203.tar.gz rust-d9c8d976cbcb3dfee324b47fa8bee57c6bb54203.zip | |
Auto merge of #13512 - samueltardieu:issue-13511, r=xFrednet
`infinite_loop`: continuing an outer loop leaves the inner loop changelog: [`infinite_loop`]: detect a `continue` targeting an outer loop Fix #13511
Diffstat (limited to 'tests/ui')
| -rw-r--r-- | tests/ui/infinite_loops.rs | 38 | ||||
| -rw-r--r-- | tests/ui/infinite_loops.stderr | 64 |
2 files changed, 101 insertions, 1 deletions
diff --git a/tests/ui/infinite_loops.rs b/tests/ui/infinite_loops.rs index b2d522fa011..b6cb7ff49b0 100644 --- a/tests/ui/infinite_loops.rs +++ b/tests/ui/infinite_loops.rs @@ -390,4 +390,42 @@ fn span_inside_fn() { } } +fn continue_outer() { + // Should not lint (issue #13511) + let mut count = 0; + 'outer: loop { + if count != 0 { + break; + } + + loop { + count += 1; + continue 'outer; + } + } + + // This should lint as we continue the loop itself + 'infinite: loop { + //~^ ERROR: infinite loop detected + loop { + continue 'infinite; + } + } + // This should lint as we continue an inner loop + loop { + //~^ ERROR: infinite loop detected + 'inner: loop { + loop { + continue 'inner; + } + } + } + + // This should lint as we continue the loop itself + loop { + //~^ ERROR: infinite loop detected + continue; + } +} + fn main() {} diff --git a/tests/ui/infinite_loops.stderr b/tests/ui/infinite_loops.stderr index ec6bd81dc17..7635a7442f4 100644 --- a/tests/ui/infinite_loops.stderr +++ b/tests/ui/infinite_loops.stderr @@ -255,5 +255,67 @@ LL | | }) | = help: if this is not intended, try adding a `break` or `return` condition in the loop -error: aborting due to 17 previous errors +error: infinite loop detected + --> tests/ui/infinite_loops.rs:408:5 + | +LL | / 'infinite: loop { +LL | | +LL | | loop { +LL | | continue 'infinite; +LL | | } +LL | | } + | |_____^ + | +help: if this is intentional, consider specifying `!` as function return + | +LL | fn continue_outer() -> ! { + | ++++ + +error: infinite loop detected + --> tests/ui/infinite_loops.rs:415:5 + | +LL | / loop { +LL | | +LL | | 'inner: loop { +LL | | loop { +... | +LL | | } +LL | | } + | |_____^ + | +help: if this is intentional, consider specifying `!` as function return + | +LL | fn continue_outer() -> ! { + | ++++ + +error: infinite loop detected + --> tests/ui/infinite_loops.rs:417:9 + | +LL | / 'inner: loop { +LL | | loop { +LL | | continue 'inner; +LL | | } +LL | | } + | |_________^ + | +help: if this is intentional, consider specifying `!` as function return + | +LL | fn continue_outer() -> ! { + | ++++ + +error: infinite loop detected + --> tests/ui/infinite_loops.rs:425:5 + | +LL | / loop { +LL | | +LL | | continue; +LL | | } + | |_____^ + | +help: if this is intentional, consider specifying `!` as function return + | +LL | fn continue_outer() -> ! { + | ++++ + +error: aborting due to 21 previous errors |
