diff --git a/test/behavior/array.zig b/test/behavior/array.zig index 2f426bf5bfdad1899c88921acd5ea6a46ea5cf44..52a4d7512afbd66c19510721cb1310c0b584961b 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -61,6 +61,7 @@ test "array concat with undefined" { } test "array concat with tuple" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO diff --git a/test/behavior/bugs/12571.zig b/test/behavior/bugs/12571.zig index 4338051b189b48de518e6e1e116c87a3a65c9a92..ace1e93b3fcfbefb933bd3f8f1c562ece30be5b3 100644 --- a/test/behavior/bugs/12571.zig +++ b/test/behavior/bugs/12571.zig @@ -14,6 +14,7 @@ const Entry = packed struct { test { if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO const frame = Frame{ .num = 0x7FDE }; var entry = Entry{ .other = 0, .frame = .{ .num = 0xFFFFF } }; diff --git a/test/behavior/error.zig b/test/behavior/error.zig index fdf9091fe8aa26efb816350deed7e9921520ab9a..459799f5f63ea2fbd88add889b3272ba95a62b35 100644 --- a/test/behavior/error.zig +++ b/test/behavior/error.zig @@ -889,3 +889,16 @@ test "field access of anyerror results in smaller error set" { try expect(@TypeOf(E2.A) == E2); try expect(@TypeOf(@field(anyerror, "NotFound")) == error{NotFound}); } + +test "optional error union return type" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + const S = struct { + fn foo() ?anyerror!u32 { + var x: u32 = 1234; + return @as(anyerror!u32, x); + } + }; + try expect(1234 == try S.foo().?); +} diff --git a/test/behavior/fn.zig b/test/behavior/fn.zig index d33d1aad71437a3cfe962053cc9f4ce4a524eef9..e306fdc2074b450eaa0f06114e3531e63ae6a515 100644 --- a/test/behavior/fn.zig +++ b/test/behavior/fn.zig @@ -457,3 +457,30 @@ test "method call with optional and error union first param" { try s.opt(); try s.errUnion(); } + +test "using @ptrCast on function pointers" { + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + const S = struct { + const A = struct { data: [4]u8 }; + + fn at(arr: *const A, index: usize) *const u8 { + return &arr.data[index]; + } + + fn run() !void { + const a = A{ .data = "abcd".* }; + const casted_fn = @ptrCast(*const fn (*const anyopaque, usize) *const u8, &at); + const casted_impl = @ptrCast(*const anyopaque, &a); + const ptr = casted_fn(casted_impl, 2); + try expect(ptr.* == 'c'); + } + }; + + try S.run(); + // https://github.com/ziglang/zig/issues/2626 + // try comptime S.run(); +} diff --git a/test/behavior/ptrcast.zig b/test/behavior/ptrcast.zig index e2d33f898ca88adfce9eca1e9012a71d8f187023..0a983f82c6828b4fa4862f596b7a4565a4a2c25f 100644 --- a/test/behavior/ptrcast.zig +++ b/test/behavior/ptrcast.zig @@ -257,3 +257,16 @@ test "@ptrCast slice to slice" { try expect(buf[1] == 42); try expect(alias.len == 4); } + +test "comptime @ptrCast a subset of an array, then write through it" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + comptime { + var buff: [16]u8 align(4) = undefined; + const len_bytes = @ptrCast(*u32, &buff); + len_bytes.* = 16; + std.mem.copy(u8, buff[4..], "abcdef"); + } +}