@@ -382,36 +382,35 @@ impl<'a> InferenceContext<'a> {
382382 TyKind :: Never . intern ( Interner )
383383 }
384384 Expr :: Break { expr, label } => {
385- let mut coerce = match find_breakable ( & mut self . breakables , label. as_ref ( ) ) {
386- Some ( ctxt) => {
387- // avoiding the borrowck
388- mem:: replace (
389- & mut ctxt. coerce ,
390- CoerceMany :: new ( self . result . standard_types . unknown . clone ( ) ) ,
391- )
392- }
393- None => CoerceMany :: new ( self . result . standard_types . unknown . clone ( ) ) ,
394- } ;
395-
396385 let val_ty = if let Some ( expr) = * expr {
397386 self . infer_expr ( expr, & Expectation :: none ( ) )
398387 } else {
399388 TyBuilder :: unit ( )
400389 } ;
401390
402- // FIXME: create a synthetic `()` during lowering so we have something to refer to here?
403- coerce. coerce ( self , * expr, & val_ty) ;
391+ match find_breakable ( & mut self . breakables , label. as_ref ( ) ) {
392+ Some ( ctxt) => {
393+ // avoiding the borrowck
394+ let mut coerce = mem:: replace (
395+ & mut ctxt. coerce ,
396+ CoerceMany :: new ( self . result . standard_types . unknown . clone ( ) ) ,
397+ ) ;
404398
405- if let Some ( ctxt) = find_breakable ( & mut self . breakables , label. as_ref ( ) ) {
406- ctxt. coerce = coerce;
407- ctxt. may_break = true ;
408- } else {
409- self . push_diagnostic ( InferenceDiagnostic :: BreakOutsideOfLoop {
410- expr : tgt_expr,
411- is_break : true ,
412- } ) ;
413- } ;
399+ // FIXME: create a synthetic `()` during lowering so we have something to refer to here?
400+ coerce. coerce ( self , * expr, & val_ty) ;
414401
402+ let ctxt = find_breakable ( & mut self . breakables , label. as_ref ( ) )
403+ . expect ( "breakable stack changed during coercion" ) ;
404+ ctxt. coerce = coerce;
405+ ctxt. may_break = true ;
406+ }
407+ None => {
408+ self . push_diagnostic ( InferenceDiagnostic :: BreakOutsideOfLoop {
409+ expr : tgt_expr,
410+ is_break : true ,
411+ } ) ;
412+ }
413+ }
415414 TyKind :: Never . intern ( Interner )
416415 }
417416 Expr :: Return { expr } => {
0 commit comments