]> granicus.if.org Git - php/commitdiff
Fix ZEND_VM_SPEC=0 build
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 24 Nov 2017 21:57:45 +0000 (22:57 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 24 Nov 2017 22:06:01 +0000 (23:06 +0100)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php

index 7ca76d6effbd3304c03d2e4da5730a1bb2907252..53ed1ac2a5367be2c70d94cf8070952636b4b5dd 100644 (file)
@@ -105,6 +105,7 @@ typedef int (ZEND_FASTCALL *incdec_t)(zval *);
 #define get_zval_ptr_deref(op_type, node, should_free, type) _get_zval_ptr_deref(op_type, node, should_free, type EXECUTE_DATA_CC OPLINE_CC)
 #define get_zval_ptr_undef(op_type, node, should_free, type) _get_zval_ptr_undef(op_type, node, should_free, type EXECUTE_DATA_CC OPLINE_CC)
 #define get_op_data_zval_ptr_r(op_type, node, should_free) _get_op_data_zval_ptr_r(op_type, node, should_free EXECUTE_DATA_CC OPLINE_CC)
+#define get_op_data_zval_ptr_deref_r(op_type, node, should_free) _get_op_data_zval_ptr_deref_r(op_type, node, should_free EXECUTE_DATA_CC OPLINE_CC)
 #define get_zval_ptr_ptr(op_type, node, should_free, type) _get_zval_ptr_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
 #define get_zval_ptr_ptr_undef(op_type, node, should_free, type) _get_zval_ptr_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
 #define get_obj_zval_ptr(op_type, node, should_free, type) _get_obj_zval_ptr(op_type, node, should_free, type EXECUTE_DATA_CC OPLINE_CC)
@@ -503,6 +504,27 @@ static zend_always_inline zval *_get_zval_ptr_deref(int op_type, znode_op node,
        }
 }
 
+static zend_always_inline zval *_get_op_data_zval_ptr_deref_r(int op_type, znode_op node, zend_free_op *should_free EXECUTE_DATA_DC OPLINE_DC)
+{
+       if (op_type & (IS_TMP_VAR|IS_VAR)) {
+               if (op_type == IS_TMP_VAR) {
+                       return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
+               } else {
+                       ZEND_ASSERT(op_type == IS_VAR);
+                       return _get_zval_ptr_var_deref(node.var, should_free EXECUTE_DATA_CC);
+               }
+       } else {
+               *should_free = NULL;
+               if (op_type == IS_CONST) {
+                       return RT_CONSTANT(opline + 1, node);
+               } else if (op_type == IS_CV) {
+                       return _get_zval_ptr_cv_deref_BP_VAR_R(node.var EXECUTE_DATA_CC);
+               } else {
+                       return NULL;
+               }
+       }
+}
+
 static zend_always_inline zval *_get_zval_ptr_undef(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC OPLINE_DC)
 {
        if (op_type & (IS_TMP_VAR|IS_VAR)) {
index 8d5a72a904a3f15ca897a1bea17db8543876d629..e7777e0098712da4f732d3c5a4bc5d33e442d205 100644 (file)
@@ -862,6 +862,7 @@ ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|CV, CONST|TMPVAR|UNUSED|CV,
 ZEND_VM_C_LABEL(assign_dim_op_array):
                SEPARATE_ARRAY(container);
 ZEND_VM_C_LABEL(assign_dim_op_new_array):
+               dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
                if (OP2_TYPE == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -869,8 +870,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
                                ZEND_VM_C_GOTO(assign_dim_op_ret_null);
                        }
                } else {
-                       dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
-
                        if (OP2_TYPE == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -2008,18 +2007,18 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST
                zval *property;
 
                SAVE_OPLINE();
-               container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-
-               if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
-                       ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
-               }
                if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        FREE_UNFETCHED_OP2();
-                       FREE_OP1_VAR_PTR();
+                       FREE_UNFETCHED_OP1();
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
+               if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+                       ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
+               }
                property = GET_OP2_ZVAL_PTR(BP_VAR_R);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                FREE_OP2();
@@ -5799,7 +5798,9 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
                }
                Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
 
-               FREE_OP1_VAR_PTR();
+               if (OP1_TYPE == IS_VAR) {
+                       FREE_OP1_VAR_PTR();
+               }
                ZEND_VM_NEXT_OPCODE();
        } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
                if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -5823,7 +5824,9 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
                        }
                        Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
 
-                       FREE_OP1_VAR_PTR();
+                       if (OP1_TYPE == IS_VAR) {
+                               FREE_OP1_VAR_PTR();
+                       }
                        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        zend_class_entry *ce = Z_OBJCE_P(array_ptr);
index 52c2b6b383a1f56a96d72eaf5a0d1bf1b26a9828..57b2f82fc06927f4796bef9b5782ad587d5fa9d8 100644 (file)
@@ -3639,6 +3639,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
                }
                Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
 
+               if (IS_CONST == IS_VAR) {
+
+               }
                ZEND_VM_NEXT_OPCODE();
        } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
                if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -3662,6 +3665,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
                        }
                        Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
 
+                       if (IS_CONST == IS_VAR) {
+
+                       }
                        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        zend_class_entry *ce = Z_OBJCE_P(array_ptr);
@@ -5205,11 +5211,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_CONST == 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));
-               }
                if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -5217,6 +5218,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_CONST == 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));
+               }
                property = RT_CONSTANT(opline, opline->op2);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -9317,11 +9323,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_CONST == 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));
-               }
                if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -9329,6 +9330,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_CONST == 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));
+               }
                property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -11392,11 +11398,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_CONST == 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));
-               }
                if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -11404,6 +11405,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_CONST == 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));
+               }
                property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
@@ -13261,6 +13267,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
                }
                Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
 
+               if (IS_TMP_VAR == IS_VAR) {
+
+               }
                ZEND_VM_NEXT_OPCODE();
        } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
                if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -13284,6 +13293,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
                        }
                        Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
 
+                       if (IS_TMP_VAR == IS_VAR) {
+
+                       }
                        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        zend_class_entry *ce = Z_OBJCE_P(array_ptr);
@@ -13841,18 +13853,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CO
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_TMP_VAR == 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));
-               }
                if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
-
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_TMP_VAR == 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));
+               }
                property = RT_CONSTANT(opline, opline->op2);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -15216,18 +15228,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_TMP_VAR == 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));
-               }
                if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
-
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_TMP_VAR == 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));
+               }
                property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -15770,18 +15782,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TM
                zval *property;
 
                SAVE_OPLINE();
-               container = NULL;
-
-               if (IS_TMP_VAR == 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));
-               }
                if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = NULL;
+               if (IS_TMP_VAR == 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));
+               }
                property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
@@ -17008,7 +17020,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
                }
                Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
 
-               if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+               if (IS_VAR == IS_VAR) {
+                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+               }
                ZEND_VM_NEXT_OPCODE();
        } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
                if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -17032,7 +17046,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
                        }
                        Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
 
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+                       if (IS_VAR == IS_VAR) {
+                               if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+                       }
                        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        zend_class_entry *ce = Z_OBJCE_P(array_ptr);
@@ -17909,6 +17925,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = RT_CONSTANT(opline, opline->op2);
                if (IS_CONST == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -17916,8 +17933,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = RT_CONSTANT(opline, opline->op2);
-
                        if (IS_CONST == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -18659,18 +18674,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CO
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-
-               if (IS_VAR == 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));
-               }
                if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+               if (IS_VAR == 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));
+               }
                property = RT_CONSTANT(opline, opline->op2);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -20925,6 +20940,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = NULL;
                if (IS_UNUSED == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -20932,8 +20948,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = NULL;
-
                        if (IS_UNUSED == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -22224,6 +22238,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
                if (IS_CV == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -22231,8 +22246,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
-
                        if (IS_CV == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -22974,18 +22987,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-
-               if (IS_VAR == 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));
-               }
                if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+               if (IS_VAR == 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));
+               }
                property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -24830,6 +24843,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -24837,8 +24851,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
-
                        if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -25585,18 +25597,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TM
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
-
-               if (IS_VAR == 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));
-               }
                if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+                       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+               if (IS_VAR == 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));
+               }
                property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
@@ -27742,11 +27754,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
-
-               if (IS_UNUSED == 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));
-               }
                if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -27754,6 +27761,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+               if (IS_UNUSED == 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));
+               }
                property = RT_CONSTANT(opline, opline->op2);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -30378,11 +30390,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
-
-               if (IS_UNUSED == 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));
-               }
                if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -30390,6 +30397,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+               if (IS_UNUSED == 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));
+               }
                property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -32135,11 +32147,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
-
-               if (IS_UNUSED == 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));
-               }
                if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -32147,6 +32154,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+               if (IS_UNUSED == 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));
+               }
                property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
@@ -34440,6 +34452,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
                }
                Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
 
+               if (IS_CV == IS_VAR) {
+
+               }
                ZEND_VM_NEXT_OPCODE();
        } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
                if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -34463,6 +34478,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
                        }
                        Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
 
+                       if (IS_CV == IS_VAR) {
+
+                       }
                        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        zend_class_entry *ce = Z_OBJCE_P(array_ptr);
@@ -35746,6 +35764,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = RT_CONSTANT(opline, opline->op2);
                if (IS_CONST == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -35753,8 +35772,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = RT_CONSTANT(opline, opline->op2);
-
                        if (IS_CONST == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -36708,11 +36725,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-
-               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));
-               }
                if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -36720,6 +36732,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+               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));
+               }
                property = RT_CONSTANT(opline, opline->op2);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -39949,6 +39966,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = NULL;
                if (IS_UNUSED == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -39956,8 +39974,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = NULL;
-
                        if (IS_UNUSED == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -42303,6 +42319,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
                if (IS_CV == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -42310,8 +42327,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
-
                        if (IS_CV == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -43198,11 +43213,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-
-               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));
-               }
                if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
@@ -43210,6 +43220,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+               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));
+               }
                property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -46006,6 +46021,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 assign_dim_op_array:
                SEPARATE_ARRAY(container);
 assign_dim_op_new_array:
+               dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
                        var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
                        if (UNEXPECTED(!var_ptr)) {
@@ -46013,8 +46029,6 @@ assign_dim_op_new_array:
                                goto assign_dim_op_ret_null;
                        }
                } else {
-                       dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
-
                        if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
                                var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
                        } else {
@@ -46907,11 +46921,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
                zval *property;
 
                SAVE_OPLINE();
-               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
-
-               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));
-               }
                if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
                        zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
@@ -46919,6 +46928,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
                }
+
+               container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+               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));
+               }
                property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
index e6ddecfed369ca14458b97fb5b7d5de09b0c695c..7610da49e7e859b30fd2c00c6695ffaa06dac8b0 100644 (file)
@@ -556,7 +556,7 @@ $op_data_type = array(
 );
 
 $op_data_get_zval_ptr = array(
-       "ANY"      => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, &free_op_data, \\1)",
+       "ANY"      => "get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data)",
        "TMP"      => "_get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
        "VAR"      => "_get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
        "CONST"    => "RT_CONSTANT((opline+1), (opline+1)->op1)",
@@ -567,7 +567,7 @@ $op_data_get_zval_ptr = array(
 );
 
 $op_data_get_zval_ptr_deref = array(
-       "ANY"      => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, &free_op_data, \\1)",
+       "ANY"      => "get_op_data_zval_ptr_deref_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data)",
        "TMP"      => "_get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
        "VAR"      => "_get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
        "CONST"    => "RT_CONSTANT((opline+1), (opline+1)->op1)",