commit 7ef85468265ecbc53efa18f67a5bd5ef46b8c7fb (tree)
parent aa2a31612fa677ddb747f8fa730f6a5732b3afa9
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sun, 11 Jul 2021 15:11:28 -0400
Merge pull request #9352 from g-w1/fix-9346
stage2 astgen: error for return outside of function scope
Diffstat:
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git 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
@@ -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
@@ -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});