rust/tests/mir-opt/array_index_is_temporary.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

25 lines
729 B
Rust
Raw Normal View History

//@ test-mir-pass: SimplifyCfg-pre-optimizations
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
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
}
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.mir
2018-11-06 11:10:15 -06:00
fn main() {
2023-10-16 13:01:42 -05:00
// CHECK-LABEL: fn main(
// CHECK: debug x => [[x:_.*]];
// CHECK: debug y => [[y:_.*]];
// CHECK: [[y]] = const 1_usize;
2024-08-18 17:51:53 -05:00
// CHECK: [[tmp:_.*]] = copy [[y]];
2023-10-16 13:01:42 -05:00
// CHECK: [[x]][[[tmp]]] =
2018-11-06 11:10:15 -06:00
let mut x = [42, 43, 44];
let mut y = 1;
let z: *mut usize = &mut y;
x[y] = unsafe { foo(z) };
}