1
1
use std:: ops:: RangeInclusive ;
2
2
3
- use rustc_middle:: mir:: { self , BasicBlock , CallReturnPlaces , Location , TerminatorEdges } ;
3
+ use rustc_middle:: mir:: {
4
+ self , BasicBlock , CallReturnPlaces , Location , SwitchTargetValue , TerminatorEdges ,
5
+ } ;
4
6
5
7
use super :: visitor:: ResultsVisitor ;
6
- use super :: { Analysis , Effect , EffectIndex , Results , SwitchIntTarget } ;
8
+ use super :: { Analysis , Effect , EffectIndex , Results } ;
7
9
8
10
pub trait Direction {
9
11
const IS_FORWARD : bool ;
@@ -112,14 +114,10 @@ impl Direction for Backward {
112
114
113
115
mir:: TerminatorKind :: SwitchInt { targets : _, ref discr } => {
114
116
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
117
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 ) ;
118
+ for & value in & body . basic_blocks . switch_sources ( ) [ & ( block , pred ) ] {
119
+ tmp. clone_from ( exit_state) ;
120
+ analysis. apply_switch_int_edge_effect ( & mut data, & mut tmp, value ) ;
123
121
propagate ( pred, & tmp) ;
124
122
}
125
123
} else {
@@ -292,12 +290,9 @@ impl Direction for Forward {
292
290
if let Some ( mut data) = analysis. get_switch_int_data ( block, discr) {
293
291
let mut tmp = analysis. bottom_value ( body) ;
294
292
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
- ) ;
293
+ tmp. clone_from ( exit_state) ;
294
+ let value = SwitchTargetValue :: Normal ( value) ;
295
+ analysis. apply_switch_int_edge_effect ( & mut data, & mut tmp, value) ;
301
296
propagate ( target, & tmp) ;
302
297
}
303
298
@@ -308,7 +303,7 @@ impl Direction for Forward {
308
303
analysis. apply_switch_int_edge_effect (
309
304
& mut data,
310
305
exit_state,
311
- SwitchIntTarget { value : None , target : otherwise } ,
306
+ SwitchTargetValue :: Otherwise ,
312
307
) ;
313
308
propagate ( otherwise, exit_state) ;
314
309
} else {
0 commit comments