diff options
| -rw-r--r-- | src/AstGen.zig | 6 | ||||
| -rw-r--r-- | test/cases/variable_shadowing.10.zig | 9 |
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 |
