diff options
| author | Krasimir Georgiev <krasimir@google.com> | 2022-11-04 16:27:28 +0000 |
|---|---|---|
| committer | Krasimir Georgiev <krasimir@google.com> | 2022-11-08 11:19:14 +0000 |
| commit | 0e0bcd95cda4293915ecd68921320a0928cdd0bb (patch) | |
| tree | 55bc7801d79ea5e89ab474b6fafd280c5d879f85 /src/test | |
| parent | 47c008e440e59d793c2883f7dd712481dc965045 (diff) | |
| download | rust-0e0bcd95cda4293915ecd68921320a0928cdd0bb.tar.gz rust-0e0bcd95cda4293915ecd68921320a0928cdd0bb.zip | |
prevent uninitialized access in black_box for zero-sized-types
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/sanitize/memory-passing.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/sanitize/memory-passing.rs b/src/test/ui/sanitize/memory-passing.rs new file mode 100644 index 00000000000..6d9b70ad6b1 --- /dev/null +++ b/src/test/ui/sanitize/memory-passing.rs @@ -0,0 +1,32 @@ +// needs-sanitizer-support +// needs-sanitizer-memory +// +// revisions: unoptimized optimized +// +// [optimized]compile-flags: -Z sanitizer=memory -Zsanitizer-memory-track-origins -O +// [unoptimized]compile-flags: -Z sanitizer=memory -Zsanitizer-memory-track-origins +// +// run-pass +// +// This test case intentionally limits the usage of the std, +// since it will be linked with an uninstrumented version of it. + +#![feature(core_intrinsics)] +#![feature(start)] +#![allow(invalid_value)] + +use std::hint::black_box; + +fn calling_black_box_on_zst_ok() { + // It's OK to call black_box on a value of a zero-sized type, even if its + // underlying the memory location is uninitialized. For non-zero-sized types, + // this would be an MSAN error. + let zst = (); + black_box(zst); +} + +#[start] +fn main(_: isize, _: *const *const u8) -> isize { + calling_black_box_on_zst_ok(); + 0 +} |
