diff options
| author | Ralf Jung <post@ralfj.de> | 2020-04-18 09:54:05 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-09-26 12:29:01 +0200 |
| commit | 6f881b3b7db6e08d5ca3a940befc7898aab1568a (patch) | |
| tree | d95bb3fc1baeeaeb30a501bfe09fdd1cf6e3b792 /src | |
| parent | e599b53e67ddd197a09a3d8720eed872df481aa0 (diff) | |
might_permit_raw_init: also check aggregate fields
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/intrinsics/panic-uninitialized-zeroed.rs | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/test/ui/intrinsics/panic-uninitialized-zeroed.rs b/src/test/ui/intrinsics/panic-uninitialized-zeroed.rs index 02f8ecaa4ee..24474cabf1e 100644 --- a/src/test/ui/intrinsics/panic-uninitialized-zeroed.rs +++ b/src/test/ui/intrinsics/panic-uninitialized-zeroed.rs @@ -3,7 +3,7 @@ // This test checks panic emitted from `mem::{uninitialized,zeroed}`. -#![feature(never_type)] +#![feature(never_type, arbitrary_enum_discriminant)] #![allow(deprecated, invalid_value)] use std::{ @@ -24,6 +24,20 @@ enum Bar {} #[allow(dead_code)] enum OneVariant { Variant(i32) } +#[allow(dead_code, non_camel_case_types)] +enum OneVariant_NonZero { + Variant(i32, i32, num::NonZeroI32), + DeadVariant(Bar), +} + +// An `Aggregate` abi enum where 0 is not a valid discriminant. +#[allow(dead_code)] +#[repr(i32)] +enum NoNullVariant { + Variant1(i32, i32) = 1, + Variant2(i32, i32) = 2, +} + // An enum with ScalarPair layout #[allow(dead_code)] enum LR { @@ -125,6 +139,7 @@ fn main() { "attempted to zero-initialize type `std::mem::ManuallyDrop<LR_NonZero>`, \ which is invalid" ); + */ test_panic_msg( || mem::uninitialized::<(NonNull<u32>, u32, u32)>(), @@ -136,7 +151,28 @@ fn main() { "attempted to zero-initialize type `(std::ptr::NonNull<u32>, u32, u32)`, \ which is invalid" ); - */ + + test_panic_msg( + || mem::uninitialized::<OneVariant_NonZero>(), + "attempted to leave type `OneVariant_NonZero` uninitialized, \ + which is invalid" + ); + test_panic_msg( + || mem::zeroed::<OneVariant_NonZero>(), + "attempted to zero-initialize type `OneVariant_NonZero`, \ + which is invalid" + ); + + test_panic_msg( + || mem::uninitialized::<NoNullVariant>(), + "attempted to leave type `NoNullVariant` uninitialized, \ + which is invalid" + ); + test_panic_msg( + || mem::zeroed::<NoNullVariant>(), + "attempted to zero-initialize type `NoNullVariant`, \ + which is invalid" + ); // Types that can be zero, but not uninit. test_panic_msg( |
