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 {...@@ -872,6 +872,8 @@ pub const Module = struct {
872 };872 };
873873
874 pub fn deinit(self: *Module, allocator: *Allocator) void {874 pub fn deinit(self: *Module, allocator: *Allocator) void {
875 self.metadata.deinit();
876 self.body_metadata.deinit();
875 allocator.free(self.decls);877 allocator.free(self.decls);
876 self.arena.deinit();878 self.arena.deinit();
877 self.* = undefined;879 self.* = undefined;
...@@ -1543,8 +1545,8 @@ pub fn emit(allocator: *Allocator, old_module: IrModule) !Module {...@@ -1543,8 +1545,8 @@ pub fn emit(allocator: *Allocator, old_module: IrModule) !Module {
1543 .metadata = std.AutoHashMap(*Inst, Module.MetaData).init(allocator),1545 .metadata = std.AutoHashMap(*Inst, Module.MetaData).init(allocator),
1544 .body_metadata = std.AutoHashMap(*Module.Body, Module.BodyMetaData).init(allocator),1546 .body_metadata = std.AutoHashMap(*Module.Body, Module.BodyMetaData).init(allocator),
1545 };1547 };
1546 defer ctx.metadata.deinit();1548 errdefer ctx.metadata.deinit();
1547 defer ctx.body_metadata.deinit();1549 errdefer ctx.body_metadata.deinit();
1548 defer ctx.block_table.deinit();1550 defer ctx.block_table.deinit();
1549 defer ctx.loop_table.deinit();1551 defer ctx.loop_table.deinit();
1550 defer ctx.decls.deinit(allocator);1552 defer ctx.decls.deinit(allocator);
test/stage2/zir.zig+9-9
...@@ -28,7 +28,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -28,7 +28,7 @@ pub fn addCases(ctx: *TestContext) !void {
28 \\@unnamed$5 = export(@unnamed$4, "entry")28 \\@unnamed$5 = export(@unnamed$4, "entry")
29 \\@unnamed$6 = fntype([], @void, cc=C)29 \\@unnamed$6 = fntype([], @void, cc=C)
30 \\@entry = fn(@unnamed$6, {30 \\@entry = fn(@unnamed$6, {
31 \\ %0 = returnvoid()31 \\ %0 = returnvoid() ; deaths=0b1000000000000000
32 \\})32 \\})
33 \\33 \\
34 );34 );
...@@ -75,7 +75,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -75,7 +75,7 @@ pub fn addCases(ctx: *TestContext) !void {
75 \\@3 = int(3)75 \\@3 = int(3)
76 \\@unnamed$6 = fntype([], @void, cc=C)76 \\@unnamed$6 = fntype([], @void, cc=C)
77 \\@entry = fn(@unnamed$6, {77 \\@entry = fn(@unnamed$6, {
78 \\ %0 = returnvoid()78 \\ %0 = returnvoid() ; deaths=0b1000000000000000
79 \\})79 \\})
80 \\@entry__anon_1 = str("2\x08\x01\n")80 \\@entry__anon_1 = str("2\x08\x01\n")
81 \\@9 = declref("9__anon_0")81 \\@9 = declref("9__anon_0")
...@@ -117,18 +117,18 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -117,18 +117,18 @@ pub fn addCases(ctx: *TestContext) !void {
117 \\@unnamed$5 = export(@unnamed$4, "entry")117 \\@unnamed$5 = export(@unnamed$4, "entry")
118 \\@unnamed$6 = fntype([], @void, cc=C)118 \\@unnamed$6 = fntype([], @void, cc=C)
119 \\@entry = fn(@unnamed$6, {119 \\@entry = fn(@unnamed$6, {
120 \\ %0 = call(@a, [], modifier=auto)120 \\ %0 = call(@a, [], modifier=auto) ; deaths=0b1000000000000001
121 \\ %1 = returnvoid()121 \\ %1 = returnvoid() ; deaths=0b1000000000000000
122 \\})122 \\})
123 \\@unnamed$8 = fntype([], @void, cc=C)123 \\@unnamed$8 = fntype([], @void, cc=C)
124 \\@a = fn(@unnamed$8, {124 \\@a = fn(@unnamed$8, {
125 \\ %0 = call(@b, [], modifier=auto)125 \\ %0 = call(@b, [], modifier=auto) ; deaths=0b1000000000000001
126 \\ %1 = returnvoid()126 \\ %1 = returnvoid() ; deaths=0b1000000000000000
127 \\})127 \\})
128 \\@unnamed$10 = fntype([], @void, cc=C)128 \\@unnamed$10 = fntype([], @void, cc=C)
129 \\@b = fn(@unnamed$10, {129 \\@b = fn(@unnamed$10, {
130 \\ %0 = call(@a, [], modifier=auto)130 \\ %0 = call(@a, [], modifier=auto) ; deaths=0b1000000000000001
131 \\ %1 = returnvoid()131 \\ %1 = returnvoid() ; deaths=0b1000000000000000
132 \\})132 \\})
133 \\133 \\
134 );134 );
...@@ -193,7 +193,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -193,7 +193,7 @@ pub fn addCases(ctx: *TestContext) !void {
193 \\@unnamed$5 = export(@unnamed$4, "entry")193 \\@unnamed$5 = export(@unnamed$4, "entry")
194 \\@unnamed$6 = fntype([], @void, cc=C)194 \\@unnamed$6 = fntype([], @void, cc=C)
195 \\@entry = fn(@unnamed$6, {195 \\@entry = fn(@unnamed$6, {
196 \\ %0 = returnvoid()196 \\ %0 = returnvoid() ; deaths=0b1000000000000000
197 \\})197 \\})
198 \\198 \\
199 );199 );