Explain that this is UB catching instead of malformed MIR.

This commit is contained in:
Camille GILLOT 2023-02-25 16:29:06 +00:00
parent 9aa4f6acb2
commit bf46b9cb28

View File

@ -756,6 +756,13 @@ fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) {
}
}
StatementKind::StorageLive(local) => {
// We check that the local is not live when entering a `StorageLive` for it.
// Technically, violating this restriction is only UB and not actually indicative
// of not well-formed MIR. This means that an optimization which turns MIR that
// already has UB into MIR that fails this check is not necessarily wrong. However,
// we have no such optimizations at the moment, and so we include this check anyway
// to help us catch bugs. If you happen to write an optimization that might cause
// this to incorrectly fire, feel free to remove this check.
if self.reachable_blocks.contains(location.block) {
self.storage_liveness.seek_before_primary_effect(location);
let locals_with_storage = self.storage_liveness.get();