11use std:: ops:: RangeInclusive ;
22
3- use rustc_middle:: mir:: { self , BasicBlock , CallReturnPlaces , Location , TerminatorEdges } ;
3+ use rustc_middle:: mir:: {
4+ self , BasicBlock , CallReturnPlaces , Location , SwitchTargetValue , TerminatorEdges ,
5+ } ;
46
57use super :: visitor:: ResultsVisitor ;
6- use super :: { Analysis , Effect , EffectIndex , Results , SwitchIntTarget } ;
8+ use super :: { Analysis , Effect , EffectIndex , Results } ;
79
810pub trait Direction {
911 const IS_FORWARD : bool ;
@@ -112,14 +114,10 @@ impl Direction for Backward {
112114
113115 mir:: TerminatorKind :: SwitchInt { targets : _, ref discr } => {
114116 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-
119117 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 ) ;
123121 propagate ( pred, & tmp) ;
124122 }
125123 } else {
@@ -292,12 +290,9 @@ impl Direction for Forward {
292290 if let Some ( mut data) = analysis. get_switch_int_data ( block, discr) {
293291 let mut tmp = analysis. bottom_value ( body) ;
294292 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) ;
301296 propagate ( target, & tmp) ;
302297 }
303298
@@ -308,7 +303,7 @@ impl Direction for Forward {
308303 analysis. apply_switch_int_edge_effect (
309304 & mut data,
310305 exit_state,
311- SwitchIntTarget { value : None , target : otherwise } ,
306+ SwitchTargetValue :: Otherwise ,
312307 ) ;
313308 propagate ( otherwise, exit_state) ;
314309 } else {
0 commit comments