zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 81bbefe9b837dc439a68458ca91d522c1c49b96b (tree)
parent c9006d9479c619d9ed555164831e11a04d88d382
Author: emma <39064859+ieeemma@users.noreply.github.com>
Date:   Thu,  7 Jul 2022 19:38:32 +0100

AstGen: fix catch payoad not checking for shadowing


Diffstat:
Msrc/AstGen.zig | 6+++++-
Atest/cases/variable_shadowing.10.zig | 9+++++++++
2 files changed, 14 insertions(+), 1 deletion(-)

diff --git 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 @@ -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