]> granicus.if.org Git - php/commitdiff
Don't skip fcall guard for method calls from trait
authorDmitry Stogov <dmitry@zend.com>
Wed, 29 Jul 2020 21:31:46 +0000 (00:31 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 29 Jul 2020 21:31:46 +0000 (00:31 +0300)
ext/opcache/jit/zend_jit_trace.c

index 71adacaa0cced16688d3fbeb6bbaef0c122a3c71..8d47f26d4ea84abcc8c9c14c486008267f8b91fa 100644 (file)
@@ -4549,6 +4549,14 @@ done:
 
                                                while (call_info) {
                                                        if (call_info->caller_init_opline == init_opline) {
+                                                               if (op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) {
+                                                                       if (init_opline->opcode == ZEND_INIT_STATIC_METHOD_CALL
+                                                                        && init_opline->op1_type != IS_CONST) {
+                                                                               break;
+                                                                       } else if (init_opline->opcode == ZEND_INIT_METHOD_CALL) {
+                                                                               break;
+                                                                       }
+                                                               }
                                                                skip_guard = 1;
                                                                break;
                                                        }