]> git.lizzy.rs Git - rust.git/blob - tests/codegen/align-enum.rs
Rollup merge of #107015 - cuviper:ra-riscv64, r=Mark-Simulacrum
[rust.git] / tests / codegen / align-enum.rs
1 // compile-flags: -C no-prepopulate-passes -Z mir-opt-level=0
2 //
3
4 #![crate_type = "lib"]
5
6 #[repr(align(64))]
7 pub enum Align64 {
8     A(u32),
9     B(u32),
10 }
11 // CHECK: %Align64 = type { i32, [15 x i32] }
12
13 pub struct Nested64 {
14     a: u8,
15     b: Align64,
16     c: u16,
17 }
18
19 // CHECK-LABEL: @align64
20 #[no_mangle]
21 pub fn align64(a: u32) -> Align64 {
22 // CHECK: %a64 = alloca %Align64, align 64
23 // CHECK: call void @llvm.memcpy.{{.*}}({{i8\*|ptr}} align 64 %{{.*}}, {{i8\*|ptr}} align 64 %{{.*}}, i{{[0-9]+}} 64, i1 false)
24     let a64 = Align64::A(a);
25     a64
26 }
27
28 // CHECK-LABEL: @nested64
29 #[no_mangle]
30 pub fn nested64(a: u8, b: u32, c: u16) -> Nested64 {
31 // CHECK: %n64 = alloca %Nested64, align 64
32     let n64 = Nested64 { a, b: Align64::B(b), c };
33     n64
34 }