Merge remote-tracking branch 'origin/master' into llvm15
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user