| ... | @@ -11,7 +11,7 @@ const print = std.debug.print; | ... | @@ -11,7 +11,7 @@ const print = std.debug.print; |
| 11 | const expect = std.testing.expect; | 11 | const expect = std.testing.expect; |
| 12 | const expectEqual = std.testing.expectEqual; | 12 | const expectEqual = std.testing.expectEqual; |
| 13 | const have_i128 = builtin.cpu.arch != .x86 and !builtin.cpu.arch.isArm() and | 13 | const have_i128 = builtin.cpu.arch != .x86 and !builtin.cpu.arch.isArm() and |
| 14 | !builtin.cpu.arch.isMIPS() and !builtin.cpu.arch.isPowerPC32(); | 14 | !builtin.cpu.arch.isMIPS() and !builtin.cpu.arch.isPowerPC32() and builtin.cpu.arch != .riscv32; |
| 15 | | 15 | |
| 16 | const have_f128 = builtin.cpu.arch.isWasm() or (builtin.cpu.arch.isX86() and !builtin.os.tag.isDarwin()); | 16 | const have_f128 = builtin.cpu.arch.isWasm() or (builtin.cpu.arch.isX86() and !builtin.os.tag.isDarwin()); |
| 17 | const have_f80 = builtin.cpu.arch.isX86(); | 17 | const have_f80 = builtin.cpu.arch.isX86(); |
| ... | @@ -49,6 +49,8 @@ export fn zig_five_integers(a: i32, b: i32, c: i32, d: i32, e: i32) void { | ... | @@ -49,6 +49,8 @@ export fn zig_five_integers(a: i32, b: i32, c: i32, d: i32, e: i32) void { |
| 49 | } | 49 | } |
| 50 | | 50 | |
| 51 | test "C ABI integers" { | 51 | test "C ABI integers" { |
| | 52 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| | 53 | |
| 52 | c_u8(0xff); | 54 | c_u8(0xff); |
| 53 | c_u16(0xfffe); | 55 | c_u16(0xfffe); |
| 54 | c_u32(0xfffffffd); | 56 | c_u32(0xfffffffd); |
| ... | @@ -383,6 +385,8 @@ extern fn c_struct_f64(Struct_f64) void; | ... | @@ -383,6 +385,8 @@ extern fn c_struct_f64(Struct_f64) void; |
| 383 | test "C ABI struct f64" { | 385 | test "C ABI struct f64" { |
| 384 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 386 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 385 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 387 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 388 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| | 389 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; |
| 386 | | 390 | |
| 387 | const s = c_ret_struct_f64(); | 391 | const s = c_ret_struct_f64(); |
| 388 | try expect(s.a == 2.5); | 392 | try expect(s.a == 2.5); |
| ... | @@ -411,6 +415,8 @@ extern fn c_struct_f32f32_f32(Struct_f32f32_f32) void; | ... | @@ -411,6 +415,8 @@ extern fn c_struct_f32f32_f32(Struct_f32f32_f32) void; |
| 411 | test "C ABI struct {f32,f32} f32" { | 415 | test "C ABI struct {f32,f32} f32" { |
| 412 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 416 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 413 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 417 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 418 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| | 419 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 414 | | 420 | |
| 415 | const s = c_ret_struct_f32f32_f32(); | 421 | const s = c_ret_struct_f32f32_f32(); |
| 416 | try expect(s.a.b == 1.0); | 422 | try expect(s.a.b == 1.0); |
| ... | @@ -441,6 +447,8 @@ extern fn c_struct_f32_f32f32(Struct_f32_f32f32) void; | ... | @@ -441,6 +447,8 @@ extern fn c_struct_f32_f32f32(Struct_f32_f32f32) void; |
| 441 | test "C ABI struct f32 {f32,f32}" { | 447 | test "C ABI struct f32 {f32,f32}" { |
| 442 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 448 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 443 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 449 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 450 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| | 451 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 444 | | 452 | |
| 445 | const s = c_ret_struct_f32_f32f32(); | 453 | const s = c_ret_struct_f32_f32f32(); |
| 446 | try expect(s.a == 1.0); | 454 | try expect(s.a == 1.0); |
| ... | @@ -476,6 +484,7 @@ extern fn c_struct_u32_union_u32_u32u32(Struct_u32_Union_u32_u32u32) void; | ... | @@ -476,6 +484,7 @@ extern fn c_struct_u32_union_u32_u32u32(Struct_u32_Union_u32_u32u32) void; |
| 476 | test "C ABI struct{u32,union{u32,struct{u32,u32}}}" { | 484 | test "C ABI struct{u32,union{u32,struct{u32,u32}}}" { |
| 477 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 485 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 478 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 486 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 487 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 479 | | 488 | |
| 480 | const s = c_ret_struct_u32_union_u32_u32u32(); | 489 | const s = c_ret_struct_u32_union_u32_u32u32(); |
| 481 | try expect(s.a == 1); | 490 | try expect(s.a == 1); |
| ... | @@ -494,6 +503,8 @@ extern fn c_struct_i32_i32(Struct_i32_i32) void; | ... | @@ -494,6 +503,8 @@ extern fn c_struct_i32_i32(Struct_i32_i32) void; |
| 494 | test "C ABI struct i32 i32" { | 503 | test "C ABI struct i32 i32" { |
| 495 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 504 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 496 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 505 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 506 | if (builtin.cpu.arch == .riscv32) return error.SkipZigTest; |
| | 507 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 497 | | 508 | |
| 498 | const s: Struct_i32_i32 = .{ | 509 | const s: Struct_i32_i32 = .{ |
| 499 | .a = 1, | 510 | .a = 1, |
| ... | @@ -523,7 +534,8 @@ extern fn c_big_struct(BigStruct) void; | ... | @@ -523,7 +534,8 @@ extern fn c_big_struct(BigStruct) void; |
| 523 | | 534 | |
| 524 | test "C ABI big struct" { | 535 | test "C ABI big struct" { |
| 525 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 536 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 526 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 537 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 538 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 527 | | 539 | |
| 528 | const s = BigStruct{ | 540 | const s = BigStruct{ |
| 529 | .a = 1, | 541 | .a = 1, |
| ... | @@ -550,6 +562,7 @@ extern fn c_big_union(BigUnion) void; | ... | @@ -550,6 +562,7 @@ extern fn c_big_union(BigUnion) void; |
| 550 | | 562 | |
| 551 | test "C ABI big union" { | 563 | test "C ABI big union" { |
| 552 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 564 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 565 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 553 | | 566 | |
| 554 | const x = BigUnion{ | 567 | const x = BigUnion{ |
| 555 | .a = BigStruct{ | 568 | .a = BigStruct{ |
| ... | @@ -583,6 +596,7 @@ extern fn c_ret_med_struct_mixed() MedStructMixed; | ... | @@ -583,6 +596,7 @@ extern fn c_ret_med_struct_mixed() MedStructMixed; |
| 583 | test "C ABI medium struct of ints and floats" { | 596 | test "C ABI medium struct of ints and floats" { |
| 584 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 597 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 585 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 598 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 599 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 586 | | 600 | |
| 587 | const s = MedStructMixed{ | 601 | const s = MedStructMixed{ |
| 588 | .a = 1234, | 602 | .a = 1234, |
| ... | @@ -615,6 +629,8 @@ test "C ABI small struct of ints" { | ... | @@ -615,6 +629,8 @@ test "C ABI small struct of ints" { |
| 615 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 629 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 616 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 630 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 617 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 631 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 632 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; |
| | 633 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 618 | | 634 | |
| 619 | const s = SmallStructInts{ | 635 | const s = SmallStructInts{ |
| 620 | .a = 1, | 636 | .a = 1, |
| ... | @@ -648,6 +664,7 @@ extern fn c_ret_med_struct_ints() MedStructInts; | ... | @@ -648,6 +664,7 @@ extern fn c_ret_med_struct_ints() MedStructInts; |
| 648 | test "C ABI medium struct of ints" { | 664 | test "C ABI medium struct of ints" { |
| 649 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 665 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 650 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 666 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 667 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 651 | | 668 | |
| 652 | const s = MedStructInts{ | 669 | const s = MedStructInts{ |
| 653 | .x = 1, | 670 | .x = 1, |
| ... | @@ -726,6 +743,7 @@ test "C ABI split struct of ints" { | ... | @@ -726,6 +743,7 @@ test "C ABI split struct of ints" { |
| 726 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 743 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 727 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 744 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 728 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 745 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 746 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 729 | | 747 | |
| 730 | const s = SplitStructInt{ | 748 | const s = SplitStructInt{ |
| 731 | .a = 1234, | 749 | .a = 1234, |
| ... | @@ -753,6 +771,7 @@ test "C ABI split struct of ints and floats" { | ... | @@ -753,6 +771,7 @@ test "C ABI split struct of ints and floats" { |
| 753 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 771 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 754 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 772 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 755 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 773 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 774 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 756 | | 775 | |
| 757 | const s = SplitStructMixed{ | 776 | const s = SplitStructMixed{ |
| 758 | .a = 1234, | 777 | .a = 1234, |
| ... | @@ -779,7 +798,8 @@ extern fn c_multiple_struct_floats(FloatRect, FloatRect) void; | ... | @@ -779,7 +798,8 @@ extern fn c_multiple_struct_floats(FloatRect, FloatRect) void; |
| 779 | | 798 | |
| 780 | test "C ABI sret and byval together" { | 799 | test "C ABI sret and byval together" { |
| 781 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 800 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 782 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 801 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 802 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 783 | | 803 | |
| 784 | const s = BigStruct{ | 804 | const s = BigStruct{ |
| 785 | .a = 1, | 805 | .a = 1, |
| ... | @@ -832,6 +852,7 @@ extern fn c_big_struct_floats(Vector5) void; | ... | @@ -832,6 +852,7 @@ extern fn c_big_struct_floats(Vector5) void; |
| 832 | test "C ABI structs of floats as parameter" { | 852 | test "C ABI structs of floats as parameter" { |
| 833 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 853 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 834 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 854 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 855 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 835 | | 856 | |
| 836 | const v3 = Vector3{ | 857 | const v3 = Vector3{ |
| 837 | .x = 3.0, | 858 | .x = 3.0, |
| ... | @@ -871,6 +892,8 @@ export fn zig_multiple_struct_ints(x: Rect, y: Rect) void { | ... | @@ -871,6 +892,8 @@ export fn zig_multiple_struct_ints(x: Rect, y: Rect) void { |
| 871 | | 892 | |
| 872 | test "C ABI structs of ints as multiple parameters" { | 893 | test "C ABI structs of ints as multiple parameters" { |
| 873 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 894 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 895 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| | 896 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 874 | | 897 | |
| 875 | const r1 = Rect{ | 898 | const r1 = Rect{ |
| 876 | .left = 1, | 899 | .left = 1, |
| ... | @@ -908,6 +931,7 @@ export fn zig_multiple_struct_floats(x: FloatRect, y: FloatRect) void { | ... | @@ -908,6 +931,7 @@ export fn zig_multiple_struct_floats(x: FloatRect, y: FloatRect) void { |
| 908 | test "C ABI structs of floats as multiple parameters" { | 931 | test "C ABI structs of floats as multiple parameters" { |
| 909 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 932 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 910 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 933 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 934 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 911 | | 935 | |
| 912 | const r1 = FloatRect{ | 936 | const r1 = FloatRect{ |
| 913 | .left = 1, | 937 | .left = 1, |
| ... | @@ -1021,6 +1045,7 @@ test "Struct with array as padding." { | ... | @@ -1021,6 +1045,7 @@ test "Struct with array as padding." { |
| 1021 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 1045 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 1022 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 1046 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 1023 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 1047 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 1048 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1024 | | 1049 | |
| 1025 | c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 }); | 1050 | c_struct_with_array(.{ .a = 1, .padding = undefined, .b = 2 }); |
| 1026 | | 1051 | |
| ... | @@ -1046,6 +1071,7 @@ extern fn c_ret_float_array_struct() FloatArrayStruct; | ... | @@ -1046,6 +1071,7 @@ extern fn c_ret_float_array_struct() FloatArrayStruct; |
| 1046 | test "Float array like struct" { | 1071 | test "Float array like struct" { |
| 1047 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 1072 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 1048 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 1073 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 1074 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1049 | | 1075 | |
| 1050 | c_float_array_struct(.{ | 1076 | c_float_array_struct(.{ |
| 1051 | .origin = .{ | 1077 | .origin = .{ |
| ... | @@ -1073,6 +1099,7 @@ extern fn c_ret_small_vec() SmallVec; | ... | @@ -1073,6 +1099,7 @@ extern fn c_ret_small_vec() SmallVec; |
| 1073 | test "small simd vector" { | 1099 | test "small simd vector" { |
| 1074 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; | 1100 | if (builtin.cpu.arch == .x86) return error.SkipZigTest; |
| 1075 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; | 1101 | if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest; |
| | 1102 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1076 | | 1103 | |
| 1077 | c_small_vec(.{ 1, 2 }); | 1104 | c_small_vec(.{ 1, 2 }); |
| 1078 | | 1105 | |
| ... | @@ -1134,7 +1161,8 @@ extern fn c_ret_vector_2_float() Vector2Float; | ... | @@ -1134,7 +1161,8 @@ extern fn c_ret_vector_2_float() Vector2Float; |
| 1134 | extern fn c_ret_vector_4_float() Vector4Float; | 1161 | extern fn c_ret_vector_4_float() Vector4Float; |
| 1135 | | 1162 | |
| 1136 | test "float simd vectors" { | 1163 | test "float simd vectors" { |
| 1137 | if (builtin.cpu.arch == .powerpc or builtin.cpu.arch == .powerpc64le) return error.SkipZigTest; | 1164 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 1165 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 1138 | | 1166 | |
| 1139 | { | 1167 | { |
| 1140 | c_vector_2_float(.{ 1.0, 2.0 }); | 1168 | c_vector_2_float(.{ 1.0, 2.0 }); |
| ... | @@ -5419,6 +5447,7 @@ test "C ABI pointer sized float struct" { | ... | @@ -5419,6 +5447,7 @@ test "C ABI pointer sized float struct" { |
| 5419 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5447 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5420 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5448 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5421 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5449 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 5450 | if (builtin.cpu.arch.isArm() and builtin.abi.float() == .soft) return error.SkipZigTest; |
| 5422 | | 5451 | |
| 5423 | c_ptr_size_float_struct(.{ .x = 1, .y = 2 }); | 5452 | c_ptr_size_float_struct(.{ .x = 1, .y = 2 }); |
| 5424 | | 5453 | |
| ... | @@ -5441,24 +5470,28 @@ test "DC: Zig passes to C" { | ... | @@ -5441,24 +5470,28 @@ test "DC: Zig passes to C" { |
| 5441 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5470 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5442 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5471 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5443 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5472 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5473 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5444 | try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 })); | 5474 | try expectOk(c_assert_DC(.{ .v1 = -0.25, .v2 = 15 })); |
| 5445 | } | 5475 | } |
| 5446 | test "DC: Zig returns to C" { | 5476 | test "DC: Zig returns to C" { |
| 5447 | if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest; | 5477 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5448 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5478 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5449 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5479 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5480 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5450 | try expectOk(c_assert_ret_DC()); | 5481 | try expectOk(c_assert_ret_DC()); |
| 5451 | } | 5482 | } |
| 5452 | test "DC: C passes to Zig" { | 5483 | test "DC: C passes to Zig" { |
| 5453 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5484 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5454 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5485 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5455 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5486 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5487 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5456 | try expectOk(c_send_DC()); | 5488 | try expectOk(c_send_DC()); |
| 5457 | } | 5489 | } |
| 5458 | test "DC: C returns to Zig" { | 5490 | test "DC: C returns to Zig" { |
| 5459 | if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest; | 5491 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5460 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; | 5492 | if (builtin.cpu.arch.isRISCV()) return error.SkipZigTest; |
| 5461 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5493 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5494 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5462 | try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC()); | 5495 | try expectEqual(DC{ .v1 = -0.25, .v2 = 15 }, c_ret_DC()); |
| 5463 | } | 5496 | } |
| 5464 | | 5497 | |
| ... | @@ -5484,11 +5517,13 @@ test "CFF: Zig passes to C" { | ... | @@ -5484,11 +5517,13 @@ test "CFF: Zig passes to C" { |
| 5484 | if (builtin.target.cpu.arch == .x86) return error.SkipZigTest; | 5517 | if (builtin.target.cpu.arch == .x86) return error.SkipZigTest; |
| 5485 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5518 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5486 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5519 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5520 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5487 | try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 })); | 5521 | try expectOk(c_assert_CFF(.{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 })); |
| 5488 | } | 5522 | } |
| 5489 | test "CFF: Zig returns to C" { | 5523 | test "CFF: Zig returns to C" { |
| 5490 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5524 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5491 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5525 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5526 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5492 | try expectOk(c_assert_ret_CFF()); | 5527 | try expectOk(c_assert_ret_CFF()); |
| 5493 | } | 5528 | } |
| 5494 | test "CFF: C passes to Zig" { | 5529 | test "CFF: C passes to Zig" { |
| ... | @@ -5497,6 +5532,7 @@ test "CFF: C passes to Zig" { | ... | @@ -5497,6 +5532,7 @@ test "CFF: C passes to Zig" { |
| 5497 | if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest; | 5532 | if (builtin.cpu.arch == .aarch64 and builtin.mode != .Debug) return error.SkipZigTest; |
| 5498 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5533 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5499 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5534 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5535 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5500 | | 5536 | |
| 5501 | try expectOk(c_send_CFF()); | 5537 | try expectOk(c_send_CFF()); |
| 5502 | } | 5538 | } |
| ... | @@ -5505,6 +5541,7 @@ test "CFF: C returns to Zig" { | ... | @@ -5505,6 +5541,7 @@ test "CFF: C returns to Zig" { |
| 5505 | if (builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest; | 5541 | if (builtin.cpu.arch.isRISCV() and builtin.mode != .Debug) return error.SkipZigTest; |
| 5506 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5542 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5507 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5543 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5544 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5508 | try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF()); | 5545 | try expectEqual(CFF{ .v1 = 39, .v2 = 0.875, .v3 = 1.0 }, c_ret_CFF()); |
| 5509 | } | 5546 | } |
| 5510 | pub extern fn c_assert_CFF(lv: CFF) c_int; | 5547 | pub extern fn c_assert_CFF(lv: CFF) c_int; |
| ... | @@ -5529,21 +5566,25 @@ const PD = extern struct { v1: ?*anyopaque, v2: f64 }; | ... | @@ -5529,21 +5566,25 @@ const PD = extern struct { v1: ?*anyopaque, v2: f64 }; |
| 5529 | test "PD: Zig passes to C" { | 5566 | test "PD: Zig passes to C" { |
| 5530 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5567 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5531 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5568 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5569 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5532 | try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 })); | 5570 | try expectOk(c_assert_PD(.{ .v1 = null, .v2 = 0.5 })); |
| 5533 | } | 5571 | } |
| 5534 | test "PD: Zig returns to C" { | 5572 | test "PD: Zig returns to C" { |
| 5535 | if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest; | 5573 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5536 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5574 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5575 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5537 | try expectOk(c_assert_ret_PD()); | 5576 | try expectOk(c_assert_ret_PD()); |
| 5538 | } | 5577 | } |
| 5539 | test "PD: C passes to Zig" { | 5578 | test "PD: C passes to Zig" { |
| 5540 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5579 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5541 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5580 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5581 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5542 | try expectOk(c_send_PD()); | 5582 | try expectOk(c_send_PD()); |
| 5543 | } | 5583 | } |
| 5544 | test "PD: C returns to Zig" { | 5584 | test "PD: C returns to Zig" { |
| 5545 | if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest; | 5585 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5546 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5586 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5587 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5547 | try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD()); | 5588 | try expectEqual(PD{ .v1 = null, .v2 = 0.5 }, c_ret_PD()); |
| 5548 | } | 5589 | } |
| 5549 | pub extern fn c_assert_PD(lv: PD) c_int; | 5590 | pub extern fn c_assert_PD(lv: PD) c_int; |
| ... | @@ -5576,6 +5617,7 @@ extern fn c_modify_by_ref_param(ByRef) ByRef; | ... | @@ -5576,6 +5617,7 @@ extern fn c_modify_by_ref_param(ByRef) ByRef; |
| 5576 | | 5617 | |
| 5577 | test "C function modifies by ref param" { | 5618 | test "C function modifies by ref param" { |
| 5578 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5619 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 5620 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5579 | | 5621 | |
| 5580 | const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined }); | 5622 | const res = c_modify_by_ref_param(.{ .val = 1, .arr = undefined }); |
| 5581 | try expect(res.val == 42); | 5623 | try expect(res.val == 42); |
| ... | @@ -5596,8 +5638,9 @@ const ByVal = extern struct { | ... | @@ -5596,8 +5638,9 @@ const ByVal = extern struct { |
| 5596 | | 5638 | |
| 5597 | extern fn c_func_ptr_byval(*anyopaque, *anyopaque, ByVal, c_ulong, *anyopaque, c_ulong) void; | 5639 | extern fn c_func_ptr_byval(*anyopaque, *anyopaque, ByVal, c_ulong, *anyopaque, c_ulong) void; |
| 5598 | test "C function that takes byval struct called via function pointer" { | 5640 | test "C function that takes byval struct called via function pointer" { |
| 5599 | if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest; | 5641 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5600 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5642 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 5643 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5601 | | 5644 | |
| 5602 | var fn_ptr = &c_func_ptr_byval; | 5645 | var fn_ptr = &c_func_ptr_byval; |
| 5603 | _ = &fn_ptr; | 5646 | _ = &fn_ptr; |
| ... | @@ -5736,6 +5779,8 @@ extern fn stdcall_coord2(Coord2, Coord2, Coord2) callconv(stdcall_callconv) Coor | ... | @@ -5736,6 +5779,8 @@ extern fn stdcall_coord2(Coord2, Coord2, Coord2) callconv(stdcall_callconv) Coor |
| 5736 | test "Stdcall ABI structs" { | 5779 | test "Stdcall ABI structs" { |
| 5737 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5780 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5738 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; | 5781 | if (builtin.cpu.arch.isPowerPC()) return error.SkipZigTest; |
| | 5782 | if (builtin.cpu.arch == .aarch64_be) return error.SkipZigTest; |
| | 5783 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5739 | | 5784 | |
| 5740 | const res = stdcall_coord2( | 5785 | const res = stdcall_coord2( |
| 5741 | .{ .x = 0x1111, .y = 0x2222 }, | 5786 | .{ .x = 0x1111, .y = 0x2222 }, |
| ... | @@ -5749,6 +5794,7 @@ test "Stdcall ABI structs" { | ... | @@ -5749,6 +5794,7 @@ test "Stdcall ABI structs" { |
| 5749 | extern fn stdcall_big_union(BigUnion) callconv(stdcall_callconv) void; | 5794 | extern fn stdcall_big_union(BigUnion) callconv(stdcall_callconv) void; |
| 5750 | test "Stdcall ABI big union" { | 5795 | test "Stdcall ABI big union" { |
| 5751 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5796 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 5797 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5752 | | 5798 | |
| 5753 | const x = BigUnion{ | 5799 | const x = BigUnion{ |
| 5754 | .a = BigStruct{ | 5800 | .a = BigStruct{ |
| ... | @@ -5821,6 +5867,7 @@ const byval_tail_callsite_attr = struct { | ... | @@ -5821,6 +5867,7 @@ const byval_tail_callsite_attr = struct { |
| 5821 | test "byval tail callsite attribute" { | 5867 | test "byval tail callsite attribute" { |
| 5822 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; | 5868 | if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; |
| 5823 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; | 5869 | if (builtin.cpu.arch.isPowerPC32()) return error.SkipZigTest; |
| | 5870 | if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest; |
| 5824 | | 5871 | |
| 5825 | // Originally reported at https://github.com/ziglang/zig/issues/16290 | 5872 | // Originally reported at https://github.com/ziglang/zig/issues/16290 |
| 5826 | // the bug was that the extern function had the byval attribute, but | 5873 | // the bug was that the extern function had the byval attribute, but |