@@ -2282,49 +2282,55 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
22822282        initializer_span :  Span , 
22832283        else_block :  & Block , 
22842284        visibility_scope :  Option < SourceScope > , 
2285+         remainder_scope :  region:: Scope , 
22852286        remainder_span :  Span , 
22862287        pattern :  & Pat < ' tcx > , 
22872288    )  -> BlockAnd < ( ) >  { 
2288-         let  scrutinee = unpack ! ( block = self . lower_scrutinee( block,  init,  initializer_span) ) ; 
2289-         let  pat = Pat  {  ty :  init. ty ,  span :  else_block. span ,  kind :  Box :: new ( PatKind :: Wild )  } ; 
2290-         let  mut  wildcard = Candidate :: new ( scrutinee. clone ( ) ,  & pat,  false ) ; 
2291-         self . declare_bindings ( 
2292-             visibility_scope, 
2293-             remainder_span, 
2294-             pattern, 
2295-             ArmHasGuard ( false ) , 
2296-             Some ( ( None ,  initializer_span) ) , 
2297-         ) ; 
2298-         let  mut  candidate = Candidate :: new ( scrutinee. clone ( ) ,  pattern,  false ) ; 
2299-         let  fake_borrow_temps = self . lower_match_tree ( 
2300-             block, 
2301-             initializer_span, 
2302-             pattern. span , 
2303-             false , 
2304-             & mut  [ & mut  candidate,  & mut  wildcard] , 
2305-         ) ; 
2306-         // This block is for the matching case 
2307-         let  matching = self . bind_pattern ( 
2308-             self . source_info ( pattern. span ) , 
2309-             candidate, 
2310-             None , 
2311-             & fake_borrow_temps, 
2312-             initializer_span, 
2313-             None , 
2314-             None , 
2315-             None , 
2316-         ) ; 
2317-         // This block is for the failure case 
2318-         let  failure = self . bind_pattern ( 
2319-             self . source_info ( else_block. span ) , 
2320-             wildcard, 
2321-             None , 
2322-             & fake_borrow_temps, 
2323-             initializer_span, 
2324-             None , 
2325-             None , 
2326-             None , 
2327-         ) ; 
2289+         let  ( matching,  failure)  = self . in_if_then_scope ( remainder_scope,  |this| { 
2290+             let  scrutinee = unpack ! ( block = this. lower_scrutinee( block,  init,  initializer_span) ) ; 
2291+             let  pat = Pat  {  ty :  init. ty ,  span :  else_block. span ,  kind :  Box :: new ( PatKind :: Wild )  } ; 
2292+             let  mut  wildcard = Candidate :: new ( scrutinee. clone ( ) ,  & pat,  false ) ; 
2293+             this. declare_bindings ( 
2294+                 visibility_scope, 
2295+                 remainder_span, 
2296+                 pattern, 
2297+                 ArmHasGuard ( false ) , 
2298+                 Some ( ( None ,  initializer_span) ) , 
2299+             ) ; 
2300+             let  mut  candidate = Candidate :: new ( scrutinee. clone ( ) ,  pattern,  false ) ; 
2301+             let  fake_borrow_temps = this. lower_match_tree ( 
2302+                 block, 
2303+                 initializer_span, 
2304+                 pattern. span , 
2305+                 false , 
2306+                 & mut  [ & mut  candidate,  & mut  wildcard] , 
2307+             ) ; 
2308+             // This block is for the matching case 
2309+             let  matching = this. bind_pattern ( 
2310+                 this. source_info ( pattern. span ) , 
2311+                 candidate, 
2312+                 None , 
2313+                 & fake_borrow_temps, 
2314+                 initializer_span, 
2315+                 None , 
2316+                 None , 
2317+                 None , 
2318+             ) ; 
2319+             // This block is for the failure case 
2320+             let  failure = this. bind_pattern ( 
2321+                 this. source_info ( else_block. span ) , 
2322+                 wildcard, 
2323+                 None , 
2324+                 & fake_borrow_temps, 
2325+                 initializer_span, 
2326+                 None , 
2327+                 None , 
2328+                 None , 
2329+             ) ; 
2330+             this. break_for_else ( failure,  remainder_scope,  this. source_info ( initializer_span) ) ; 
2331+             matching. unit ( ) 
2332+         } ) ; 
2333+ 
23282334        // This place is not really used because this destination place 
23292335        // should never be used to take values at the end of the failure 
23302336        // block. 
0 commit comments