authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-06 20:43:14+01:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-02-06 22:31:13-05:00
log38c2a257354a7a3c638bf15b930305f1249c368a
tree4f658b0826aebb5244898edb0187303963ba8235
parent3da6043e2c3fa657cc7261e8cffdf3564c02dda9

Builder: fix memory leaks


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

src/codegen/llvm/Builder.zig+9-1
...@@ -577,6 +577,7 @@ pub const Type = enum(u32) {...@@ -577,6 +577,7 @@ pub const Type = enum(u32) {
577577
578 pub fn isSized(self: Type, builder: *const Builder) Allocator.Error!bool {578 pub fn isSized(self: Type, builder: *const Builder) Allocator.Error!bool {
579 var visited: IsSizedVisited = .{};579 var visited: IsSizedVisited = .{};
580 defer visited.deinit(builder.gpa);
580 const result = try self.isSizedVisited(&visited, builder);581 const result = try self.isSizedVisited(&visited, builder);
581 if (builder.useLibLlvm()) assert(result == self.toLlvm(builder).isSized().toBool());582 if (builder.useLibLlvm()) assert(result == self.toLlvm(builder).isSized().toBool());
582 return result;583 return result;
...@@ -4766,6 +4767,7 @@ pub const Function = struct {...@@ -4766,6 +4767,7 @@ pub const Function = struct {
4766 if (self.metadata) |metadata| gpa.free(metadata[0..self.instructions.len]);4767 if (self.metadata) |metadata| gpa.free(metadata[0..self.instructions.len]);
4767 gpa.free(self.names[0..self.instructions.len]);4768 gpa.free(self.names[0..self.instructions.len]);
4768 self.instructions.deinit(gpa);4769 self.instructions.deinit(gpa);
4770 gpa.free(self.blocks);
4769 self.* = undefined;4771 self.* = undefined;
4770 }4772 }
47714773
...@@ -6579,10 +6581,16 @@ pub const WipFunction = struct {...@@ -6579,10 +6581,16 @@ pub const WipFunction = struct {
65796581
6580 pub fn deinit(self: *WipFunction) void {6582 pub fn deinit(self: *WipFunction) void {
6581 self.extra.deinit(self.builder.gpa);6583 self.extra.deinit(self.builder.gpa);
6584 self.metadata.deinit(self.builder.gpa);
6585 self.names.deinit(self.builder.gpa);
6582 self.instructions.deinit(self.builder.gpa);6586 self.instructions.deinit(self.builder.gpa);
6583 for (self.blocks.items) |*b| b.instructions.deinit(self.builder.gpa);6587 for (self.blocks.items) |*b| b.instructions.deinit(self.builder.gpa);
6584 self.blocks.deinit(self.builder.gpa);6588 self.blocks.deinit(self.builder.gpa);
6585 if (self.builder.useLibLlvm()) self.llvm.builder.dispose();6589 if (self.builder.useLibLlvm()) {
6590 self.llvm.instructions.deinit(self.builder.gpa);
6591 self.llvm.blocks.deinit(self.builder.gpa);
6592 self.llvm.builder.dispose();
6593 }
6586 self.* = undefined;6594 self.* = undefined;
6587 }6595 }
65886596