authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-06-08 02:31:04-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-06-08 15:16:40-04:00
log9ea4965ceb62ea47569d0676bb68475304aad467
tree54fffb9dce1b62b96af2aa13c566f52380a07c18
parent91930a4ff08d275ec16507aed58a73a02742f831

self-hosted: remove deleted Decls from failed_decls


1 files changed, 7 insertions(+), 1 deletions(-)

src-self-hosted/Module.zig+7-1
......@@ -910,6 +910,8 @@ fn analyzeRoot(self: *Module, root_scope: *Scope.ZIRModule) !void {
910910}
911911
912912fn deleteDecl(self: *Module, decl: *Decl) !void {
913 try self.deletion_set.ensureCapacity(self.allocator, self.deletion_set.items.len + decl.dependencies.items.len);
914
913915 //std.debug.warn("deleting decl '{}'\n", .{decl.name});
914916 const name_hash = decl.fullyQualifiedNameHash();
915917 self.decl_table.removeAssertDiscard(name_hash);
......@@ -921,16 +923,20 @@ fn deleteDecl(self: *Module, decl: *Decl) !void {
921923 // another reference to it may turn up.
922924 assert(!dep.deletion_flag);
923925 dep.deletion_flag = true;
924 try self.deletion_set.append(self.allocator, dep);
926 self.deletion_set.appendAssumeCapacity(dep);
925927 }
926928 }
927929 // Anything that depends on this deleted decl certainly needs to be re-analyzed.
928930 for (decl.dependants.items) |dep| {
929931 dep.removeDependency(decl);
930932 if (dep.analysis != .outdated) {
933 // TODO Move this failure possibility to the top of the function.
931934 try self.markOutdatedDecl(dep);
932935 }
933936 }
937 if (self.failed_decls.remove(decl)) |entry| {
938 self.allocator.destroy(entry.value);
939 }
934940 self.deleteDeclExports(decl);
935941 self.bin_file.freeDecl(decl);
936942 decl.destroy(self.allocator);