aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-02-06 20:43:14 +0100
committerJacob Young <jacobly0@users.noreply.github.com>2024-02-06 22:31:13 -0500
commit38c2a257354a7a3c638bf15b930305f1249c368a (patch)
tree4f658b0826aebb5244898edb0187303963ba8235 /src/codegen
parent3da6043e2c3fa657cc7261e8cffdf3564c02dda9 (diff)
downloadzig-38c2a257354a7a3c638bf15b930305f1249c368a.tar.gz
zig-38c2a257354a7a3c638bf15b930305f1249c368a.zip
Builder: fix memory leaks
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm/Builder.zig10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/codegen/llvm/Builder.zig b/src/codegen/llvm/Builder.zig
index 6e76631a17..140c8fa941 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;
}