]> granicus.if.org Git - php/commitdiff
Check for USER_FUNCTION
authorDmitry Stogov <dmitry@zend.com>
Tue, 19 Feb 2019 15:39:44 +0000 (18:39 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 19 Feb 2019 15:39:44 +0000 (18:39 +0300)
ext/opcache/Optimizer/zend_call_graph.c
ext/opcache/Optimizer/zend_optimizer.c

index 02dc2b79cfd7f774d80c1a6513def2d866ee96df..8d677c1b86beb226cc0cadf2e9e41e281cf93bb1 100644 (file)
@@ -71,7 +71,9 @@ static int zend_foreach_op_array(zend_call_graph *call_graph, zend_script *scrip
                        continue;
                }
                ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
-                       if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
+                       if (op_array->scope == ce
+                        && op_array->type == ZEND_USER_FUNCTION
+                        && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
                                if (func(call_graph, op_array) != SUCCESS) {
                                        return FAILURE;
                                }
index 0c62ed055929923b9448d77f26e05904f01fc29b..dceb8c9fd9c2757250fc7072d4f6ea0fc6622d9d 100644 (file)
@@ -1417,7 +1417,9 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
                        continue;
                }
                ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
-                       if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
+                       if (op_array->scope == ce
+                        && op_array->type == ZEND_USER_FUNCTION
+                        && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
                                zend_optimize_op_array(op_array, &ctx);
                        }
                } ZEND_HASH_FOREACH_END();
@@ -1531,7 +1533,9 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
                                continue;
                        }
                        ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
-                               if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
+                               if (op_array->scope == ce
+                                && op_array->type == ZEND_USER_FUNCTION
+                                && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
                                        zend_adjust_fcall_stack_size(op_array, &ctx);
                                }
                        } ZEND_HASH_FOREACH_END();
@@ -1574,7 +1578,9 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
 
                ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
                        ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
-                               if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
+                               if (op_array->scope == ce
+                                && op_array->type == ZEND_USER_FUNCTION
+                                && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
                                        zend_dump_op_array(op_array,
                                                ZEND_DUMP_RT_CONSTANTS | ZEND_DUMP_LIVE_RANGES, "after optimizer", NULL);
                                }