From fecd28371d5c0e25357dfb91f75c8790f8b4155b Mon Sep 17 00:00:00 2001 From: Matthew Lugg Date: Wed, 6 May 2026 11:21:40 +0100 Subject: [PATCH] Sema: fix crash bitcasting undefined to bitpack type Resolves: https://codeberg.org/ziglang/zig/issues/31944 --- src/Sema/bitcast.zig | 2 ++ test/behavior/packed-struct.zig | 6 ++++++ test/behavior/packed-union.zig | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/src/Sema/bitcast.zig b/src/Sema/bitcast.zig index 6d3da8daf4ec2a51b3f2c36b55812863e70f8d8a..40a29e183bd4324aedc297ab1cba278c987e63fa 100644 --- a/src/Sema/bitcast.zig +++ b/src/Sema/bitcast.zig @@ -565,6 +565,7 @@ const PackValueBits = struct { }, .@"packed" => { const backing_int_val = try pack.primitive(ty.bitpackBackingInt(zcu)); + if (backing_int_val.isUndef(zcu)) return pt.undefValue(ty); return pt.bitpackValue(ty, backing_int_val); }, }, @@ -659,6 +660,7 @@ const PackValueBits = struct { }, .@"packed" => { const backing_int_val = try pack.primitive(ty.bitpackBackingInt(zcu)); + if (backing_int_val.isUndef(zcu)) return pt.undefValue(ty); return pt.bitpackValue(ty, backing_int_val); }, }, diff --git a/test/behavior/packed-struct.zig b/test/behavior/packed-struct.zig index a851cfc509093051b61036a119735bc270418a92..ad0107dcf1c9437bec0fac7a97f434e0983d8a83 100644 --- a/test/behavior/packed-struct.zig +++ b/test/behavior/packed-struct.zig @@ -1240,3 +1240,9 @@ test "packed struct store of comparison result" { try expect(result2.a); try expect(!result2.b); } + +test "initialize packed struct field to undefined at comptime" { + const S = packed struct(u8) { x: u8 }; + const val: S = .{ .x = undefined }; + _ = val; +} diff --git a/test/behavior/packed-union.zig b/test/behavior/packed-union.zig index fec142665737c166abd8ac921bec555cef85a530..b0850392aa51efd60cac8af9403656bc07bae9a3 100644 --- a/test/behavior/packed-union.zig +++ b/test/behavior/packed-union.zig @@ -219,3 +219,9 @@ test "packed union equality" { try S.doTest(x, y); comptime try S.doTest(x, y); } + +test "initialize packed union field to undefined at comptime" { + const U = packed union(u8) { x: u8 }; + const val: U = .{ .x = undefined }; + _ = val; +} -- 2.54.0