diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs index 61bb3e2f823..2d7a641a831 100644 --- a/clippy_lints/src/loops.rs +++ b/clippy_lints/src/loops.rs @@ -727,8 +727,7 @@ fn never_loop_expr(expr: &Expr, main_loop_id: HirId) -> NeverLoopResult { NeverLoopResult::AlwaysBreak } }, - ExprKind::Break(_, _) => NeverLoopResult::AlwaysBreak, - ExprKind::Ret(ref e) => { + ExprKind::Break(_, ref e) | ExprKind::Ret(ref e) => { if let Some(ref e) = *e { combine_seq(never_loop_expr(e, main_loop_id), NeverLoopResult::AlwaysBreak) } else { diff --git a/tests/ui/never_loop.rs b/tests/ui/never_loop.rs index abcec3e92f6..cbc4ca39161 100644 --- a/tests/ui/never_loop.rs +++ b/tests/ui/never_loop.rs @@ -175,6 +175,17 @@ pub fn test15() { } } +// Issue #4058: `continue` in `break` expression +pub fn test16() { + let mut n = 1; + loop { + break if n != 5 { + n += 1; + continue; + }; + } +} + fn main() { test1(); test2();