From 76f7d461ec3b1eed8a266fb031bc2755dc283749 Mon Sep 17 00:00:00 2001 From: ndossche <7771979+ndossche@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:26:50 +0100 Subject: [PATCH] PFA: Fix support for never-returning functions The AST rewrite tried to add a return statement, so I extended the check from void to void or never. --- Zend/tests/partial_application/never_return.phpt | 14 ++++++++++++++ Zend/zend_partial.c | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/partial_application/never_return.phpt diff --git a/Zend/tests/partial_application/never_return.phpt b/Zend/tests/partial_application/never_return.phpt new file mode 100644 index 000000000000..95dc1743a3a0 --- /dev/null +++ b/Zend/tests/partial_application/never_return.phpt @@ -0,0 +1,14 @@ +--TEST-- +PFA can be made from never function +--FILE-- + +--EXPECT-- +bool(true) diff --git a/Zend/zend_partial.c b/Zend/zend_partial.c index d367b5ee21ac..1108cff2301a 100644 --- a/Zend/zend_partial.c +++ b/Zend/zend_partial.c @@ -663,8 +663,8 @@ static zend_ast *zp_compile_forwarding_call( call_ast = zend_ast_create(ZEND_AST_CALL, func_name_ast, args_ast); } - /* Void functions can not 'return $expr' */ - if (ZEND_TYPE_FULL_MASK(return_type) & MAY_BE_VOID) { + /* Void and never functions can not 'return $expr' */ + if (ZEND_TYPE_FULL_MASK(return_type) & (MAY_BE_VOID|MAY_BE_NEVER)) { stmts_ast = zend_ast_list_add(stmts_ast, call_ast); } else { zend_ast *return_ast = zend_ast_create(ZEND_AST_RETURN, call_ast);