srctree

travisstaloch parent da506aaf f3353708
AstGen: use correct token_src for switch, if and while exprs

fixes #18579

inlinesplit
src/AstGen.zig added: 53, removed: 13, total 40
@@ -6174,7 +6174,7 @@ fn ifExpr(
.gen_zir = &then_scope,
.name = ident_name,
.inst = payload_inst,
.token_src = payload_token,
.token_src = token_name_index,
.id_cat = .capture,
};
try then_scope.addDbgVar(.dbg_var_val, ident_name, payload_inst);
@@ -6415,19 +6415,18 @@ fn whileExpr(
// will add this instruction to then_scope.instructions below
const payload_inst = try then_scope.makeUnNode(tag, cond.inst, while_full.ast.cond_expr);
opt_payload_inst = payload_inst.toOptional();
const ident_token = if (payload_is_ref) payload_token + 1 else payload_token;
const ident_token = payload_token + @intFromBool(payload_is_ref);
const ident_bytes = tree.tokenSlice(ident_token);
if (mem.eql(u8, "_", ident_bytes))
break :s &then_scope.base;
const payload_name_loc = payload_token + @intFromBool(payload_is_ref);
const ident_name = try astgen.identAsString(payload_name_loc);
try astgen.detectLocalShadowing(&then_scope.base, ident_name, payload_name_loc, ident_bytes, .capture);
const ident_name = try astgen.identAsString(ident_token);
try astgen.detectLocalShadowing(&then_scope.base, ident_name, ident_token, ident_bytes, .capture);
payload_val_scope = .{
.parent = &then_scope.base,
.gen_zir = &then_scope,
.name = ident_name,
.inst = payload_inst.toRef(),
.token_src = payload_token,
.token_src = ident_token,
.id_cat = .capture,
};
dbg_var_name = ident_name;
@@ -7107,7 +7106,7 @@ fn switchExprErrUnion(
.gen_zir = &case_scope,
.name = ident_name,
.inst = unwrapped_payload,
.token_src = payload_token,
.token_src = token_name_index,
.id_cat = .capture,
};
try case_scope.addDbgVar(.dbg_var_val, ident_name, unwrapped_payload);
@@ -7667,7 +7666,7 @@ fn switchExpr(
.gen_zir = &case_scope,
.name = capture_name,
.inst = switch_block.toRef(),
.token_src = payload_token,
.token_src = ident,
.id_cat = .capture,
};
dbg_var_name = capture_name;
 
filename was Deleted added: 53, removed: 13, total 40
@@ -0,0 +1,10 @@
test {
if (undefined) |*ident| {} else |err| {}
}
 
// error
// backend=stage2
// target=native
//
// :2:22: error: unused capture
// :2:38: error: unused capture
 
filename was Deleted added: 53, removed: 13, total 40
@@ -0,0 +1,10 @@
test {
const e: error{A}!u32 = error.A;
if (e) |*ptr| {} else |err| switch (err) {}
}
 
// error
// backend=stage2
// target=native
//
// :3:14: error: unused capture
 
filename was Deleted added: 53, removed: 13, total 40
@@ -0,0 +1,11 @@
test {
switch (undefined) {
.a => |*ident| {},
}
}
 
// error
// backend=stage2
// target=native
//
// :3:17: error: unused capture
 
filename was Deleted added: 53, removed: 13, total 40
@@ -0,0 +1,10 @@
test {
while (undefined) |*foo| {} else |err| {}
}
 
// error
// backend=stage2
// target=native
//
// :2:25: error: unused capture
// :2:39: error: unused capture
No newline at end of file