about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-08-03 07:20:21 +0000
committerbors <bors@rust-lang.org>2020-08-03 07:20:21 +0000
commitdbc2ef25fb5e15445de38f19ba75547a6cf35cae (patch)
tree7a7d9e21a56cc6805d85614fd8069b440465dcd7
parent1b0ff9e7d0620daa86a80bf92f6b661f7699984e (diff)
parent7f9f2ff9f40ed46a209cf232429120333fe42455 (diff)
downloadrust-dbc2ef25fb5e15445de38f19ba75547a6cf35cae.tar.gz
rust-dbc2ef25fb5e15445de38f19ba75547a6cf35cae.zip
Auto merge of #75076 - tmiasko:simplify-goto, r=oli-obk
Fix change detection in CfgSimplifier::collapse_goto_chain

Check that the old target is different from the new collapsed one, before concluding that anything changed.

Fixes #75074
Fixes #75051
-rw-r--r--src/librustc_mir/transform/simplify.rs4
-rw-r--r--src/test/ui/issues/issue-75704.rs7
2 files changed, 8 insertions, 3 deletions
diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs
index 9288d6e16f5..d8995e92abf 100644
--- a/src/librustc_mir/transform/simplify.rs
+++ b/src/librustc_mir/transform/simplify.rs
@@ -142,8 +142,6 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
                 }
 
                 self.basic_blocks[bb].terminator = Some(terminator);
-
-                changed |= inner_changed;
             }
 
             if !changed {
@@ -212,6 +210,7 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
                 Terminator { kind: TerminatorKind::Goto { ref mut target }, .. } => target,
                 _ => unreachable!(),
             };
+            *changed |= *target != last;
             *target = last;
             debug!("collapsing goto chain from {:?} to {:?}", current, target);
 
@@ -223,7 +222,6 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
                 self.pred_count[*target] += 1;
                 self.pred_count[current] -= 1;
             }
-            *changed = true;
             self.basic_blocks[current].terminator = Some(terminator);
         }
     }
diff --git a/src/test/ui/issues/issue-75704.rs b/src/test/ui/issues/issue-75704.rs
new file mode 100644
index 00000000000..aed7ddbcb8c
--- /dev/null
+++ b/src/test/ui/issues/issue-75704.rs
@@ -0,0 +1,7 @@
+// Caused an infinite loop during SimlifyCfg MIR transform previously.
+//
+// build-pass
+
+fn main() {
+    loop { continue; }
+}