authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-12 11:25:37+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-12 11:25:37+02:00
log07cc2fce2a2745a05c65fdd1a36c3198d0ec91b4
treecfb4bf4aab6c05598098f1420e8aa09ec2c66f3f
parent98a01f99c9b6834608055417169c2b3531ea67b6

Sema: fix else branch check when switching on error set


2 files changed, 2 insertions(+), 5 deletions(-)

src/Sema.zig+1-1
...@@ -6972,7 +6972,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError...@@ -6972,7 +6972,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
6972 return sema.failWithOwnedErrorMsg(block, msg);6972 return sema.failWithOwnedErrorMsg(block, msg);
6973 }6973 }
69746974
6975 if (special_prong == .@"else") {6975 if (special_prong == .@"else" and seen_errors.count() == operand_ty.errorSetNames().len) {
6976 return sema.fail(6976 return sema.fail(
6977 block,6977 block,
6978 special_prong_src,6978 special_prong_src,
test/behavior/switch.zig+1-4
...@@ -610,14 +610,11 @@ test "switch on pointer type" {...@@ -610,14 +610,11 @@ test "switch on pointer type" {
610}610}
611611
612test "switch on error set with single else" {612test "switch on error set with single else" {
613 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
614
615 const S = struct {613 const S = struct {
616 fn doTheTest() !void {614 fn doTheTest() !void {
617 var some: error{Foo} = error.Foo;615 var some: error{Foo} = error.Foo;
618 try expect(switch (some) {616 try expect(switch (some) {
619 else => |a| blk: {617 else => blk: {
620 a catch {};
621 break :blk true;618 break :blk true;
622 },619 },
623 });620 });