authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-05 15:45:33-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-05 15:45:33-07:00
logcf42ae178deae475c4fdc2d927f91b4980ec8be5
tree937fd8dd00db875130a1988653fa3f9ad05ba925
parent0f3fa4d6540af42552571bf46609ab5546c16b72

std.MultiArrayList: use `@memset` builtin for undefined

See comment for more details

1 files changed, 7 insertions(+), 1 deletions(-)

lib/std/multi_array_list.zig+7-1
...@@ -180,9 +180,15 @@ pub fn MultiArrayList(comptime S: type) type {...@@ -180,9 +180,15 @@ pub fn MultiArrayList(comptime S: type) type {
180 capacityInBytes(new_len),180 capacityInBytes(new_len),
181 .exact,181 .exact,
182 ) catch {182 ) catch {
183 const self_slice = self.slice();
183 inline for (fields) |field_info, i| {184 inline for (fields) |field_info, i| {
184 const field = @intToEnum(Field, i);185 const field = @intToEnum(Field, i);
185 mem.set(field_info.field_type, self.slice().items(field)[new_len..], undefined);186 const dest_slice = self_slice.items(field)[new_len..];
187 const byte_count = dest_slice.len * @sizeOf(field_info.field_type);
188 // We use memset here for more efficient codegen in safety-checked,
189 // valgrind-enabled builds. Otherwise the valgrind client request
190 // will be repeated for every element.
191 @memset(@ptrCast([*]u8, dest_slice.ptr), undefined, byte_count);
186 }192 }
187 self.len = new_len;193 self.len = new_len;
188 return;194 return;