aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_hir_ty/src/infer/expr.rs22
1 files changed, 10 insertions, 12 deletions
diff --git a/crates/ra_hir_ty/src/infer/expr.rs b/crates/ra_hir_ty/src/infer/expr.rs
index 83702ada0..b28724f0e 100644
--- a/crates/ra_hir_ty/src/infer/expr.rs
+++ b/crates/ra_hir_ty/src/infer/expr.rs
@@ -238,25 +238,23 @@ impl<'a> InferenceContext<'a> {
238 Ty::unit() 238 Ty::unit()
239 }; 239 };
240 240
241 let mut has_brkctx = false; 241 let last_ty = if let Some(ctxt) = self.breakables.last() {
242 ctxt.break_ty.clone()
243 } else {
244 Ty::Unknown
245 };
242 246
243 if self.breakables.last().is_some() { 247 let merged_type = self.coerce_merge_branch(&last_ty, &val_ty);
244 has_brkctx = true; 248
249 if let Some(ctxt) = self.breakables.last_mut() {
250 ctxt.break_ty = merged_type;
251 ctxt.may_break = true;
245 } else { 252 } else {
246 self.push_diagnostic(InferenceDiagnostic::BreakOutsideOfLoop { 253 self.push_diagnostic(InferenceDiagnostic::BreakOutsideOfLoop {
247 expr: tgt_expr, 254 expr: tgt_expr,
248 }); 255 });
249 } 256 }
250 257
251 if has_brkctx {
252 let last_ty = self.breakables.last().expect("This is a bug").break_ty.clone();
253 let merged_type = self.coerce_merge_branch(&last_ty, &val_ty);
254
255 let ctxt = self.breakables.last_mut().expect("This is a bug");
256 ctxt.may_break = true;
257 ctxt.break_ty = merged_type;
258 }
259
260 Ty::simple(TypeCtor::Never) 258 Ty::simple(TypeCtor::Never)
261 } 259 }
262 Expr::Return { expr } => { 260 Expr::Return { expr } => {