aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-05-14 12:48:11 +0300
committerVeikka Tuominen <git@vexu.eu>2023-05-15 10:31:24 +0300
commitab5a72f6ca9446820f3f516873e1b5d1aeefb5a8 (patch)
tree9c0320b0a067d6ea8fd3b7831cc6e1de55dfc5fa /test/behavior
parent2ce9122a009efa0a5d2857a0d29ad3d77a81dff1 (diff)
downloadzig-ab5a72f6ca9446820f3f516873e1b5d1aeefb5a8.tar.gz
zig-ab5a72f6ca9446820f3f516873e1b5d1aeefb5a8.zip
Sema: ensure dest ptr of memcpy has length
Closes #15513
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/memcpy.zig21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/behavior/memcpy.zig b/test/behavior/memcpy.zig
index 66657b26c9..a2aad42402 100644
--- a/test/behavior/memcpy.zig
+++ b/test/behavior/memcpy.zig
@@ -44,3 +44,24 @@ fn testMemcpyBothSinglePtrArrayOneIsNullTerminated() !void {
try expect(buf[98] == 'l');
try expect(buf[99] == 'o');
}
+
+test "@memcpy dest many pointer" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+
+ try testMemcpyDestManyPtr();
+ try comptime testMemcpyDestManyPtr();
+}
+
+fn testMemcpyDestManyPtr() !void {
+ var str = "hello".*;
+ var buf: [5]u8 = undefined;
+ @memcpy(@ptrCast([*]u8, &buf), @ptrCast([*]const u8, &str)[0..5]);
+ try expect(buf[0] == 'h');
+ try expect(buf[1] == 'e');
+ try expect(buf[2] == 'l');
+ try expect(buf[3] == 'l');
+ try expect(buf[4] == 'o');
+}