mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-05-31 21:35:57 +03:00
Audit usages of toOwnedSlice (#32001)
Followup to #30769 I grepped for `try .*toOwnedSlice` and checked all of them by hand. Fixes a bunch of memory leaks removes usages or `errdefer` and `vars` in some places. I also switched array_list.Managed to ArrayList where it was convenient. Reviewed-on: https://codeberg.org/ziglang/zig/pulls/32001 Reviewed-by: Andrew Kelley <andrew@ziglang.org>
This commit is contained in:
committed by
Andrew Kelley
parent
03955476ad
commit
bbab366b78
+17
-16
@@ -170,26 +170,27 @@ pub fn generate(
|
||||
const prologue = isel.instructions.items.len;
|
||||
const epilogue = try isel.layout(param_it, is_sysv_var_args, saved_gra_len, saved_vra_len, mod);
|
||||
|
||||
const instructions = try isel.instructions.toOwnedSlice(gpa);
|
||||
var mir: Mir = .{
|
||||
try isel.instructions.shrinkToLen(gpa);
|
||||
try isel.literals.shrinkToLen(gpa);
|
||||
try isel.nav_relocs.shrinkToLen(gpa);
|
||||
try isel.uav_relocs.shrinkToLen(gpa);
|
||||
try isel.lazy_relocs.shrinkToLen(gpa);
|
||||
try isel.global_relocs.shrinkToLen(gpa);
|
||||
try isel.literal_relocs.shrinkToLen(gpa);
|
||||
|
||||
const instructions = isel.instructions.toOwnedSliceAssert();
|
||||
|
||||
return .{
|
||||
.prologue = instructions[prologue..epilogue],
|
||||
.body = instructions[0..prologue],
|
||||
.epilogue = instructions[epilogue..],
|
||||
.literals = &.{},
|
||||
.nav_relocs = &.{},
|
||||
.uav_relocs = &.{},
|
||||
.lazy_relocs = &.{},
|
||||
.global_relocs = &.{},
|
||||
.literal_relocs = &.{},
|
||||
.literals = isel.literals.toOwnedSliceAssert(),
|
||||
.nav_relocs = isel.nav_relocs.toOwnedSliceAssert(),
|
||||
.uav_relocs = isel.uav_relocs.toOwnedSliceAssert(),
|
||||
.lazy_relocs = isel.lazy_relocs.toOwnedSliceAssert(),
|
||||
.global_relocs = isel.global_relocs.toOwnedSliceAssert(),
|
||||
.literal_relocs = isel.literal_relocs.toOwnedSliceAssert(),
|
||||
};
|
||||
errdefer mir.deinit(gpa);
|
||||
mir.literals = try isel.literals.toOwnedSlice(gpa);
|
||||
mir.nav_relocs = try isel.nav_relocs.toOwnedSlice(gpa);
|
||||
mir.uav_relocs = try isel.uav_relocs.toOwnedSlice(gpa);
|
||||
mir.lazy_relocs = try isel.lazy_relocs.toOwnedSlice(gpa);
|
||||
mir.global_relocs = try isel.global_relocs.toOwnedSlice(gpa);
|
||||
mir.literal_relocs = try isel.literal_relocs.toOwnedSlice(gpa);
|
||||
return mir;
|
||||
}
|
||||
|
||||
test {
|
||||
|
||||
@@ -324,13 +324,12 @@ pub fn generate(
|
||||
else => |e| return e,
|
||||
};
|
||||
|
||||
var mir: Mir = .{
|
||||
try function.mir_extra.shrinkToLen(gpa);
|
||||
|
||||
return .{
|
||||
.instructions = function.mir_instructions.toOwnedSlice(),
|
||||
.extra = &.{}, // fallible, so populated after errdefer
|
||||
.extra = function.mir_extra.toOwnedSliceAssert(),
|
||||
};
|
||||
errdefer mir.deinit(gpa);
|
||||
mir.extra = try function.mir_extra.toOwnedSlice(gpa);
|
||||
return mir;
|
||||
}
|
||||
|
||||
fn gen(self: *Self) !void {
|
||||
|
||||
@@ -852,10 +852,13 @@ fn generateInner(cg: *CodeGen, any_returns: bool) InnerError!Mir {
|
||||
try cg.addTag(.end);
|
||||
try cg.addTag(.dbg_epilogue_begin);
|
||||
|
||||
var mir: Mir = .{
|
||||
try cg.mir_extra.shrinkToLen(cg.gpa);
|
||||
try cg.mir_locals.shrinkToLen(cg.gpa);
|
||||
|
||||
return .{
|
||||
.instructions = cg.mir_instructions.toOwnedSlice(),
|
||||
.extra = &.{}, // fallible so assigned after errdefer
|
||||
.locals = &.{}, // fallible so assigned after errdefer
|
||||
.extra = cg.mir_extra.toOwnedSliceAssert(),
|
||||
.locals = cg.mir_locals.toOwnedSliceAssert(),
|
||||
.prologue = if (cg.initial_stack_value == .none) .none else .{
|
||||
.sp_local = cg.initial_stack_value.local.value,
|
||||
.flags = .{ .stack_alignment = cg.stack_alignment },
|
||||
@@ -867,10 +870,6 @@ fn generateInner(cg: *CodeGen, any_returns: bool) InnerError!Mir {
|
||||
.func_tys = cg.mir_func_tys.move(),
|
||||
.error_name_table_ref_count = cg.error_name_table_ref_count,
|
||||
};
|
||||
errdefer mir.deinit(cg.gpa);
|
||||
mir.extra = try cg.mir_extra.toOwnedSlice(cg.gpa);
|
||||
mir.locals = try cg.mir_locals.toOwnedSlice(cg.gpa);
|
||||
return mir;
|
||||
}
|
||||
|
||||
const CallWValues = struct {
|
||||
|
||||
@@ -998,22 +998,19 @@ pub fn generate(
|
||||
} },
|
||||
});
|
||||
|
||||
var mir: Mir = .{
|
||||
.instructions = .empty,
|
||||
.extra = &.{},
|
||||
.string_bytes = &.{},
|
||||
.locals = &.{},
|
||||
.table = &.{},
|
||||
.frame_locs = .empty,
|
||||
try function.mir_extra.shrinkToLen(gpa);
|
||||
try function.mir_string_bytes.shrinkToLen(gpa);
|
||||
try function.mir_locals.shrinkToLen(gpa);
|
||||
try function.mir_table.shrinkToLen(gpa);
|
||||
|
||||
return .{
|
||||
.instructions = function.mir_instructions.toOwnedSlice(),
|
||||
.extra = function.mir_extra.toOwnedSliceAssert(),
|
||||
.string_bytes = function.mir_string_bytes.toOwnedSliceAssert(),
|
||||
.locals = function.mir_locals.toOwnedSliceAssert(),
|
||||
.table = function.mir_table.toOwnedSliceAssert(),
|
||||
.frame_locs = function.frame_locs.toOwnedSlice(),
|
||||
};
|
||||
errdefer mir.deinit(gpa);
|
||||
mir.instructions = function.mir_instructions.toOwnedSlice();
|
||||
mir.extra = try function.mir_extra.toOwnedSlice(gpa);
|
||||
mir.string_bytes = try function.mir_string_bytes.toOwnedSlice(gpa);
|
||||
mir.locals = try function.mir_locals.toOwnedSlice(gpa);
|
||||
mir.table = try function.mir_table.toOwnedSlice(gpa);
|
||||
mir.frame_locs = function.frame_locs.toOwnedSlice();
|
||||
return mir;
|
||||
}
|
||||
|
||||
pub fn getTmpMir(cg: *CodeGen) Mir {
|
||||
|
||||
Reference in New Issue
Block a user