From cf42ae178deae475c4fdc2d927f91b4980ec8be5 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 5 Feb 2021 15:45:33 -0700 Subject: [PATCH] std.MultiArrayList: use `@memset` builtin for undefined See comment for more details --- lib/std/multi_array_list.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index aaf105bb57..24269c2316 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -180,9 +180,15 @@ pub fn MultiArrayList(comptime S: type) type { capacityInBytes(new_len), .exact, ) catch { + const self_slice = self.slice(); inline for (fields) |field_info, i| { const field = @intToEnum(Field, i); - mem.set(field_info.field_type, self.slice().items(field)[new_len..], undefined); + const dest_slice = self_slice.items(field)[new_len..]; + const byte_count = dest_slice.len * @sizeOf(field_info.field_type); + // We use memset here for more efficient codegen in safety-checked, + // valgrind-enabled builds. Otherwise the valgrind client request + // will be repeated for every element. + @memset(@ptrCast([*]u8, dest_slice.ptr), undefined, byte_count); } self.len = new_len; return;