diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-07-11 15:11:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-11 15:11:28 -0400 |
| commit | 7ef85468265ecbc53efa18f67a5bd5ef46b8c7fb (patch) | |
| tree | e4d188bc4388a33ce6402cf561e003e002e4ee75 | |
| parent | aa2a31612fa677ddb747f8fa730f6a5732b3afa9 (diff) | |
| parent | b0b9c3c2dc4e55609db44dc0564795b7e2ed1b34 (diff) | |
| download | zig-7ef85468265ecbc53efa18f67a5bd5ef46b8c7fb.tar.gz zig-7ef85468265ecbc53efa18f67a5bd5ef46b8c7fb.zip | |
Merge pull request #9352 from g-w1/fix-9346
stage2 astgen: error for return outside of function scope
| -rw-r--r-- | src/AstGen.zig | 6 | ||||
| -rw-r--r-- | test/cases.zig | 2 | ||||
| -rw-r--r-- | test/compile_errors.zig | 4 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig index e2cdffc014..f62a8f18ab 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -4604,7 +4604,7 @@ fn tryExpr( const astgen = parent_gz.astgen; const fn_block = astgen.fn_block orelse { - return astgen.failNode(node, "invalid 'try' outside function scope", .{}); + return astgen.failNode(node, "'try' outside function scope", .{}); }; if (parent_gz.in_defer) return astgen.failNode(node, "'try' not allowed inside defer expression", .{}); @@ -6167,6 +6167,10 @@ fn ret(gz: *GenZir, scope: *Scope, node: ast.Node.Index) InnerError!Zir.Inst.Ref const node_datas = tree.nodes.items(.data); const node_tags = tree.nodes.items(.tag); + if (astgen.fn_block == null) { + return astgen.failNode(node, "'return' outside function scope", .{}); + } + if (gz.in_defer) return astgen.failNode(node, "cannot return from defer expression", .{}); const defer_outer = &astgen.fn_block.?.base; diff --git a/test/cases.zig b/test/cases.zig index ef8c1fd24f..fe1579be44 100644 --- a/test/cases.zig +++ b/test/cases.zig @@ -904,7 +904,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = S; \\} , - &.{":4:13: error: invalid 'try' outside function scope"}, + &.{":4:13: error: 'try' outside function scope"}, ); } { diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 6ce1774ecf..6075eee33a 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -2,6 +2,10 @@ const std = @import("std"); const TestContext = @import("../src/test.zig").TestContext; pub fn addCases(ctx: *TestContext) !void { + ctx.objErrStage1("issue #9346: return outside of function scope", + \\pub const empty = return 1; + , &.{"tmp.zig:1:19: error: 'return' outside function scope"}); + ctx.exeErrStage1("std.fmt error for unused arguments", \\pub fn main() !void { \\ @import("std").debug.print("{d} {d} {d} {d} {d}", .{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}); |
