authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-27 14:44:04-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-27 14:44:04-07:00
log6e9fbc83ca2cfe145d73a102e4175e49524d0dee
treeb5537977dcf8f72d270ca84740cef82b6596914d
parentf4b067743f2ad25a1153153e3a89e0fe92837ea7

add behavior test for comptime pointer casting

comptime `@ptrCast` a subset of an array, then write through it closes #2444

3 files changed, 15 insertions(+), 0 deletions(-)

test/behavior/array.zig+1
...@@ -61,6 +61,7 @@ test "array concat with undefined" {...@@ -61,6 +61,7 @@ test "array concat with undefined" {
61}61}
6262
63test "array concat with tuple" {63test "array concat with tuple" {
64 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
64 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO65 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
65 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO66 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
6667
test/behavior/bugs/12571.zig+1
...@@ -14,6 +14,7 @@ const Entry = packed struct {...@@ -14,6 +14,7 @@ const Entry = packed struct {
14test {14test {
15 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO15 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
16 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO16 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
17 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1718
18 const frame = Frame{ .num = 0x7FDE };19 const frame = Frame{ .num = 0x7FDE };
19 var entry = Entry{ .other = 0, .frame = .{ .num = 0xFFFFF } };20 var entry = Entry{ .other = 0, .frame = .{ .num = 0xFFFFF } };
test/behavior/ptrcast.zig+13
...@@ -257,3 +257,16 @@ test "@ptrCast slice to slice" {...@@ -257,3 +257,16 @@ test "@ptrCast slice to slice" {
257 try expect(buf[1] == 42);257 try expect(buf[1] == 42);
258 try expect(alias.len == 4);258 try expect(alias.len == 4);
259}259}
260
261test "comptime @ptrCast a subset of an array, then write through it" {
262 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
263 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
264 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
265
266 comptime {
267 var buff: [16]u8 align(4) = undefined;
268 const len_bytes = @ptrCast(*u32, &buff);
269 len_bytes.* = 16;
270 std.mem.copy(u8, buff[4..], "abcdef");
271 }
272}