2018-11-06 11:10:15 -06: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
|
|
|
|
}
|
|
|
|
|
2022-09-05 00:35:47 -05:00
|
|
|
|
2020-07-27 14:22:43 -05:00
|
|
|
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-elaborate-drops.after.mir
|
2018-11-06 11:10:15 -06:00
|
|
|
fn main() {
|
|
|
|
let mut x = [42, 43, 44];
|
|
|
|
let mut y = 1;
|
|
|
|
let z: *mut usize = &mut y;
|
|
|
|
x[y] = unsafe { foo(z) };
|
|
|
|
}
|