From f78f9388fe79f084d5ea028e6270a410eacfc316 Mon Sep 17 00:00:00 2001 From: mlugg Date: Sun, 12 Jan 2025 20:55:30 +0000 Subject: Sema: allow tail calls of function pointers Resolves: #22474 --- src/Sema.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Sema.zig b/src/Sema.zig index 6b5aba0a23..c0c02bae58 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -7983,7 +7983,13 @@ fn analyzeCall( } if (call_tag == .call_always_tail) { - return sema.handleTailCall(block, call_src, sema.typeOf(runtime_func), result); + const func_or_ptr_ty = sema.typeOf(runtime_func); + const runtime_func_ty = switch (func_or_ptr_ty.zigTypeTag(zcu)) { + .@"fn" => func_or_ptr_ty, + .pointer => func_or_ptr_ty.childType(zcu), + else => unreachable, + }; + return sema.handleTailCall(block, call_src, runtime_func_ty, result); } if (resolved_ret_ty.toIntern() == .noreturn_type) { -- cgit v1.2.3