]> granicus.if.org Git - php/commitdiff
Fixed bug #38287 (static variables mess up global vars)
authorDmitry Stogov <dmitry@php.net>
Mon, 7 Aug 2006 15:15:36 +0000 (15:15 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 7 Aug 2006 15:15:36 +0000 (15:15 +0000)
Zend/tests/bug38287.phpt [new file with mode: 0755]
Zend/zend.h
Zend/zend_objects_API.c
Zend/zend_objects_API.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/bug38287.phpt b/Zend/tests/bug38287.phpt
new file mode 100755 (executable)
index 0000000..9a53a93
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Bug #38287 (static variables mess up global vars)
+--FILE--
+<?php
+error_reporting(0);
+
+something::do_something();
+
+// $not_there is really NULL
+var_dump($not_there);
+
+// error occurs here: execution should never get inside the if condition because $not_there is NULL
+if ($not_there["invalid_var"]) {
+  // will print NULL (which is ok, but execution should never get here if the value is NULL)
+  var_dump($not_there["use_authmodule"]);
+  // will print "PATH:Array"
+  print "PATH:".$not_there["use_authmodule"]."\n";
+}
+
+class something {
+  public static function get_object() {
+    static $object=NULL;
+    if ($object===NULL)
+    $object=new something;
+    return $object;
+  }
+
+  public static function do_something() {
+    self::get_object()->vars[]=1;
+    self::get_object()->vars[]=2;
+    self::get_object()->vars[]=3;
+    var_dump(self::get_object()->vars);
+  }
+}
+?>
+--EXPECT--
+array(3) {
+  [0]=>
+  int(1)
+  [1]=>
+  int(2)
+  [2]=>
+  int(3)
+}
+NULL
index bf5a37d88d3caa28b81196e25c2003ad7cacd33e..d89933c4113e816c771b5d2345c3a6833d11fedf 100644 (file)
@@ -687,6 +687,11 @@ END_EXTERN_C()
                varptr->refcount++; \
        }
 
+#define READY_TO_DESTROY(zv) \
+       ((zv)->refcount == 1 && \
+        (Z_TYPE_P(zv) != IS_OBJECT || \
+         zend_objects_store_get_refcount(zv TSRMLS_CC) == 1))
+
 
 #define ZEND_MAX_RESERVED_RESOURCES    4
 
index 08b50a92601c0991cafb9df0559ba346c0f29833..beb07cbf1a293c767d5d5e6ad2dcfbb54a91242a 100644 (file)
@@ -125,6 +125,13 @@ ZEND_API zend_object_handle zend_objects_store_put(void *object, zend_objects_st
        return handle;
 }
 
+ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC)
+{
+       zend_object_handle handle = Z_OBJ_HANDLE_P(object);
+
+       return EG(objects_store).object_buckets[handle].bucket.obj.refcount;
+}
+
 ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC)
 {
        zend_object_handle handle = Z_OBJ_HANDLE_P(object);
index 78340e3bc1100ec8a80a8d1714d8355fd0a20da8..fa33ffb50d903d8a709b3b1c6ab1c827f7eddda2 100644 (file)
@@ -66,6 +66,7 @@ ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC);
 ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC);
 ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC);
 ZEND_API void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC);
+ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC);
 ZEND_API int zend_objects_is_destructor_called(zend_object_handle handle TSRMLS_DC);
 ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC);
 ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC);
index 0cd79770462c73c04673a755fe06bdbf662b5c1e..96757e533de1997e6aab779a1fafe18796e59802 100644 (file)
@@ -1073,6 +1073,7 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_W), dim, IS_OP2_TMP_FREE(), BP_VAR_W TSRMLS_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1089,6 +1090,7 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW), dim, IS_OP2_TMP_FREE(), BP_VAR_RW TSRMLS_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1122,6 +1124,7 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(type), dim, IS_OP2_TMP_FREE(), type TSRMLS_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && type == BP_VAR_W && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1149,6 +1152,7 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMP|VAR|CV)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, IS_OP2_TMP_FREE(), BP_VAR_UNSET TSRMLS_CC);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1254,6 +1258,7 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                FREE_OP2();
        }
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1277,6 +1282,7 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                FREE_OP2();
        }
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -1308,6 +1314,7 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                        FREE_OP2();
                }
                if (OP1_TYPE == IS_VAR && OP1_FREE &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -1340,6 +1347,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                FREE_OP2();
        }
        if (OP1_TYPE == IS_VAR && OP1_FREE &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
index 3bd93c092882cde2302fcb5a46795046a0fd9c9b..133ba00af7f4eb212db4b26ba327fb655a5ffd8f 100644 (file)
@@ -8961,6 +8961,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -8977,6 +8978,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -9010,6 +9012,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -9037,6 +9040,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -9142,6 +9146,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -9165,6 +9170,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -9196,6 +9202,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
 
                }
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -9228,6 +9235,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10487,6 +10495,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10503,6 +10512,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10536,6 +10546,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, type TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10563,6 +10574,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10668,6 +10680,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10691,6 +10704,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -10722,6 +10736,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        zval_dtor(free_op2.var);
                }
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -10754,6 +10769,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12016,6 +12032,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12032,6 +12049,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12065,6 +12083,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12092,6 +12111,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12197,6 +12217,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12220,6 +12241,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -12251,6 +12273,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                }
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -12283,6 +12306,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -13150,6 +13174,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -13166,6 +13191,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -13187,6 +13213,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_A
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14012,6 +14039,7 @@ static int ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14028,6 +14056,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14061,6 +14090,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14088,6 +14118,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
 
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14193,6 +14224,8 @@ static int ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+           READY_TO_DESTROY(free_op1.var) &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -14247,6 +14280,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
                }
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -15462,7 +15496,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = &opline->op2.u.constant;
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
@@ -15480,6 +15514,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -15490,7 +15525,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = &opline->op2.u.constant;
 
        if (0) {
@@ -15521,7 +15556,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-
+               zend_free_op free_op1;
                zval *property = &opline->op2.u.constant;
 
                if (0) {
@@ -15534,6 +15569,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
                }
                if (IS_UNUSED == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -15547,7 +15583,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER
 static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_res;
+       zend_free_op free_op1, free_res;
        zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
        zval *property = &opline->op2.u.constant;
 
@@ -16627,7 +16663,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
@@ -16645,6 +16681,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -16655,7 +16692,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (1) {
@@ -16686,7 +16723,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-               zend_free_op free_op2;
+               zend_free_op free_op1, free_op2;
                zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
                if (1) {
@@ -16699,6 +16736,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                        zval_dtor(free_op2.var);
                }
                if (IS_UNUSED == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -16712,7 +16750,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2, free_res;
+       zend_free_op free_op1, free_op2, free_res;
        zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -17751,7 +17789,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
@@ -17769,6 +17807,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -17779,7 +17818,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (0) {
@@ -17792,6 +17831,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -17810,7 +17850,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-               zend_free_op free_op2;
+               zend_free_op free_op1, free_op2;
                zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
                if (0) {
@@ -17823,6 +17863,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                }
                if (IS_UNUSED == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -17836,7 +17877,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2, free_res;
+       zend_free_op free_op1, free_op2, free_res;
        zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -17855,6 +17896,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -19250,7 +19292,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
@@ -19268,6 +19310,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -19278,7 +19321,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        if (0) {
@@ -19291,6 +19334,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -19309,7 +19353,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-
+               zend_free_op free_op1;
                zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
                if (0) {
@@ -19322,6 +19366,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
                }
                if (IS_UNUSED == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -19335,7 +19380,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_res;
+       zend_free_op free_op1, free_res;
        zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
@@ -19354,6 +19399,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_UNUSED == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -21821,12 +21867,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = &opline->op2.u.constant;
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -21837,12 +21884,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = &opline->op2.u.constant;
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -21865,7 +21913,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
        zval *dim;
 
@@ -21876,6 +21924,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -21886,7 +21935,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
        zval *dim = &opline->op2.u.constant;
 
@@ -21903,6 +21952,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -21989,7 +22039,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = &opline->op2.u.constant;
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
@@ -22007,6 +22057,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -22017,7 +22068,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = &opline->op2.u.constant;
 
        if (0) {
@@ -22030,6 +22081,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -22048,7 +22100,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-
+               zend_free_op free_op1;
                zval *property = &opline->op2.u.constant;
 
                if (0) {
@@ -22061,6 +22113,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
                }
                if (IS_CV == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -22074,7 +22127,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
 static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_res;
+       zend_free_op free_op1, free_res;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
        zval *property = &opline->op2.u.constant;
 
@@ -22093,6 +22146,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23339,12 +23393,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23355,12 +23410,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23383,7 +23439,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
        zval *dim;
 
@@ -23394,6 +23450,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 1, type TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23404,7 +23461,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
        zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -23421,6 +23478,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
        zval_dtor(free_op2.var);
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23507,7 +23565,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
@@ -23525,6 +23583,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23535,7 +23594,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (1) {
@@ -23548,6 +23607,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -23566,7 +23626,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-               zend_free_op free_op2;
+               zend_free_op free_op1, free_op2;
                zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
                if (1) {
@@ -23579,6 +23639,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        zval_dtor(free_op2.var);
                }
                if (IS_CV == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -23592,7 +23653,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2, free_res;
+       zend_free_op free_op1, free_op2, free_res;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
        zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -23611,6 +23672,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                zval_dtor(free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -24860,12 +24922,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -24876,12 +24939,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -24904,7 +24968,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
        zval *dim;
 
@@ -24915,6 +24979,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -24925,7 +24990,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
        zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -24942,6 +25007,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -25028,7 +25094,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
@@ -25046,6 +25112,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -25056,7 +25123,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2;
+       zend_free_op free_op1, free_op2;
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
        if (0) {
@@ -25069,6 +25136,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -25087,7 +25155,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-               zend_free_op free_op2;
+               zend_free_op free_op1, free_op2;
                zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
                if (0) {
@@ -25100,6 +25168,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
                }
                if (IS_CV == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -25113,7 +25182,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_op2, free_res;
+       zend_free_op free_op1, free_op2, free_res;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
        zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
 
@@ -25132,6 +25201,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -25985,12 +26055,13 @@ static int ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = NULL;
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26001,12 +26072,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = NULL;
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26017,7 +26089,7 @@ static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
        zval *dim;
 
@@ -26028,6 +26100,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26846,12 +26919,13 @@ static int ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26862,12 +26936,13 @@ static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26890,7 +26965,7 @@ static int ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
        zval *dim;
 
@@ -26901,6 +26976,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
 
        if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -26911,7 +26987,7 @@ static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
        zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
@@ -26928,6 +27004,7 @@ static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
 
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -27014,7 +27091,7 @@ static int ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
@@ -27032,6 +27109,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -27042,7 +27120,7 @@ static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-
+       zend_free_op free_op1;
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
        if (0) {
@@ -27055,6 +27133,7 @@ static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }
@@ -27073,7 +27152,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
                /* Behave like FETCH_OBJ_W */
-
+               zend_free_op free_op1;
                zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
                if (0) {
@@ -27086,6 +27165,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
                }
                if (IS_CV == IS_VAR && 0 &&
+                   READY_TO_DESTROY(free_op1.var) &&
                    !RETURN_VALUE_UNUSED(&opline->result)) {
                        AI_USE_PTR(EX_T(opline->result.u.var).var);
                }
@@ -27099,7 +27179,7 @@ static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        zend_op *opline = EX(opline);
-       zend_free_op free_res;
+       zend_free_op free_op1, free_res;
        zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
        zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
 
@@ -27118,6 +27198,7 @@ static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        }
        if (IS_CV == IS_VAR && 0 &&
+           READY_TO_DESTROY(free_op1.var) &&
            !RETURN_VALUE_UNUSED(&opline->result)) {
                AI_USE_PTR(EX_T(opline->result.u.var).var);
        }