]> granicus.if.org Git - php/commitdiff
Fixed (disabled) inline-caching for ZEND_OVERLOADED_FUNCTION methods
authorDmitry Stogov <dmitry@php.net>
Mon, 30 Jan 2012 10:51:02 +0000 (10:51 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 30 Jan 2012 10:51:02 +0000 (10:51 +0000)
NEWS
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/NEWS b/NEWS
index 4e221d4cd40125ca9c1536fdaabda05c4ad6c2b3..a1df805e5da817e0fe62ab866de11418fc11a4eb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP                                                                        NEWS
   . Fix bug #60895 (Possible invalid handler usage in windows random
     functions). (Pierre)
   . Fixed bug #51860 (Include fails with toplevel symlink to /). (Dmitry)
+  . Fixed (disabled) inline-caching for ZEND_OVERLOADED_FUNCTION methods.
+    (Dmitry)
 
 - OpenSSL:
   . Fix possible attack in SSL sockets with SSL 3.0 / TLS 1.0.
index 6cf0f7d2be1a9cd3fe8162bae0ae6ce8f6515bee..9bce557f522a3f4abccef2f1e9fcfaff593cff92 100644 (file)
@@ -2187,6 +2187,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (OP2_TYPE == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -2284,7 +2285,9 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMP|VAR|UNUS
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (OP2_TYPE == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (OP2_TYPE == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (OP1_TYPE == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
index ae186664999a9653498602c7c3e3d312cb02e059..2b5116c3fc8f711a2624e2ddacbb83ec2eeadedc 100644 (file)
@@ -3453,7 +3453,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_CONST == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_CONST == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -4237,7 +4239,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZE
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_TMP_VAR == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_CONST == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -4900,7 +4904,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZE
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_VAR == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_CONST == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -5434,7 +5440,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_UNUSED == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_UNUSED == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_CONST == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -6088,7 +6096,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEN
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_CV == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_CONST == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -7856,6 +7866,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -8510,6 +8521,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -9175,6 +9187,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -10233,6 +10246,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -13298,6 +13312,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -13394,7 +13409,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZE
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_CONST == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_VAR == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -15447,6 +15464,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -15544,7 +15562,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_TMP_VAR == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_VAR == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -17571,6 +17591,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -17668,7 +17689,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_VAR == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_VAR == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -18918,7 +18941,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(Z
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_UNUSED == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_UNUSED == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_VAR == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -20641,6 +20666,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -20737,7 +20763,9 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_
                        if (UNEXPECTED(EX(fbc) == NULL)) {
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
                        }
-                       if (IS_CV == IS_CONST && EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
+                       if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
+                           EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
                                if (IS_VAR == IS_CONST) {
                                        CACHE_PTR(opline->op2.literal->cache_slot, EX(fbc));
                                } else {
@@ -22103,6 +22131,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -23350,6 +23379,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -24507,6 +24537,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -25931,6 +25962,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -28997,6 +29029,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CONST == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -30929,6 +30962,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_TMP_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -32926,6 +32960,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_VAR == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));
@@ -35733,6 +35768,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H
                                zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
                        }
                        if (IS_CV == IS_CONST &&
+                           EXPECTED(EX(fbc)->type <= ZEND_USER_FUNCTION) &&
                            EXPECTED((EX(fbc)->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
                            EXPECTED(EX(object) == object)) {
                                CACHE_POLYMORPHIC_PTR(opline->op2.literal->cache_slot, EX(called_scope), EX(fbc));