diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index c13ba1d4854..85f09d3275d 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1751,6 +1751,9 @@ propagate_arg: } } } + if (opline->op1_type == IS_CV && (info & MAY_BE_RC1)) { + info |= MAY_BE_RCN; + } if (info & MAY_BE_UNDEF) { info |= MAY_BE_NULL; info &= ~MAY_BE_UNDEF; diff --git a/ext/opcache/jit/zend_jit_vm_helpers.c b/ext/opcache/jit/zend_jit_vm_helpers.c index 898b7c1f42a..65732004305 100644 --- a/ext/opcache/jit/zend_jit_vm_helpers.c +++ b/ext/opcache/jit/zend_jit_vm_helpers.c @@ -406,7 +406,7 @@ static int zend_jit_trace_recursive_ret_count(const zend_op_array *op_array, con static int zend_jit_trace_has_recursive_ret(zend_execute_data *ex, const zend_op_array *orig_op_array, const zend_op *orig_opline, int ret_level) { - while (ex != NULL && ret_level < ZEND_JIT_TRACE_MAX_RET_DEPTH) { + while (ex != NULL && ex->func != NULL && ret_level < ZEND_JIT_TRACE_MAX_RET_DEPTH) { if (&ex->func->op_array == orig_op_array && ex->opline + 1 == orig_opline) { return 1; }