Commit 47846bc17c

mlugg <mlugg@mlugg.co.uk>
2024-07-04 11:31:59
Zcu: fix passing exported decls with compile errors to the backend
1 parent 854e86c
Changed files (1)
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| {