diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-18 14:50:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-18 14:50:40 -0400 |
| commit | 5765755fcd6bd8570494057255e7d92d489ef35e (patch) | |
| tree | 9b53e9f1ad4d391e318e71a08b1bfafb7fe4024c /test | |
| parent | 13321c8070b52afb24f3c1b57eecbb2aa77fc4ec (diff) | |
| parent | de8f3bc885c7bfd1a084478c1302f0814d98bb62 (diff) | |
| download | zig-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.zig | 1 | ||||
| -rw-r--r-- | test/behavior/bugs/11213.zig | 37 |
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, + } +} |
