From a9c4dc84f487c4764c5787439ea87962f698d511 Mon Sep 17 00:00:00 2001 From: sin-ack Date: Fri, 12 Aug 2022 21:51:07 +0000 Subject: [PATCH] Sema: Revert sema.err to null if the Decl already has an error Previously we would assign the error message to Sema and then never clear it even when destroying the error message, which caused memory corruption. Closes #12437 --- src/Sema.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index ed8204b3467c0003cb6a33e4b7097a8196fe5bad..879ecb4e2f4161f838f78fe18bf68e45af0fee20 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -1906,8 +1906,6 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { } const mod = sema.mod; - sema.err = err_msg; - { errdefer err_msg.destroy(mod.gpa); if (err_msg.src_loc.lazy == .unneeded) { @@ -1925,8 +1923,10 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { const gop = mod.failed_decls.getOrPutAssumeCapacity(sema.owner_decl_index); if (gop.found_existing) { // If there are multiple errors for the same Decl, prefer the first one added. + sema.err = null; err_msg.destroy(mod.gpa); } else { + sema.err = err_msg; gop.value_ptr.* = err_msg; } return error.AnalysisFail; -- 2.54.0