Auto merge of #1468 - RalfJung:uninit-validation, r=RalfJung
Test uninit memory validation This adds the tests for https://github.com/rust-lang/rust/pull/74059.
This commit is contained in:
commit
5e94f57cb3
@ -1 +1 @@
|
||||
9491f18c5de3ff1c4bf9c3fdacf52d9859e26f7c
|
||||
e1beee4992ad4b235fc700bf7af1ee86f894ea53
|
||||
|
10
tests/compile-fail/validity/invalid_bool_uninit.rs
Normal file
10
tests/compile-fail/validity/invalid_bool_uninit.rs
Normal file
@ -0,0 +1,10 @@
|
||||
#![allow(invalid_value)]
|
||||
|
||||
union MyUninit {
|
||||
init: (),
|
||||
uninit: bool,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _b = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes, but expected a boolean
|
||||
}
|
10
tests/compile-fail/validity/invalid_char_uninit.rs
Normal file
10
tests/compile-fail/validity/invalid_char_uninit.rs
Normal file
@ -0,0 +1,10 @@
|
||||
#![allow(invalid_value)]
|
||||
|
||||
union MyUninit {
|
||||
init: (),
|
||||
uninit: char,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
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`)
|
||||
}
|
@ -4,5 +4,5 @@ pub enum Foo {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _f = unsafe { std::mem::transmute::<i32, Foo>(42) }; //~ ERROR encountered 0x0000002a, but expected a valid enum tag
|
||||
let _f = unsafe { std::mem::transmute::<i32, Foo>(42) }; //~ ERROR encountered 0x0000002a at .<enum-tag>, but expected a valid enum tag
|
||||
}
|
||||
|
@ -0,0 +1,270 @@
|
||||
#![allow(unused, deprecated, invalid_value)]
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum A {
|
||||
A0,
|
||||
A1,
|
||||
A2,
|
||||
A3,
|
||||
A4,
|
||||
A5,
|
||||
A6,
|
||||
A7,
|
||||
A8,
|
||||
A9,
|
||||
A10,
|
||||
A11,
|
||||
A12,
|
||||
A13,
|
||||
A14,
|
||||
A15,
|
||||
A16,
|
||||
A17,
|
||||
A18,
|
||||
A19,
|
||||
A20,
|
||||
A21,
|
||||
A22,
|
||||
A23,
|
||||
A24,
|
||||
A25,
|
||||
A26,
|
||||
A27,
|
||||
A28,
|
||||
A29,
|
||||
A30,
|
||||
A31,
|
||||
A32,
|
||||
A33,
|
||||
A34,
|
||||
A35,
|
||||
A36,
|
||||
A37,
|
||||
A38,
|
||||
A39,
|
||||
A40,
|
||||
A41,
|
||||
A42,
|
||||
A43,
|
||||
A44,
|
||||
A45,
|
||||
A46,
|
||||
A47,
|
||||
A48,
|
||||
A49,
|
||||
A50,
|
||||
A51,
|
||||
A52,
|
||||
A53,
|
||||
A54,
|
||||
A55,
|
||||
A56,
|
||||
A57,
|
||||
A58,
|
||||
A59,
|
||||
A60,
|
||||
A61,
|
||||
A62,
|
||||
A63,
|
||||
A64,
|
||||
A65,
|
||||
A66,
|
||||
A67,
|
||||
A68,
|
||||
A69,
|
||||
A70,
|
||||
A71,
|
||||
A72,
|
||||
A73,
|
||||
A74,
|
||||
A75,
|
||||
A76,
|
||||
A77,
|
||||
A78,
|
||||
A79,
|
||||
A80,
|
||||
A81,
|
||||
A82,
|
||||
A83,
|
||||
A84,
|
||||
A85,
|
||||
A86,
|
||||
A87,
|
||||
A88,
|
||||
A89,
|
||||
A90,
|
||||
A91,
|
||||
A92,
|
||||
A93,
|
||||
A94,
|
||||
A95,
|
||||
A96,
|
||||
A97,
|
||||
A98,
|
||||
A99,
|
||||
A100,
|
||||
A101,
|
||||
A102,
|
||||
A103,
|
||||
A104,
|
||||
A105,
|
||||
A106,
|
||||
A107,
|
||||
A108,
|
||||
A109,
|
||||
A110,
|
||||
A111,
|
||||
A112,
|
||||
A113,
|
||||
A114,
|
||||
A115,
|
||||
A116,
|
||||
A117,
|
||||
A118,
|
||||
A119,
|
||||
A120,
|
||||
A121,
|
||||
A122,
|
||||
A123,
|
||||
A124,
|
||||
A125,
|
||||
A126,
|
||||
A127,
|
||||
A128,
|
||||
A129,
|
||||
A130,
|
||||
A131,
|
||||
A132,
|
||||
A133,
|
||||
A134,
|
||||
A135,
|
||||
A136,
|
||||
A137,
|
||||
A138,
|
||||
A139,
|
||||
A140,
|
||||
A141,
|
||||
A142,
|
||||
A143,
|
||||
A144,
|
||||
A145,
|
||||
A146,
|
||||
A147,
|
||||
A148,
|
||||
A149,
|
||||
A150,
|
||||
A151,
|
||||
A152,
|
||||
A153,
|
||||
A154,
|
||||
A155,
|
||||
A156,
|
||||
A157,
|
||||
A158,
|
||||
A159,
|
||||
A160,
|
||||
A161,
|
||||
A162,
|
||||
A163,
|
||||
A164,
|
||||
A165,
|
||||
A166,
|
||||
A167,
|
||||
A168,
|
||||
A169,
|
||||
A170,
|
||||
A171,
|
||||
A172,
|
||||
A173,
|
||||
A174,
|
||||
A175,
|
||||
A176,
|
||||
A177,
|
||||
A178,
|
||||
A179,
|
||||
A180,
|
||||
A181,
|
||||
A182,
|
||||
A183,
|
||||
A184,
|
||||
A185,
|
||||
A186,
|
||||
A187,
|
||||
A188,
|
||||
A189,
|
||||
A190,
|
||||
A191,
|
||||
A192,
|
||||
A193,
|
||||
A194,
|
||||
A195,
|
||||
A196,
|
||||
A197,
|
||||
A198,
|
||||
A199,
|
||||
A200,
|
||||
A201,
|
||||
A202,
|
||||
A203,
|
||||
A204,
|
||||
A205,
|
||||
A206,
|
||||
A207,
|
||||
A208,
|
||||
A209,
|
||||
A210,
|
||||
A211,
|
||||
A212,
|
||||
A213,
|
||||
A214,
|
||||
A215,
|
||||
A216,
|
||||
A217,
|
||||
A218,
|
||||
A219,
|
||||
A220,
|
||||
A221,
|
||||
A222,
|
||||
A223,
|
||||
A224,
|
||||
A225,
|
||||
A226,
|
||||
A227,
|
||||
A228,
|
||||
A229,
|
||||
A230,
|
||||
A231,
|
||||
A232,
|
||||
A233,
|
||||
A234,
|
||||
A235,
|
||||
A236,
|
||||
A237,
|
||||
A238,
|
||||
A239,
|
||||
A240,
|
||||
A241,
|
||||
A242,
|
||||
A243,
|
||||
A244,
|
||||
A245,
|
||||
A246,
|
||||
A247,
|
||||
A248,
|
||||
A249,
|
||||
A250,
|
||||
A251,
|
||||
A252,
|
||||
A253,
|
||||
A254,
|
||||
A255,
|
||||
}
|
||||
|
||||
union MyUninit {
|
||||
init: (),
|
||||
uninit: A,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _a = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes at .<enum-tag>, but expected a valid enum tag
|
||||
}
|
10
tests/compile-fail/validity/invalid_fnptr_uninit.rs
Normal file
10
tests/compile-fail/validity/invalid_fnptr_uninit.rs
Normal file
@ -0,0 +1,10 @@
|
||||
#![allow(invalid_value)]
|
||||
|
||||
union MyUninit {
|
||||
init: (),
|
||||
uninit: fn(),
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _b = unsafe { MyUninit { init: () }.uninit }; //~ ERROR encountered uninitialized bytes, but expected a function pointer
|
||||
}
|
@ -10,5 +10,5 @@ fn main() {
|
||||
let mut x = Bool::True;
|
||||
evil(&mut x);
|
||||
let _y = x; // reading this ought to be enough to trigger validation
|
||||
//~^ ERROR encountered 0x0000002c, but expected a valid enum tag
|
||||
//~^ ERROR encountered 0x0000002c at .<enum-tag>, but expected a valid enum tag
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user