diff options
| author | Wesley Wiser <wwiser@gmail.com> | 2020-10-17 15:47:27 -0400 |
|---|---|---|
| committer | Wesley Wiser <wwiser@gmail.com> | 2020-10-17 16:07:00 -0400 |
| commit | 1d07d696d22a6d5a1ea1a41e0408ea5e990b25ae (patch) | |
| tree | b8cc65203796fa58c407417821190153c5b45ea0 | |
| parent | ffeeb20398bb9a25c1f75599b942f57c85a2140d (diff) | |
| download | rust-1d07d696d22a6d5a1ea1a41e0408ea5e990b25ae.tar.gz rust-1d07d696d22a6d5a1ea1a41e0408ea5e990b25ae.zip | |
Optimize const value interning for ZST types
Interning can skip any inhabited ZST type in general.
| -rw-r--r-- | compiler/rustc_mir/src/interpret/intern.rs | 6 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-68010-large-zst-consts.rs | 5 |
2 files changed, 11 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) } diff --git a/src/test/ui/issues/issue-68010-large-zst-consts.rs b/src/test/ui/issues/issue-68010-large-zst-consts.rs new file mode 100644 index 00000000000..4f1bd45e90a --- /dev/null +++ b/src/test/ui/issues/issue-68010-large-zst-consts.rs @@ -0,0 +1,5 @@ +// build-pass + +fn main() { + println!("{}", [(); std::usize::MAX].len()); +} |
