From 2583a39fb6f85fa65caba04f202c1654a5e8f3f6 Mon Sep 17 00:00:00 2001 From: r00ster91 Date: Sun, 2 Jul 2023 10:01:18 -0400 Subject: [PATCH] behavior: test @bitCast of packed struct of bools This seems to have resolved itself now. Tested on x86_64 using debug optimize mode. Closes #9851 --- test/behavior/bitcast.zig | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/behavior/bitcast.zig b/test/behavior/bitcast.zig index 0c137a2baa..49fc85a13e 100644 --- a/test/behavior/bitcast.zig +++ b/test/behavior/bitcast.zig @@ -459,3 +459,47 @@ test "bitcast nan float does modify signaling bit" { try expectEqual(math.nan_u128, @as(u128, @bitCast(snan_f128_var))); try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var)); } + +test "@bitCast of packed struct of bools all true" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO + + const P = packed struct { + b0: bool, + b1: bool, + b2: bool, + b3: bool, + }; + var p = std.mem.zeroes(P); + p.b0 = true; + p.b1 = true; + p.b2 = true; + p.b3 = true; + try expect(@as(u8, @as(u4, @bitCast(p))) == 15); +} + +test "@bitCast of packed struct of bools all false" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO + + const P = packed struct { + b0: bool, + b1: bool, + b2: bool, + b3: bool, + }; + var p = std.mem.zeroes(P); + p.b0 = false; + p.b1 = false; + p.b2 = false; + p.b3 = false; + try expect(@as(u8, @as(u4, @bitCast(p))) == 0); +}