authorgravatar for will.lillis24@gmail.comWill Lillis <will.lillis24@gmail.com> 2024-09-09 20:58:06-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-24 13:21:06-07:00
log37cd21eb5f23d2bb26e36ca3de76f0a71e16230c
treefd31bc7fd67204667f13eb7358f6daaa609fba4b
parentffd071f55821f70fbfc59bab172ae07eaf7cde23

fix: disallow discard as errdefer capture


2 files changed, 10 insertions(+), 0 deletions(-)

lib/std/zig/AstGen.zig+3
...@@ -3156,6 +3156,9 @@ fn deferStmt(...@@ -3156,6 +3156,9 @@ fn deferStmt(
3156 const have_err_code = scope_tag == .defer_error and payload_token != 0;3156 const have_err_code = scope_tag == .defer_error and payload_token != 0;
3157 const sub_scope = if (!have_err_code) &defer_gen.base else blk: {3157 const sub_scope = if (!have_err_code) &defer_gen.base else blk: {
3158 const ident_name = try gz.astgen.identAsString(payload_token);3158 const ident_name = try gz.astgen.identAsString(payload_token);
3159 if (std.mem.eql(u8, tree.tokenSlice(payload_token), "_")) {
3160 return gz.astgen.failTok(payload_token, "discard of error capture; omit it instead", .{});
3161 }
3159 const remapped_err_code: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);3162 const remapped_err_code: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
3160 opt_remapped_err_code = remapped_err_code.toOptional();3163 opt_remapped_err_code = remapped_err_code.toOptional();
3161 try gz.astgen.instructions.append(gz.astgen.gpa, .{3164 try gz.astgen.instructions.append(gz.astgen.gpa, .{
test/cases/errdefer_discard.zig created+7
...@@ -0,0 +1,7 @@
1pub fn main() !void {
2 errdefer |_| _ = @"_";
3}
4
5// error
6//
7// :2:15: error: discard of error capture; omit it instead