diff options
| author | bors <bors@rust-lang.org> | 2019-06-11 11:06:38 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-06-11 11:06:38 +0000 |
| commit | 8e948df707ea8a3c88c65bf2ffdcb2f1cf5491be (patch) | |
| tree | caf2cb5f0b7881b6056c37c37c2e73e46b520aab /src/test/run-pass/structs-enums/enum-null-pointer-opt.rs | |
| parent | 912d22e36965d3c9f6d7f14ca18657182aa1fe54 (diff) | |
| parent | dac1c6a731713ec9e90a1e05b3e2c789faf3f2ba (diff) | |
Auto merge of #60463 - mjbshaw:transparent, r=varkor,rkruppe
Implement RFC 2645 (transparent enums and unions) Tracking issue: #60405
Diffstat (limited to 'src/test/run-pass/structs-enums/enum-null-pointer-opt.rs')
| -rw-r--r-- | src/test/run-pass/structs-enums/enum-null-pointer-opt.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/test/run-pass/structs-enums/enum-null-pointer-opt.rs b/src/test/run-pass/structs-enums/enum-null-pointer-opt.rs index 87629665bc2..f871c218558 100644 --- a/src/test/run-pass/structs-enums/enum-null-pointer-opt.rs +++ b/src/test/run-pass/structs-enums/enum-null-pointer-opt.rs @@ -1,4 +1,6 @@ // run-pass +#![feature(transparent_unions)] + use std::mem::size_of; use std::num::NonZeroUsize; use std::ptr::NonNull; @@ -10,6 +12,11 @@ trait Mirror { type Image; } impl<T> Mirror for T { type Image = T; } struct ParamTypeStruct<T>(T); struct AssocTypeStruct<T>(<T as Mirror>::Image); +#[repr(transparent)] +union MaybeUninitUnion<T: Copy> { + _value: T, + _uninit: (), +} fn main() { // Functions @@ -29,9 +36,12 @@ fn main() { // Pointers - Box<T> assert_eq!(size_of::<Box<isize>>(), size_of::<Option<Box<isize>>>()); - // The optimization can't apply to raw pointers + // The optimization can't apply to raw pointers or unions with a ZST field. assert!(size_of::<Option<*const isize>>() != size_of::<*const isize>()); assert!(Some(0 as *const isize).is_some()); // Can't collapse None to null + assert_ne!(size_of::<fn(isize)>(), size_of::<Option<MaybeUninitUnion<fn(isize)>>>()); + assert_ne!(size_of::<&str>(), size_of::<Option<MaybeUninitUnion<&str>>>()); + assert_ne!(size_of::<NonNull<isize>>(), size_of::<Option<MaybeUninitUnion<NonNull<isize>>>>()); struct Foo { _a: Box<isize> |
