aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Sema.zig2
-rw-r--r--test/behavior/switch.zig5
2 files changed, 2 insertions, 5 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 860d9d63ac..958a737ef7 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -6972,7 +6972,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
return sema.failWithOwnedErrorMsg(block, msg);
}
- if (special_prong == .@"else") {
+ if (special_prong == .@"else" and seen_errors.count() == operand_ty.errorSetNames().len) {
return sema.fail(
block,
special_prong_src,
diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig
index d99998a34e..5c47a24b38 100644
--- a/test/behavior/switch.zig
+++ b/test/behavior/switch.zig
@@ -610,14 +610,11 @@ test "switch on pointer type" {
}
test "switch on error set with single else" {
- if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
-
const S = struct {
fn doTheTest() !void {
var some: error{Foo} = error.Foo;
try expect(switch (some) {
- else => |a| blk: {
- a catch {};
+ else => blk: {
break :blk true;
},
});