diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c7ac93f8d34e..58ae0aa55a64 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -12439,7 +12439,9 @@ static void zend_compile_stmt(zend_ast *ast) /* {{{ */ } /* }}} */ -static void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */ +/* Keep this out of zend_compile_expr(): the two form a recursion cycle, so inlining merges this + * frame into every nesting level of an expression, tripling the stack needed to compile it. */ +static zend_never_inline void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */ { /* CG(zend_lineno) = ast->lineno; */ CG(zend_lineno) = zend_ast_get_lineno(ast);