diff options
| author | bors <bors@rust-lang.org> | 2020-08-03 07:20:21 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-08-03 07:20:21 +0000 |
| commit | dbc2ef25fb5e15445de38f19ba75547a6cf35cae (patch) | |
| tree | 7a7d9e21a56cc6805d85614fd8069b440465dcd7 | |
| parent | 1b0ff9e7d0620daa86a80bf92f6b661f7699984e (diff) | |
| parent | 7f9f2ff9f40ed46a209cf232429120333fe42455 (diff) | |
| download | rust-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.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-75704.rs | 7 |
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; } +} |
