24 lines
731 B
Rust
24 lines
731 B
Rust
|
//@ compile-flags: -O -C no-prepopulate-passes -Z mir-enable-passes=-InstSimplify
|
||
|
//@ only-64bit (so I don't need to worry about usize)
|
||
|
|
||
|
#![crate_type = "lib"]
|
||
|
#![feature(core_intrinsics)]
|
||
|
|
||
|
use std::intrinsics::aggregate_raw_ptr;
|
||
|
|
||
|
// InstSimplify replaces these with casts if it can, which means they're almost
|
||
|
// never seen in codegen, but PR#121571 found a way, so add a test for it.
|
||
|
|
||
|
#[inline(never)]
|
||
|
pub fn opaque(_p: &*const i32) {}
|
||
|
|
||
|
// CHECK-LABEL: @thin_ptr_via_aggregate(
|
||
|
#[no_mangle]
|
||
|
pub unsafe fn thin_ptr_via_aggregate(p: *const ()) {
|
||
|
// CHECK: %mem = alloca
|
||
|
// CHECK: store ptr %p, ptr %mem
|
||
|
// CHECK: call {{.+}}aggregate_thin_pointer{{.+}} %mem)
|
||
|
let mem = aggregate_raw_ptr(p, ());
|
||
|
opaque(&mem);
|
||
|
}
|