@@ -14,8 +14,8 @@ pub struct MirPatch<'tcx> {
14
14
resume_block : Option < BasicBlock > ,
15
15
// Only for unreachable in cleanup path.
16
16
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 ) > ,
19
19
body_span : Span ,
20
20
next_local : usize ,
21
21
}
@@ -30,7 +30,7 @@ impl<'tcx> MirPatch<'tcx> {
30
30
next_local : body. local_decls . len ( ) ,
31
31
resume_block : None ,
32
32
unreachable_cleanup_block : None ,
33
- terminate_in_cleanup_block : None ,
33
+ terminate_block : None ,
34
34
body_span : body. span ,
35
35
} ;
36
36
@@ -53,12 +53,10 @@ impl<'tcx> MirPatch<'tcx> {
53
53
}
54
54
55
55
// 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 ( )
60
58
{
61
- result. terminate_in_cleanup_block = Some ( bb ) ;
59
+ result. terminate_block = Some ( ( bb , reason ) ) ;
62
60
continue ;
63
61
}
64
62
}
@@ -101,8 +99,8 @@ impl<'tcx> MirPatch<'tcx> {
101
99
}
102
100
103
101
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 ;
106
104
}
107
105
108
106
let bb = self . new_block ( BasicBlockData {
@@ -113,9 +111,7 @@ impl<'tcx> MirPatch<'tcx> {
113
111
} ) ,
114
112
is_cleanup : true ,
115
113
} ) ;
116
- if reason == UnwindTerminateReason :: InCleanup {
117
- self . terminate_in_cleanup_block = Some ( bb) ;
118
- }
114
+ self . terminate_block = Some ( ( bb, reason) ) ;
119
115
bb
120
116
}
121
117
0 commit comments