zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit b86aadfa385ad2af8df601c0c69fa2e45eacd0ff (tree)
parent 4d9377923d26ffa662612c75262849eda67d50fe
Author: Ali Chraghi <63465728+AliChraghi@users.noreply.github.com>
Date:   Tue, 28 Dec 2021 08:03:11 +0330

std: Skip `comptime` struct fields in `mem.zeroes()` (#10406)

closes #9934
Diffstat:
Mlib/std/mem.zig | 7++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/std/mem.zig b/lib/std/mem.zig @@ -275,7 +275,9 @@ pub fn zeroes(comptime T: type) T { } else { var structure: T = undefined; inline for (struct_info.fields) |field| { - @field(structure, field.name) = zeroes(@TypeOf(@field(structure, field.name))); + if (!field.is_comptime) { + @field(structure, field.name) = zeroes(@TypeOf(@field(structure, field.name))); + } } return structure; } @@ -342,6 +344,8 @@ test "mem.zeroes" { try testing.expect(a.y == 10); const ZigStruct = struct { + comptime comptime_field: u8 = 5, + integral_types: struct { integer_0: i0, integer_8: i8, @@ -376,6 +380,7 @@ test "mem.zeroes" { }; const b = zeroes(ZigStruct); + try testing.expectEqual(@as(u8, 5), b.comptime_field); try testing.expectEqual(@as(i8, 0), b.integral_types.integer_0); try testing.expectEqual(@as(i8, 0), b.integral_types.integer_8); try testing.expectEqual(@as(i16, 0), b.integral_types.integer_16);