@@ -14,8 +14,8 @@ pub struct MirPatch<'tcx> {
1414 resume_block : Option < BasicBlock > ,
1515 // Only for unreachable in cleanup path.
1616 unreachable_cleanup_block : Option < BasicBlock > ,
17- // Cached block for UnwindTerminate(InCleanup )
18- terminate_in_cleanup_block : Option < BasicBlock > ,
17+ // Cached block for UnwindTerminate (with reason )
18+ terminate_block : Option < ( BasicBlock , UnwindTerminateReason ) > ,
1919 body_span : Span ,
2020 next_local : usize ,
2121}
@@ -30,7 +30,7 @@ impl<'tcx> MirPatch<'tcx> {
3030 next_local : body. local_decls . len ( ) ,
3131 resume_block : None ,
3232 unreachable_cleanup_block : None ,
33- terminate_in_cleanup_block : None ,
33+ terminate_block : None ,
3434 body_span : body. span ,
3535 } ;
3636
@@ -53,12 +53,10 @@ impl<'tcx> MirPatch<'tcx> {
5353 }
5454
5555 // Check if we already have a terminate block
56- if matches ! (
57- block. terminator( ) . kind,
58- TerminatorKind :: UnwindTerminate ( UnwindTerminateReason :: InCleanup )
59- ) && block. statements . is_empty ( )
56+ if let TerminatorKind :: UnwindTerminate ( reason) = block. terminator ( ) . kind
57+ && block. statements . is_empty ( )
6058 {
61- result. terminate_in_cleanup_block = Some ( bb ) ;
59+ result. terminate_block = Some ( ( bb , reason ) ) ;
6260 continue ;
6361 }
6462 }
@@ -101,8 +99,8 @@ impl<'tcx> MirPatch<'tcx> {
10199 }
102100
103101 pub fn terminate_block ( & mut self , reason : UnwindTerminateReason ) -> BasicBlock {
104- if let Some ( bb ) = self . terminate_in_cleanup_block && reason == UnwindTerminateReason :: InCleanup {
105- return bb ;
102+ if let Some ( ( cached_bb , cached_reason ) ) = self . terminate_block && reason == cached_reason {
103+ return cached_bb ;
106104 }
107105
108106 let bb = self . new_block ( BasicBlockData {
@@ -113,9 +111,7 @@ impl<'tcx> MirPatch<'tcx> {
113111 } ) ,
114112 is_cleanup : true ,
115113 } ) ;
116- if reason == UnwindTerminateReason :: InCleanup {
117- self . terminate_in_cleanup_block = Some ( bb) ;
118- }
114+ self . terminate_block = Some ( ( bb, reason) ) ;
119115 bb
120116 }
121117
0 commit comments