]> git.lizzy.rs Git - rust.git/blobdiff - compiler/rustc_mir/src/util/elaborate_drops.rs
Refactor how SwitchInt stores jump targets
[rust.git] / compiler / rustc_mir / src / util / elaborate_drops.rs
index 43fa15d7e49123cfcd25984d5eb17462317dd0ce..4a48b335ce9640fbc414b3298f9dccd31f113f73 100644 (file)
@@ -588,8 +588,10 @@ fn adt_switch_block(
                 kind: TerminatorKind::SwitchInt {
                     discr: Operand::Move(discr),
                     switch_ty: discr_ty,
-                    values: From::from(values.to_owned()),
-                    targets: blocks,
+                    targets: SwitchTargets::new(
+                        values.iter().copied().zip(blocks.iter().copied()),
+                        *blocks.last().unwrap(),
+                    ),
                 },
             }),
             is_cleanup: unwind.is_cleanup(),
@@ -758,7 +760,7 @@ fn open_drop_for_array(&mut self, ety: Ty<'tcx>, opt_size: Option<u64>) -> Basic
         let elem_size = Place::from(self.new_temp(tcx.types.usize));
         let len = Place::from(self.new_temp(tcx.types.usize));
 
-        static USIZE_SWITCH_ZERO: &[u128] = &[0];
+        static USIZE_SWITCH_ZERO: &[u128; 1] = &[0];
 
         let base_block = BasicBlockData {
             statements: vec![
@@ -771,11 +773,11 @@ fn open_drop_for_array(&mut self, ety: Ty<'tcx>, opt_size: Option<u64>) -> Basic
                 kind: TerminatorKind::SwitchInt {
                     discr: move_(elem_size),
                     switch_ty: tcx.types.usize,
-                    values: From::from(USIZE_SWITCH_ZERO),
-                    targets: vec![
+                    targets: SwitchTargets::static_if(
+                        USIZE_SWITCH_ZERO,
                         self.drop_loop_pair(ety, false, len),
                         self.drop_loop_pair(ety, true, len),
-                    ],
+                    ),
                 },
             }),
         };