fix never_loop false positive

on unconditional break to internal labeled block

ref #9831
This commit is contained in:
Kartavya Vashishtha 2022-11-12 20:36:30 +05:30
parent cad0d3d6da
commit 989986144c
No known key found for this signature in database
GPG Key ID: A50012C2324E5DF0
2 changed files with 14 additions and 1 deletions

View File

@ -169,7 +169,8 @@ fn never_loop_expr(expr: &Expr<'_>, main_loop_id: HirId) -> NeverLoopResult {
combine_seq(e, arms) combine_seq(e, arms)
} }
}, },
ExprKind::Block(b, _) => never_loop_block(b, main_loop_id), ExprKind::Block(b, None) => never_loop_block(b, main_loop_id),
ExprKind::Block(b, Some(_label)) => absorb_break(never_loop_block(b, main_loop_id)),
ExprKind::Continue(d) => { ExprKind::Continue(d) => {
let id = d let id = d
.target_id .target_id

View File

@ -229,6 +229,18 @@ pub fn test18() {
}; };
} }
// Issue #9831: unconditional break to internal labeled block
pub fn test19() {
fn thing(iter: impl Iterator) {
for _ in iter {
'b: {
// error goes away if we just have the block's value be ().
break 'b;
}
}
}
}
fn main() { fn main() {
test1(); test1();
test2(); test2();