aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-03-21 15:05:21 +0200
committerVeikka Tuominen <git@vexu.eu>2022-03-21 15:05:21 +0200
commit59668fbe802be744c200ea9fd38fda28f5f951c1 (patch)
treee456aea2d79f989f048c642106fc33009aad2afd
parenta31fe0ff12270ba2f957c2a957941a23f2143ad5 (diff)
downloadzig-59668fbe802be744c200ea9fd38fda28f5f951c1.tar.gz
zig-59668fbe802be744c200ea9fd38fda28f5f951c1.zip
stage2: add test for fixed issue
Closes #11157
-rw-r--r--test/behavior/comptime_memory.zig50
1 files changed, 30 insertions, 20 deletions
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);
+ }
+}