Explain that this is UB catching instead of malformed MIR.
This commit is contained in:
parent
9aa4f6acb2
commit
bf46b9cb28
@ -756,6 +756,13 @@ fn visit_statement(&mut self, statement: &Statement<'tcx>, location: Location) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
StatementKind::StorageLive(local) => {
|
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) {
|
if self.reachable_blocks.contains(location.block) {
|
||||||
self.storage_liveness.seek_before_primary_effect(location);
|
self.storage_liveness.seek_before_primary_effect(location);
|
||||||
let locals_with_storage = self.storage_liveness.get();
|
let locals_with_storage = self.storage_liveness.get();
|
||||||
|
Loading…
Reference in New Issue
Block a user