diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c index 9048f0c0451..0a4111fa4fd 100644 --- a/Zend/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -1415,6 +1415,7 @@ void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void ZEND_HASH_MAP_FOREACH_PTR(&ce->function_table, op_array) { if (op_array->scope == ce && op_array->type == ZEND_USER_FUNCTION + && !(op_array->fn_flags & ZEND_ACC_ABSTRACT) && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { zend_foreach_op_array_helper(op_array, func, context); } diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index a572f5e3be8..2ccfff3d043 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -1262,6 +1262,7 @@ static void zend_accel_persist_class_table(HashTable *class_table) ZEND_HASH_MAP_FOREACH_PTR(&ce->function_table, op_array) { if (op_array->type == ZEND_USER_FUNCTION) { if (op_array->scope == ce + && !(op_array->fn_flags & ZEND_ACC_ABSTRACT) && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) { zend_jit_op_array(op_array, ZCG(current_persistent_script) ? &ZCG(current_persistent_script)->script : NULL); for (uint32_t i = 0; i < op_array->num_dynamic_func_defs; i++) { @@ -1276,7 +1277,8 @@ static void zend_accel_persist_class_table(HashTable *class_table) if (EXPECTED(Z_TYPE(p->val) != IS_ALIAS_PTR)) { ce = Z_PTR(p->val); ZEND_HASH_MAP_FOREACH_PTR(&ce->function_table, op_array) { - if (op_array->type == ZEND_USER_FUNCTION) { + if (op_array->type == ZEND_USER_FUNCTION + && !(op_array->fn_flags & ZEND_ACC_ABSTRACT)) { if ((op_array->scope != ce || (op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) && (JIT_G(trigger) == ZEND_JIT_ON_FIRST_EXEC