rust/tests/compile-fail/unaligned_pointers/intptrcast_alignment_check.rs

18 lines
835 B
Rust
Raw Normal View History

// compile-flags: -Zmiri-symbolic-alignment-check
// With the symbolic alignment check, even with intptrcast and without
// validation, we want to be *sure* to catch bugs that arise from pointers being
// insufficiently aligned. The only way to achieve that is not not let programs
// exploit integer information for alignment, so here we test that this is
// indeed the case.
2020-04-14 02:50:20 -05:00
//
// See https://github.com/rust-lang/miri/issues/1074.
fn main() {
let x = &mut [0u8; 3];
let base_addr = x as *mut _ as usize;
// Manually make sure the pointer is properly aligned.
let base_addr_aligned = if base_addr % 2 == 0 { base_addr } else { base_addr+1 };
let u16_ptr = base_addr_aligned as *mut u16;
unsafe { *u16_ptr = 2; } //~ERROR memory with alignment ALIGN, but alignment ALIGN is required
println!("{:?}", x);
}