authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2025-02-06 11:52:04+01:00
committergravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2025-02-07 07:20:53+01:00
log87bbb49d5facb7144a50672ab20b3c9fc3da9186
tree682e74628b45487c1e552a045074ca4eee3f67cd
parent043e3b29cec156dd547d2cec15dec90271c2349b

test: check @tagName() in callconv C function

This is a regression test for an x86_64 backend miscompilation when using @tagName() in a callconv(.c) function with -fPIC.

1 files changed, 17 insertions(+), 0 deletions(-)

test/behavior/enum.zig+17
...@@ -1070,6 +1070,23 @@ test "tag name with signed enum values" {...@@ -1070,6 +1070,23 @@ test "tag name with signed enum values" {
1070 try expect(mem.eql(u8, @tagName(b), "bravo"));1070 try expect(mem.eql(u8, @tagName(b), "bravo"));
1071}1071}
10721072
1073test "@tagName in callconv(.c) function" {
1074 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1075 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1076 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
1077 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1078 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1079
1080 try expect(mem.orderZ(u8, testEnumTagNameCallconvC(), "Two") == .eq);
1081 comptime assert(mem.orderZ(u8, testEnumTagNameCallconvC(), "Two") == .eq);
1082}
1083
1084fn testEnumTagNameCallconvC() callconv(.c) [*:0]const u8 {
1085 var e: BareNumber = .Two;
1086 _ = &e;
1087 return @tagName(e);
1088}
1089
1073test "enum literal casting to optional" {1090test "enum literal casting to optional" {
1074 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;1091 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
1075 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1092 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;