diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2023-02-14 09:12:51 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2023-02-14 09:23:04 +0100 |
| commit | e9dffa391085f4b3c84f90e8ab82bdd568d1f17e (patch) | |
| tree | 26aea6ceeff5dfd6e7e6f0bc43db5ea8a532b82c | |
| parent | 1fec2927c5cf02de85c08a63dbc8909077661d1b (diff) | |
| download | rust-e9dffa391085f4b3c84f90e8ab82bdd568d1f17e.tar.gz rust-e9dffa391085f4b3c84f90e8ab82bdd568d1f17e.zip | |
Fix a bug in never_loop when anonymous blocks are nested in named blocks
The following code
```
loop {
'a: {
{ }
break 'a;
}
}
```
was detected as a never-looping loop.
| -rw-r--r-- | clippy_lints/src/loops/never_loop.rs | 4 | ||||
| -rw-r--r-- | tests/ui/never_loop.rs | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/clippy_lints/src/loops/never_loop.rs b/clippy_lints/src/loops/never_loop.rs index 9d16949c81f..3cb5b1ffc7b 100644 --- a/clippy_lints/src/loops/never_loop.rs +++ b/clippy_lints/src/loops/never_loop.rs @@ -163,7 +163,9 @@ fn never_loop_expr(expr: &Expr<'_>, ignore_ids: &mut Vec<HirId>, main_loop_id: H ignore_ids.push(b.hir_id); } let ret = never_loop_block(b, ignore_ids, main_loop_id); - ignore_ids.pop(); + if l.is_some() { + ignore_ids.pop(); + } ret }, ExprKind::Continue(d) => { diff --git a/tests/ui/never_loop.rs b/tests/ui/never_loop.rs index 28e8f459d44..a177d5e06aa 100644 --- a/tests/ui/never_loop.rs +++ b/tests/ui/never_loop.rs @@ -250,6 +250,15 @@ pub fn test20() { } } +pub fn test21() { + loop { + 'a: { + { } + break 'a; + } + } +} + fn main() { test1(); test2(); |
