Commit d657ede324
Changed files (3)
lib/std/special/test_runner.zig
@@ -142,7 +142,8 @@ pub fn main2() anyerror!void {
};
}
switch (builtin.zig_backend) {
- .stage2_llvm, .stage2_wasm, .stage2_x86_64 => {
+ .stage2_llvm, .stage2_wasm, .stage2_x86_64 => blk: {
+ if (builtin.os.tag == .macos) break :blk;
const passed = builtin.test_functions.len - skipped - failed;
const stderr = std.io.getStdErr();
writeInt(stderr, passed) catch {};
src/arch/x86_64/CodeGen.zig
@@ -3880,6 +3880,10 @@ fn genCondSwitchMir(self: *Self, ty: Type, condition: MCValue, case: MCValue) !u
.compare_flags_unsigned => unreachable,
.register => |cond_reg| {
try self.spillCompareFlagsIfOccupied();
+
+ self.register_manager.freezeRegs(&.{cond_reg});
+ defer self.register_manager.unfreezeRegs(&.{cond_reg});
+
switch (case) {
.none => unreachable,
.undef => unreachable,
@@ -3930,6 +3934,18 @@ fn genCondSwitchMir(self: *Self, ty: Type, condition: MCValue, case: MCValue) !u
},
}
},
+ .stack_offset => {
+ try self.spillCompareFlagsIfOccupied();
+
+ if (abi_size <= 8) {
+ const reg = try self.copyToTmpRegister(ty, condition);
+ self.register_manager.freezeRegs(&.{reg});
+ defer self.register_manager.unfreezeRegs(&.{reg});
+ return self.genCondSwitchMir(ty, .{ .register = reg }, case);
+ }
+
+ return self.fail("TODO implement switch mir when condition is stack offset with abi larger than 8 bytes", .{});
+ },
else => {
return self.fail("TODO implemenent switch mir when condition is {}", .{condition});
},
test/behavior/union.zig
@@ -115,6 +115,7 @@ const err = @as(anyerror!Agg, Agg{
const array = [_]Value{ v1, v2, v1, v2 };
test "unions embedded in aggregate types" {
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .macos) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;