]> git.lizzy.rs Git - rust.git/commitdiff
Make `FalseEdges` always have two targets
authorMatthew Jasper <mjjasper1@gmail.com>
Mon, 6 May 2019 14:18:57 +0000 (15:18 +0100)
committerMatthew Jasper <mjjasper1@gmail.com>
Wed, 12 Jun 2019 21:41:58 +0000 (22:41 +0100)
We never have more than one imaginary target, so we have no reason for
a `Vec`

src/librustc/mir/mod.rs
src/librustc_mir/borrow_check/mod.rs
src/librustc_mir/borrow_check/nll/invalidation.rs
src/librustc_mir/borrow_check/nll/type_check/mod.rs
src/librustc_mir/build/matches/mod.rs
src/librustc_mir/dataflow/mod.rs
src/librustc_mir/transform/inline.rs

index e73023d9a8cc949229f7b110037a87df42bb56a8..f18afe7b6327ce8994a25bdd5b9f206cb97caf2f 100644 (file)
@@ -1196,9 +1196,9 @@ pub enum TerminatorKind<'tcx> {
     FalseEdges {
         /// The target normal control flow will take
         real_target: BasicBlock,
-        /// The list of blocks control flow could conceptually take, but won't
+        /// A block control flow could conceptually take, but won't
         /// in practice
-        imaginary_targets: Vec<BasicBlock>,
+        imaginary_target: BasicBlock,
     },
     /// A terminator for blocks that only take one path in reality, but where we
     /// reserve the right to unwind in borrowck, even if it won't happen in practice.
@@ -1335,8 +1335,8 @@ pub fn successors(&self) -> Successors<'_> {
             SwitchInt { ref targets, .. } => None.into_iter().chain(&targets[..]),
             FalseEdges {
                 ref real_target,
-                ref imaginary_targets,
-            } => Some(real_target).into_iter().chain(&imaginary_targets[..]),
+                ref imaginary_target,
+            } => Some(real_target).into_iter().chain(slice::from_ref(imaginary_target)),
         }
     }
 
@@ -1422,10 +1422,10 @@ pub fn successors_mut(&mut self) -> SuccessorsMut<'_> {
             } => None.into_iter().chain(&mut targets[..]),
             FalseEdges {
                 ref mut real_target,
-                ref mut imaginary_targets,
+                ref mut imaginary_target,
             } => Some(real_target)
                 .into_iter()
-                .chain(&mut imaginary_targets[..]),
+                .chain(slice::from_mut(imaginary_target)),
         }
     }
 
@@ -1722,12 +1722,9 @@ pub fn fmt_successor_labels(&self) -> Vec<Cow<'static, str>> {
             Assert { cleanup: None, .. } => vec!["".into()],
             Assert { .. } => vec!["success".into(), "unwind".into()],
             FalseEdges {
-                ref imaginary_targets,
                 ..
             } => {
-                let mut l = vec!["real".into()];
-                l.resize(imaginary_targets.len() + 1, "imaginary".into());
-                l
+                vec!["real".into(), "imaginary".into()]
             }
             FalseUnwind {
                 unwind: Some(_), ..
@@ -3356,10 +3353,10 @@ fn super_fold_with<'gcx: 'tcx, F: TypeFolder<'gcx, 'tcx>>(&self, folder: &mut F)
             Unreachable => Unreachable,
             FalseEdges {
                 real_target,
-                ref imaginary_targets,
+                imaginary_target,
             } => FalseEdges {
                 real_target,
-                imaginary_targets: imaginary_targets.clone(),
+                imaginary_target,
             },
             FalseUnwind {
                 real_target,
index 60ad8921c0b3d439ca9cbf20880074037ca694c1..335db27d2356e47b11dba05caa73767dac9303f9 100644 (file)
@@ -780,7 +780,7 @@ fn visit_terminator_entry(
             | TerminatorKind::Unreachable
             | TerminatorKind::FalseEdges {
                 real_target: _,
-                imaginary_targets: _,
+                imaginary_target: _,
             }
             | TerminatorKind::FalseUnwind {
                 real_target: _,
index 12433ca365d68338ce4c1b96a673f2869286a083..7933fb80a3642168b5790f64fce6ba7450db4cf4 100644 (file)
@@ -244,7 +244,7 @@ fn visit_terminator_kind(
             | TerminatorKind::Unreachable
             | TerminatorKind::FalseEdges {
                 real_target: _,
-                imaginary_targets: _,
+                imaginary_target: _,
             }
             | TerminatorKind::FalseUnwind {
                 real_target: _,
index bbfffc68b9692d10dc4e6839f36ab2455007bdef..104a8cb4894bfd530ead805bfd227f27073e3839 100644 (file)
@@ -1792,12 +1792,10 @@ fn check_iscleanup(&mut self, body: &Body<'tcx>, block_data: &BasicBlockData<'tc
             }
             TerminatorKind::FalseEdges {
                 real_target,
-                ref imaginary_targets,
+                imaginary_target,
             } => {
                 self.assert_iscleanup(body, block_data, real_target, is_cleanup);
-                for target in imaginary_targets {
-                    self.assert_iscleanup(body, block_data, *target, is_cleanup);
-                }
+                self.assert_iscleanup(body, block_data, imaginary_target, is_cleanup);
             }
             TerminatorKind::FalseUnwind {
                 real_target,
index 0aabebcf9dc2c17636c086a61b7a2a4517c7ec68..353842730c7e7900054ce55fcb5b7433750a4c1e 100644 (file)
@@ -961,9 +961,7 @@ fn select_matched_candidates(
                         source_info,
                         TerminatorKind::FalseEdges {
                             real_target: second_candidate.pre_binding_block,
-                            imaginary_targets: vec![
-                                first_candidate.next_candidate_pre_binding_block
-                            ],
+                            imaginary_target: first_candidate.next_candidate_pre_binding_block,
                         }
                     )
                 } else {
@@ -984,7 +982,7 @@ fn select_matched_candidates(
                     source_info,
                     TerminatorKind::FalseEdges {
                         real_target: unreachable,
-                        imaginary_targets: vec![candidate.next_candidate_pre_binding_block],
+                        imaginary_targets: candidate.next_candidate_pre_binding_block,
                     }
                 );
                 self.cfg.terminate(unreachable, source_info, TerminatorKind::Unreachable);
@@ -1001,7 +999,7 @@ fn select_matched_candidates(
                 source_info,
                 TerminatorKind::FalseEdges {
                     real_target: block,
-                    imaginary_targets: vec![last_candidate.next_candidate_pre_binding_block]
+                    imaginary_target: last_candidate.next_candidate_pre_binding_block,
                 }
             );
             Some(block)
@@ -1330,7 +1328,7 @@ fn bind_and_guard_matched_candidate<'pat>(
             candidate_source_info,
             TerminatorKind::FalseEdges {
                 real_target: block,
-                imaginary_targets: vec![candidate.next_candidate_pre_binding_block],
+                imaginary_target: candidate.next_candidate_pre_binding_block,
             },
         );
         self.ascribe_types(block, &candidate.ascriptions);
index 10e46507d5a26306250bfbcefbb0bfb8b474492a..9350881f1e1fce07f42baf4bd7ae0f2986168136 100644 (file)
@@ -802,11 +802,9 @@ fn propagate_bits_into_graph_successors_of(
                     self.propagate_bits_into_entry_set_for(in_out, dest_bb, dirty_list);
                 }
             }
-            mir::TerminatorKind::FalseEdges { real_target, ref imaginary_targets } => {
+            mir::TerminatorKind::FalseEdges { real_target, imaginary_target } => {
                 self.propagate_bits_into_entry_set_for(in_out, real_target, dirty_list);
-                for target in imaginary_targets {
-                    self.propagate_bits_into_entry_set_for(in_out, *target, dirty_list);
-                }
+                self.propagate_bits_into_entry_set_for(in_out, imaginary_target, dirty_list);
             }
             mir::TerminatorKind::FalseUnwind { real_target, unwind } => {
                 self.propagate_bits_into_entry_set_for(in_out, real_target, dirty_list);
index 55c035f2858a28aef8d1612398d896b687be4c37..e20d5eb2e3d36f2527e89125147aa9e0edcd2eb4 100644 (file)
@@ -791,11 +791,9 @@ fn visit_terminator_kind(&mut self,
             }
             TerminatorKind::Abort => { }
             TerminatorKind::Unreachable => { }
-            TerminatorKind::FalseEdges { ref mut real_target, ref mut imaginary_targets } => {
+            TerminatorKind::FalseEdges { ref mut real_target, ref mut imaginary_target } => {
                 *real_target = self.update_target(*real_target);
-                for target in imaginary_targets {
-                    *target = self.update_target(*target);
-                }
+                *imaginary_target = self.update_target(*imaginary_target);
             }
             TerminatorKind::FalseUnwind { real_target: _ , unwind: _ } =>
                 // see the ordering of passes in the optimized_mir query.