From 47846bc17c54d50886b702b5994c00ca8670c82b Mon Sep 17 00:00:00 2001 From: mlugg Date: Thu, 4 Jul 2024 10:31:59 +0100 Subject: [PATCH] Zcu: fix passing exported decls with compile errors to the backend --- src/Zcu/PerThread.zig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Zcu/PerThread.zig b/src/Zcu/PerThread.zig index f8a3104dc0..9903171492 100644 --- a/src/Zcu/PerThread.zig +++ b/src/Zcu/PerThread.zig @@ -2098,6 +2098,25 @@ fn processExportsInner( gop.value_ptr.* = export_idx; } } + + switch (exported) { + .decl_index => |idx| if (failed: { + const decl = zcu.declPtr(idx); + if (decl.analysis != .complete) break :failed true; + // Check if has owned function + if (!decl.owns_tv) break :failed false; + if (decl.typeOf(zcu).zigTypeTag(zcu) != .Fn) break :failed false; + // Check if owned function failed + const a = zcu.funcInfo(decl.val.toIntern()).analysis(&zcu.intern_pool); + break :failed a.state != .success; + }) { + // This `Decl` is failed, so was never sent to codegen. + // TODO: we should probably tell the backend to delete any old exports of this `Decl`? + return; + }, + .value => {}, + } + if (zcu.comp.bin_file) |lf| { try zcu.handleUpdateExports(export_indices, lf.updateExports(pt, exported, export_indices)); } else if (zcu.llvm_object) |llvm_object| {