diff --git a/test/behavior/comptime_memory.zig b/test/behavior/comptime_memory.zig index 24a774aeb6..17cee27771 100644 --- a/test/behavior/comptime_memory.zig +++ b/test/behavior/comptime_memory.zig @@ -5,10 +5,8 @@ const ptr_size = @sizeOf(usize); test "type pun signed and unsigned as single pointer" { if (builtin.zig_backend == .stage1) return error.SkipZigTest; - if (builtin.zig_backend != .stage1) { - // TODO https://github.com/ziglang/zig/issues/9646 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO comptime { var x: u32 = 0; @@ -20,10 +18,7 @@ test "type pun signed and unsigned as single pointer" { test "type pun signed and unsigned as many pointer" { if (builtin.zig_backend == .stage1) return error.SkipZigTest; - if (builtin.zig_backend != .stage1) { - // TODO https://github.com/ziglang/zig/issues/9646 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO comptime { var x: u32 = 0; @@ -35,10 +30,7 @@ test "type pun signed and unsigned as many pointer" { test "type pun signed and unsigned as array pointer" { if (builtin.zig_backend == .stage1) return error.SkipZigTest; - if (builtin.zig_backend != .stage1) { - // TODO https://github.com/ziglang/zig/issues/9646 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO comptime { var x: u32 = 0; @@ -82,10 +74,7 @@ test "type pun signed and unsigned as array pointer" { test "type pun value and struct" { if (builtin.zig_backend == .stage1) return error.SkipZigTest; - if (builtin.zig_backend != .stage1) { - // TODO https://github.com/ziglang/zig/issues/9646 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO comptime { const StructOfU32 = extern struct { x: u32 }; @@ -102,10 +91,8 @@ fn bigToNativeEndian(comptime T: type, v: T) T { } test "type pun endianness" { if (builtin.zig_backend == .stage1) return error.SkipZigTest; - if (builtin.zig_backend != .stage1) { - // TODO https://github.com/ziglang/zig/issues/9646 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO comptime { const StructOfBytes = extern struct { x: [4]u8 }; @@ -412,3 +399,26 @@ test "offset field ptr by enclosing array element size" { } } } + +test "accessing reinterpreted memory of parent object" { + if (builtin.zig_backend == .stage1) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + const S = extern struct { + a: f32, + b: [4]u8, + c: f32, + }; + const expected = if (endian == .Little) 102 else 38; + + comptime { + const x = S{ + .a = 1.5, + .b = [_]u8{ 1, 2, 3, 4 }, + .c = 2.6, + }; + const ptr = &x.b[0]; + const b = @ptrCast([*c]const u8, ptr)[5]; + try testing.expect(b == expected); + } +}