rust/tests/run-pass/transmute_fat.rs
2018-08-14 20:10:25 +02:00

11 lines
355 B
Rust

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);
}