zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit d93f1f3c72578bb343dac6431f9901d62ccf7a2e (tree)
parent b5f89d681f5c9160ad866bec6ce7b552722f40ef
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date:   Fri, 10 Nov 2023 22:23:56 -0500

Sema: detect unneeded source locations earlier

This avoids a lot of work that just needs deferred cleanup anyway.
Crucially, also avoids use of undefined in `failWithNeededComptime`.

Diffstat:
Msrc/Module.zig | 1+
Msrc/Sema.zig | 6+++---
2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/Module.zig b/src/Module.zig @@ -1250,6 +1250,7 @@ pub const ErrorMsg = struct { comptime format: []const u8, args: anytype, ) !*ErrorMsg { + assert(src_loc.lazy != .unneeded); const err_msg = try gpa.create(ErrorMsg); errdefer gpa.destroy(err_msg); err_msg.* = try ErrorMsg.init(gpa, src_loc, format, args); diff --git a/src/Sema.zig b/src/Sema.zig @@ -2438,8 +2438,9 @@ fn errMsg( src: LazySrcLoc, comptime format: []const u8, args: anytype, -) error{OutOfMemory}!*Module.ErrorMsg { +) error{ NeededSourceLocation, OutOfMemory }!*Module.ErrorMsg { const mod = sema.mod; + if (src == .unneeded) return error.NeededSourceLocation; const src_decl = mod.declPtr(block.src_decl); return Module.ErrorMsg.create(sema.gpa, src.toSrcLoc(src_decl, mod), format, args); } @@ -2455,14 +2456,13 @@ pub fn fail( return sema.failWithOwnedErrorMsg(block, err_msg); } -fn failWithOwnedErrorMsg(sema: *Sema, block: ?*Block, err_msg: *Module.ErrorMsg) CompileError { +fn failWithOwnedErrorMsg(sema: *Sema, block: ?*Block, err_msg: *Module.ErrorMsg) error{ AnalysisFail, OutOfMemory } { @setCold(true); const gpa = sema.gpa; const mod = sema.mod; ref: { errdefer err_msg.destroy(gpa); - if (err_msg.src_loc.lazy == .unneeded) return error.NeededSourceLocation; if (crash_report.is_enabled and mod.comp.debug_compile_errors) { var wip_errors: std.zig.ErrorBundle.Wip = undefined;