From 53eb91051519ce3c527c74a70f24e31a352238bc Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 28 Nov 2023 11:38:29 +0100 Subject: [PATCH] add test checking that aggregate assignments reset memory to uninit first --- .../fail/uninit-after-aggregate-assign.rs | 27 +++++++++++++++++++ .../fail/uninit-after-aggregate-assign.stderr | 15 +++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/tools/miri/tests/fail/uninit-after-aggregate-assign.rs create mode 100644 src/tools/miri/tests/fail/uninit-after-aggregate-assign.stderr diff --git a/src/tools/miri/tests/fail/uninit-after-aggregate-assign.rs b/src/tools/miri/tests/fail/uninit-after-aggregate-assign.rs new file mode 100644 index 000000000000..98f9cc96fd0f --- /dev/null +++ b/src/tools/miri/tests/fail/uninit-after-aggregate-assign.rs @@ -0,0 +1,27 @@ +#![feature(core_intrinsics)] +#![feature(custom_mir)] + +use std::intrinsics::mir::*; +use std::ptr; + +#[repr(C)] +struct S(u8, u16); + +#[custom_mir(dialect = "runtime", phase = "optimized")] +fn main() { + mir! { + let s: S; + let sptr; + let sptr2; + let _val; + { + sptr = ptr::addr_of_mut!(s); + sptr2 = sptr as *mut [u8; 4]; + *sptr2 = [0; 4]; + *sptr = S(0, 0); // should reset the padding + _val = *sptr2; // should hence be UB + //~^ERROR: encountered uninitialized memory + Return() + } + } +} diff --git a/src/tools/miri/tests/fail/uninit-after-aggregate-assign.stderr b/src/tools/miri/tests/fail/uninit-after-aggregate-assign.stderr new file mode 100644 index 000000000000..5f3d9bde1f24 --- /dev/null +++ b/src/tools/miri/tests/fail/uninit-after-aggregate-assign.stderr @@ -0,0 +1,15 @@ +error: Undefined Behavior: constructing invalid value at [1]: encountered uninitialized memory, but expected an integer + --> $DIR/uninit-after-aggregate-assign.rs:LL:CC + | +LL | _val = *sptr2; // should hence be UB + | ^^^^^^^^^^^^^ constructing invalid value at [1]: encountered uninitialized memory, but expected an integer + | + = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior + = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information + = note: BACKTRACE: + = note: inside `main` at $DIR/uninit-after-aggregate-assign.rs:LL:CC + +note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace + +error: aborting due to 1 previous error +