| //@ revisions: linux apple |
| //@ min-llvm-version: 19 |
| //@ compile-flags: -Copt-level=0 -Cno-prepopulate-passes -Zlint-llvm-ir -Cllvm-args=-lint-abort-on-error |
| |
| //@[linux] compile-flags: --target x86_64-unknown-linux-gnu |
| //@[linux] needs-llvm-components: x86 |
| //@[apple] compile-flags: --target x86_64-apple-darwin |
| //@[apple] needs-llvm-components: x86 |
| |
| // Regression test for #29988 |
| |
| #![feature(no_core, lang_items)] |
| #![crate_type = "lib"] |
| #![no_std] |
| #![no_core] |
| |
| #[lang = "sized"] |
| trait Sized {} |
| #[lang = "freeze"] |
| trait Freeze {} |
| #[lang = "copy"] |
| trait Copy {} |
| |
| #[repr(C)] |
| struct S { |
| f1: i32, |
| f2: i32, |
| f3: i32, |
| } |
| |
| extern "C" { |
| fn foo(s: S); |
| } |
| |
| // CHECK-LABEL: @test |
| #[no_mangle] |
| pub fn test() { |
| let s = S { f1: 1, f2: 2, f3: 3 }; |
| unsafe { |
| // CHECK: [[ALLOCA:%.+]] = alloca [16 x i8], align 8 |
| // CHECK: [[LOAD:%.+]] = load { i64, i32 }, ptr [[ALLOCA]], align 8 |
| // CHECK: call void @foo({ i64, i32 } [[LOAD]]) |
| foo(s); |
| } |
| } |