| ... | @@ -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; |