| author | |
| committer | |
| log | 7fbbeae617ad9c30605a78377888c284e5d9ccdc |
| tree | 3e56b1535d3930ff7cb621630c64008ceb42261d |
| parent | 89572c63424eb8d9da90f2676b55c660ece57688 |
| signature |
2 files changed, 18 insertions(+), 1 deletions(-)
src/value.zig+8-1| ... | ... | @@ -803,7 +803,14 @@ pub const Value = struct { |
| 803 | 803 | switch (ip.indexToKey((try val.intFromEnum(ty, mod)).toIntern()).int.storage) { |
| 804 | 804 | inline .u64, .i64 => |int| std.mem.writeVarPackedInt(buffer, bit_offset, bits, int, endian), |
| 805 | 805 | .big_int => |bigint| bigint.writePackedTwosComplement(buffer, bit_offset, bits, endian), |
| 806 | else => unreachable, | |
| 806 | .lazy_align => |lazy_align| { | |
| 807 | const num = Type.fromInterned(lazy_align).abiAlignment(mod).toByteUnits(0); | |
| 808 | std.mem.writeVarPackedInt(buffer, bit_offset, bits, num, endian); | |
| 809 | }, | |
| 810 | .lazy_size => |lazy_size| { | |
| 811 | const num = Type.fromInterned(lazy_size).abiSize(mod); | |
| 812 | std.mem.writeVarPackedInt(buffer, bit_offset, bits, num, endian); | |
| 813 | }, | |
| 807 | 814 | } |
| 808 | 815 | }, |
| 809 | 816 | .Float => switch (ty.floatBits(target)) { |
test/behavior/enum.zig+10| ... | ... | @@ -1225,3 +1225,13 @@ test "auto-numbered enum with signed tag type" { |
| 1225 | 1225 | try std.testing.expectEqualStrings("a", @tagName(E.a)); |
| 1226 | 1226 | try std.testing.expectEqualStrings("b", @tagName(E.b)); |
| 1227 | 1227 | } |
| 1228 | ||
| 1229 | test "lazy initialized field" { | |
| 1230 | try std.testing.expectEqual(@as(u8, @alignOf(struct {})), getLazyInitialized(.a)); | |
| 1231 | } | |
| 1232 | ||
| 1233 | fn getLazyInitialized(param: enum(u8) { | |
| 1234 | a = @bitCast(packed struct(u8) { a: u8 }{ .a = @alignOf(struct {}) }), | |
| 1235 | }) u8 { | |
| 1236 | return @intFromEnum(param); | |
| 1237 | } |