@@ -112,14 +112,11 @@ impl Direction for Backward {
112
112
113
113
mir:: TerminatorKind :: SwitchInt { targets : _, ref discr } => {
114
114
if let Some ( mut data) = analysis. get_switch_int_data ( block, discr) {
115
- let values = & body. basic_blocks . switch_sources ( ) [ & ( block, pred) ] ;
116
- let targets =
117
- values. iter ( ) . map ( |& value| SwitchIntTarget { value, target : block } ) ;
118
-
119
115
let mut tmp = analysis. bottom_value ( body) ;
120
- for target in targets {
121
- tmp. clone_from ( & exit_state) ;
122
- analysis. apply_switch_int_edge_effect ( & mut data, & mut tmp, target) ;
116
+ for & value in & body. basic_blocks . switch_sources ( ) [ & ( block, pred) ] {
117
+ tmp. clone_from ( exit_state) ;
118
+ let si_target = SwitchIntTarget { value, target : block } ;
119
+ analysis. apply_switch_int_edge_effect ( & mut data, & mut tmp, si_target) ;
123
120
propagate ( pred, & tmp) ;
124
121
}
125
122
} else {
@@ -292,12 +289,9 @@ impl Direction for Forward {
292
289
if let Some ( mut data) = analysis. get_switch_int_data ( block, discr) {
293
290
let mut tmp = analysis. bottom_value ( body) ;
294
291
for ( value, target) in targets. iter ( ) {
295
- tmp. clone_from ( & exit_state) ;
296
- analysis. apply_switch_int_edge_effect (
297
- & mut data,
298
- & mut tmp,
299
- SwitchIntTarget { value : Some ( value) , target } ,
300
- ) ;
292
+ tmp. clone_from ( exit_state) ;
293
+ let si_target = SwitchIntTarget { value : Some ( value) , target } ;
294
+ analysis. apply_switch_int_edge_effect ( & mut data, & mut tmp, si_target) ;
301
295
propagate ( target, & tmp) ;
302
296
}
303
297
0 commit comments