From: Tomasz Miąsko Date: Mon, 3 Aug 2020 00:00:00 +0000 (+0000) Subject: Fix change detection in CfgSimplifier::collapse_goto_chain X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=82651db9b2f6ecb16c773e8afa301c862118bb82;p=rust.git 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. --- diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs index 9288d6e16f5..acf8c0181ce 100644 --- a/src/librustc_mir/transform/simplify.rs +++ b/src/librustc_mir/transform/simplify.rs @@ -212,6 +212,7 @@ fn collapse_goto_chain(&mut self, start: &mut BasicBlock, changed: &mut bool) { Terminator { kind: TerminatorKind::Goto { ref mut target }, .. } => target, _ => unreachable!(), }; + *changed |= *target != last; *target = last; debug!("collapsing goto chain from {:?} to {:?}", current, target); @@ -223,7 +224,6 @@ fn collapse_goto_chain(&mut self, start: &mut BasicBlock, changed: &mut bool) { 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; } +}