aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 504edfe97b..212db3a0e4 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -3737,8 +3737,12 @@ fn analyzeRet(
if (need_coercion) {
if (sema.func) |func| {
const fn_ty = func.owner_decl.typed_value.most_recent.typed_value.ty;
- const casted_operand = try sema.coerce(block, fn_ty.fnReturnType(), operand, src);
- _ = try block.addUnOp(src, Type.initTag(.noreturn), .ret, casted_operand);
+ const fn_ret_ty = fn_ty.fnReturnType();
+ const casted_operand = try sema.coerce(block, fn_ret_ty, operand, src);
+ if (fn_ret_ty.zigTypeTag() == .Void)
+ _ = try block.addNoOp(src, Type.initTag(.noreturn), .retvoid)
+ else
+ _ = try block.addUnOp(src, Type.initTag(.noreturn), .ret, casted_operand);
return always_noreturn;
}
}