From 28b44d970c0b58a7e4d683580ecee4bf9c8cb073 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 5 Jul 2020 12:53:00 +0200 Subject: [PATCH] test validation of uninit memory (used to ICE) --- .../validity/invalid_bool_uninit.rs | 10 + .../validity/invalid_char_uninit.rs | 10 + .../invalid_enum_tag_256variants_uninit.rs | 270 ++++++++++++++++++ .../validity/invalid_fnptr_uninit.rs | 10 + 4 files changed, 300 insertions(+) create mode 100644 tests/compile-fail/validity/invalid_bool_uninit.rs create mode 100644 tests/compile-fail/validity/invalid_char_uninit.rs create mode 100644 tests/compile-fail/validity/invalid_enum_tag_256variants_uninit.rs create mode 100644 tests/compile-fail/validity/invalid_fnptr_uninit.rs diff --git a/tests/compile-fail/validity/invalid_bool_uninit.rs b/tests/compile-fail/validity/invalid_bool_uninit.rs new file mode 100644 index 00000000000..89b57b2d50d --- /dev/null +++ b/tests/compile-fail/validity/invalid_bool_uninit.rs @@ -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 +} diff --git a/tests/compile-fail/validity/invalid_char_uninit.rs b/tests/compile-fail/validity/invalid_char_uninit.rs new file mode 100644 index 00000000000..34798dfbc65 --- /dev/null +++ b/tests/compile-fail/validity/invalid_char_uninit.rs @@ -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`) +} diff --git a/tests/compile-fail/validity/invalid_enum_tag_256variants_uninit.rs b/tests/compile-fail/validity/invalid_enum_tag_256variants_uninit.rs new file mode 100644 index 00000000000..c0f53d72a29 --- /dev/null +++ b/tests/compile-fail/validity/invalid_enum_tag_256variants_uninit.rs @@ -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, but expected a valid enum tag +} diff --git a/tests/compile-fail/validity/invalid_fnptr_uninit.rs b/tests/compile-fail/validity/invalid_fnptr_uninit.rs new file mode 100644 index 00000000000..dbd6711dc65 --- /dev/null +++ b/tests/compile-fail/validity/invalid_fnptr_uninit.rs @@ -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 +} -- 2.44.0