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; +}