zig

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

commit e369752430a1b3a50e57e11b9f0682d026c62feb (tree)
parent 53a5aee3b3684a03c91236702c9304dce21279e2
Author: Veikka Tuominen <git@vexu.eu>
Date:   Sat, 23 Apr 2022 14:48:16 +0300

Sema: do not call `returnError` when returning payload of error union

Diffstat:
Msrc/Module.zig | 2+-
Msrc/Sema.zig | 3++-
Msrc/codegen/llvm.zig | 3---
3 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/Module.zig b/src/Module.zig @@ -4839,7 +4839,7 @@ pub fn analyzeFnBody(mod: *Module, func: *Fn, arena: Allocator) SemaError!Air { }; defer sema.deinit(); - // reset in case case calls to errorable functions are removed. + // reset in case calls to errorable functions are removed. func.calls_or_awaits_errorable_fn = false; // First few indexes of extra are reserved and set at the end. diff --git a/src/Sema.zig b/src/Sema.zig @@ -12658,7 +12658,8 @@ fn analyzeRet( const backend_supports_error_return_tracing = sema.mod.comp.bin_file.options.use_llvm; - if (sema.fn_ret_ty.isError() and sema.mod.comp.bin_file.options.error_return_tracing and + if ((sema.fn_ret_ty.zigTypeTag() == .ErrorSet or sema.typeOf(uncasted_operand).zigTypeTag() == .ErrorUnion) and + sema.mod.comp.bin_file.options.error_return_tracing and backend_supports_error_return_tracing) { const return_err_fn = try sema.getBuiltin(block, src, "returnError"); diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig @@ -698,9 +698,6 @@ pub const Object = struct { const lexical_block = dib.createLexicalBlock(subprogram.toScope(), di_file.?, line_number, 1); di_scope = lexical_block.toScope(); - - // Setup a debug location in case there is a call to `returnError` before a `.dbg_stmt`. - builder.setCurrentDebugLocation(line_number + func.lbrace_line, func.lbrace_column, di_scope.?, null); } var fg: FuncGen = .{