| //@ compile-flags: -Copt-level=3 -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); |
| } |