Skip to content

Commit c71bb0f

Browse files
jacobly0andrewrk
authored andcommitted
x86_64: fix pair live-out tracking
Closes #24226
1 parent 24bfefa commit c71bb0f

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/arch/x86_64/CodeGen.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1083+
test "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+
}

0 commit comments

Comments
 (0)