Skip to content

Commit 209ed07

Browse files
align-byval test: add cases for <= align 4
1 parent ed317e4 commit 209ed07

File tree

1 file changed

+50
-2
lines changed

1 file changed

+50
-2
lines changed

tests/codegen/align-byval.rs

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,19 @@
2929
impl Copy for i32 {}
3030
impl Copy for i64 {}
3131

32+
#[repr(C)]
33+
pub struct NaturalAlign2 {
34+
a: [i16; 16],
35+
b: i16,
36+
}
37+
38+
#[repr(C)]
39+
#[repr(align(4))]
40+
pub struct ForceAlign4 {
41+
a: [i8; 16],
42+
b: i8,
43+
}
44+
3245
// on i686-windows, this should be passed on stack using `byval`
3346
#[repr(C)]
3447
pub struct NaturalAlign8 {
@@ -37,7 +50,7 @@ pub struct NaturalAlign8 {
3750
c: i64
3851
}
3952

40-
// on i686-windows, this should be passed by reference (because the alignment is requested/forced),
53+
// on i686-windows, this is passed by reference (because alignment is >4 and requested/forced),
4154
// even though it has the exact same layout as `NaturalAlign8` (!!!)
4255
#[repr(C)]
4356
#[repr(align(8))]
@@ -55,6 +68,36 @@ pub struct ForceAlign16 {
5568
}
5669

5770
extern "C" {
71+
// m68k: declare void @natural_align_2({{.*}}byval(%NaturalAlign2) align 2{{.*}})
72+
73+
// wasm: declare void @natural_align_2({{.*}}byval(%NaturalAlign2) align 2{{.*}})
74+
75+
// x86_64-linux: declare void @natural_align_2({{.*}}byval(%NaturalAlign2) align 2{{.*}})
76+
77+
// x86_64-windows: declare void @natural_align_2(
78+
// x86_64-windows-NOT: byval
79+
// x86_64-windows-SAME: align 2{{.*}})
80+
81+
// i686-linux: declare void @natural_align_2({{.*}}byval(%NaturalAlign2) align 4{{.*}})
82+
83+
// i686-windows: declare void @natural_align_2({{.*}}byval(%NaturalAlign2) align 4{{.*}})
84+
fn natural_align_2(a: NaturalAlign2);
85+
86+
// m68k: declare void @force_align_4({{.*}}byval(%ForceAlign4) align 4{{.*}})
87+
88+
// wasm: declare void @force_align_4({{.*}}byval(%ForceAlign4) align 4{{.*}})
89+
90+
// x86_64-linux: declare void @force_align_4({{.*}}byval(%ForceAlign4) align 4{{.*}})
91+
92+
// x86_64-windows: declare void @force_align_4(
93+
// x86_64-windows-NOT: byval
94+
// x86_64-windows-SAME: align 4{{.*}})
95+
96+
// i686-linux: declare void @force_align_4({{.*}}byval(%ForceAlign4) align 4{{.*}})
97+
98+
// i686-windows: declare void @force_align_4({{.*}}byval(%ForceAlign4) align 4{{.*}})
99+
fn force_align_4(b: ForceAlign4);
100+
58101
// m68k: declare void @natural_align_8({{.*}}byval(%NaturalAlign8) align 4{{.*}})
59102

60103
// wasm: declare void @natural_align_8({{.*}}byval(%NaturalAlign8) align 8{{.*}})
@@ -105,7 +148,12 @@ extern "C" {
105148
fn force_align_16(z: ForceAlign16);
106149
}
107150

108-
pub unsafe fn main(x: NaturalAlign8, y: ForceAlign8, z: ForceAlign16) {
151+
pub unsafe fn main(
152+
a: NaturalAlign2, b: ForceAlign4,
153+
x: NaturalAlign8, y: ForceAlign8, z: ForceAlign16
154+
) {
155+
natural_align_2(a);
156+
force_align_4(b);
109157
natural_align_8(x);
110158
force_align_8(y);
111159
force_align_16(z);

0 commit comments

Comments
 (0)