]> granicus.if.org Git - php/commitdiff
Delay IS_UNDEF checks
authorDmitry Stogov <dmitry@zend.com>
Tue, 16 Jul 2019 08:16:45 +0000 (11:16 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 16 Jul 2019 08:16:45 +0000 (11:16 +0300)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 7e2497c3a89d66b68556cba4c68d310aa8c2858f..be9e17cbda4230e0b2eed6312c6aa5d1a00ae7bb 100644 (file)
@@ -2739,6 +2739,12 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
                                break;
                        }
 
+                       if (container_op_type == IS_CV
+                        && type != BP_VAR_W
+                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                               container = ZVAL_UNDEFINED_OP1();
+                       }
+
                        /* this should modify object only if it's empty */
                        if (type == BP_VAR_UNSET) {
                                return;
index 24c9ea329450b1bd3e327f89eb0fdc3d3c42776f..0f71978072fd51cc340ba407f61ce1b68a1500ba 100644 (file)
@@ -1078,7 +1078,7 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
+       object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
@@ -1094,6 +1094,10 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
                                object = Z_REFVAL_P(object);
                                ZEND_VM_C_GOTO(assign_op_object);
                        }
+                       if (OP1_TYPE == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -1349,7 +1353,7 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
+       object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
@@ -1363,6 +1367,10 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH
                                object = Z_REFVAL_P(object);
                                ZEND_VM_C_GOTO(pre_incdec_object);
                        }
+                       if (OP1_TYPE == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -1411,7 +1419,7 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
+       object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
@@ -1425,6 +1433,10 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
                                object = Z_REFVAL_P(object);
                                ZEND_VM_C_GOTO(post_incdec_object);
                        }
+                       if (OP1_TYPE == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -2200,7 +2212,7 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH
        zval *property, *container, *result;
 
        SAVE_OPLINE();
-       container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
+       container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
@@ -2339,7 +2351,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, C
        zval *container, *property, *result;
 
        SAVE_OPLINE();
-       container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
+       container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
 
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
@@ -6185,7 +6197,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S
        zval *offset;
 
        SAVE_OPLINE();
-       container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
+       container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
        if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
        }
@@ -6196,6 +6208,10 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (OP1_TYPE == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
index 110347bfe670c8a1f94eda258094acc9447b21a9..ebf2cca3b81513e04649403b127cdf32beeb7388 100644 (file)
@@ -20710,6 +20710,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_H
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -20929,6 +20933,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HAN
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -20985,6 +20993,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HA
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -22767,6 +22779,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_VAR == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -22986,6 +23002,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -23207,6 +23227,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HA
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -23264,6 +23288,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_H
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -24922,6 +24950,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_VAR == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -26736,6 +26768,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HAND
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -26955,6 +26991,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLE
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -27011,6 +27051,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDL
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_VAR == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -28761,6 +28805,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_VAR == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -29193,6 +29241,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONS
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -29276,6 +29328,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -29332,6 +29388,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -30781,6 +30841,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_UNUSED == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -31002,6 +31066,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPV
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -31085,6 +31153,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -31142,6 +31214,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVA
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -32501,6 +32577,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_UNUSED == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -33480,6 +33560,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_H
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -33563,6 +33647,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HAN
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -33619,6 +33707,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HA
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_UNUSED == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -34976,6 +35068,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_UNUSED == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -37403,7 +37499,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HA
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -37419,6 +37515,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HA
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -37624,7 +37724,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HAND
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -37638,6 +37738,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HAND
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -37680,7 +37784,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HAN
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -37694,6 +37798,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HAN
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -37993,7 +38101,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
        zval *property, *container, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -38132,7 +38240,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
        zval *container, *property, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -39769,7 +39877,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
        zval *offset;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
        }
@@ -39780,6 +39888,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_CV == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -40636,7 +40748,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_H
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -40652,6 +40764,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_H
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -40859,7 +40975,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HAN
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -40873,6 +40989,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HAN
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -40916,7 +41036,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HA
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -40930,6 +41050,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HA
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -41225,7 +41349,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
        zval *property, *container, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -41364,7 +41488,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
        zval *container, *property, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -42946,7 +43070,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
        zval *offset;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
        }
@@ -42957,6 +43081,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_CV == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {
@@ -45441,7 +45569,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDL
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -45457,6 +45585,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDL
                                object = Z_REFVAL_P(object);
                                goto assign_op_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -45662,7 +45794,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -45676,6 +45808,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER
                                object = Z_REFVAL_P(object);
                                goto pre_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -45718,7 +45854,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLE
        zend_property_info *prop_info;
 
        SAVE_OPLINE();
-       object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       object = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -45732,6 +45868,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLE
                                object = Z_REFVAL_P(object);
                                goto post_incdec_object;
                        }
+                       if (IS_CV == IS_CV
+                        && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+                               object = ZVAL_UNDEFINED_OP1();
+                       }
                        object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                        if (UNEXPECTED(!object)) {
                                break;
@@ -46026,7 +46166,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
        zval *property, *container, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -46165,7 +46305,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
        zval *container, *property, *result;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
 
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -47841,7 +47981,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
        zval *offset;
 
        SAVE_OPLINE();
-       container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+       container = EX_VAR(opline->op1.var);
        if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
                ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
        }
@@ -47852,6 +47992,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (Z_TYPE_P(container) != IS_OBJECT) {
+                                       if (IS_CV == IS_CV
+                                        && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                                               container = ZVAL_UNDEFINED_OP1();
+                                       }
                                        break;
                                }
                        } else {