commit 4f900e68d32be271f08e8b8844c725e0a595c467 (tree)
parent f4a9e0530a065f637f1a7fba95b163597bd88410
Author: Andrew Kelley <andrew@ziglang.org>
Date: Mon, 21 Jun 2021 10:53:37 -0700
AstGen: fix crash in debug printing ZIR field types
The printing code did not properly set the parent Decl node field, so
the source location calculations were wrong.
closes #8825
Diffstat:
1 file changed, 9 insertions(+), 0 deletions(-)
diff --git a/src/Zir.zig b/src/Zir.zig
@@ -3561,6 +3561,8 @@ const Writer = struct {
assert(body.len == 0);
try stream.writeAll("{}, {})");
} else {
+ const prev_parent_decl_node = self.parent_decl_node;
+ if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off);
self.indent += 2;
if (body.len == 0) {
try stream.writeAll("{}, {\n");
@@ -3623,6 +3625,7 @@ const Writer = struct {
try stream.writeAll(",\n");
}
+ self.parent_decl_node = prev_parent_decl_node;
self.indent -= 2;
try stream.writeByteNTimes(' ', self.indent);
try stream.writeAll("})");
@@ -3691,6 +3694,8 @@ const Writer = struct {
const body = self.code.extra[extra_index..][0..body_len];
extra_index += body.len;
+ const prev_parent_decl_node = self.parent_decl_node;
+ if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off);
self.indent += 2;
if (body.len == 0) {
try stream.writeAll("{}, {\n");
@@ -3756,6 +3761,7 @@ const Writer = struct {
try stream.writeAll(",\n");
}
+ self.parent_decl_node = prev_parent_decl_node;
self.indent -= 2;
try stream.writeByteNTimes(' ', self.indent);
try stream.writeAll("})");
@@ -3911,6 +3917,8 @@ const Writer = struct {
assert(body.len == 0);
try stream.writeAll("{}, {})");
} else {
+ const prev_parent_decl_node = self.parent_decl_node;
+ if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off);
self.indent += 2;
if (body.len == 0) {
try stream.writeAll("{}, {\n");
@@ -3951,6 +3959,7 @@ const Writer = struct {
}
try stream.writeAll(",\n");
}
+ self.parent_decl_node = prev_parent_decl_node;
self.indent -= 2;
try stream.writeByteNTimes(' ', self.indent);
try stream.writeAll("})");