| ... | @@ -5,10 +5,8 @@ const ptr_size = @sizeOf(usize); | ... | @@ -5,10 +5,8 @@ const ptr_size = @sizeOf(usize); |
| 5 | | 5 | |
| 6 | test "type pun signed and unsigned as single pointer" { | 6 | test "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/9646 | 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 10 | return error.SkipZigTest; | | |
| 11 | } | | |
| 12 | | 10 | |
| 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" { |
| 20 | | 18 | |
| 21 | test "type pun signed and unsigned as many pointer" { | 19 | test "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 | } | | |
| 27 | | 22 | |
| 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" { |
| 35 | | 30 | |
| 36 | test "type pun signed and unsigned as array pointer" { | 31 | test "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 | } | | |
| 42 | | 34 | |
| 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" { |
| 82 | | 74 | |
| 83 | test "type pun value and struct" { | 75 | test "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 | } | | |
| 89 | | 78 | |
| 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 | } |
| 103 | test "type pun endianness" { | 92 | test "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/9646 | 95 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 107 | return error.SkipZigTest; | | |
| 108 | } | | |
| 109 | | 96 | |
| 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 | |
| | 403 | test "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 | } |