aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-03-18 14:50:40 -0400
committerGitHub <noreply@github.com>2022-03-18 14:50:40 -0400
commit5765755fcd6bd8570494057255e7d92d489ef35e (patch)
tree9b53e9f1ad4d391e318e71a08b1bfafb7fe4024c /test
parent13321c8070b52afb24f3c1b57eecbb2aa77fc4ec (diff)
parentde8f3bc885c7bfd1a084478c1302f0814d98bb62 (diff)
downloadzig-5765755fcd6bd8570494057255e7d92d489ef35e.tar.gz
zig-5765755fcd6bd8570494057255e7d92d489ef35e.zip
Merge pull request #11218 from mitchellh/labeled-break
AstGen: labeled blocks should always complete with a normal break
Diffstat (limited to 'test')
-rw-r--r--test/behavior.zig1
-rw-r--r--test/behavior/bugs/11213.zig37
2 files changed, 38 insertions, 0 deletions
diff --git a/test/behavior.zig b/test/behavior.zig
index 03a02c3ea4..f6ff8bd64d 100644
--- a/test/behavior.zig
+++ b/test/behavior.zig
@@ -70,6 +70,7 @@ test {
_ = @import("behavior/bugs/11165.zig");
_ = @import("behavior/bugs/11181.zig");
_ = @import("behavior/bugs/11182.zig");
+ _ = @import("behavior/bugs/11213.zig");
_ = @import("behavior/call.zig");
_ = @import("behavior/cast.zig");
_ = @import("behavior/comptime_memory.zig");
diff --git a/test/behavior/bugs/11213.zig b/test/behavior/bugs/11213.zig
new file mode 100644
index 0000000000..d4e3580c07
--- /dev/null
+++ b/test/behavior/bugs/11213.zig
@@ -0,0 +1,37 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const testing = std.testing;
+
+test {
+ if (builtin.zig_backend == .stage2_c) 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 g: error{Test}!void = error.Test;
+
+ var v: u32 = 0;
+ hash(&v, g);
+ try testing.expect(v == 1);
+}
+
+fn hash(v: *u32, key: anytype) void {
+ const Key = @TypeOf(key);
+
+ if (@typeInfo(Key) == .ErrorSet) {
+ v.* += 1;
+ return;
+ }
+
+ switch (@typeInfo(Key)) {
+ .ErrorUnion => blk: {
+ const payload = key catch |err| {
+ hash(v, err);
+ break :blk;
+ };
+
+ hash(v, payload);
+ },
+
+ else => unreachable,
+ }
+}