//@ 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); }