Skip to content

Commit 96a1b40

Browse files
committed
Don't record "fake" closures
1 parent 9359486 commit 96a1b40

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

ext/opcache/jit/zend_jit_vm_helpers.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,10 @@ static int zend_jit_trace_record_fake_init_call_ex(zend_execute_data *call, zend
481481
/* TODO: Can we continue recording ??? */
482482
return -1;
483483
}
484+
if (func->type == ZEND_INTERNAL_FUNCTION
485+
&& (func->op_array.fn_flags & (ZEND_ACC_CLOSURE|ZEND_ACC_FAKE_CLOSURE))) {
486+
return -1;
487+
}
484488
if (func->type == ZEND_USER_FUNCTION
485489
&& (func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
486490
jit_extension =
@@ -724,6 +728,10 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
724728
break;
725729
}
726730
if (EX(call)->func->type == ZEND_INTERNAL_FUNCTION) {
731+
if (EX(call)->func->op_array.fn_flags & (ZEND_ACC_CLOSURE|ZEND_ACC_FAKE_CLOSURE)) {
732+
stop = ZEND_JIT_TRACE_STOP_BAD_FUNC;
733+
break;
734+
}
727735
TRACE_RECORD(ZEND_JIT_TRACE_DO_ICALL, 0, EX(call)->func);
728736
}
729737
} else if (opline->opcode == ZEND_INCLUDE_OR_EVAL) {
@@ -879,6 +887,11 @@ zend_jit_trace_stop ZEND_FASTCALL zend_jit_trace_execute(zend_execute_data *ex,
879887
break;
880888
}
881889
func = EX(call)->func;
890+
if (func->type == ZEND_INTERNAL_FUNCTION
891+
&& (func->op_array.fn_flags & (ZEND_ACC_CLOSURE|ZEND_ACC_FAKE_CLOSURE))) {
892+
stop = ZEND_JIT_TRACE_STOP_BAD_FUNC;
893+
break;
894+
}
882895
if (func->type == ZEND_USER_FUNCTION
883896
&& (func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
884897
jit_extension =

0 commit comments

Comments
 (0)