zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit f92b998f9fe985d554d6078bb2bb11d094d94b91 (tree)
parent 1293f080fdfc74966b541b44f0a907561df3d617
Author: Matthew Lugg <mlugg@mlugg.co.uk>
Date:   Fri,  6 Mar 2026 16:30:56 +0000

behavior: disable some tests under the C backend targeting MSVC

The bugs here actually exist on master branch too, but they are being
caught by the new static assertions which check type size and alignment.
It turns out that MSVC's struct/union "pack" pragma and its "align"
declspec interact in undocumented ways which are extremely problematic
for generated code. Solving this will require changing how the C backend
lowers various types; the disabled tests are all tagged unions, but
there are also issues with structs with underaligned fields which the
behavior tests just happen to not currently be triggering.

Diffstat:
Mtest/behavior/align.zig | 1+
Mtest/behavior/union.zig | 2++
2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/test/behavior/align.zig b/test/behavior/align.zig @@ -18,6 +18,7 @@ test "global variable alignment" { test "large alignment of local constant" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // flaky + if (builtin.zig_backend == .stage2_c and builtin.target.abi == .msvc) return error.SkipZigTest; const x: f32 align(128) = 12.34; try std.testing.expect(@intFromPtr(&x) % 128 == 0); diff --git a/test/behavior/union.zig b/test/behavior/union.zig @@ -148,6 +148,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_c and builtin.target.abi == .msvc) return error.SkipZigTest; switch (array[1]) { Value.Array => |arr| try expect(arr[4] == 3), else => unreachable, @@ -2022,6 +2023,7 @@ test "runtime union init, most-aligned field != largest" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_c and builtin.target.abi == .msvc) return error.SkipZigTest; const U = union(enum) { x: u128,