diff options
| author | bors <bors@rust-lang.org> | 2017-12-24 10:07:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-12-24 10:07:22 +0000 |
| commit | 4ce6b9a770ea9bbe2747b2cdbf6ffcde7ceb6469 (patch) | |
| tree | 2842e5a7d92b6f579faee315a05cb52b304e6a52 /src/test | |
| parent | 11a24d9c3940f60e527c571680d64e80e0889abe (diff) | |
| parent | da9791767bf9d4c334e22a1c4718e325279be984 (diff) | |
Auto merge of #46859 - gereeter:uninhabited-unions, r=eddyb
Only mark unions as uninhabited if all of their fields are uninhabited Fixes #46845.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/issue-46845.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/run-pass/issue-46845.rs b/src/test/run-pass/issue-46845.rs new file mode 100644 index 00000000000..235d3982a9c --- /dev/null +++ b/src/test/run-pass/issue-46845.rs @@ -0,0 +1,39 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// To work around #46855 +// compile-flags: -Z mir-opt-level=0 +// Regression test for the inhabitedness of unions with uninhabited variants, issue #46845 + +use std::mem; + +#[derive(Copy, Clone)] +enum Never { } + +// A single uninhabited variant shouldn't make the whole union uninhabited. +union Foo { + a: u64, + _b: Never +} + +// If all the variants are uninhabited, however, the union should be uninhabited. +union Bar { + _a: (Never, u64), + _b: (u64, Never) +} + +fn main() { + assert_eq!(mem::size_of::<Foo>(), 8); + assert_eq!(mem::size_of::<Bar>(), 0); + + let f = [Foo { a: 42 }, Foo { a: 10 }]; + println!("{}", unsafe { f[0].a }); + assert_eq!(unsafe { f[1].a }, 10); +} |
