Skip to content

Commit 5e94f57

Browse files
committed
Auto merge of #1468 - RalfJung:uninit-validation, r=RalfJung
Test uninit memory validation This adds the tests for rust-lang/rust#74059.
2 parents 9755137 + 04019ee commit 5e94f57

7 files changed

+303
-3
lines changed

rust-version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9491f18c5de3ff1c4bf9c3fdacf52d9859e26f7c
1+
e1beee4992ad4b235fc700bf7af1ee86f894ea53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#![allow(invalid_value)]
2+
3+
union MyUninit {
4+
init: (),
5+
uninit: bool,
6+
}
7+
8+
fn main() {
9+
let _b = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes, but expected a boolean
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#![allow(invalid_value)]
2+
3+
union MyUninit {
4+
init: (),
5+
uninit: char,
6+
}
7+
8+
fn main() {
9+
let _b = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes, but expected a valid unicode scalar value (in `0..=0x10FFFF` but not in `0xD800..=0xDFFF`)
10+
}

tests/compile-fail/validity/invalid_enum_tag.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ pub enum Foo {
44
}
55

66
fn main() {
7-
let _f = unsafe { std::mem::transmute::<i32, Foo>(42) }; //~ ERROR encountered 0x0000002a, but expected a valid enum tag
7+
let _f = unsafe { std::mem::transmute::<i32, Foo>(42) }; //~ ERROR encountered 0x0000002a at .<enum-tag>, but expected a valid enum tag
88
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
#![allow(unused, deprecated, invalid_value)]
2+
3+
#[derive(Copy, Clone)]
4+
enum A {
5+
A0,
6+
A1,
7+
A2,
8+
A3,
9+
A4,
10+
A5,
11+
A6,
12+
A7,
13+
A8,
14+
A9,
15+
A10,
16+
A11,
17+
A12,
18+
A13,
19+
A14,
20+
A15,
21+
A16,
22+
A17,
23+
A18,
24+
A19,
25+
A20,
26+
A21,
27+
A22,
28+
A23,
29+
A24,
30+
A25,
31+
A26,
32+
A27,
33+
A28,
34+
A29,
35+
A30,
36+
A31,
37+
A32,
38+
A33,
39+
A34,
40+
A35,
41+
A36,
42+
A37,
43+
A38,
44+
A39,
45+
A40,
46+
A41,
47+
A42,
48+
A43,
49+
A44,
50+
A45,
51+
A46,
52+
A47,
53+
A48,
54+
A49,
55+
A50,
56+
A51,
57+
A52,
58+
A53,
59+
A54,
60+
A55,
61+
A56,
62+
A57,
63+
A58,
64+
A59,
65+
A60,
66+
A61,
67+
A62,
68+
A63,
69+
A64,
70+
A65,
71+
A66,
72+
A67,
73+
A68,
74+
A69,
75+
A70,
76+
A71,
77+
A72,
78+
A73,
79+
A74,
80+
A75,
81+
A76,
82+
A77,
83+
A78,
84+
A79,
85+
A80,
86+
A81,
87+
A82,
88+
A83,
89+
A84,
90+
A85,
91+
A86,
92+
A87,
93+
A88,
94+
A89,
95+
A90,
96+
A91,
97+
A92,
98+
A93,
99+
A94,
100+
A95,
101+
A96,
102+
A97,
103+
A98,
104+
A99,
105+
A100,
106+
A101,
107+
A102,
108+
A103,
109+
A104,
110+
A105,
111+
A106,
112+
A107,
113+
A108,
114+
A109,
115+
A110,
116+
A111,
117+
A112,
118+
A113,
119+
A114,
120+
A115,
121+
A116,
122+
A117,
123+
A118,
124+
A119,
125+
A120,
126+
A121,
127+
A122,
128+
A123,
129+
A124,
130+
A125,
131+
A126,
132+
A127,
133+
A128,
134+
A129,
135+
A130,
136+
A131,
137+
A132,
138+
A133,
139+
A134,
140+
A135,
141+
A136,
142+
A137,
143+
A138,
144+
A139,
145+
A140,
146+
A141,
147+
A142,
148+
A143,
149+
A144,
150+
A145,
151+
A146,
152+
A147,
153+
A148,
154+
A149,
155+
A150,
156+
A151,
157+
A152,
158+
A153,
159+
A154,
160+
A155,
161+
A156,
162+
A157,
163+
A158,
164+
A159,
165+
A160,
166+
A161,
167+
A162,
168+
A163,
169+
A164,
170+
A165,
171+
A166,
172+
A167,
173+
A168,
174+
A169,
175+
A170,
176+
A171,
177+
A172,
178+
A173,
179+
A174,
180+
A175,
181+
A176,
182+
A177,
183+
A178,
184+
A179,
185+
A180,
186+
A181,
187+
A182,
188+
A183,
189+
A184,
190+
A185,
191+
A186,
192+
A187,
193+
A188,
194+
A189,
195+
A190,
196+
A191,
197+
A192,
198+
A193,
199+
A194,
200+
A195,
201+
A196,
202+
A197,
203+
A198,
204+
A199,
205+
A200,
206+
A201,
207+
A202,
208+
A203,
209+
A204,
210+
A205,
211+
A206,
212+
A207,
213+
A208,
214+
A209,
215+
A210,
216+
A211,
217+
A212,
218+
A213,
219+
A214,
220+
A215,
221+
A216,
222+
A217,
223+
A218,
224+
A219,
225+
A220,
226+
A221,
227+
A222,
228+
A223,
229+
A224,
230+
A225,
231+
A226,
232+
A227,
233+
A228,
234+
A229,
235+
A230,
236+
A231,
237+
A232,
238+
A233,
239+
A234,
240+
A235,
241+
A236,
242+
A237,
243+
A238,
244+
A239,
245+
A240,
246+
A241,
247+
A242,
248+
A243,
249+
A244,
250+
A245,
251+
A246,
252+
A247,
253+
A248,
254+
A249,
255+
A250,
256+
A251,
257+
A252,
258+
A253,
259+
A254,
260+
A255,
261+
}
262+
263+
union MyUninit {
264+
init: (),
265+
uninit: A,
266+
}
267+
268+
fn main() {
269+
let _a = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes at .<enum-tag>, but expected a valid enum tag
270+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#![allow(invalid_value)]
2+
3+
union MyUninit {
4+
init: (),
5+
uninit: fn(),
6+
}
7+
8+
fn main() {
9+
let _b = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes, but expected a function pointer
10+
}

tests/compile-fail/validity/transmute_through_ptr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ fn main() {
1010
let mut x = Bool::True;
1111
evil(&mut x);
1212
let _y = x; // reading this ought to be enough to trigger validation
13-
//~^ ERROR encountered 0x0000002c, but expected a valid enum tag
13+
//~^ ERROR encountered 0x0000002c at .<enum-tag>, but expected a valid enum tag
1414
}

0 commit comments

Comments
 (0)