diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2024-11-03 16:37:25 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2024-11-03 16:49:15 +0100 |
| commit | 2f1b7b64fbbfe73d56e7d6b25fb5a9ac1b24ba5e (patch) | |
| tree | 556dac664207dbc16f82efb84888e575dd225669 | |
| parent | 52b8324503d670646bc54a976bbc6baa9ddde08e (diff) | |
| download | rust-2f1b7b64fbbfe73d56e7d6b25fb5a9ac1b24ba5e.tar.gz rust-2f1b7b64fbbfe73d56e7d6b25fb5a9ac1b24ba5e.zip | |
needless_continue: check labels consistency before warning
| -rw-r--r-- | clippy_lints/src/needless_continue.rs | 5 | ||||
| -rw-r--r-- | tests/ui/needless_continue.rs | 17 | ||||
| -rw-r--r-- | tests/ui/needless_continue.stderr | 10 |
3 files changed, 29 insertions, 3 deletions
diff --git a/clippy_lints/src/needless_continue.rs b/clippy_lints/src/needless_continue.rs index ce97370d4d9..c4836772933 100644 --- a/clippy_lints/src/needless_continue.rs +++ b/clippy_lints/src/needless_continue.rs @@ -330,10 +330,11 @@ fn suggestion_snippet_for_continue_inside_else(cx: &EarlyContext<'_>, data: &Lin } fn check_and_warn(cx: &EarlyContext<'_>, expr: &ast::Expr) { - if let ast::ExprKind::Loop(loop_block, ..) = &expr.kind + if let ast::ExprKind::Loop(loop_block, loop_label, ..) = &expr.kind && let Some(last_stmt) = loop_block.stmts.last() && let ast::StmtKind::Expr(inner_expr) | ast::StmtKind::Semi(inner_expr) = &last_stmt.kind - && let ast::ExprKind::Continue(_) = inner_expr.kind + && let ast::ExprKind::Continue(continue_label) = inner_expr.kind + && compare_labels(loop_label.as_ref(), continue_label.as_ref()) { span_lint_and_help( cx, diff --git a/tests/ui/needless_continue.rs b/tests/ui/needless_continue.rs index c26a292c8cb..b6d8a8f61ae 100644 --- a/tests/ui/needless_continue.rs +++ b/tests/ui/needless_continue.rs @@ -151,3 +151,20 @@ mod issue_2329 { } } } + +fn issue_13641() { + 'a: while std::hint::black_box(true) { + #[allow(clippy::never_loop)] + loop { + continue 'a; + } + } + + #[allow(clippy::never_loop)] + while std::hint::black_box(true) { + 'b: loop { + continue 'b; + //~^ ERROR: this `continue` expression is redundant + } + } +} diff --git a/tests/ui/needless_continue.stderr b/tests/ui/needless_continue.stderr index ec7c9ba39a7..0741ba69248 100644 --- a/tests/ui/needless_continue.stderr +++ b/tests/ui/needless_continue.stderr @@ -136,5 +136,13 @@ LL | | } println!("bar-5"); } -error: aborting due to 8 previous errors +error: this `continue` expression is redundant + --> tests/ui/needless_continue.rs:166:13 + | +LL | continue 'b; + | ^^^^^^^^^^^^ + | + = help: consider dropping the `continue` expression + +error: aborting due to 9 previous errors |
