Commit e369752430

Veikka Tuominen <git@vexu.eu>
2022-04-23 13:48:16
Sema: do not call `returnError` when returning payload of error union
1 parent 53a5aee
Changed files (3)
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 = .{
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.
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");