aboutsummaryrefslogtreecommitdiff
path: root/lib/std/multi_array_list.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-02-05 15:45:33 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-02-05 15:45:33 -0700
commitcf42ae178deae475c4fdc2d927f91b4980ec8be5 (patch)
tree937fd8dd00db875130a1988653fa3f9ad05ba925 /lib/std/multi_array_list.zig
parent0f3fa4d6540af42552571bf46609ab5546c16b72 (diff)
downloadzig-cf42ae178deae475c4fdc2d927f91b4980ec8be5.tar.gz
zig-cf42ae178deae475c4fdc2d927f91b4980ec8be5.zip
std.MultiArrayList: use `@memset` builtin for undefined
See comment for more details
Diffstat (limited to 'lib/std/multi_array_list.zig')
-rw-r--r--lib/std/multi_array_list.zig8
1 files changed, 7 insertions, 1 deletions
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;