3
3
4
4
// This test checks panic emitted from `mem::{uninitialized,zeroed}`.
5
5
6
- #![ feature( never_type) ]
6
+ #![ feature( never_type, arbitrary_enum_discriminant ) ]
7
7
#![ allow( deprecated, invalid_value) ]
8
8
9
9
use std:: {
@@ -24,6 +24,20 @@ enum Bar {}
24
24
#[ allow( dead_code) ]
25
25
enum OneVariant { Variant ( i32 ) }
26
26
27
+ #[ allow( dead_code, non_camel_case_types) ]
28
+ enum OneVariant_NonZero {
29
+ Variant ( i32 , i32 , num:: NonZeroI32 ) ,
30
+ DeadVariant ( Bar ) ,
31
+ }
32
+
33
+ // An `Aggregate` abi enum where 0 is not a valid discriminant.
34
+ #[ allow( dead_code) ]
35
+ #[ repr( i32 ) ]
36
+ enum NoNullVariant {
37
+ Variant1 ( i32 , i32 ) = 1 ,
38
+ Variant2 ( i32 , i32 ) = 2 ,
39
+ }
40
+
27
41
// An enum with ScalarPair layout
28
42
#[ allow( dead_code) ]
29
43
enum LR {
@@ -125,6 +139,7 @@ fn main() {
125
139
"attempted to zero-initialize type `std::mem::ManuallyDrop<LR_NonZero>`, \
126
140
which is invalid"
127
141
);
142
+ */
128
143
129
144
test_panic_msg (
130
145
|| mem:: uninitialized :: < ( NonNull < u32 > , u32 , u32 ) > ( ) ,
@@ -136,7 +151,28 @@ fn main() {
136
151
"attempted to zero-initialize type `(std::ptr::NonNull<u32>, u32, u32)`, \
137
152
which is invalid"
138
153
) ;
139
- */
154
+
155
+ test_panic_msg (
156
+ || mem:: uninitialized :: < OneVariant_NonZero > ( ) ,
157
+ "attempted to leave type `OneVariant_NonZero` uninitialized, \
158
+ which is invalid"
159
+ ) ;
160
+ test_panic_msg (
161
+ || mem:: zeroed :: < OneVariant_NonZero > ( ) ,
162
+ "attempted to zero-initialize type `OneVariant_NonZero`, \
163
+ which is invalid"
164
+ ) ;
165
+
166
+ test_panic_msg (
167
+ || mem:: uninitialized :: < NoNullVariant > ( ) ,
168
+ "attempted to leave type `NoNullVariant` uninitialized, \
169
+ which is invalid"
170
+ ) ;
171
+ test_panic_msg (
172
+ || mem:: zeroed :: < NoNullVariant > ( ) ,
173
+ "attempted to zero-initialize type `NoNullVariant`, \
174
+ which is invalid"
175
+ ) ;
140
176
141
177
// Types that can be zero, but not uninit.
142
178
test_panic_msg (
0 commit comments