From bfda0a0a90bc37f683e99bbff75fbf59abe48991 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 14 Aug 2018 18:51:15 +0200 Subject: [PATCH] add a scary test case --- tests/run-pass/transmute_fat.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/run-pass/transmute_fat.rs diff --git a/tests/run-pass/transmute_fat.rs b/tests/run-pass/transmute_fat.rs new file mode 100644 index 000000000000..ec887902d054 --- /dev/null +++ b/tests/run-pass/transmute_fat.rs @@ -0,0 +1,10 @@ +fn main() { + // If we are careful, we can exploit data layout... + let raw = unsafe { + std::mem::transmute::<&[u8], [usize; 2]>(&[42]) + }; + let ptr = raw[0] + raw[1]; + let ptr = ptr as *const u8; + // The pointer is one-past-the end, but we decrement it into bounds before using it + assert_eq!(unsafe { *ptr.offset(-1) }, 42); +}