about summary refs log tree commit diff
path: root/compiler/rustc_mir/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2020-10-20 21:46:32 +0200
committerGitHub <noreply@github.com>2020-10-20 21:46:32 +0200
commit3fea201b11245d65428a1db88d174657429f8bea (patch)
tree383eddb07f279fe6a266c20fd0024fb6e169bda2 /compiler/rustc_mir/src
parent2c1de0862488447ad1a84a293398920ab9065a6b (diff)
parent1d07d696d22a6d5a1ea1a41e0408ea5e990b25ae (diff)
downloadrust-3fea201b11245d65428a1db88d174657429f8bea.tar.gz
rust-3fea201b11245d65428a1db88d174657429f8bea.zip
Rollup merge of #78061 - wesleywiser:opt_zst_const_interning, r=oli-obk
Optimize const value interning for ZST types

Interning can skip any inhabited ZST type in general.

Fixes #68010

r? @oli-obk
Diffstat (limited to 'compiler/rustc_mir/src')
-rw-r--r--compiler/rustc_mir/src/interpret/intern.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/rustc_mir/src/interpret/intern.rs b/compiler/rustc_mir/src/interpret/intern.rs
index dd5e9c99774..945791eddc8 100644
--- a/compiler/rustc_mir/src/interpret/intern.rs
+++ b/compiler/rustc_mir/src/interpret/intern.rs
@@ -187,6 +187,12 @@ impl<'rt, 'mir, 'tcx: 'mir, M: CompileTimeMachine<'mir, 'tcx>> ValueVisitor<'mir
                 return walked;
             }
         }
+
+        // ZSTs do not need validation unless they're uninhabited
+        if mplace.layout.is_zst() && !mplace.layout.abi.is_uninhabited() {
+            return Ok(());
+        }
+
         self.walk_aggregate(mplace, fields)
     }