authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-21 15:05:21+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-21 15:05:21+02:00
log59668fbe802be744c200ea9fd38fda28f5f951c1
treee456aea2d79f989f048c642106fc33009aad2afd
parenta31fe0ff12270ba2f957c2a957941a23f2143ad5

stage2: add test for fixed issue

Closes #11157

1 files changed, 30 insertions(+), 20 deletions(-)

test/behavior/comptime_memory.zig+30-20
...@@ -5,10 +5,8 @@ const ptr_size = @sizeOf(usize);...@@ -5,10 +5,8 @@ const ptr_size = @sizeOf(usize);
55
6test "type pun signed and unsigned as single pointer" {6test "type pun signed and unsigned as single pointer" {
7 if (builtin.zig_backend == .stage1) return error.SkipZigTest;7 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
8 if (builtin.zig_backend != .stage1) {8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
9 // TODO https://github.com/ziglang/zig/issues/96469 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10 return error.SkipZigTest;
11 }
1210
13 comptime {11 comptime {
14 var x: u32 = 0;12 var x: u32 = 0;
...@@ -20,10 +18,7 @@ test "type pun signed and unsigned as single pointer" {...@@ -20,10 +18,7 @@ test "type pun signed and unsigned as single pointer" {
2018
21test "type pun signed and unsigned as many pointer" {19test "type pun signed and unsigned as many pointer" {
22 if (builtin.zig_backend == .stage1) return error.SkipZigTest;20 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
23 if (builtin.zig_backend != .stage1) {21 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
24 // TODO https://github.com/ziglang/zig/issues/9646
25 return error.SkipZigTest;
26 }
2722
28 comptime {23 comptime {
29 var x: u32 = 0;24 var x: u32 = 0;
...@@ -35,10 +30,7 @@ test "type pun signed and unsigned as many pointer" {...@@ -35,10 +30,7 @@ test "type pun signed and unsigned as many pointer" {
3530
36test "type pun signed and unsigned as array pointer" {31test "type pun signed and unsigned as array pointer" {
37 if (builtin.zig_backend == .stage1) return error.SkipZigTest;32 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
38 if (builtin.zig_backend != .stage1) {33 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
39 // TODO https://github.com/ziglang/zig/issues/9646
40 return error.SkipZigTest;
41 }
4234
43 comptime {35 comptime {
44 var x: u32 = 0;36 var x: u32 = 0;
...@@ -82,10 +74,7 @@ test "type pun signed and unsigned as array pointer" {...@@ -82,10 +74,7 @@ test "type pun signed and unsigned as array pointer" {
8274
83test "type pun value and struct" {75test "type pun value and struct" {
84 if (builtin.zig_backend == .stage1) return error.SkipZigTest;76 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
85 if (builtin.zig_backend != .stage1) {77 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
86 // TODO https://github.com/ziglang/zig/issues/9646
87 return error.SkipZigTest;
88 }
8978
90 comptime {79 comptime {
91 const StructOfU32 = extern struct { x: u32 };80 const StructOfU32 = extern struct { x: u32 };
...@@ -102,10 +91,8 @@ fn bigToNativeEndian(comptime T: type, v: T) T {...@@ -102,10 +91,8 @@ fn bigToNativeEndian(comptime T: type, v: T) T {
102}91}
103test "type pun endianness" {92test "type pun endianness" {
104 if (builtin.zig_backend == .stage1) return error.SkipZigTest;93 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
105 if (builtin.zig_backend != .stage1) {94 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
106 // TODO https://github.com/ziglang/zig/issues/964695 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
107 return error.SkipZigTest;
108 }
10996
110 comptime {97 comptime {
111 const StructOfBytes = extern struct { x: [4]u8 };98 const StructOfBytes = extern struct { x: [4]u8 };
...@@ -412,3 +399,26 @@ test "offset field ptr by enclosing array element size" {...@@ -412,3 +399,26 @@ test "offset field ptr by enclosing array element size" {
412 }399 }
413 }400 }
414}401}
402
403test "accessing reinterpreted memory of parent object" {
404 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
405 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
406 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
407 const S = extern struct {
408 a: f32,
409 b: [4]u8,
410 c: f32,
411 };
412 const expected = if (endian == .Little) 102 else 38;
413
414 comptime {
415 const x = S{
416 .a = 1.5,
417 .b = [_]u8{ 1, 2, 3, 4 },
418 .c = 2.6,
419 };
420 const ptr = &x.b[0];
421 const b = @ptrCast([*c]const u8, ptr)[5];
422 try testing.expect(b == expected);
423 }
424}