about summary refs log tree commit diff
path: root/compiler/rustc_const_eval/src
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-02-25 16:29:06 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-02-25 16:29:06 +0000
commitbf46b9cb281cd196ca6227b2b72ef64dee390b5a (patch)
tree3333ea37a76fa94a71e617d6e078cbc07ad58b9a /compiler/rustc_const_eval/src
parent9aa4f6acb2e769ab012ab2cd7114177d94351847 (diff)
downloadrust-bf46b9cb281cd196ca6227b2b72ef64dee390b5a.tar.gz
rust-bf46b9cb281cd196ca6227b2b72ef64dee390b5a.zip
Explain that this is UB catching instead of malformed MIR.
Diffstat (limited to 'compiler/rustc_const_eval/src')
-rw-r--r--compiler/rustc_const_eval/src/transform/validate.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/compiler/rustc_const_eval/src/transform/validate.rs b/compiler/rustc_const_eval/src/transform/validate.rs
index be5b1aad13c..b12a63f23fa 100644
--- a/compiler/rustc_const_eval/src/transform/validate.rs
+++ b/compiler/rustc_const_eval/src/transform/validate.rs
@@ -756,6 +756,13 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
                 }
             }
             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();