authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-20 13:41:24+01:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-20 23:36:47+01:00
logec7293422d28d253ffc3922684f03cecd3f15f4d
tree7e8d9625da83648cfdf29f2fc4ef580a07d81419
parent2291560424b3cfa614cb0320d73e41aa1f5fa221

llvm: fix c abi for structs not passed in registers

Closes #18916

3 files changed, 255 insertions(+), 97 deletions(-)

src/codegen/llvm.zig+6
...@@ -11443,6 +11443,12 @@ const ParamTypeIterator = struct {...@@ -11443,6 +11443,12 @@ const ParamTypeIterator = struct {
11443 it.llvm_index += 1;11443 it.llvm_index += 1;
11444 return .abi_sized_int;11444 return .abi_sized_int;
11445 }11445 }
11446 if (it.llvm_index + types_index > 6) {
11447 it.zig_index += 1;
11448 it.llvm_index += 1;
11449 it.byval_attr = true;
11450 return .byref;
11451 }
11446 switch (ip.indexToKey(ty.toIntern())) {11452 switch (ip.indexToKey(ty.toIntern())) {
11447 .struct_type => |struct_type| {11453 .struct_type => |struct_type| {
11448 assert(struct_type.haveLayout(ip));11454 assert(struct_type.haveLayout(ip));
test/c_abi/cfuncs.c+75
...@@ -169,6 +169,64 @@ double complex zig_cmultd_comp(double a_r, double a_i, double b_r, double b_i);...@@ -169,6 +169,64 @@ double complex zig_cmultd_comp(double a_r, double a_i, double b_r, double b_i);
169float complex zig_cmultf(float complex a, float complex b);169float complex zig_cmultf(float complex a, float complex b);
170double complex zig_cmultd(double complex a, double complex b);170double complex zig_cmultd(double complex a, double complex b);
171171
172struct Struct_u64_u64 {
173 uint64_t a;
174 uint64_t b;
175};
176
177struct Struct_u64_u64 zig_ret_struct_u64_u64(void);
178
179void zig_struct_u64_u64_0(struct Struct_u64_u64);
180void zig_struct_u64_u64_1(size_t, struct Struct_u64_u64);
181void zig_struct_u64_u64_2(size_t, size_t, struct Struct_u64_u64);
182void zig_struct_u64_u64_3(size_t, size_t, size_t, struct Struct_u64_u64);
183void zig_struct_u64_u64_4(size_t, size_t, size_t, size_t, struct Struct_u64_u64);
184void zig_struct_u64_u64_5(size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64);
185void zig_struct_u64_u64_6(size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64);
186void zig_struct_u64_u64_7(size_t, size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64);
187void zig_struct_u64_u64_8(size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64);
188
189struct Struct_u64_u64 c_ret_struct_u64_u64(void) {
190 return (struct Struct_u64_u64){ 21, 22 };
191}
192
193void c_struct_u64_u64_0(struct Struct_u64_u64 s) {
194 assert_or_panic(s.a == 23);
195 assert_or_panic(s.b == 24);
196}
197void c_struct_u64_u64_1(size_t, struct Struct_u64_u64 s) {
198 assert_or_panic(s.a == 25);
199 assert_or_panic(s.b == 26);
200}
201void c_struct_u64_u64_2(size_t, size_t, struct Struct_u64_u64 s) {
202 assert_or_panic(s.a == 27);
203 assert_or_panic(s.b == 28);
204}
205void c_struct_u64_u64_3(size_t, size_t, size_t, struct Struct_u64_u64 s) {
206 assert_or_panic(s.a == 29);
207 assert_or_panic(s.b == 30);
208}
209void c_struct_u64_u64_4(size_t, size_t, size_t, size_t, struct Struct_u64_u64 s) {
210 assert_or_panic(s.a == 31);
211 assert_or_panic(s.b == 32);
212}
213void c_struct_u64_u64_5(size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64 s) {
214 assert_or_panic(s.a == 33);
215 assert_or_panic(s.b == 34);
216}
217void c_struct_u64_u64_6(size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64 s) {
218 assert_or_panic(s.a == 35);
219 assert_or_panic(s.b == 36);
220}
221void c_struct_u64_u64_7(size_t, size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64 s) {
222 assert_or_panic(s.a == 37);
223 assert_or_panic(s.b == 38);
224}
225void c_struct_u64_u64_8(size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t, struct Struct_u64_u64 s) {
226 assert_or_panic(s.a == 39);
227 assert_or_panic(s.b == 40);
228}
229
172struct BigStruct {230struct BigStruct {
173 uint64_t a;231 uint64_t a;
174 uint64_t b;232 uint64_t b;
...@@ -2495,6 +2553,23 @@ void run_c_tests(void) {...@@ -2495,6 +2553,23 @@ void run_c_tests(void) {
2495 }2553 }
2496#endif2554#endif
24972555
2556#if !defined(__mips__) && !defined(ZIG_PPC32)
2557 {
2558 struct Struct_u64_u64 s = zig_ret_struct_u64_u64();
2559 assert_or_panic(s.a == 1);
2560 assert_or_panic(s.b == 2);
2561 zig_struct_u64_u64_0((struct Struct_u64_u64){ .a = 3, .b = 4 });
2562 zig_struct_u64_u64_1(0, (struct Struct_u64_u64){ .a = 5, .b = 6 });
2563 zig_struct_u64_u64_2(0, 1, (struct Struct_u64_u64){ .a = 7, .b = 8 });
2564 zig_struct_u64_u64_3(0, 1, 2, (struct Struct_u64_u64){ .a = 9, .b = 10 });
2565 zig_struct_u64_u64_4(0, 1, 2, 3, (struct Struct_u64_u64){ .a = 11, .b = 12 });
2566 zig_struct_u64_u64_5(0, 1, 2, 3, 4, (struct Struct_u64_u64){ .a = 13, .b = 14 });
2567 zig_struct_u64_u64_6(0, 1, 2, 3, 4, 5, (struct Struct_u64_u64){ .a = 15, .b = 16 });
2568 zig_struct_u64_u64_7(0, 1, 2, 3, 4, 5, 6, (struct Struct_u64_u64){ .a = 17, .b = 18 });
2569 zig_struct_u64_u64_8(0, 1, 2, 3, 4, 5, 6, 7, (struct Struct_u64_u64){ .a = 19, .b = 20 });
2570 }
2571#endif
2572
2498#if !defined __mips__ && !defined ZIG_PPC322573#if !defined __mips__ && !defined ZIG_PPC32
2499 {2574 {
2500 struct BigStruct s = {1, 2, 3, 4, 5};2575 struct BigStruct s = {1, 2, 3, 4, 5};
test/c_abi/main.zig+174-97
...@@ -123,8 +123,8 @@ test "C ABI floats" {...@@ -123,8 +123,8 @@ test "C ABI floats" {
123}123}
124124
125test "C ABI long double" {125test "C ABI long double" {
126 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;126 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
127 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;127 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
128128
129 c_long_double(12.34);129 c_long_double(12.34);
130}130}
...@@ -265,6 +265,83 @@ export fn zig_cmultd_comp(a_r: f64, a_i: f64, b_r: f64, b_i: f64) ComplexDouble...@@ -265,6 +265,83 @@ export fn zig_cmultd_comp(a_r: f64, a_i: f64, b_r: f64, b_i: f64) ComplexDouble
265 return .{ .real = 1.5, .imag = 13.5 };265 return .{ .real = 1.5, .imag = 13.5 };
266}266}
267267
268const Struct_u64_u64 = extern struct {
269 a: u64,
270 b: u64,
271};
272
273export fn zig_ret_struct_u64_u64() Struct_u64_u64 {
274 return .{ .a = 1, .b = 2 };
275}
276export fn zig_struct_u64_u64_0(s: Struct_u64_u64) void {
277 expect(s.a == 3) catch @panic("test failure");
278 expect(s.b == 4) catch @panic("test failure");
279}
280export fn zig_struct_u64_u64_1(_: usize, s: Struct_u64_u64) void {
281 expect(s.a == 5) catch @panic("test failure");
282 expect(s.b == 6) catch @panic("test failure");
283}
284export fn zig_struct_u64_u64_2(_: usize, _: usize, s: Struct_u64_u64) void {
285 expect(s.a == 7) catch @panic("test failure");
286 expect(s.b == 8) catch @panic("test failure");
287}
288export fn zig_struct_u64_u64_3(_: usize, _: usize, _: usize, s: Struct_u64_u64) void {
289 expect(s.a == 9) catch @panic("test failure");
290 expect(s.b == 10) catch @panic("test failure");
291}
292export fn zig_struct_u64_u64_4(_: usize, _: usize, _: usize, _: usize, s: Struct_u64_u64) void {
293 expect(s.a == 11) catch @panic("test failure");
294 expect(s.b == 12) catch @panic("test failure");
295}
296export fn zig_struct_u64_u64_5(_: usize, _: usize, _: usize, _: usize, _: usize, s: Struct_u64_u64) void {
297 expect(s.a == 13) catch @panic("test failure");
298 expect(s.b == 14) catch @panic("test failure");
299}
300export fn zig_struct_u64_u64_6(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, s: Struct_u64_u64) void {
301 expect(s.a == 15) catch @panic("test failure");
302 expect(s.b == 16) catch @panic("test failure");
303}
304export fn zig_struct_u64_u64_7(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, s: Struct_u64_u64) void {
305 expect(s.a == 17) catch @panic("test failure");
306 expect(s.b == 18) catch @panic("test failure");
307}
308export fn zig_struct_u64_u64_8(_: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, _: usize, s: Struct_u64_u64) void {
309 expect(s.a == 19) catch @panic("test failure");
310 expect(s.b == 20) catch @panic("test failure");
311}
312
313extern fn c_ret_struct_u64_u64() Struct_u64_u64;
314
315extern fn c_struct_u64_u64_0(Struct_u64_u64) void;
316extern fn c_struct_u64_u64_1(usize, Struct_u64_u64) void;
317extern fn c_struct_u64_u64_2(usize, usize, Struct_u64_u64) void;
318extern fn c_struct_u64_u64_3(usize, usize, usize, Struct_u64_u64) void;
319extern fn c_struct_u64_u64_4(usize, usize, usize, usize, Struct_u64_u64) void;
320extern fn c_struct_u64_u64_5(usize, usize, usize, usize, usize, Struct_u64_u64) void;
321extern fn c_struct_u64_u64_6(usize, usize, usize, usize, usize, usize, Struct_u64_u64) void;
322extern fn c_struct_u64_u64_7(usize, usize, usize, usize, usize, usize, usize, Struct_u64_u64) void;
323extern fn c_struct_u64_u64_8(usize, usize, usize, usize, usize, usize, usize, usize, Struct_u64_u64) void;
324
325test "C ABI struct u64 u64" {
326 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
327 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
328
329 {
330 const s = c_ret_struct_u64_u64();
331 try expect(s.a == 21);
332 try expect(s.b == 22);
333 }
334 c_struct_u64_u64_0(.{ .a = 23, .b = 24 });
335 c_struct_u64_u64_1(0, .{ .a = 25, .b = 26 });
336 c_struct_u64_u64_2(0, 1, .{ .a = 27, .b = 28 });
337 c_struct_u64_u64_3(0, 1, 2, .{ .a = 29, .b = 30 });
338 c_struct_u64_u64_4(0, 1, 2, 3, .{ .a = 31, .b = 32 });
339 c_struct_u64_u64_5(0, 1, 2, 3, 4, .{ .a = 33, .b = 34 });
340 c_struct_u64_u64_6(0, 1, 2, 3, 4, 5, .{ .a = 35, .b = 36 });
341 c_struct_u64_u64_7(0, 1, 2, 3, 4, 5, 6, .{ .a = 37, .b = 38 });
342 c_struct_u64_u64_8(0, 1, 2, 3, 4, 5, 6, 7, .{ .a = 39, .b = 40 });
343}
344
268const BigStruct = extern struct {345const BigStruct = extern struct {
269 a: u64,346 a: u64,
270 b: u64,347 b: u64,
...@@ -275,8 +352,8 @@ const BigStruct = extern struct {...@@ -275,8 +352,8 @@ const BigStruct = extern struct {
275extern fn c_big_struct(BigStruct) void;352extern fn c_big_struct(BigStruct) void;
276353
277test "C ABI big struct" {354test "C ABI big struct" {
278 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;355 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
279 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;356 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
280357
281 const s = BigStruct{358 const s = BigStruct{
282 .a = 1,359 .a = 1,
...@@ -302,7 +379,7 @@ const BigUnion = extern union {...@@ -302,7 +379,7 @@ const BigUnion = extern union {
302extern fn c_big_union(BigUnion) void;379extern fn c_big_union(BigUnion) void;
303380
304test "C ABI big union" {381test "C ABI big union" {
305 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;382 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
306383
307 const x = BigUnion{384 const x = BigUnion{
308 .a = BigStruct{385 .a = BigStruct{
...@@ -335,9 +412,9 @@ extern fn c_ret_med_struct_mixed() MedStructMixed;...@@ -335,9 +412,9 @@ extern fn c_ret_med_struct_mixed() MedStructMixed;
335412
336test "C ABI medium struct of ints and floats" {413test "C ABI medium struct of ints and floats" {
337 if (builtin.cpu.arch == .x86) return error.SkipZigTest;414 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
338 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;415 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
339 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;416 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
340 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;417 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
341418
342 const s = MedStructMixed{419 const s = MedStructMixed{
343 .a = 1234,420 .a = 1234,
...@@ -368,9 +445,9 @@ extern fn c_ret_small_struct_ints() SmallStructInts;...@@ -368,9 +445,9 @@ extern fn c_ret_small_struct_ints() SmallStructInts;
368445
369test "C ABI small struct of ints" {446test "C ABI small struct of ints" {
370 if (builtin.cpu.arch == .x86) return error.SkipZigTest;447 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
371 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;448 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
372 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;449 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
373 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;450 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
374451
375 const s = SmallStructInts{452 const s = SmallStructInts{
376 .a = 1,453 .a = 1,
...@@ -403,9 +480,9 @@ extern fn c_ret_med_struct_ints() MedStructInts;...@@ -403,9 +480,9 @@ extern fn c_ret_med_struct_ints() MedStructInts;
403480
404test "C ABI medium struct of ints" {481test "C ABI medium struct of ints" {
405 if (builtin.cpu.arch == .x86) return error.SkipZigTest;482 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
406 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;483 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
407 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;484 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
408 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;485 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
409486
410 const s = MedStructInts{487 const s = MedStructInts{
411 .x = 1,488 .x = 1,
...@@ -482,9 +559,9 @@ extern fn c_split_struct_ints(SplitStructInt) void;...@@ -482,9 +559,9 @@ extern fn c_split_struct_ints(SplitStructInt) void;
482559
483test "C ABI split struct of ints" {560test "C ABI split struct of ints" {
484 if (builtin.cpu.arch == .x86) return error.SkipZigTest;561 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
485 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;562 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
486 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;563 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
487 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;564 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
488565
489 const s = SplitStructInt{566 const s = SplitStructInt{
490 .a = 1234,567 .a = 1234,
...@@ -510,9 +587,9 @@ extern fn c_ret_split_struct_mixed() SplitStructMixed;...@@ -510,9 +587,9 @@ extern fn c_ret_split_struct_mixed() SplitStructMixed;
510587
511test "C ABI split struct of ints and floats" {588test "C ABI split struct of ints and floats" {
512 if (builtin.cpu.arch == .x86) return error.SkipZigTest;589 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
513 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;590 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
514 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;591 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
515 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;592 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
516593
517 const s = SplitStructMixed{594 const s = SplitStructMixed{
518 .a = 1234,595 .a = 1234,
...@@ -538,8 +615,8 @@ extern fn c_multiple_struct_ints(Rect, Rect) void;...@@ -538,8 +615,8 @@ extern fn c_multiple_struct_ints(Rect, Rect) void;
538extern fn c_multiple_struct_floats(FloatRect, FloatRect) void;615extern fn c_multiple_struct_floats(FloatRect, FloatRect) void;
539616
540test "C ABI sret and byval together" {617test "C ABI sret and byval together" {
541 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;618 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
542 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;619 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
543620
544 const s = BigStruct{621 const s = BigStruct{
545 .a = 1,622 .a = 1,
...@@ -590,9 +667,9 @@ const Vector5 = extern struct {...@@ -590,9 +667,9 @@ const Vector5 = extern struct {
590extern fn c_big_struct_floats(Vector5) void;667extern fn c_big_struct_floats(Vector5) void;
591668
592test "C ABI structs of floats as parameter" {669test "C ABI structs of floats as parameter" {
593 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;670 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
594 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;671 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
595 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;672 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
596673
597 const v3 = Vector3{674 const v3 = Vector3{
598 .x = 3.0,675 .x = 3.0,
...@@ -631,8 +708,8 @@ export fn zig_multiple_struct_ints(x: Rect, y: Rect) void {...@@ -631,8 +708,8 @@ export fn zig_multiple_struct_ints(x: Rect, y: Rect) void {
631}708}
632709
633test "C ABI structs of ints as multiple parameters" {710test "C ABI structs of ints as multiple parameters" {
634 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;711 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
635 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;712 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
636713
637 const r1 = Rect{714 const r1 = Rect{
638 .left = 1,715 .left = 1,
...@@ -668,8 +745,8 @@ export fn zig_multiple_struct_floats(x: FloatRect, y: FloatRect) void {...@@ -668,8 +745,8 @@ export fn zig_multiple_struct_floats(x: FloatRect, y: FloatRect) void {
668}745}
669746
670test "C ABI structs of floats as multiple parameters" {747test "C ABI structs of floats as multiple parameters" {
671 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;748 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
672 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;749 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
673750
674 const r1 = FloatRect{751 const r1 = FloatRect{
675 .left = 1,752 .left = 1,
...@@ -781,9 +858,9 @@ extern fn c_ret_struct_with_array() StructWithArray;...@@ -781,9 +858,9 @@ extern fn c_ret_struct_with_array() StructWithArray;
781858
782test "Struct with array as padding." {859test "Struct with array as padding." {
783 if (builtin.cpu.arch == .x86) return error.SkipZigTest;860 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
784 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;861 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
785 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;862 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
786 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;863 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
787864
788 c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 });865 c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 });
789866
...@@ -808,8 +885,8 @@ extern fn c_ret_float_array_struct() FloatArrayStruct;...@@ -808,8 +885,8 @@ extern fn c_ret_float_array_struct() FloatArrayStruct;
808885
809test "Float array like struct" {886test "Float array like struct" {
810 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;887 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
811 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;888 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
812 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;889 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
813890
814 c_float_array_struct(.{891 c_float_array_struct(.{
815 .origin = .{892 .origin = .{
...@@ -836,7 +913,7 @@ extern fn c_ret_small_vec() SmallVec;...@@ -836,7 +913,7 @@ extern fn c_ret_small_vec() SmallVec;
836913
837test "small simd vector" {914test "small simd vector" {
838 if (builtin.cpu.arch == .x86) return error.SkipZigTest;915 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
839 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;916 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
840917
841 c_small_vec(.{ 1, 2 });918 c_small_vec(.{ 1, 2 });
842919
...@@ -854,7 +931,7 @@ test "medium simd vector" {...@@ -854,7 +931,7 @@ test "medium simd vector" {
854 if (builtin.zig_backend == .stage2_x86_64 and931 if (builtin.zig_backend == .stage2_x86_64 and
855 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .avx)) return error.SkipZigTest;932 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .avx)) return error.SkipZigTest;
856933
857 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;934 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
858935
859 c_medium_vec(.{ 1, 2, 3, 4 });936 c_medium_vec(.{ 1, 2, 3, 4 });
860937
...@@ -873,8 +950,8 @@ extern fn c_ret_big_vec() BigVec;...@@ -873,8 +950,8 @@ extern fn c_ret_big_vec() BigVec;
873test "big simd vector" {950test "big simd vector" {
874 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;951 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
875952
876 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;953 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
877 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;954 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
878 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64 and builtin.os.tag == .macos and builtin.mode != .Debug) return error.SkipZigTest;955 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64 and builtin.os.tag == .macos and builtin.mode != .Debug) return error.SkipZigTest;
879956
880 c_big_vec(.{ 1, 2, 3, 4, 5, 6, 7, 8 });957 c_big_vec(.{ 1, 2, 3, 4, 5, 6, 7, 8 });
...@@ -5155,9 +5232,9 @@ extern fn c_ret_ptr_size_float_struct() Vector2;...@@ -5155,9 +5232,9 @@ extern fn c_ret_ptr_size_float_struct() Vector2;
51555232
5156test "C ABI pointer sized float struct" {5233test "C ABI pointer sized float struct" {
5157 if (builtin.cpu.arch == .x86) return error.SkipZigTest;5234 if (builtin.cpu.arch == .x86) return error.SkipZigTest;
5158 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5235 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5159 if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest;5236 if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest;
5160 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5237 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
51615238
5162 c_ptr_size_float_struct(.{ .x = 1, .y = 2 });5239 c_ptr_size_float_struct(.{ .x = 1, .y = 2 });
51635240
...@@ -5177,33 +5254,33 @@ pub inline fn expectOk(c_err: c_int) !void {...@@ -5177,33 +5254,33 @@ pub inline fn expectOk(c_err: c_int) !void {
5177/// Tests for Double + Char struct5254/// Tests for Double + Char struct
5178const DC = extern struct { v1: f64, v2: u8 };5255const DC = extern struct { v1: f64, v2: u8 };
5179test "DC: Zig passes to C" {5256test "DC: Zig passes to C" {
5180 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5257 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5181 if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest;5258 if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest;
5182 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5259 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5183 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5260 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5184 try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 }));5261 try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 }));
5185}5262}
5186test "DC: Zig returns to C" {5263test "DC: Zig returns to C" {
5187 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;5264 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
5188 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;5265 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
5189 if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest;5266 if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest;
5190 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5267 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5191 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5268 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5192 try expectOk(c_assert_ret_DC());5269 try expectOk(c_assert_ret_DC());
5193}5270}
5194test "DC: C passes to Zig" {5271test "DC: C passes to Zig" {
5195 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5272 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5196 if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest;5273 if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest;
5197 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5274 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5198 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5275 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5199 try expectOk(c_send_DC());5276 try expectOk(c_send_DC());
5200}5277}
5201test "DC: C returns to Zig" {5278test "DC: C returns to Zig" {
5202 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;5279 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
5203 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;5280 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
5204 if (comptime builtin.cpu.arch.isRISCV()) return error.SkipZigTest;5281 if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest;
5205 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5282 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5206 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5283 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5207 try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC());5284 try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC());
5208}5285}
52095286
...@@ -5227,35 +5304,35 @@ const CFF = extern struct { v1: u8, v2: f32, v3: f32 };...@@ -5227,35 +5304,35 @@ const CFF = extern struct { v1: u8, v2: f32, v3: f32 };
52275304
5228test "CFF: Zig passes to C" {5305test "CFF: Zig passes to C" {
5229 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5306 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5230 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5307 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5231 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5308 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5232 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5309 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5233 try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }));5310 try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }));
5234}5311}
5235test "CFF: Zig returns to C" {5312test "CFF: Zig returns to C" {
5236 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;5313 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
5237 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5314 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5238 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5315 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5239 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5316 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5240 try expectOk(c_assert_ret_CFF());5317 try expectOk(c_assert_ret_CFF());
5241}5318}
5242test "CFF: C passes to Zig" {5319test "CFF: C passes to Zig" {
5243 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5320 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5244 if (comptime builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest;5321 if (builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest;
5245 if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest;5322 if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest;
5246 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5323 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5247 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5324 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5248 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5325 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
52495326
5250 try expectOk(c_send_CFF());5327 try expectOk(c_send_CFF());
5251}5328}
5252test "CFF: C returns to Zig" {5329test "CFF: C returns to Zig" {
5253 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;5330 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
5254 if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest;5331 if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest;
5255 if (comptime builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest;5332 if (builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest;
5256 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5333 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5257 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5334 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5258 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5335 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5259 try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF());5336 try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF());
5260}5337}
5261pub extern fn c_assert_CFF(lv: CFF) c_int;5338pub extern fn c_assert_CFF(lv: CFF) c_int;
...@@ -5279,30 +5356,30 @@ const PD = extern struct { v1: ?*anyopaque, v2: f64 };...@@ -5279,30 +5356,30 @@ const PD = extern struct { v1: ?*anyopaque, v2: f64 };
52795356
5280test "PD: Zig passes to C" {5357test "PD: Zig passes to C" {
5281 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5358 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5282 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5359 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5283 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5360 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5284 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5361 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5285 try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 }));5362 try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 }));
5286}5363}
5287test "PD: Zig returns to C" {5364test "PD: Zig returns to C" {
5288 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5365 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5289 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;5366 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
5290 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5367 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5291 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5368 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5292 try expectOk(c_assert_ret_PD());5369 try expectOk(c_assert_ret_PD());
5293}5370}
5294test "PD: C passes to Zig" {5371test "PD: C passes to Zig" {
5295 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5372 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5296 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5373 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5297 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5374 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5298 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5375 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5299 try expectOk(c_send_PD());5376 try expectOk(c_send_PD());
5300}5377}
5301test "PD: C returns to Zig" {5378test "PD: C returns to Zig" {
5302 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5379 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5303 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;5380 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
5304 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5381 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5305 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5382 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
5306 try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD());5383 try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD());
5307}5384}
5308pub extern fn c_assert_PD(lv: PD) c_int;5385pub extern fn c_assert_PD(lv: PD) c_int;
...@@ -5334,7 +5411,7 @@ const ByRef = extern struct {...@@ -5334,7 +5411,7 @@ const ByRef = extern struct {
5334extern fn c_modify_by_ref_param(ByRef) ByRef;5411extern fn c_modify_by_ref_param(ByRef) ByRef;
53355412
5336test "C function modifies by ref param" {5413test "C function modifies by ref param" {
5337 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5414 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
53385415
5339 const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined });5416 const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined });
5340 try expect(res.val == 42);5417 try expect(res.val == 42);
...@@ -5356,8 +5433,8 @@ const ByVal = extern struct {...@@ -5356,8 +5433,8 @@ const ByVal = extern struct {
5356extern fn c_func_ptr_byval(*anyopaque, *anyopaque, ByVal, c_ulong, *anyopaque, c_ulong) void;5433extern fn c_func_ptr_byval(*anyopaque, *anyopaque, ByVal, c_ulong, *anyopaque, c_ulong) void;
5357test "C function that takes byval struct called via function pointer" {5434test "C function that takes byval struct called via function pointer" {
5358 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;5435 if (builtin.cpu.arch == .x86 and builtin.mode != .Debug) return error.SkipZigTest;
5359 if (comptime builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;5436 if (builtin.cpu.arch.isMIPS() and builtin.mode != .Debug) return error.SkipZigTest;
5360 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5437 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
53615438
5362 var fn_ptr = &c_func_ptr_byval;5439 var fn_ptr = &c_func_ptr_byval;
5363 _ = &fn_ptr;5440 _ = &fn_ptr;
...@@ -5376,7 +5453,7 @@ test "C function that takes byval struct called via function pointer" {...@@ -5376,7 +5453,7 @@ test "C function that takes byval struct called via function pointer" {
53765453
5377extern fn c_f16(f16) f16;5454extern fn c_f16(f16) f16;
5378test "f16 bare" {5455test "f16 bare" {
5379 if (!comptime builtin.cpu.arch.isAARCH64()) return error.SkipZigTest;5456 if (!builtin.cpu.arch.isAARCH64()) return error.SkipZigTest;
53805457
5381 const a = c_f16(12);5458 const a = c_f16(12);
5382 try expect(a == 34);5459 try expect(a == 34);
...@@ -5388,10 +5465,10 @@ const f16_struct = extern struct {...@@ -5388,10 +5465,10 @@ const f16_struct = extern struct {
5388extern fn c_f16_struct(f16_struct) f16_struct;5465extern fn c_f16_struct(f16_struct) f16_struct;
5389test "f16 struct" {5466test "f16 struct" {
5390 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;5467 if (builtin.target.cpu.arch == .x86) return error.SkipZigTest;
5391 if (comptime builtin.target.cpu.arch.isMIPS()) return error.SkipZigTest;5468 if (builtin.target.cpu.arch.isMIPS()) return error.SkipZigTest;
5392 if (comptime builtin.target.cpu.arch.isPPC()) return error.SkipZigTest;5469 if (builtin.target.cpu.arch.isPPC()) return error.SkipZigTest;
5393 if (comptime builtin.target.cpu.arch.isPPC()) return error.SkipZigTest;5470 if (builtin.target.cpu.arch.isPPC()) return error.SkipZigTest;
5394 if (comptime builtin.cpu.arch.isARM() and builtin.mode != .Debug) return error.SkipZigTest;5471 if (builtin.cpu.arch.isARM() and builtin.mode != .Debug) return error.SkipZigTest;
53955472
5396 const a = c_f16_struct(.{ .a = 12 });5473 const a = c_f16_struct(.{ .a = 12 });
5397 try expect(a.a == 34);5474 try expect(a.a == 34);
...@@ -5466,9 +5543,9 @@ const Coord2 = extern struct {...@@ -5466,9 +5543,9 @@ const Coord2 = extern struct {
54665543
5467extern fn stdcall_coord2(Coord2, Coord2, Coord2) callconv(stdcall_callconv) Coord2;5544extern fn stdcall_coord2(Coord2, Coord2, Coord2) callconv(stdcall_callconv) Coord2;
5468test "Stdcall ABI structs" {5545test "Stdcall ABI structs" {
5469 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5546 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5470 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5547 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
5471 if (comptime builtin.cpu.arch.isPPC64()) return error.SkipZigTest;5548 if (builtin.cpu.arch.isPPC64()) return error.SkipZigTest;
54725549
5473 const res = stdcall_coord2(5550 const res = stdcall_coord2(
5474 .{ .x = 0x1111, .y = 0x2222 },5551 .{ .x = 0x1111, .y = 0x2222 },
...@@ -5481,7 +5558,7 @@ test "Stdcall ABI structs" {...@@ -5481,7 +5558,7 @@ test "Stdcall ABI structs" {
54815558
5482extern fn stdcall_big_union(BigUnion) callconv(stdcall_callconv) void;5559extern fn stdcall_big_union(BigUnion) callconv(stdcall_callconv) void;
5483test "Stdcall ABI big union" {5560test "Stdcall ABI big union" {
5484 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5561 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
54855562
5486 const x = BigUnion{5563 const x = BigUnion{
5487 .a = BigStruct{5564 .a = BigStruct{
...@@ -5552,8 +5629,8 @@ const byval_tail_callsite_attr = struct {...@@ -5552,8 +5629,8 @@ const byval_tail_callsite_attr = struct {
5552};5629};
55535630
5554test "byval tail callsite attribute" {5631test "byval tail callsite attribute" {
5555 if (comptime builtin.cpu.arch.isMIPS()) return error.SkipZigTest;5632 if (builtin.cpu.arch.isMIPS()) return error.SkipZigTest;
5556 if (comptime builtin.cpu.arch.isPPC()) return error.SkipZigTest;5633 if (builtin.cpu.arch.isPPC()) return error.SkipZigTest;
55575634
5558 // Originally reported at https://github.com/ziglang/zig/issues/162905635 // Originally reported at https://github.com/ziglang/zig/issues/16290
5559 // the bug was that the extern function had the byval attribute, but5636 // the bug was that the extern function had the byval attribute, but