aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremma <39064859+ieeemma@users.noreply.github.com>2022-07-07 19:38:32 +0100
committerGitHub <noreply@github.com>2022-07-07 21:38:32 +0300
commit81bbefe9b837dc439a68458ca91d522c1c49b96b (patch)
tree796fd5138faa9b6312e5464ecd9266db5339f079
parentc9006d9479c619d9ed555164831e11a04d88d382 (diff)
downloadzig-81bbefe9b837dc439a68458ca91d522c1c49b96b.tar.gz
zig-81bbefe9b837dc439a68458ca91d522c1c49b96b.zip
AstGen: fix catch payoad not checking for shadowing
-rw-r--r--src/AstGen.zig6
-rw-r--r--test/cases/variable_shadowing.10.zig9
2 files changed, 14 insertions, 1 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig
index a0ff7a0e6e..bd72e2d1cc 100644
--- a/src/AstGen.zig
+++ b/src/AstGen.zig
@@ -4997,10 +4997,14 @@ fn orelseCatchExpr(
var err_val_scope: Scope.LocalVal = undefined;
const else_sub_scope = blk: {
const payload = payload_token orelse break :blk &else_scope.base;
- if (mem.eql(u8, tree.tokenSlice(payload), "_")) {
+ const err_str = tree.tokenSlice(payload);
+ if (mem.eql(u8, err_str, "_")) {
return astgen.failTok(payload, "discard of error capture; omit it instead", .{});
}
const err_name = try astgen.identAsString(payload);
+
+ try astgen.detectLocalShadowing(scope, err_name, payload, err_str);
+
err_val_scope = .{
.parent = &else_scope.base,
.gen_zir = &else_scope,
diff --git a/test/cases/variable_shadowing.10.zig b/test/cases/variable_shadowing.10.zig
new file mode 100644
index 0000000000..6aa9f5a9bf
--- /dev/null
+++ b/test/cases/variable_shadowing.10.zig
@@ -0,0 +1,9 @@
+fn foo() !void {
+ var i: anyerror!usize = 1;
+ _ = i catch |i| return i;
+}
+
+// error
+//
+// :3:18: error: redeclaration of local variable 'i'
+// :2:9: note: previous declaration here