From b86aadfa385ad2af8df601c0c69fa2e45eacd0ff Mon Sep 17 00:00:00 2001 From: Ali Chraghi <63465728+AliChraghi@users.noreply.github.com> Date: Tue, 28 Dec 2021 08:03:11 +0330 Subject: [PATCH] std: Skip `comptime` struct fields in `mem.zeroes()` (#10406) closes #9934 --- lib/std/mem.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/std/mem.zig b/lib/std/mem.zig index dc6b4bcd4c..348f602621 100644 --- 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);