authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-18 15:11:43-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-18 15:25:01-07:00
log15bcfcd36865fca75b93dc6ce52c904292b62a81
tree47349ce704fb69595dee9b363f09994167543b79
parent31b58acdaef2942a33a0609706446b534539b063

stage2: fix use-after-free when printing ZIR


2 files changed, 13 insertions(+), 11 deletions(-)

src-self-hosted/zir.zig+4-2
......@@ -872,6 +872,8 @@ pub const Module = struct {
872872 };
873873
874874 pub fn deinit(self: *Module, allocator: *Allocator) void {
875 self.metadata.deinit();
876 self.body_metadata.deinit();
875877 allocator.free(self.decls);
876878 self.arena.deinit();
877879 self.* = undefined;
......@@ -1543,8 +1545,8 @@ pub fn emit(allocator: *Allocator, old_module: IrModule) !Module {
15431545 .metadata = std.AutoHashMap(*Inst, Module.MetaData).init(allocator),
15441546 .body_metadata = std.AutoHashMap(*Module.Body, Module.BodyMetaData).init(allocator),
15451547 };
1546 defer ctx.metadata.deinit();
1547 defer ctx.body_metadata.deinit();
1548 errdefer ctx.metadata.deinit();
1549 errdefer ctx.body_metadata.deinit();
15481550 defer ctx.block_table.deinit();
15491551 defer ctx.loop_table.deinit();
15501552 defer ctx.decls.deinit(allocator);
test/stage2/zir.zig+9-9
......@@ -28,7 +28,7 @@ pub fn addCases(ctx: *TestContext) !void {
2828 \\@unnamed$5 = export(@unnamed$4, "entry")
2929 \\@unnamed$6 = fntype([], @void, cc=C)
3030 \\@entry = fn(@unnamed$6, {
31 \\ %0 = returnvoid()
31 \\ %0 = returnvoid() ; deaths=0b1000000000000000
3232 \\})
3333 \\
3434 );
......@@ -75,7 +75,7 @@ pub fn addCases(ctx: *TestContext) !void {
7575 \\@3 = int(3)
7676 \\@unnamed$6 = fntype([], @void, cc=C)
7777 \\@entry = fn(@unnamed$6, {
78 \\ %0 = returnvoid()
78 \\ %0 = returnvoid() ; deaths=0b1000000000000000
7979 \\})
8080 \\@entry__anon_1 = str("2\x08\x01\n")
8181 \\@9 = declref("9__anon_0")
......@@ -117,18 +117,18 @@ pub fn addCases(ctx: *TestContext) !void {
117117 \\@unnamed$5 = export(@unnamed$4, "entry")
118118 \\@unnamed$6 = fntype([], @void, cc=C)
119119 \\@entry = fn(@unnamed$6, {
120 \\ %0 = call(@a, [], modifier=auto)
121 \\ %1 = returnvoid()
120 \\ %0 = call(@a, [], modifier=auto) ; deaths=0b1000000000000001
121 \\ %1 = returnvoid() ; deaths=0b1000000000000000
122122 \\})
123123 \\@unnamed$8 = fntype([], @void, cc=C)
124124 \\@a = fn(@unnamed$8, {
125 \\ %0 = call(@b, [], modifier=auto)
126 \\ %1 = returnvoid()
125 \\ %0 = call(@b, [], modifier=auto) ; deaths=0b1000000000000001
126 \\ %1 = returnvoid() ; deaths=0b1000000000000000
127127 \\})
128128 \\@unnamed$10 = fntype([], @void, cc=C)
129129 \\@b = fn(@unnamed$10, {
130 \\ %0 = call(@a, [], modifier=auto)
131 \\ %1 = returnvoid()
130 \\ %0 = call(@a, [], modifier=auto) ; deaths=0b1000000000000001
131 \\ %1 = returnvoid() ; deaths=0b1000000000000000
132132 \\})
133133 \\
134134 );
......@@ -193,7 +193,7 @@ pub fn addCases(ctx: *TestContext) !void {
193193 \\@unnamed$5 = export(@unnamed$4, "entry")
194194 \\@unnamed$6 = fntype([], @void, cc=C)
195195 \\@entry = fn(@unnamed$6, {
196 \\ %0 = returnvoid()
196 \\ %0 = returnvoid() ; deaths=0b1000000000000000
197197 \\})
198198 \\
199199 );