authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-08-27 16:18:51-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-08-28 12:28:25-07:00
logc6024691cfc3fa329cf1b7ac9fcb0855b7211aa0
tree25980812659ce052d3384bc97256fd552591c918
parentff61c428793ff382c8d521638b416ca288e53de5

Sema: implement reference trace with called from here notes

Closes #15124

2 files changed, 2 insertions(+), 9 deletions(-)

src/Module.zig-6
...@@ -1566,12 +1566,6 @@ pub const ErrorMsg = struct {...@@ -1566,12 +1566,6 @@ pub const ErrorMsg = struct {
1566 gpa.free(err_msg.reference_trace);1566 gpa.free(err_msg.reference_trace);
1567 err_msg.* = undefined;1567 err_msg.* = undefined;
1568 }1568 }
1569
1570 pub fn clearTrace(err_msg: *ErrorMsg, gpa: Allocator) void {
1571 if (err_msg.reference_trace.len == 0) return;
1572 gpa.free(err_msg.reference_trace);
1573 err_msg.reference_trace = &.{};
1574 }
1575};1569};
15761570
1577/// Canonical reference to a position within a source file.1571/// Canonical reference to a position within a source file.
src/Sema.zig+2-3
...@@ -2409,8 +2409,8 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError {...@@ -2409,8 +2409,8 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError {
2409 break :blk default_reference_trace_len;2409 break :blk default_reference_trace_len;
2410 };2410 };
24112411
2412 var referenced_by = if (sema.func_index != .none)2412 var referenced_by = if (sema.owner_func_index != .none)
2413 mod.funcOwnerDeclIndex(sema.func_index)2413 mod.funcOwnerDeclIndex(sema.owner_func_index)
2414 else2414 else
2415 sema.owner_decl_index;2415 sema.owner_decl_index;
2416 var reference_stack = std.ArrayList(Module.ErrorMsg.Trace).init(gpa);2416 var reference_stack = std.ArrayList(Module.ErrorMsg.Trace).init(gpa);
...@@ -7430,7 +7430,6 @@ fn analyzeCall(...@@ -7430,7 +7430,6 @@ fn analyzeCall(
7430 const err_msg = sema.err orelse return err;7430 const err_msg = sema.err orelse return err;
7431 if (mem.eql(u8, err_msg.msg, recursive_msg)) return err;7431 if (mem.eql(u8, err_msg.msg, recursive_msg)) return err;
7432 try sema.errNote(block, call_src, err_msg, "called from here", .{});7432 try sema.errNote(block, call_src, err_msg, "called from here", .{});
7433 err_msg.clearTrace(gpa);
7434 return err;7433 return err;
7435 },7434 },
7436 else => |e| return e,7435 else => |e| return e,