rust/src/test/mir-opt/array-index-is-temporary.rs

18 lines
445 B
Rust
Raw Normal View History

2018-11-06 17:10:15 +00:00
// Retagging (from Stacked Borrows) relies on the array index being a fresh
// temporary, so that side-effects cannot change it.
// Test that this is indeed the case.
unsafe fn foo(z: *mut usize) -> u32 {
*z = 2;
99
}
// EMIT_MIR_FOR_EACH_BIT_WIDTH
2020-04-02 21:09:01 +00:00
// EMIT_MIR rustc.main.SimplifyCfg-elaborate-drops.after.mir
2018-11-06 17:10:15 +00:00
fn main() {
let mut x = [42, 43, 44];
let mut y = 1;
let z: *mut usize = &mut y;
x[y] = unsafe { foo(z) };
}