@@ -382,36 +382,35 @@ impl<'a> InferenceContext<'a> {
382
382
TyKind :: Never . intern ( Interner )
383
383
}
384
384
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
-
396
385
let val_ty = if let Some ( expr) = * expr {
397
386
self . infer_expr ( expr, & Expectation :: none ( ) )
398
387
} else {
399
388
TyBuilder :: unit ( )
400
389
} ;
401
390
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
+ ) ;
404
398
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) ;
414
401
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
+ }
415
414
TyKind :: Never . intern ( Interner )
416
415
}
417
416
Expr :: Return { expr } => {
0 commit comments