| ... | @@ -186,7 +186,8 @@ extern fn c_cmultd(a: ComplexDouble, b: ComplexDouble) ComplexDouble; | ... | @@ -186,7 +186,8 @@ extern fn c_cmultd(a: ComplexDouble, b: ComplexDouble) ComplexDouble; |
| 186 | | 186 | |
| 187 | const complex_abi_compatible = builtin.cpu.arch != .x86 and !builtin.cpu.arch.isMIPS() and | 187 | const complex_abi_compatible = builtin.cpu.arch != .x86 and !builtin.cpu.arch.isMIPS() and |
| 188 | !builtin.cpu.arch.isArm() and !builtin.cpu.arch.isPowerPC32() and !builtin.cpu.arch.isRISCV() and | 188 | !builtin.cpu.arch.isArm() and !builtin.cpu.arch.isPowerPC32() and !builtin.cpu.arch.isRISCV() and |
| 189 | builtin.cpu.arch != .hexagon; | 189 | builtin.cpu.arch != .hexagon and |
| | 190 | builtin.cpu.arch != .s390x; |
| 190 | | 191 | |
| 191 | test "C ABI complex float" { | 192 | test "C ABI complex float" { |
| 192 | if (!complex_abi_compatible) return error.SkipZigTest; | 193 | if (!complex_abi_compatible) return error.SkipZigTest; |
| ... | @@ -330,6 +331,7 @@ test "C ABI struct u64 u64" { | ... | @@ -330,6 +331,7 @@ test "C ABI struct u64 u64" { |
| 330 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 331 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 331 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 332 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 332 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 333 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 334 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 333 | | 335 | |
| 334 | const s = c_ret_struct_u64_u64(); | 336 | const s = c_ret_struct_u64_u64(); |
| 335 | try expect(s.a == 21); | 337 | try expect(s.a == 21); |
| ... | @@ -364,6 +366,7 @@ extern fn c_struct_f32(Struct_f32) void; | ... | @@ -364,6 +366,7 @@ extern fn c_struct_f32(Struct_f32) void; |
| 364 | test "C ABI struct f32" { | 366 | test "C ABI struct f32" { |
| 365 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 367 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 366 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 368 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 369 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 367 | | 370 | |
| 368 | const s = c_ret_struct_f32(); | 371 | const s = c_ret_struct_f32(); |
| 369 | try expect(s.a == 2.5); | 372 | try expect(s.a == 2.5); |
| ... | @@ -391,6 +394,7 @@ test "C ABI struct f64" { | ... | @@ -391,6 +394,7 @@ test "C ABI struct f64" { |
| 391 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 394 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 392 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; | 395 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| 393 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; | 396 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; |
| | 397 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 394 | | 398 | |
| 395 | const s = c_ret_struct_f64(); | 399 | const s = c_ret_struct_f64(); |
| 396 | try expect(s.a == 2.5); | 400 | try expect(s.a == 2.5); |
| ... | @@ -422,6 +426,7 @@ test "C ABI struct {f32,f32} f32" { | ... | @@ -422,6 +426,7 @@ test "C ABI struct {f32,f32} f32" { |
| 422 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; | 426 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| 423 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 427 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 424 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 428 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 429 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 425 | | 430 | |
| 426 | const s = c_ret_struct_f32f32_f32(); | 431 | const s = c_ret_struct_f32f32_f32(); |
| 427 | try expect(s.a.b == 1.0); | 432 | try expect(s.a.b == 1.0); |
| ... | @@ -455,6 +460,7 @@ test "C ABI struct f32 {f32,f32}" { | ... | @@ -455,6 +460,7 @@ test "C ABI struct f32 {f32,f32}" { |
| 455 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; | 460 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| 456 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 461 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 457 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 462 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 463 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 458 | | 464 | |
| 459 | const s = c_ret_struct_f32_f32f32(); | 465 | const s = c_ret_struct_f32_f32f32(); |
| 460 | try expect(s.a == 1.0); | 466 | try expect(s.a == 1.0); |
| ... | @@ -492,6 +498,7 @@ test "C ABI struct{u32,union{u32,struct{u32,u32}}}" { | ... | @@ -492,6 +498,7 @@ test "C ABI struct{u32,union{u32,struct{u32,u32}}}" { |
| 492 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 498 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 493 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 499 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 494 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 500 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 501 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 495 | | 502 | |
| 496 | const s = c_ret_struct_u32_union_u32_u32u32(); | 503 | const s = c_ret_struct_u32_union_u32_u32u32(); |
| 497 | try expect(s.a == 1); | 504 | try expect(s.a == 1); |
| ... | @@ -512,6 +519,7 @@ test "C ABI struct i32 i32" { | ... | @@ -512,6 +519,7 @@ test "C ABI struct i32 i32" { |
| 512 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 519 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 513 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; | 520 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; |
| 514 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 521 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 522 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 515 | | 523 | |
| 516 | const s: Struct_i32_i32 = .{ | 524 | const s: Struct_i32_i32 = .{ |
| 517 | .a = 1, | 525 | .a = 1, |
| ... | @@ -544,6 +552,7 @@ test "C ABI big struct" { | ... | @@ -544,6 +552,7 @@ test "C ABI big struct" { |
| 544 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 552 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 545 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 553 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 546 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 554 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 555 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 547 | | 556 | |
| 548 | const s = BigStruct{ | 557 | const s = BigStruct{ |
| 549 | .a = 1, | 558 | .a = 1, |
| ... | @@ -572,6 +581,7 @@ test "C ABI big union" { | ... | @@ -572,6 +581,7 @@ test "C ABI big union" { |
| 572 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 581 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 573 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 582 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 574 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 583 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 584 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 575 | | 585 | |
| 576 | const x = BigUnion{ | 586 | const x = BigUnion{ |
| 577 | .a = BigStruct{ | 587 | .a = BigStruct{ |
| ... | @@ -607,6 +617,7 @@ test "C ABI medium struct of ints and floats" { | ... | @@ -607,6 +617,7 @@ test "C ABI medium struct of ints and floats" { |
| 607 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 617 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 608 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 618 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 609 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 619 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 620 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 610 | | 621 | |
| 611 | const s = MedStructMixed{ | 622 | const s = MedStructMixed{ |
| 612 | .a = 1234, | 623 | .a = 1234, |
| ... | @@ -642,6 +653,7 @@ test "C ABI small struct of ints" { | ... | @@ -642,6 +653,7 @@ test "C ABI small struct of ints" { |
| 642 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; | 653 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; |
| 643 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 654 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 644 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 655 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 656 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 645 | | 657 | |
| 646 | const s = SmallStructInts{ | 658 | const s = SmallStructInts{ |
| 647 | .a = 1, | 659 | .a = 1, |
| ... | @@ -677,6 +689,7 @@ test "C ABI medium struct of ints" { | ... | @@ -677,6 +689,7 @@ test "C ABI medium struct of ints" { |
| 677 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 689 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 678 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 690 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 679 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 691 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 692 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 680 | | 693 | |
| 681 | const s = MedStructInts{ | 694 | const s = MedStructInts{ |
| 682 | .x = 1, | 695 | .x = 1, |
| ... | @@ -757,6 +770,7 @@ test "C ABI split struct of ints" { | ... | @@ -757,6 +770,7 @@ test "C ABI split struct of ints" { |
| 757 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 770 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 758 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 771 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 759 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 772 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 773 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 760 | | 774 | |
| 761 | const s = SplitStructInt{ | 775 | const s = SplitStructInt{ |
| 762 | .a = 1234, | 776 | .a = 1234, |
| ... | @@ -786,6 +800,7 @@ test "C ABI split struct of ints and floats" { | ... | @@ -786,6 +800,7 @@ test "C ABI split struct of ints and floats" { |
| 786 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 800 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 787 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 801 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 788 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 802 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 803 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 789 | | 804 | |
| 790 | const s = SplitStructMixed{ | 805 | const s = SplitStructMixed{ |
| 791 | .a = 1234, | 806 | .a = 1234, |
| ... | @@ -815,6 +830,7 @@ test "C ABI sret and byval together" { | ... | @@ -815,6 +830,7 @@ test "C ABI sret and byval together" { |
| 815 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 830 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 816 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 831 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 817 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 832 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 833 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 818 | | 834 | |
| 819 | const s = BigStruct{ | 835 | const s = BigStruct{ |
| 820 | .a = 1, | 836 | .a = 1, |
| ... | @@ -869,6 +885,7 @@ test "C ABI structs of floats as parameter" { | ... | @@ -869,6 +885,7 @@ test "C ABI structs of floats as parameter" { |
| 869 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 885 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 870 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 886 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 871 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 887 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 888 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 872 | | 889 | |
| 873 | const v3 = Vector3{ | 890 | const v3 = Vector3{ |
| 874 | .x = 3.0, | 891 | .x = 3.0, |
| ... | @@ -911,6 +928,7 @@ test "C ABI structs of ints as multiple parameters" { | ... | @@ -911,6 +928,7 @@ test "C ABI structs of ints as multiple parameters" { |
| 911 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 928 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 912 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 929 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 913 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 930 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 931 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 914 | | 932 | |
| 915 | const r1 = Rect{ | 933 | const r1 = Rect{ |
| 916 | .left = 1, | 934 | .left = 1, |
| ... | @@ -950,6 +968,7 @@ test "C ABI structs of floats as multiple parameters" { | ... | @@ -950,6 +968,7 @@ test "C ABI structs of floats as multiple parameters" { |
| 950 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 968 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 951 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 969 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 952 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 970 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 971 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 953 | | 972 | |
| 954 | const r1 = FloatRect{ | 973 | const r1 = FloatRect{ |
| 955 | .left = 1, | 974 | .left = 1, |
| ... | @@ -1065,6 +1084,7 @@ test "Struct with array as padding." { | ... | @@ -1065,6 +1084,7 @@ test "Struct with array as padding." { |
| 1065 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 1084 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 1066 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 1085 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1067 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 1086 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 1087 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 1068 | | 1088 | |
| 1069 | c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 }); | 1089 | c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 }); |
| 1070 | | 1090 | |
| ... | @@ -1092,6 +1112,7 @@ test "Float array like struct" { | ... | @@ -1092,6 +1112,7 @@ test "Float array like struct" { |
| 1092 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 1112 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 1093 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 1113 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1094 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 1114 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 1115 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 1095 | | 1116 | |
| 1096 | c_float_array_struct(.{ | 1117 | c_float_array_struct(.{ |
| 1097 | .origin = .{ | 1118 | .origin = .{ |
| ... | @@ -1120,6 +1141,7 @@ test "small simd vector" { | ... | @@ -1120,6 +1141,7 @@ test "small simd vector" { |
| 1120 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 1141 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 1121 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; | 1142 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; |
| 1122 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 1143 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 1144 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 1123 | | 1145 | |
| 1124 | c_small_vec(.{ 1, 2 }); | 1146 | c_small_vec(.{ 1, 2 }); |
| 1125 | | 1147 | |
| ... | @@ -1137,6 +1159,7 @@ test "medium simd vector" { | ... | @@ -1137,6 +1159,7 @@ test "medium simd vector" { |
| 1137 | if (builtin.zig_backend == .stage2_x86_64 and !comptime builtin.cpu.has(.x86, .avx)) return error.SkipZigTest; | 1159 | if (builtin.zig_backend == .stage2_x86_64 and !comptime builtin.cpu.has(.x86, .avx)) return error.SkipZigTest; |
| 1138 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; | 1160 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; |
| 1139 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 1161 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 1162 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 1140 | | 1163 | |
| 1141 | c_medium_vec(.{ 1, 2, 3, 4 }); | 1164 | c_medium_vec(.{ 1, 2, 3, 4 }); |
| 1142 | | 1165 | |
| ... | @@ -1185,6 +1208,7 @@ extern fn c_ret_vector_4_float() Vector4Float; | ... | @@ -1185,6 +1208,7 @@ extern fn c_ret_vector_4_float() Vector4Float; |
| 1185 | test "float simd vectors" { | 1208 | test "float simd vectors" { |
| 1186 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 1209 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 1187 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 1210 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 1211 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 1188 | | 1212 | |
| 1189 | { | 1213 | { |
| 1190 | c_vector_2_float(.{ 1.0, 2.0 }); | 1214 | c_vector_2_float(.{ 1.0, 2.0 }); |
| ... | @@ -5470,6 +5494,7 @@ test "C ABI pointer sized float struct" { | ... | @@ -5470,6 +5494,7 @@ test "C ABI pointer sized float struct" { |
| 5470 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5494 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5471 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5495 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5472 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; | 5496 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| | 5497 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5473 | | 5498 | |
| 5474 | c_ptr_size_float_struct(.{ .x = 1, .y = 2 }); | 5499 | c_ptr_size_float_struct(.{ .x = 1, .y = 2 }); |
| 5475 | | 5500 | |
| ... | @@ -5494,6 +5519,7 @@ test "DC: Zig passes to C" { | ... | @@ -5494,6 +5519,7 @@ test "DC: Zig passes to C" { |
| 5494 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5519 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5495 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5520 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5496 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5521 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5522 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5497 | try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 })); | 5523 | try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 })); |
| 5498 | } | 5524 | } |
| 5499 | test "DC: Zig returns to C" { | 5525 | test "DC: Zig returns to C" { |
| ... | @@ -5501,6 +5527,7 @@ test "DC: Zig returns to C" { | ... | @@ -5501,6 +5527,7 @@ test "DC: Zig returns to C" { |
| 5501 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5527 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5502 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5528 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5503 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5529 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5530 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5504 | try expectOk(c_assert_ret_DC()); | 5531 | try expectOk(c_assert_ret_DC()); |
| 5505 | } | 5532 | } |
| 5506 | test "DC: C passes to Zig" { | 5533 | test "DC: C passes to Zig" { |
| ... | @@ -5509,6 +5536,7 @@ test "DC: C passes to Zig" { | ... | @@ -5509,6 +5536,7 @@ test "DC: C passes to Zig" { |
| 5509 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5536 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5510 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5537 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5511 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5538 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5539 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5512 | try expectOk(c_send_DC()); | 5540 | try expectOk(c_send_DC()); |
| 5513 | } | 5541 | } |
| 5514 | test "DC: C returns to Zig" { | 5542 | test "DC: C returns to Zig" { |
| ... | @@ -5516,6 +5544,7 @@ test "DC: C returns to Zig" { | ... | @@ -5516,6 +5544,7 @@ test "DC: C returns to Zig" { |
| 5516 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5544 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5517 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5545 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5518 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5546 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5547 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5519 | try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC()); | 5548 | try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC()); |
| 5520 | } | 5549 | } |
| 5521 | | 5550 | |
| ... | @@ -5543,12 +5572,14 @@ test "CFF: Zig passes to C" { | ... | @@ -5543,12 +5572,14 @@ test "CFF: Zig passes to C" { |
| 5543 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5572 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5544 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5573 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5545 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5574 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5575 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5546 | try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 })); | 5576 | try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 })); |
| 5547 | } | 5577 | } |
| 5548 | test "CFF: Zig returns to C" { | 5578 | test "CFF: Zig returns to C" { |
| 5549 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5579 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5550 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5580 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5551 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5581 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5582 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5552 | try expectOk(c_assert_ret_CFF()); | 5583 | try expectOk(c_assert_ret_CFF()); |
| 5553 | } | 5584 | } |
| 5554 | test "CFF: C passes to Zig" { | 5585 | test "CFF: C passes to Zig" { |
| ... | @@ -5559,6 +5590,7 @@ test "CFF: C passes to Zig" { | ... | @@ -5559,6 +5590,7 @@ test "CFF: C passes to Zig" { |
| 5559 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5590 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5560 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5591 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5561 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5592 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5593 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5562 | | 5594 | |
| 5563 | try expectOk(c_send_CFF()); | 5595 | try expectOk(c_send_CFF()); |
| 5564 | } | 5596 | } |
| ... | @@ -5568,6 +5600,7 @@ test "CFF: C returns to Zig" { | ... | @@ -5568,6 +5600,7 @@ test "CFF: C returns to Zig" { |
| 5568 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5600 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5569 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5601 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5570 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5602 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5603 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5571 | try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF()); | 5604 | try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF()); |
| 5572 | } | 5605 | } |
| 5573 | pub extern fn c_assert_CFF(lv: CFF) c_int; | 5606 | pub extern fn c_assert_CFF(lv: CFF) c_int; |
| ... | @@ -5594,12 +5627,14 @@ test "PD: Zig passes to C" { | ... | @@ -5594,12 +5627,14 @@ test "PD: Zig passes to C" { |
| 5594 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5627 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5595 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5628 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5596 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5629 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5630 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5597 | try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 })); | 5631 | try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 })); |
| 5598 | } | 5632 | } |
| 5599 | test "PD: Zig returns to C" { | 5633 | test "PD: Zig returns to C" { |
| 5600 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5634 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5601 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5635 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5602 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5636 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5637 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5603 | try expectOk(c_assert_ret_PD()); | 5638 | try expectOk(c_assert_ret_PD()); |
| 5604 | } | 5639 | } |
| 5605 | test "PD: C passes to Zig" { | 5640 | test "PD: C passes to Zig" { |
| ... | @@ -5607,12 +5642,14 @@ test "PD: C passes to Zig" { | ... | @@ -5607,12 +5642,14 @@ test "PD: C passes to Zig" { |
| 5607 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5642 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5608 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5643 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5609 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5644 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5645 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5610 | try expectOk(c_send_PD()); | 5646 | try expectOk(c_send_PD()); |
| 5611 | } | 5647 | } |
| 5612 | test "PD: C returns to Zig" { | 5648 | test "PD: C returns to Zig" { |
| 5613 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5649 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5614 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5650 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| 5615 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5651 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5652 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5616 | try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD()); | 5653 | try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD()); |
| 5617 | } | 5654 | } |
| 5618 | pub extern fn c_assert_PD(lv: PD) c_int; | 5655 | pub extern fn c_assert_PD(lv: PD) c_int; |
| ... | @@ -5646,6 +5683,7 @@ extern fn c_modify_by_ref_param(ByRef) ByRef; | ... | @@ -5646,6 +5683,7 @@ extern fn c_modify_by_ref_param(ByRef) ByRef; |
| 5646 | test "C function modifies by ref param" { | 5683 | test "C function modifies by ref param" { |
| 5647 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5684 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5648 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5685 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 5686 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5649 | | 5687 | |
| 5650 | const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined }); | 5688 | const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined }); |
| 5651 | try expect(res.val == 42); | 5689 | try expect(res.val == 42); |
| ... | @@ -5670,6 +5708,7 @@ test "C function that takes byval struct called via function pointer" { | ... | @@ -5670,6 +5708,7 @@ test "C function that takes byval struct called via function pointer" { |
| 5670 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5708 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5671 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5709 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5672 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5710 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5711 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5673 | | 5712 | |
| 5674 | var fn_ptr = &c_func_ptr_byval; | 5713 | var fn_ptr = &c_func_ptr_byval; |
| 5675 | _ = &fn_ptr; | 5714 | _ = &fn_ptr; |
| ... | @@ -5702,6 +5741,7 @@ test "f16 struct" { | ... | @@ -5702,6 +5741,7 @@ test "f16 struct" { |
| 5702 | if (builtin.target.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5741 | if (builtin.target.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5703 | if (builtin.target.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5742 | if (builtin.target.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5704 | if (builtin.cpu.arch.isArm() and builtin.mode != .Debug) return error.SkipZigTest; | 5743 | if (builtin.cpu.arch.isArm() and builtin.mode != .Debug) return error.SkipZigTest; |
| | 5744 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5705 | | 5745 | |
| 5706 | const a = c_f16_struct(.{ .a = 12 }); | 5746 | const a = c_f16_struct(.{ .a = 12 }); |
| 5707 | try expect(a.a == 34); | 5747 | try expect(a.a == 34); |
| ... | @@ -5811,6 +5851,7 @@ test "Stdcall ABI structs" { | ... | @@ -5811,6 +5851,7 @@ test "Stdcall ABI structs" { |
| 5811 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; | 5851 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; |
| 5812 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5852 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5813 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5853 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5854 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5814 | | 5855 | |
| 5815 | const res = stdcall_coord2( | 5856 | const res = stdcall_coord2( |
| 5816 | .{ .x = 0x1111, .y = 0x2222 }, | 5857 | .{ .x = 0x1111, .y = 0x2222 }, |
| ... | @@ -5826,6 +5867,7 @@ test "Stdcall ABI big union" { | ... | @@ -5826,6 +5867,7 @@ test "Stdcall ABI big union" { |
| 5826 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5867 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5827 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5868 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5828 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5869 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5870 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5829 | | 5871 | |
| 5830 | const x = BigUnion{ | 5872 | const x = BigUnion{ |
| 5831 | .a = BigStruct{ | 5873 | .a = BigStruct{ |
| ... | @@ -5900,6 +5942,7 @@ test "byval tail callsite attribute" { | ... | @@ -5900,6 +5942,7 @@ test "byval tail callsite attribute" { |
| 5900 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5942 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| 5901 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; | 5943 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5902 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; | 5944 | if (builtin.cpu.arch == .hexagon) return error.SkipZigTest; |
| | 5945 | if (builtin.cpu.arch == .s390x) return error.SkipZigTest; |
| 5903 | | 5946 | |
| 5904 | // Originally reported at https://github.com/ziglang/zig/issues/16290 | 5947 | // Originally reported at https://github.com/ziglang/zig/issues/16290 |
| 5905 | // the bug was that the extern function had the byval attribute, but | 5948 | // the bug was that the extern function had the byval attribute, but |