authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-24 22:42:01+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-27 01:31:05+03:00
logdb799ae628cc3a131c34f8ae4b7422d7e9520cff
treecd3667595bb51cd0ab8a3cc87b8dbe6048ebae24
parent9db293492bbbc5b8d70638bd9c59dea19d13596c

Module: mitigate generic deletion bug


1 files changed, 11 insertions(+), 2 deletions(-)

src/Module.zig+11-2
......@@ -3367,6 +3367,8 @@ pub fn deinit(mod: *Module) void {
33673367 for (mod.import_table.keys()) |key| {
33683368 gpa.free(key);
33693369 }
3370 var failed_decls = mod.failed_decls;
3371 mod.failed_decls = .{};
33703372 for (mod.import_table.values()) |value| {
33713373 value.destroy(mod);
33723374 }
......@@ -3406,10 +3408,10 @@ pub fn deinit(mod: *Module) void {
34063408 mod.local_zir_cache.handle.close();
34073409 mod.global_zir_cache.handle.close();
34083410
3409 for (mod.failed_decls.values()) |value| {
3411 for (failed_decls.values()) |value| {
34103412 value.destroy(gpa);
34113413 }
3412 mod.failed_decls.deinit(gpa);
3414 failed_decls.deinit(gpa);
34133415
34143416 if (mod.emit_h) |emit_h| {
34153417 for (emit_h.failed_decls.values()) |value| {
......@@ -3482,6 +3484,13 @@ pub fn deinit(mod: *Module) void {
34823484pub fn destroyDecl(mod: *Module, decl_index: Decl.Index) void {
34833485 const gpa = mod.gpa;
34843486 {
3487 if (mod.failed_decls.contains(decl_index)) {
3488 blk: {
3489 const errs = mod.comp.getAllErrorsAlloc() catch break :blk;
3490 for (errs.list) |err| Compilation.AllErrors.Message.renderToStdErr(err, .no_color);
3491 }
3492 @panic("Zig compiler bug: attempted to destroy declaration with an attached error");
3493 }
34853494 const decl = mod.declPtr(decl_index);
34863495 log.debug("destroy {*} ({s})", .{ decl, decl.name });
34873496 _ = mod.test_functions.swapRemove(decl_index);