about summary refs log tree commit diff
path: root/tests/codegen-llvm/intrinsics/aggregate-thin-pointer.rs
blob: bd590ce91809feebf10e87894507539a291046cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//@ 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);
}