Merge remote-tracking branch 'origin/master' into llvm15

This commit is contained in:
Andrew Kelley
2022-09-12 16:11:18 -07:00
9 changed files with 261 additions and 148 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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