authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-29 20:08:28-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-29 20:08:28-07:00
loge39c86399da565d3855d54b242bf7b5940e3924d
treeb67c392b14d2adc64e15c890ed978daf05fb9ceb
parentb59428e9f78b1f9f265c0ffdba79b128d77644d2

link: half-hearted bug fix for decl_state field

The init()/commit() API of this field leads to the type of bug that this commit fixes by defering an uncomfortably complex expression. I didn't bother doing the equivalent fix in link/MachO.zig because instead I think the `decl_state` field should be entirely removed from Dwarf.

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

src/link/Dwarf.zig+1-1
......@@ -91,7 +91,7 @@ pub const DeclState = struct {
9191 };
9292 }
9393
94 fn deinit(self: *DeclState, gpa: Allocator) void {
94 pub fn deinit(self: *DeclState, gpa: Allocator) void {
9595 self.dbg_line.deinit();
9696 self.dbg_info.deinit();
9797 self.abbrev_type_arena.deinit();
src/link/Elf.zig+6
......@@ -2342,6 +2342,12 @@ pub fn updateFunc(self: *Elf, module: *Module, func: *Module.Fn, air: Air, liven
23422342 if (self.dwarf) |*dw| {
23432343 try dw.initDeclState(decl);
23442344 }
2345 defer if (self.dwarf) |*dw| {
2346 if (dw.decl_state) |*ds| {
2347 ds.deinit(dw.allocator);
2348 dw.decl_state = null;
2349 }
2350 };
23452351
23462352 const res = if (self.dwarf) |*dw|
23472353 try codegen.generateFunction(&self.base, decl.srcLoc(), func, air, liveness, &code_buffer, .{