authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-06-19 20:02:47-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-06-23 05:58:14+02:00
logc71bb0f2b66f72122e25400c97a1213d59e4ad73
treec170475651b2b329218d07a63256695c66854488
parent24bfefa75e813af188e3fa43e473e495cc97ed43

x86_64: fix pair live-out tracking

Closes #24226

2 files changed, 15 insertions(+), 0 deletions(-)

src/arch/x86_64/CodeGen.zig+1
......@@ -803,6 +803,7 @@ const InstTracking = struct {
803803 remaining_reg = tracked_reg;
804804 };
805805 assert(found_reg);
806 if (tracking.long == .none) tracking.long = tracking.short;
806807 tracking.short = switch (remaining_reg) {
807808 .none => .{ .dead = function.scope_generation },
808809 else => .{ .register = remaining_reg },
test/behavior/slice.zig+14
......@@ -1079,3 +1079,17 @@ test "sentinel expression in slice operation has result type" {
10791079 comptime assert(slice[0] == 1);
10801080 comptime assert(slice[1] == 2);
10811081}
1082
1083test "conditionally return second argument slice" {
1084 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1085
1086 const S = struct {
1087 fn foo(cond: bool, slice: []const u8) []const u8 {
1088 if (cond) return slice;
1089 return &.{};
1090 }
1091 };
1092
1093 try expectEqualStrings("", S.foo(false, "false"));
1094 try expectEqualStrings("true", S.foo(true, "true"));
1095}