Fix never_loop false positive

Closes #4058
This commit is contained in:
Michael Wright 2019-07-01 07:16:32 +02:00
parent 58e6431f1a
commit 7c98915da9
2 changed files with 12 additions and 2 deletions

View file

@ -727,8 +727,7 @@ fn never_loop_expr(expr: &Expr, main_loop_id: HirId) -> NeverLoopResult {
NeverLoopResult::AlwaysBreak NeverLoopResult::AlwaysBreak
} }
}, },
ExprKind::Break(_, _) => NeverLoopResult::AlwaysBreak, ExprKind::Break(_, ref e) | ExprKind::Ret(ref e) => {
ExprKind::Ret(ref e) => {
if let Some(ref e) = *e { if let Some(ref e) = *e {
combine_seq(never_loop_expr(e, main_loop_id), NeverLoopResult::AlwaysBreak) combine_seq(never_loop_expr(e, main_loop_id), NeverLoopResult::AlwaysBreak)
} else { } else {

View file

@ -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() { fn main() {
test1(); test1();
test2(); test2();