AstGen: fix catch payoad not checking for shadowing

This commit is contained in:
emma 2022-07-07 19:38:32 +01:00 committed by GitHub
parent c9006d9479
commit 81bbefe9b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -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,

View File

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