aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/switch_loop.zig
diff options
context:
space:
mode:
Diffstat (limited to 'test/behavior/switch_loop.zig')
-rw-r--r--test/behavior/switch_loop.zig41
1 files changed, 32 insertions, 9 deletions
diff --git a/test/behavior/switch_loop.zig b/test/behavior/switch_loop.zig
index 98605692be..d2e967e4c7 100644
--- a/test/behavior/switch_loop.zig
+++ b/test/behavior/switch_loop.zig
@@ -3,7 +3,7 @@ const std = @import("std");
const expect = std.testing.expect;
test "simple switch loop" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -27,7 +27,7 @@ test "simple switch loop" {
}
test "switch loop with ranges" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -48,7 +48,7 @@ test "switch loop with ranges" {
}
test "switch loop on enum" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -72,7 +72,7 @@ test "switch loop on enum" {
}
test "switch loop with error set" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -96,7 +96,7 @@ test "switch loop with error set" {
}
test "switch loop on tagged union" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -129,7 +129,7 @@ test "switch loop on tagged union" {
}
test "switch loop dispatching instructions" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -179,7 +179,7 @@ test "switch loop dispatching instructions" {
}
test "switch loop with pointer capture" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; // TODO
@@ -218,11 +218,34 @@ test "switch loop with pointer capture" {
}
test "unanalyzed continue with operand" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
-
@setRuntimeSafety(false);
label: switch (false) {
false => if (false) continue :label true,
true => {},
}
}
+
+test "switch loop on larger than pointer integer" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
+
+ var entry: @Type(.{ .int = .{
+ .signedness = .unsigned,
+ .bits = @bitSizeOf(usize) + 1,
+ } }) = undefined;
+ entry = 0;
+ loop: switch (entry) {
+ 0 => {
+ entry += 1;
+ continue :loop 1;
+ },
+ 1 => |x| {
+ entry += 1;
+ continue :loop x + 1;
+ },
+ 2 => entry += 1,
+ else => unreachable,
+ }
+ try expect(entry == 3);
+}