diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-09-12 16:11:18 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-09-12 16:11:18 -0700 |
| commit | 011663eea590dddff79b73c72bfeda5dd7f947cc (patch) | |
| tree | c51299eb6d22d3762674540de062d7e4723c9a92 /test | |
| parent | 01e89fec71c781113f4be6f65af8e1702c8dde7c (diff) | |
| parent | e323cf1264f390911dcc2efea71d46be1d631d92 (diff) | |
| download | zig-011663eea590dddff79b73c72bfeda5dd7f947cc.tar.gz zig-011663eea590dddff79b73c72bfeda5dd7f947cc.zip | |
Merge remote-tracking branch 'origin/master' into llvm15
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/defer.zig | 17 | ||||
| -rw-r--r-- | test/cases/compile_errors/return_from_defer_expression.zig | 1 | ||||
| -rw-r--r-- | test/cases/compile_errors/uncreachable_else_prong_err_set.zig | 25 | ||||
| -rw-r--r-- | test/cases/returns_in_try.zig | 2 |
4 files changed, 45 insertions, 0 deletions
diff --git a/test/behavior/defer.zig b/test/behavior/defer.zig index 70053ba01f..7bf66496a4 100644 --- a/test/behavior/defer.zig +++ b/test/behavior/defer.zig @@ -127,3 +127,20 @@ test "errdefer with payload" { try S.doTheTest(); comptime try S.doTheTest(); } + +test "simple else prong doesn't emit an error for unreachable else prong" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; + + const S = struct { + fn foo() error{Foo}!void { + return error.Foo; + } + }; + var a: u32 = 0; + defer a += 1; + S.foo() catch |err| switch (err) { + error.Foo => a += 1, + else => |e| return e, + }; + try expect(a == 1); +} diff --git a/test/cases/compile_errors/return_from_defer_expression.zig b/test/cases/compile_errors/return_from_defer_expression.zig index e60b8ae848..12aa08a11c 100644 --- a/test/cases/compile_errors/return_from_defer_expression.zig +++ b/test/cases/compile_errors/return_from_defer_expression.zig @@ -19,3 +19,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(testTrickyDefer)); } // target=native // // :4:11: error: 'try' not allowed inside defer expression +// :4:5: note: defer expression here diff --git a/test/cases/compile_errors/uncreachable_else_prong_err_set.zig b/test/cases/compile_errors/uncreachable_else_prong_err_set.zig new file mode 100644 index 0000000000..4b0ae462d6 --- /dev/null +++ b/test/cases/compile_errors/uncreachable_else_prong_err_set.zig @@ -0,0 +1,25 @@ +pub export fn complex() void { + var a: error{ Foo, Bar } = error.Foo; + switch (a) { + error.Foo => unreachable, + error.Bar => unreachable, + else => { + @compileError("<something complex here>"); + }, + } +} + +pub export fn simple() void { + var a: error{ Foo, Bar } = error.Foo; + switch (a) { + error.Foo => unreachable, + error.Bar => unreachable, + else => |e| return e, + } +} + +// error +// backend=llvm +// target=native +// +// :6:14: error: unreachable else prong; all cases already handled diff --git a/test/cases/returns_in_try.zig b/test/cases/returns_in_try.zig index de5a9a3258..e283b93db2 100644 --- a/test/cases/returns_in_try.zig +++ b/test/cases/returns_in_try.zig @@ -13,4 +13,6 @@ pub fn b() !void { // error // // :7:11: error: 'try' not allowed inside defer expression +// :7:5: note: defer expression here // :10:11: error: cannot return from defer expression +// :10:5: note: defer expression here |
