authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-05-31 17:14:37+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-05-31 17:14:49+03:00
log56608cbb3d5577d8931830fa02d3e2920925ceab
tree230f65137fb8347264d0e5ef082b8e6373efe5ce
parent36df79cd3779b27a63f449618459603ce549660a

Sema: do not add calls to `returnError` for comptime known non-error values


1 files changed, 5 insertions(+), 2 deletions(-)

src/Sema.zig+5-2
...@@ -13011,10 +13011,13 @@ fn analyzeRet(...@@ -13011,10 +13011,13 @@ fn analyzeRet(
13011 const backend_supports_error_return_tracing =13011 const backend_supports_error_return_tracing =
13012 sema.mod.comp.bin_file.options.use_llvm;13012 sema.mod.comp.bin_file.options.use_llvm;
1301313013
13014 if ((sema.fn_ret_ty.zigTypeTag() == .ErrorSet or sema.typeOf(uncasted_operand).zigTypeTag() == .ErrorUnion) and13014 if (sema.fn_ret_ty.isError() and
13015 sema.mod.comp.bin_file.options.error_return_tracing and13015 sema.mod.comp.bin_file.options.error_return_tracing and
13016 backend_supports_error_return_tracing)13016 backend_supports_error_return_tracing)
13017 {13017 ret_err: {
13018 if (try sema.resolveMaybeUndefVal(block, src, operand)) |ret_val| {
13019 if (ret_val.tag() != .@"error") break :ret_err;
13020 }
13018 const return_err_fn = try sema.getBuiltin(block, src, "returnError");13021 const return_err_fn = try sema.getBuiltin(block, src, "returnError");
13019 const unresolved_stack_trace_ty = try sema.getBuiltinType(block, src, "StackTrace");13022 const unresolved_stack_trace_ty = try sema.getBuiltinType(block, src, "StackTrace");
13020 const stack_trace_ty = try sema.resolveTypeFields(block, src, unresolved_stack_trace_ty);13023 const stack_trace_ty = try sema.resolveTypeFields(block, src, unresolved_stack_trace_ty);