From 38c2a257354a7a3c638bf15b930305f1249c368a Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 6 Feb 2024 20:43:14 +0100 Subject: [PATCH] Builder: fix memory leaks --- src/codegen/llvm/Builder.zig | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/codegen/llvm/Builder.zig b/src/codegen/llvm/Builder.zig index 6e76631a179284fc595ad7c82b25ae4e76f20f0a..140c8fa941155a4ed041e2a699c3b9631abbf3b2 100644 --- a/src/codegen/llvm/Builder.zig +++ b/src/codegen/llvm/Builder.zig @@ -577,6 +577,7 @@ pub const Type = enum(u32) { pub fn isSized(self: Type, builder: *const Builder) Allocator.Error!bool { var visited: IsSizedVisited = .{}; + defer visited.deinit(builder.gpa); const result = try self.isSizedVisited(&visited, builder); if (builder.useLibLlvm()) assert(result == self.toLlvm(builder).isSized().toBool()); return result; @@ -4766,6 +4767,7 @@ pub const Function = struct { if (self.metadata) |metadata| gpa.free(metadata[0..self.instructions.len]); gpa.free(self.names[0..self.instructions.len]); self.instructions.deinit(gpa); + gpa.free(self.blocks); self.* = undefined; } @@ -6579,10 +6581,16 @@ pub const WipFunction = struct { pub fn deinit(self: *WipFunction) void { self.extra.deinit(self.builder.gpa); + self.metadata.deinit(self.builder.gpa); + self.names.deinit(self.builder.gpa); self.instructions.deinit(self.builder.gpa); for (self.blocks.items) |*b| b.instructions.deinit(self.builder.gpa); self.blocks.deinit(self.builder.gpa); - if (self.builder.useLibLlvm()) self.llvm.builder.dispose(); + if (self.builder.useLibLlvm()) { + self.llvm.instructions.deinit(self.builder.gpa); + self.llvm.blocks.deinit(self.builder.gpa); + self.llvm.builder.dispose(); + } self.* = undefined; } -- 2.54.0