Commit 2583a39fb6

r00ster91 <r00ster91@proton.me>
2023-07-02 16:01:18
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
1 parent cb5a6be
Changed files (1)
test
behavior
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);
+}