Commit 37cd21eb5f

WillLillis <wlillis@umass.edu>
2024-09-10 02:58:06
fix: disallow discard as errdefer capture
1 parent ffd071f
Changed files (2)
lib
std
test
lib/std/zig/AstGen.zig
@@ -3156,6 +3156,9 @@ fn deferStmt(
     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 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);
         opt_remapped_err_code = remapped_err_code.toOptional();
         try gz.astgen.instructions.append(gz.astgen.gpa, .{
test/cases/errdefer_discard.zig
@@ -0,0 +1,7 @@
+pub fn main() !void {
+    errdefer |_| _ = @"_";
+}
+
+// error
+//
+// :2:15: error: discard of error capture; omit it instead