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:
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);