fix break-outside-of-loop false positive in try block

This commit is contained in:
hkalbasi 2023-05-02 02:28:14 +03:30
parent 6312fbf521
commit 3a3c3630a2
2 changed files with 20 additions and 1 deletions

View File

@ -505,6 +505,7 @@ fn maybe_collect_expr(&mut self, expr: ast::Expr) -> Option<ExprId> {
.map(|it| Interned::new(TypeRef::from_ast(&this.ctx(), it)));
let prev_is_lowering_generator = mem::take(&mut this.is_lowering_generator);
let prev_try_block_label = this.current_try_block_label.take();
let body = this.collect_expr_opt(e.body());
@ -520,11 +521,11 @@ fn maybe_collect_expr(&mut self, expr: ast::Expr) -> Option<ExprId> {
} else {
ClosureKind::Closure
};
this.is_lowering_generator = prev_is_lowering_generator;
let capture_by =
if e.move_token().is_some() { CaptureBy::Value } else { CaptureBy::Ref };
this.is_lowering_generator = prev_is_lowering_generator;
this.current_binding_owner = prev_binding_owner;
this.current_try_block_label = prev_try_block_label;
this.body.exprs[result_expr_id] = Expr::Closure {
args: args.into(),
arg_types: arg_types.into(),

View File

@ -132,6 +132,24 @@ fn test() {
// ^^^^^^^ error: can't break with a value in this position
}
}
"#,
);
}
#[test]
fn try_block_desugaring_inside_closure() {
// regression test for #14701
check_diagnostics(
r#"
//- minicore: option, try
fn test() {
try {
|| {
let x = Some(2);
Some(x?)
};
};
}
"#,
);
}