19 lines
770 B
Rust
19 lines
770 B
Rust
// Validation makes this fail in the wrong place
|
|
// compile-flags: -Zmiri-disable-validation -Zmiri-seed=0000000000000000
|
|
|
|
// 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.
|
|
fn main() {
|
|
let x = &mut [0u8; 3];
|
|
let base_addr = x as *mut _ as usize;
|
|
let u16_ref = unsafe { if base_addr % 2 == 0 {
|
|
&mut *(base_addr as *mut u16)
|
|
} else {
|
|
&mut *((base_addr+1) as *mut u16)
|
|
} };
|
|
*u16_ref = 2; //~ ERROR tried to access memory with alignment 1, but alignment 2 is required
|
|
println!("{:?}", x);
|
|
}
|