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
This commit is contained in:
commit
dbc2ef25fb
2 changed files with 8 additions and 3 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
7
src/test/ui/issues/issue-75704.rs
Normal file
7
src/test/ui/issues/issue-75704.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
// Caused an infinite loop during SimlifyCfg MIR transform previously.
|
||||
//
|
||||
// build-pass
|
||||
|
||||
fn main() {
|
||||
loop { continue; }
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue