Commit 68f2d6cb24

Andrew Kelley <andrew@ziglang.org>
2022-09-14 03:19:36
std: remove workaround for fixed bug
The miscompilation in question has been fixed upstream in LLVM 13. closes #8117
1 parent 0a89624
Changed files (1)
lib/std/multi_array_list.zig
@@ -320,11 +320,7 @@ pub fn MultiArrayList(comptime S: type) type {
             inline for (fields) |field_info, i| {
                 if (@sizeOf(field_info.field_type) != 0) {
                     const field = @intToEnum(Field, i);
-                    // TODO we should be able to use std.mem.copy here but it causes a
-                    // test failure on aarch64 with -OReleaseFast
-                    const src_slice = mem.sliceAsBytes(self_slice.items(field));
-                    const dst_slice = mem.sliceAsBytes(other_slice.items(field));
-                    @memcpy(dst_slice.ptr, src_slice.ptr, src_slice.len);
+                    mem.copy(field_info.field_type, other_slice.items(field), self_slice.items(field));
                 }
             }
             gpa.free(self.allocatedBytes());
@@ -388,11 +384,7 @@ pub fn MultiArrayList(comptime S: type) type {
             inline for (fields) |field_info, i| {
                 if (@sizeOf(field_info.field_type) != 0) {
                     const field = @intToEnum(Field, i);
-                    // TODO we should be able to use std.mem.copy here but it causes a
-                    // test failure on aarch64 with -OReleaseFast
-                    const src_slice = mem.sliceAsBytes(self_slice.items(field));
-                    const dst_slice = mem.sliceAsBytes(other_slice.items(field));
-                    @memcpy(dst_slice.ptr, src_slice.ptr, src_slice.len);
+                    mem.copy(field_info.field_type, other_slice.items(field), self_slice.items(field));
                 }
             }
             gpa.free(self.allocatedBytes());
@@ -411,11 +403,7 @@ pub fn MultiArrayList(comptime S: type) type {
             inline for (fields) |field_info, i| {
                 if (@sizeOf(field_info.field_type) != 0) {
                     const field = @intToEnum(Field, i);
-                    // TODO we should be able to use std.mem.copy here but it causes a
-                    // test failure on aarch64 with -OReleaseFast
-                    const src_slice = mem.sliceAsBytes(self_slice.items(field));
-                    const dst_slice = mem.sliceAsBytes(result_slice.items(field));
-                    @memcpy(dst_slice.ptr, src_slice.ptr, src_slice.len);
+                    mem.copy(field_info.field_type, result_slice.items(field), self_slice.items(field));
                 }
             }
             return result;