fix: disallow discard as errdefer capture

This commit is contained in:
WillLillis 2024-09-09 20:58:06 -04:00 committed by Andrew Kelley
parent ffd071f558
commit 37cd21eb5f
2 changed files with 10 additions and 0 deletions

View File

@ -3156,6 +3156,9 @@ fn deferStmt(
const have_err_code = scope_tag == .defer_error and payload_token != 0; const have_err_code = scope_tag == .defer_error and payload_token != 0;
const sub_scope = if (!have_err_code) &defer_gen.base else blk: { const sub_scope = if (!have_err_code) &defer_gen.base else blk: {
const ident_name = try gz.astgen.identAsString(payload_token); const ident_name = try gz.astgen.identAsString(payload_token);
if (std.mem.eql(u8, tree.tokenSlice(payload_token), "_")) {
return gz.astgen.failTok(payload_token, "discard of error capture; omit it instead", .{});
}
const remapped_err_code: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len); const remapped_err_code: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
opt_remapped_err_code = remapped_err_code.toOptional(); opt_remapped_err_code = remapped_err_code.toOptional();
try gz.astgen.instructions.append(gz.astgen.gpa, .{ try gz.astgen.instructions.append(gz.astgen.gpa, .{

View File

@ -0,0 +1,7 @@
pub fn main() !void {
errdefer |_| _ = @"_";
}
// error
//
// :2:15: error: discard of error capture; omit it instead