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.
This commit is contained in:
parent
19cefa6864
commit
82651db9b2
|
@ -212,6 +212,7 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
|
||||||
Terminator { kind: TerminatorKind::Goto { ref mut target }, .. } => target,
|
Terminator { kind: TerminatorKind::Goto { ref mut target }, .. } => target,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
*changed |= *target != last;
|
||||||
*target = last;
|
*target = last;
|
||||||
debug!("collapsing goto chain from {:?} to {:?}", current, target);
|
debug!("collapsing goto chain from {:?} to {:?}", current, target);
|
||||||
|
|
||||||
|
@ -223,7 +224,6 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> {
|
||||||
self.pred_count[*target] += 1;
|
self.pred_count[*target] += 1;
|
||||||
self.pred_count[current] -= 1;
|
self.pred_count[current] -= 1;
|
||||||
}
|
}
|
||||||
*changed = true;
|
|
||||||
self.basic_blocks[current].terminator = Some(terminator);
|
self.basic_blocks[current].terminator = Some(terminator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
// Caused an infinite loop during SimlifyCfg MIR transform previously.
|
||||||
|
//
|
||||||
|
// build-pass
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
loop { continue; }
|
||||||
|
}
|
Loading…
Reference in New Issue