aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-02-18 09:33:27 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-02-18 09:33:27 -0700
commitefdc94c10712f610e7de5e49fd9cd6f88b4bbbae (patch)
tree4b66ec30176843b0efd87b73199c75aa2fba675d /test/behavior
parent06df842e4d313e81444063803deff306602e0a17 (diff)
parentc32171991b25b323cd68ff96c294bf5a6fa753b8 (diff)
downloadzig-efdc94c10712f610e7de5e49fd9cd6f88b4bbbae.tar.gz
zig-efdc94c10712f610e7de5e49fd9cd6f88b4bbbae.zip
Merge remote-tracking branch 'origin/master' into llvm16
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/cast.zig27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig
index dbb4c07f64..16f3c6e2dd 100644
--- a/test/behavior/cast.zig
+++ b/test/behavior/cast.zig
@@ -1541,3 +1541,30 @@ test "single item pointer to pointer to array to slice" {
const z1 = @as([]const i32, @as(*[1]i32, &x));
try expect(z1[0] == 1234);
}
+
+test "peer type resolution forms error union" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+
+ var foo: i32 = 123;
+ const result = if (foo < 0) switch (-foo) {
+ 0 => unreachable,
+ 42 => error.AccessDenied,
+ else => unreachable,
+ } else @intCast(u32, foo);
+ try expect(try result == 123);
+}
+
+test "@constCast without a result location" {
+ const x: i32 = 1234;
+ const y = @constCast(&x);
+ try expect(@TypeOf(y) == *i32);
+ try expect(y.* == 1234);
+}
+
+test "@volatileCast without a result location" {
+ var x: i32 = 1234;
+ var y: *volatile i32 = &x;
+ const z = @volatileCast(y);
+ try expect(@TypeOf(z) == *i32);
+ try expect(z.* == 1234);
+}