29
29
impl Copy for i32 { }
30
30
impl Copy for i64 { }
31
31
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
+
32
45
// on i686-windows, this should be passed on stack using `byval`
33
46
#[ repr( C ) ]
34
47
pub struct NaturalAlign8 {
@@ -37,7 +50,7 @@ pub struct NaturalAlign8 {
37
50
c : i64
38
51
}
39
52
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),
41
54
// even though it has the exact same layout as `NaturalAlign8` (!!!)
42
55
#[ repr( C ) ]
43
56
#[ repr( align( 8 ) ) ]
@@ -55,6 +68,36 @@ pub struct ForceAlign16 {
55
68
}
56
69
57
70
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
+
58
101
// m68k: declare void @natural_align_8({{.*}}byval(%NaturalAlign8) align 4{{.*}})
59
102
60
103
// wasm: declare void @natural_align_8({{.*}}byval(%NaturalAlign8) align 8{{.*}})
@@ -105,7 +148,12 @@ extern "C" {
105
148
fn force_align_16 ( z : ForceAlign16 ) ;
106
149
}
107
150
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) ;
109
157
natural_align_8 ( x) ;
110
158
force_align_8 ( y) ;
111
159
force_align_16 ( z) ;
0 commit comments