]> granicus.if.org Git - php/commitdiff
Use zval_ptr_dtor_nogc() to free IS_TMP_VAR operands.
authorDmitry Stogov <dmitry@zend.com>
Tue, 23 Sep 2014 13:21:29 +0000 (17:21 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 23 Sep 2014 13:21:29 +0000 (17:21 +0400)
Removed ZEND_SWITCH_FREE opcode (ZEND_FREE used instead).

Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_generators.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h
ext/opcache/Optimizer/block_pass.c
ext/opcache/Optimizer/pass2.c
sapi/phpdbg/phpdbg_opcode.c

index 262dc8c1885a55f8ee25384595d302e1e4aa2aba..7c38a28601d03f4be7ef9dac76f9a695b4393aed 100644 (file)
@@ -859,7 +859,7 @@ static int generate_free_loop_var(znode *var TSRMLS_DC) /* {{{ */
                {
                        zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 
-                       opline->opcode = var->op_type == IS_TMP_VAR ? ZEND_FREE : ZEND_SWITCH_FREE;
+                       opline->opcode = ZEND_FREE;
                        SET_NODE(opline->op1, var);
                        SET_UNUSED(opline->op2);
                }
@@ -3588,7 +3588,7 @@ void zend_compile_switch(zend_ast *ast TSRMLS_DC) /* {{{ */
        zend_end_loop(get_next_op_number(CG(active_op_array)), 1 TSRMLS_CC);
 
        if (expr_node.op_type == IS_VAR || expr_node.op_type == IS_TMP_VAR) {
-               zend_emit_op(NULL, expr_node.op_type == IS_TMP_VAR ? ZEND_FREE : ZEND_SWITCH_FREE,
+               zend_emit_op(NULL, ZEND_FREE,
                        &expr_node, NULL TSRMLS_CC);
        } else if (expr_node.op_type == IS_CONST) {
                zval_dtor(&expr_node.u.constant);
index 031ba54d69a8d36491bc78d6c80e818c95fff2b5..c44456d7ae30862833657b55b5a37f1e337adb5e 100644 (file)
@@ -100,15 +100,6 @@ static const zend_internal_function zend_pass_function = {
 
 #define FREE_OP(should_free) \
        if (should_free.var) { \
-               if ((zend_uintptr_t)should_free.var & 1L) { \
-                       zval_dtor((zval*)((zend_uintptr_t)should_free.var & ~1L)); \
-               } else { \
-                       zval_ptr_dtor_nogc(should_free.var); \
-               } \
-       }
-
-#define FREE_OP_IF_VAR(should_free) \
-       if (should_free.var != NULL && (((zend_uintptr_t)should_free.var & 1L) == 0)) { \
                zval_ptr_dtor_nogc(should_free.var); \
        }
 
@@ -117,10 +108,6 @@ static const zend_internal_function zend_pass_function = {
                zval_ptr_dtor_nogc(should_free.var); \
        }
 
-#define TMP_FREE(z) (zval*)(((zend_uintptr_t)(z)) | 1L)
-
-#define IS_TMP_FREE(should_free) ((zend_uintptr_t)should_free.var & 1L)
-
 /* End of zend_execute_locks.h */
 
 #define CV_DEF_OF(i) (EX(func)->op_array.vars[i])
@@ -362,7 +349,7 @@ static inline zval *_get_zval_ptr(int op_type, const znode_op *node, const zend_
                        break;
                case IS_TMP_VAR:
                        ret = EX_VAR(node->var);
-                       should_free->var = TMP_FREE(ret);
+                       should_free->var = ret;
                        return ret;
                        break;
                case IS_VAR:
@@ -392,7 +379,7 @@ static inline zval *_get_zval_ptr_deref(int op_type, const znode_op *node, const
                        break;
                case IS_TMP_VAR:
                        ret = EX_VAR(node->var);
-                       should_free->var = TMP_FREE(ret);
+                       should_free->var = ret;
                        return ret;
                        break;
                case IS_VAR:
@@ -744,10 +731,12 @@ static inline void zend_assign_to_object(zval *retval, zval *object_ptr, zval *p
                ZVAL_COPY(retval, value);
        }
        zval_ptr_dtor(value);
-       FREE_OP_IF_VAR(free_value);
+       if (value_type == IS_VAR) {
+               FREE_OP(free_value);
+       }
 }
 
-static void zend_assign_to_string_offset(zval *str, zend_long offset, zval *value, int value_type, zval *result TSRMLS_DC)
+static void zend_assign_to_string_offset(zval *str, zend_long offset, zval *value, zval *result TSRMLS_DC)
 {
        zend_string *old_str;
 
@@ -779,12 +768,6 @@ static void zend_assign_to_string_offset(zval *str, zend_long offset, zval *valu
                zend_string_release(tmp);
        } else {
                Z_STRVAL_P(str)[offset] = Z_STRVAL_P(value)[0];
-               if (value_type == IS_TMP_VAR) {
-                       /* we can safely free final_value here
-                        * because separation is done only
-                        * in case value_type == IS_VAR */
-                       zval_dtor(value);
-               }
        }
        /*
         * the value of an assignment to a string offset is undefined
@@ -824,7 +807,7 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval
                                return variable_ptr;
                        }
                        garbage = Z_COUNTED_P(variable_ptr);
-                       if (GC_REFCOUNT(garbage) == 1) {
+                       if (--GC_REFCOUNT(garbage) == 0) {
                                ZVAL_COPY_VALUE(variable_ptr, value);
                                if (value_type == IS_CONST) {
                                        /* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
@@ -836,10 +819,9 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval
                                                Z_ADDREF_P(variable_ptr);
                                        }
                                }
-                               _zval_dtor_func(garbage ZEND_FILE_LINE_CC);
+                               _zval_dtor_func_for_ptr(garbage ZEND_FILE_LINE_CC);
                                return variable_ptr;
                        } else { /* we need to split */
-                               GC_REFCOUNT(garbage)--;
                                /* optimized version of GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) */
                                if ((Z_COLLECTABLE_P(variable_ptr)) &&
                                UNEXPECTED(!GC_INFO(garbage))) {
@@ -1036,7 +1018,7 @@ fetch_from_array:
                zend_long offset;
 
                if (type != BP_VAR_UNSET && UNEXPECTED(Z_STRLEN_P(container) == 0)) {
-                       zval_dtor(container);
+                       zval_ptr_dtor_nogc(container);
 convert_to_array:
                        ZVAL_NEW_ARR(container);
                        zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
@@ -1337,13 +1319,9 @@ static inline zend_brk_cont_element* zend_brk_cont(int nest_levels, int array_of
                if (nest_levels>1) {
                        zend_op *brk_opline = &op_array->opcodes[jmp_to->brk];
 
-                       if (brk_opline->opcode == ZEND_SWITCH_FREE) {
-                               if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                       zval_ptr_dtor(EX_VAR(brk_opline->op1.var));
-                               }
-                       } else if (brk_opline->opcode == ZEND_FREE) {
+                       if (brk_opline->opcode == ZEND_FREE) {
                                if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                       zval_dtor(EX_VAR(brk_opline->op1.var));
+                                       zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
                                }
                        }
                }
index 449a3746833c7c4e9c85ef930c0088cf584794e7..b038600ead27dfdadb13b90c1d96cdbb53ff9a2c 100644 (file)
@@ -57,19 +57,9 @@ static void zend_generator_cleanup_unfinished_execution(zend_generator *generato
                        } else if (brk_cont->brk > op_num) {
                                zend_op *brk_opline = op_array->opcodes + brk_cont->brk;
 
-                               switch (brk_opline->opcode) {
-                                       case ZEND_SWITCH_FREE:
-                                               {
-                                                       zval *var = EX_VAR_2(execute_data, brk_opline->op1.var);
-                                                       zval_ptr_dtor(var);
-                                               }
-                                               break;
-                                       case ZEND_FREE:
-                                               {
-                                                       zval *var = EX_VAR_2(execute_data, brk_opline->op1.var);
-                                                       zval_dtor(var);
-                                               }
-                                               break;
+                               if (brk_opline->opcode == ZEND_FREE) {
+                                       zval *var = EX_VAR_2(execute_data, brk_opline->op1.var);
+                                       zval_ptr_dtor_nogc(var);
                                }
                        }
                }
index b25ab4e8bedb0680c54768d159d1b66c1f035f6c..5eee8afb7ee0dfa77b1e7bd7bb97c77b95a0a0a4 100644 (file)
@@ -1643,26 +1643,27 @@ ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
                FREE_OP2();
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        FREE_OP1_VAR_PTR();
        /* assign_dim has two opcodes! */
@@ -1684,7 +1685,7 @@ ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV)
 
        if (OP1_TYPE == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (OP2_TYPE == IS_TMP_VAR) {
-                       zval_dtor(value);
+                       FREE_OP2();
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -2041,11 +2042,7 @@ ZEND_VM_HANDLER(70, ZEND_FREE, TMP|VAR, ANY)
        USE_OPLINE
 
        SAVE_OPLINE();
-       if (OP1_TYPE == IS_TMP_VAR) {
-               zval_dtor(EX_VAR(opline->op1.var));
-       } else {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
-       }
+       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -3652,13 +3649,9 @@ ZEND_VM_HANDLER(100, ZEND_GOTO, ANY, CONST)
 
        brk_opline = EX(func)->op_array.opcodes + el->brk;
 
-       if (brk_opline->opcode == ZEND_SWITCH_FREE) {
-               if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                       zval_ptr_dtor(EX_VAR(brk_opline->op1.var));
-               }
-       } else if (brk_opline->opcode == ZEND_FREE) {
+       if (brk_opline->opcode == ZEND_FREE) {
                if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                       zval_dtor(EX_VAR(brk_opline->op1.var));
+                       zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
                }
        }
        ZEND_VM_JMP(opline->op1.jmp_addr);
@@ -3680,16 +3673,6 @@ ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
        ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HANDLER(49, ZEND_SWITCH_FREE, VAR, ANY)
-{
-       USE_OPLINE
-
-       SAVE_OPLINE();
-       zval_ptr_dtor(EX_VAR(opline->op1.var));
-       CHECK_EXCEPTION();
-       ZEND_VM_NEXT_OPCODE();
-}
-
 ZEND_VM_HANDLER(68, ZEND_NEW, ANY, ANY)
 {
        USE_OPLINE
@@ -5485,13 +5468,9 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
                            catch_op_num >= EX(func)->op_array.brk_cont_array[i].brk) {
                                zend_op *brk_opline = &EX(func)->op_array.opcodes[EX(func)->op_array.brk_cont_array[i].brk];
 
-                               if (brk_opline->opcode == ZEND_SWITCH_FREE) {
-                                       if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                               zval_ptr_dtor(EX_VAR(brk_opline->op1.var));
-                                       }
-                               } else if (brk_opline->opcode == ZEND_FREE) {
+                               if (brk_opline->opcode == ZEND_FREE) {
                                        if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                               zval_dtor(EX_VAR(brk_opline->op1.var));
+                                               zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
                                        }
                                }
                        }
index 467dd4f168bc9bf7afeb8db01cfc44ae72fa4b7a..94496a176d738ab02d731bc5fc067752bfb747a0 100644 (file)
@@ -1347,13 +1347,9 @@ static int ZEND_FASTCALL  ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER
                            catch_op_num >= EX(func)->op_array.brk_cont_array[i].brk) {
                                zend_op *brk_opline = &EX(func)->op_array.opcodes[EX(func)->op_array.brk_cont_array[i].brk];
 
-                               if (brk_opline->opcode == ZEND_SWITCH_FREE) {
+                               if (brk_opline->opcode == ZEND_FREE) {
                                        if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                               zval_ptr_dtor(EX_VAR(brk_opline->op1.var));
-                                       }
-                               } else if (brk_opline->opcode == ZEND_FREE) {
-                                       if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                                               zval_dtor(EX_VAR(brk_opline->op1.var));
+                                               zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
                                        }
                                }
                        }
@@ -1782,13 +1778,9 @@ static int ZEND_FASTCALL  ZEND_GOTO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        brk_opline = EX(func)->op_array.opcodes + el->brk;
 
-       if (brk_opline->opcode == ZEND_SWITCH_FREE) {
-               if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                       zval_ptr_dtor(EX_VAR(brk_opline->op1.var));
-               }
-       } else if (brk_opline->opcode == ZEND_FREE) {
+       if (brk_opline->opcode == ZEND_FREE) {
                if (!(brk_opline->extended_value & EXT_TYPE_FREE_ON_RETURN)) {
-                       zval_dtor(EX_VAR(brk_opline->op1.var));
+                       zval_ptr_dtor_nogc(EX_VAR(brk_opline->op1.var));
                }
        }
        ZEND_VM_JMP(opline->op1.jmp_addr);
@@ -1855,7 +1847,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_
                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                }
 
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -1907,7 +1899,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_H
                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", Z_STRVAL_P(function_name));
                        }
                        zend_string_free(lcname);
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
 
                        fbc = Z_FUNC_P(func);
                        called_scope = NULL;
@@ -1924,7 +1916,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_H
                                /* Delay closure destruction until its invocation */
                                fbc->common.prototype = (zend_function*)Z_OBJ_P(function_name_ptr);
                        } else if (IS_TMP_VAR == IS_CV) {
-                               zval_dtor(free_op2.var);
+                               zval_ptr_dtor_nogc(free_op2.var);
                        }
                } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
                                zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
@@ -1979,7 +1971,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_H
                                        GC_REFCOUNT(object)++; /* For $this pointer */
                                }
                        }
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                } else {
                        if (UNEXPECTED(EG(exception) != NULL)) {
                                HANDLE_EXCEPTION();
@@ -4922,7 +4914,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4937,7 +4929,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4952,7 +4944,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4967,7 +4959,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4982,7 +4974,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4997,7 +4989,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5012,7 +5004,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5027,7 +5019,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5042,7 +5034,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_H
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5058,7 +5050,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCO
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5074,7 +5066,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDL
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5090,7 +5082,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_H
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5106,7 +5098,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HAN
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5122,7 +5114,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_O
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5137,7 +5129,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5152,7 +5144,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5167,7 +5159,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5182,7 +5174,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDL
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5196,7 +5188,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HA
        SAVE_OPLINE();
        container = opline->op1.zv;
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CONST != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
 
        }
@@ -5213,7 +5205,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_H
        SAVE_OPLINE();
        container = opline->op1.zv;
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -5239,7 +5231,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMP_HANDLER(ZEND_OP
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
 
        } else {
                if (IS_TMP_VAR == IS_UNUSED) {
@@ -5247,7 +5239,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMP_HANDLER(ZEND_OP
                }
                container = opline->op1.zv;
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
 
        }
        CHECK_EXCEPTION();
@@ -5281,7 +5273,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CONST_TMP(
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -5318,7 +5310,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_H
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -5345,7 +5337,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMP_HANDLER(ZEND_OP
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, 0 TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
@@ -5424,7 +5416,7 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMP_HANDLER(ZE
                        }
                }
                if (IS_TMP_VAR != IS_CONST) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
        } else {
                if (UNEXPECTED(ce->constructor == NULL)) {
@@ -5510,7 +5502,7 @@ static int ZEND_FASTCALL  ZEND_INIT_USER_CALL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE
        EX(call) = zend_vm_stack_push_call_frame(
                func, opline->extended_value, 0, called_scope, object, EX(call) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5526,7 +5518,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                 opline->op1.zv,
                 _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5611,7 +5603,7 @@ str_index:
                                /* do nothing */
                                break;
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
        }
@@ -5757,7 +5749,7 @@ num_index_prop:
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -5790,7 +5782,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMP_HANDLER(ZEN
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -5937,7 +5929,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9096,7 +9088,7 @@ static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        bitwise_not_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9109,7 +9101,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        boolean_not_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9125,7 +9117,7 @@ static int ZEND_FASTCALL  ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        zend_print_variable(z TSRMLS_CC);
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9162,7 +9154,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                opline = opline->op2.jmp_addr;
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -9193,7 +9185,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                opline++;
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -9224,7 +9216,7 @@ static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        } else {
                opline = opline->op2.jmp_addr;
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -9259,7 +9251,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline = opline->op2.jmp_addr;
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -9293,7 +9285,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline++;
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -9305,11 +9297,7 @@ static int ZEND_FASTCALL  ZEND_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        USE_OPLINE
 
        SAVE_OPLINE();
-       if (IS_TMP_VAR == IS_TMP_VAR) {
-               zval_dtor(EX_VAR(opline->op1.var));
-       } else {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
-       }
+       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9324,7 +9312,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (!EX(return_value)) {
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        } else {
                if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
                        ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
@@ -9363,7 +9351,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLE
                        retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                        if (!EX(return_value)) {
                                if (IS_TMP_VAR == IS_TMP_VAR) {
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                }
                        } else {
                                ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
@@ -9480,7 +9468,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
        ZVAL_BOOL(retval, i_zend_is_true(_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC));
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -9596,7 +9584,7 @@ static int ZEND_FASTCALL  ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                                        if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
                                }
 
-                               zval_dtor(free_op1.var);
+                               zval_ptr_dtor_nogc(free_op1.var);
                                CHECK_EXCEPTION();
                                ZEND_VM_NEXT_OPCODE();
                        }
@@ -9647,7 +9635,7 @@ static int ZEND_FASTCALL  ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        CHECK_EXCEPTION();
                        ZEND_VM_NEXT_OPCODE();
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -9735,7 +9723,7 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
        if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
                zval_ptr_dtor(&tmp_inc_filename);
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        } else if (EXPECTED(new_op_array != NULL)) {
@@ -9981,7 +9969,7 @@ static int ZEND_FASTCALL  ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                } else {
                        zend_print_variable(ptr TSRMLS_CC);
                }
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
 #endif
        zend_bailout();
@@ -10027,12 +10015,12 @@ static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
                } else if (IS_TMP_VAR == IS_VAR && is_ref) {
                        if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
-                       zval_dtor(free_op1.var);
+                       zval_ptr_dtor_nogc(free_op1.var);
                }
                ZEND_VM_JMP(opline->op2.jmp_addr);
        }
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10048,7 +10036,7 @@ static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
                ZVAL_COPY(EX_VAR(opline->result.var), Z_REFVAL_P(value));
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        } else {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
                if (IS_TMP_VAR == IS_CONST) {
@@ -10078,7 +10066,7 @@ static int ZEND_FASTCALL  ZEND_INSTANCEOF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                result = 0;
        }
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10118,7 +10106,7 @@ strlen_error:
                        ZVAL_NULL(EX_VAR(opline->result.var));
                }
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10169,7 +10157,7 @@ static int ZEND_FASTCALL  ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                        break;
                EMPTY_SWITCH_DEFAULT_CASE()
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10183,7 +10171,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10198,7 +10186,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10213,7 +10201,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10228,7 +10216,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10243,7 +10231,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10258,7 +10246,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10273,7 +10261,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10288,7 +10276,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10303,7 +10291,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_H
        fast_is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10319,7 +10307,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO
        fast_is_not_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10335,7 +10323,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDL
        fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10351,7 +10339,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_H
        fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10367,7 +10355,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HAN
        fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10383,7 +10371,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_O
        fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10398,7 +10386,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10413,7 +10401,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10428,7 +10416,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10443,7 +10431,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDL
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10482,7 +10470,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zend_string_release(name);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -10492,7 +10480,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                        ce = Z_CE_P(EX_VAR(opline->op2.var));
                }
                retval = zend_std_get_static_property(ce, name, 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                retval = zend_hash_find(target_symbol_table, name);
@@ -10540,7 +10528,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_CONST(int type,
                                zval_update_constant(retval, 1 TSRMLS_CC);
                        }
                } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
-                       zval_dtor(free_op1.var);
+                       zval_ptr_dtor_nogc(free_op1.var);
                }
        }
 
@@ -10611,7 +10599,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HA
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, opline->op2.zv, IS_CONST TSRMLS_CC);
 
        if (IS_TMP_VAR != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10627,7 +10615,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_H
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, opline->op2.zv, IS_CONST TSRMLS_CC);
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10661,7 +10649,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OP
                container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, opline->op2.zv, IS_CONST TSRMLS_CC);
 
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10694,7 +10682,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_TMP_CONST(
                }
        }
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10730,7 +10718,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_H
                }
        }
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11083,7 +11071,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HAND
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zval_dtor(&tmp);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -11103,7 +11091,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HAND
        if (IS_TMP_VAR != IS_CONST) {
                zval_dtor(&tmp);
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11166,7 +11154,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPC
                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -11296,7 +11284,7 @@ num_index_prop:
        }
 
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11328,7 +11316,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_CONST_HANDLER(ZEN
        }
 
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11472,7 +11460,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        pow_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -11487,8 +11475,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11502,8 +11490,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11517,8 +11505,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11532,8 +11520,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11547,8 +11535,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11562,8 +11550,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11577,8 +11565,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11592,8 +11580,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11607,8 +11595,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HAN
        fast_is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11623,8 +11611,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
        fast_is_not_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11639,8 +11627,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER
        fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11655,8 +11643,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HAN
        fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11671,8 +11659,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDL
        fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11687,8 +11675,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPC
        fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11702,8 +11690,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11717,8 +11705,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11732,8 +11720,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11747,8 +11735,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11762,9 +11750,9 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_TMP_VAR != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -11779,8 +11767,8 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11805,7 +11793,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMP_HANDLER(ZEND_OPCO
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
 
        } else {
                if (IS_TMP_VAR == IS_UNUSED) {
@@ -11813,8 +11801,8 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMP_HANDLER(ZEND_OPCO
                }
                container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op2.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -11847,8 +11835,8 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_TMP_TMP(ZE
                }
        }
 
-       zval_dtor(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11884,8 +11872,8 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HAN
                }
        }
 
-       zval_dtor(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -11911,7 +11899,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMP_HANDLER(ZEND_OPCO
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, 0 TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
@@ -11961,7 +11949,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_
         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
         * string offsets or overloaded objects
         */
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -11993,7 +11981,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        HANDLE_EXCEPTION();
                }
                zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
@@ -12032,7 +12020,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE
        EX(call) = zend_vm_stack_push_call_frame(
                fbc, opline->extended_value, 0, called_scope, obj, EX(call) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12049,7 +12037,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                 _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                 _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12134,7 +12122,7 @@ str_index:
                                /* do nothing */
                                break;
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
        }
@@ -12280,9 +12268,9 @@ num_index_prop:
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12313,9 +12301,9 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_TMP_HANDLER(ZEND_
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12459,8 +12447,8 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        pow_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op1.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12474,7 +12462,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12489,7 +12477,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12504,7 +12492,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12519,7 +12507,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12534,7 +12522,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12549,7 +12537,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12564,7 +12552,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12579,7 +12567,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12594,7 +12582,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        fast_is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12610,7 +12598,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
        fast_is_not_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12626,7 +12614,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
        fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12642,7 +12630,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12658,7 +12646,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDL
        fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12674,7 +12662,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPC
        fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12689,7 +12677,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12704,7 +12692,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12719,7 +12707,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12734,7 +12722,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12773,7 +12761,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zend_string_release(name);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -12783,7 +12771,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                        ce = Z_CE_P(EX_VAR(opline->op2.var));
                }
                retval = zend_std_get_static_property(ce, name, 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                retval = zend_hash_find(target_symbol_table, name);
@@ -12831,7 +12819,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_VAR(int type, ZE
                                zval_update_constant(retval, 1 TSRMLS_CC);
                        }
                } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
-                       zval_dtor(free_op1.var);
+                       zval_ptr_dtor_nogc(free_op1.var);
                }
        }
 
@@ -12902,7 +12890,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAND
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op2.var);
        if (IS_TMP_VAR != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12918,7 +12906,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12952,7 +12940,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_VAR_HANDLER(ZEND_OPCO
                container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR TSRMLS_CC);
                zval_ptr_dtor_nogc(free_op2.var);
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -12986,7 +12974,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_TMP_VAR(ZE
        }
 
        zval_ptr_dtor_nogc(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13023,7 +13011,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
        }
 
        zval_ptr_dtor_nogc(free_op2.var);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13362,7 +13350,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLE
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zval_dtor(&tmp);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -13382,7 +13370,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLE
        if (IS_TMP_VAR != IS_CONST) {
                zval_dtor(&tmp);
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13445,7 +13433,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCOD
                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -13576,7 +13564,7 @@ num_index_prop:
 
        zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13609,7 +13597,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_VAR_HANDLER(ZEND_
 
        zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13753,7 +13741,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        pow_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13792,7 +13780,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zend_string_release(name);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -13802,7 +13790,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                        ce = Z_CE_P(EX_VAR(opline->op2.var));
                }
                retval = zend_std_get_static_property(ce, name, 0, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(varname)) : NULL) TSRMLS_CC);
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
                retval = zend_hash_find(target_symbol_table, name);
@@ -13850,7 +13838,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMP_UNUSED(int type,
                                zval_update_constant(retval, 1 TSRMLS_CC);
                        }
                } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
-                       zval_dtor(free_op1.var);
+                       zval_ptr_dtor_nogc(free_op1.var);
                }
        }
 
@@ -13939,7 +13927,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_O
                container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED TSRMLS_CC);
 
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14115,7 +14103,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HAN
                                        if (IS_TMP_VAR != IS_CONST) {
                                                zval_dtor(&tmp);
                                        }
-                                       zval_dtor(free_op1.var);
+                                       zval_ptr_dtor_nogc(free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -14135,7 +14123,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HAN
        if (IS_TMP_VAR != IS_CONST) {
                zval_dtor(&tmp);
        }
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14198,7 +14186,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OP
                if (IS_TMP_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -14359,7 +14347,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_add_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14374,7 +14362,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_sub_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14389,7 +14377,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_mul_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14404,7 +14392,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_div_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14419,7 +14407,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_mod_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14434,7 +14422,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14449,7 +14437,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14464,7 +14452,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        concat_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14479,7 +14467,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
        fast_is_identical_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14495,7 +14483,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_
        fast_is_not_identical_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14511,7 +14499,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_
        fast_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14527,7 +14515,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
        fast_not_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14543,7 +14531,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLE
        fast_is_smaller_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14559,7 +14547,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCO
        fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14574,7 +14562,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        bitwise_or_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14589,7 +14577,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_and_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14604,7 +14592,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14619,7 +14607,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_
        boolean_xor_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14636,7 +14624,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDL
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV TSRMLS_CC);
 
        if (IS_TMP_VAR != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14652,7 +14640,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
        container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV TSRMLS_CC);
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14686,7 +14674,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCOD
                container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV TSRMLS_CC);
 
-               zval_dtor(free_op1.var);
+               zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14719,7 +14707,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_TMP_CV(ZEN
                }
        }
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14755,7 +14743,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HAND
                }
        }
 
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15148,7 +15136,7 @@ num_index_prop:
        }
 
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15180,7 +15168,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMP_CV_HANDLER(ZEND_O
        }
 
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15324,7 +15312,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        pow_function(EX_VAR(opline->result.var),
                _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC) TSRMLS_CC);
-       zval_dtor(free_op1.var);
+       zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -15769,11 +15757,7 @@ static int ZEND_FASTCALL  ZEND_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        USE_OPLINE
 
        SAVE_OPLINE();
-       if (IS_VAR == IS_TMP_VAR) {
-               zval_dtor(EX_VAR(opline->op1.var));
-       } else {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
-       }
+       zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -16115,16 +16099,6 @@ static int ZEND_FASTCALL  ZEND_BOOL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        ZEND_VM_NEXT_OPCODE();
 }
 
-static int ZEND_FASTCALL  ZEND_SWITCH_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       USE_OPLINE
-
-       SAVE_OPLINE();
-       zval_ptr_dtor(EX_VAR(opline->op1.var));
-       CHECK_EXCEPTION();
-       ZEND_VM_NEXT_OPCODE();
-}
-
 static int ZEND_FASTCALL  ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
@@ -18360,26 +18334,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_dim has two opcodes! */
@@ -18401,7 +18376,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
 
        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_CONST == IS_TMP_VAR) {
-                       zval_dtor(value);
+
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -19417,7 +19392,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19432,7 +19407,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19447,7 +19422,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19462,7 +19437,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19477,7 +19452,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19492,7 +19467,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19507,7 +19482,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19522,7 +19497,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19537,7 +19512,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19553,7 +19528,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19569,7 +19544,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19585,7 +19560,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19601,7 +19576,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19617,7 +19592,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPC
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19632,7 +19607,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19647,7 +19622,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19662,7 +19637,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19677,7 +19652,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19701,7 +19676,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*bin
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -19766,7 +19741,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*bin
                        }
                }
 
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
        }
 
@@ -19833,7 +19808,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMP(int (*bin
        }
 
 assign_op_dim_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        FREE_OP(free_op_data1);
        FREE_OP_VAR_PTR(free_op_data2);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
@@ -19885,7 +19860,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_
        }
 
 assign_op_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20056,7 +20031,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t i
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(retval);
                }
@@ -20110,7 +20085,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t i
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20148,7 +20123,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                ZVAL_NULL(retval);
                if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
                CHECK_EXCEPTION();
@@ -20198,7 +20173,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20223,7 +20198,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
                zval_ptr_dtor_nogc(free_op1.var);
        }
@@ -20248,7 +20223,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        } else {
                zend_fetch_dimension_address_W_ref(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
        }
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20270,7 +20245,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20288,7 +20263,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20314,7 +20289,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        } else {
                if (IS_TMP_VAR == IS_UNUSED) {
@@ -20322,7 +20297,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                }
                container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                zval_ptr_dtor_nogc(free_op1.var);
        }
        CHECK_EXCEPTION();
@@ -20342,7 +20317,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20378,7 +20353,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_TMP(ZE
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20405,7 +20380,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, (opline->extended_value & ZEND_FETCH_MAKE_REF) != 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20429,7 +20404,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20464,7 +20439,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20491,7 +20466,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, 0 TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
@@ -20517,7 +20492,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -20541,7 +20516,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property_name)) : NULL) TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
@@ -20569,7 +20544,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
                zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property_name)) : NULL) TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_free_op free_op2, free_op_data1, free_op_data2;
                zval *value;
@@ -20577,29 +20552,30 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                zval *variable_ptr;
 
                variable_ptr = zend_fetch_dimension_address_W_str(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_dim has two opcodes! */
@@ -20621,7 +20597,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
 
        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_TMP_VAR == IS_TMP_VAR) {
-                       zval_dtor(value);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -20666,7 +20642,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        HANDLE_EXCEPTION();
                }
                zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
@@ -20705,7 +20681,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
        EX(call) = zend_vm_stack_push_call_frame(
                fbc, opline->extended_value, 0, called_scope, obj, EX(call) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        zval_ptr_dtor_nogc(free_op1.var);
 
        CHECK_EXCEPTION();
@@ -20779,7 +20755,7 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND
                        }
                }
                if (IS_TMP_VAR != IS_CONST) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
        } else {
                if (UNEXPECTED(ce->constructor == NULL)) {
@@ -20839,7 +20815,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                 _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                 _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -20924,7 +20900,7 @@ str_index:
                                /* do nothing */
                                break;
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
        }
@@ -21028,7 +21004,7 @@ num_index_dim:
                                        zend_error(E_WARNING, "Illegal offset type in unset");
                                        break;
                        }
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                }
                case IS_OBJECT:
@@ -21039,13 +21015,13 @@ num_index_dim:
 //???                          zval_copy_ctor(offset);
 //???                  }
                        Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                case IS_STRING:
                        zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                        ZEND_VM_CONTINUE(); /* bailed out before */
                default:
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
@@ -21075,7 +21051,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
                        zend_error(E_NOTICE, "Trying to unset property of non-object");
                }
        }
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -21188,7 +21164,7 @@ num_index_prop:
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
@@ -21221,7 +21197,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
        zval_ptr_dtor_nogc(free_op1.var);
        CHECK_EXCEPTION();
@@ -21369,7 +21345,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        zval_ptr_dtor_nogc(free_op1.var);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -22703,26 +22679,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                zval_ptr_dtor_nogc(free_op2.var);
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_dim has two opcodes! */
@@ -22744,7 +22721,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
 
        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_VAR == IS_TMP_VAR) {
-                       zval_dtor(value);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -24338,26 +24315,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HA
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_dim has two opcodes! */
@@ -26079,26 +26057,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
        if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
        /* assign_dim has two opcodes! */
@@ -26120,7 +26099,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_CV == IS_TMP_VAR) {
-                       zval_dtor(value);
+
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -28392,7 +28371,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -28457,7 +28436,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*
                        }
                }
 
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
        }
 
@@ -28523,7 +28502,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMP(int (*
        }
 
 assign_op_dim_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        FREE_OP(free_op_data1);
        FREE_OP_VAR_PTR(free_op_data2);
 
@@ -28575,7 +28554,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*bina
        }
 
 assign_op_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28746,7 +28725,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(retval);
                }
@@ -28800,7 +28779,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28838,7 +28817,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                ZVAL_NULL(retval);
 
                CHECK_EXCEPTION();
@@ -28888,7 +28867,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28931,7 +28910,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -28958,7 +28937,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_H
        }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, (opline->extended_value & ZEND_FETCH_MAKE_REF) != 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -28982,7 +28961,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -29017,7 +28996,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -29044,7 +29023,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_O
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, 0 TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
@@ -29070,7 +29049,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCO
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -29094,7 +29073,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HA
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property_name)) : NULL) TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
@@ -29140,7 +29119,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDL
         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
         * string offsets or overloaded objects
         */
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -29172,7 +29151,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        HANDLE_EXCEPTION();
                }
                zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
@@ -29211,7 +29190,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC
        EX(call) = zend_vm_stack_push_call_frame(
                fbc, opline->extended_value, 0, called_scope, obj, EX(call) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -29313,7 +29292,7 @@ num_index_dim:
                                        zend_error(E_WARNING, "Illegal offset type in unset");
                                        break;
                        }
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                }
                case IS_OBJECT:
@@ -29324,13 +29303,13 @@ num_index_dim:
 //???                          zval_copy_ctor(offset);
 //???                  }
                        Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                case IS_STRING:
                        zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                        ZEND_VM_CONTINUE(); /* bailed out before */
                default:
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
        }
 
@@ -29360,7 +29339,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
                        zend_error(E_NOTICE, "Trying to unset property of non-object");
                }
        }
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -29473,7 +29452,7 @@ num_index_prop:
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -29506,7 +29485,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZE
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -35455,26 +35434,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HAND
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
 
        /* assign_dim has two opcodes! */
@@ -35496,7 +35476,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_
 
        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_CONST == IS_TMP_VAR) {
-                       zval_dtor(value);
+
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -36355,7 +36335,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36370,7 +36350,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36385,7 +36365,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36400,7 +36380,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36415,7 +36395,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36430,7 +36410,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36445,7 +36425,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36460,7 +36440,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36475,7 +36455,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36491,7 +36471,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36507,7 +36487,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36523,7 +36503,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36539,7 +36519,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36555,7 +36535,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCO
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36570,7 +36550,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36585,7 +36565,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36600,7 +36580,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36615,7 +36595,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -36639,7 +36619,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*bina
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -36704,7 +36684,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*bina
                        }
                }
 
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                FREE_OP(free_op_data1);
        }
 
@@ -36770,7 +36750,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMP(int (*bina
        }
 
 assign_op_dim_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        FREE_OP(free_op_data1);
        FREE_OP_VAR_PTR(free_op_data2);
 
@@ -36822,7 +36802,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_o
        }
 
 assign_op_exit:
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -36993,7 +36973,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t in
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(retval);
                }
@@ -37047,7 +37027,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t in
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37085,7 +37065,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t i
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                ZVAL_NULL(retval);
 
                CHECK_EXCEPTION();
@@ -37135,7 +37115,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t i
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37160,7 +37140,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDL
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
        zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV != IS_VAR || !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
 
        }
@@ -37185,7 +37165,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDL
        } else {
                zend_fetch_dimension_address_W_ref(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
        }
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37207,7 +37187,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37225,7 +37205,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37251,7 +37231,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCOD
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
 
        } else {
                if (IS_TMP_VAR == IS_UNUSED) {
@@ -37259,7 +37239,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCOD
                }
                container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
 
        }
        CHECK_EXCEPTION();
@@ -37279,7 +37259,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_H
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37315,7 +37295,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_TMP(ZEN
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37342,7 +37322,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDL
        }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, (opline->extended_value & ZEND_FETCH_MAKE_REF) != 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37366,7 +37346,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37401,7 +37381,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HAND
                }
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37428,7 +37408,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCOD
                        zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W, 0 TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
                }
@@ -37454,7 +37434,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_H
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
        }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET, 0 TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
        }
@@ -37478,7 +37458,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property_name)) : NULL) TSRMLS_CC);
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
@@ -37506,7 +37486,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
                zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
 
                zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? (EX(run_time_cache) + Z_CACHE_SLOT_P(property_name)) : NULL) TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_free_op free_op2, free_op_data1, free_op_data2;
                zval *value;
@@ -37514,29 +37494,30 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLE
                zval *variable_ptr;
 
                variable_ptr = zend_fetch_dimension_address_W_str(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_TMP_VAR TSRMLS_CC);
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
 
        /* assign_dim has two opcodes! */
@@ -37558,7 +37539,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_TMP_VAR == IS_TMP_VAR) {
-                       zval_dtor(value);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -37603,7 +37584,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        HANDLE_EXCEPTION();
                }
                zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
@@ -37642,7 +37623,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_
        EX(call) = zend_vm_stack_push_call_frame(
                fbc, opline->extended_value, 0, called_scope, obj, EX(call) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37659,7 +37640,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                 _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                 _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -37744,7 +37725,7 @@ str_index:
                                /* do nothing */
                                break;
                }
-               zval_dtor(free_op2.var);
+               zval_ptr_dtor_nogc(free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr);
        }
@@ -37848,7 +37829,7 @@ num_index_dim:
                                        zend_error(E_WARNING, "Illegal offset type in unset");
                                        break;
                        }
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                }
                case IS_OBJECT:
@@ -37859,13 +37840,13 @@ num_index_dim:
 //???                          zval_copy_ctor(offset);
 //???                  }
                        Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
                case IS_STRING:
                        zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                        ZEND_VM_CONTINUE(); /* bailed out before */
                default:
-                       zval_dtor(free_op2.var);
+                       zval_ptr_dtor_nogc(free_op2.var);
                        break;
        }
 
@@ -37895,7 +37876,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
                        zend_error(E_NOTICE, "Trying to unset property of non-object");
                }
        }
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -38008,7 +37989,7 @@ num_index_prop:
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -38041,7 +38022,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_O
                result = ((opline->extended_value & ZEND_ISSET) == 0);
        }
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        ZVAL_BOOL(EX_VAR(opline->result.var), result);
 
        CHECK_EXCEPTION();
@@ -38188,7 +38169,7 @@ static int ZEND_FASTCALL  ZEND_POW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_dtor(free_op2.var);
+       zval_ptr_dtor_nogc(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -39521,26 +39502,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                zval_ptr_dtor_nogc(free_op2.var);
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
 
        /* assign_dim has two opcodes! */
@@ -39562,7 +39544,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
 
        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_VAR == IS_TMP_VAR) {
-                       zval_dtor(value);
+                       zval_ptr_dtor_nogc(free_op2.var);
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -41036,26 +41018,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HAN
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
 
        /* assign_dim has two opcodes! */
@@ -42641,26 +42624,27 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER
 
                value = get_zval_ptr_deref((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                if (UNEXPECTED(variable_ptr != NULL)) {
-                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (opline+1)->op1_type, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       zend_assign_to_string_offset(variable_ptr, Z_LVAL_P(EX_VAR((opline+1)->op2.var)), value, (RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : NULL) TSRMLS_CC);
+                       FREE_OP(free_op_data1);
                } else {
                        variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
                        if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
-                               if (IS_TMP_FREE(free_op_data1)) {
-                                       zval_dtor(value);
-                               }
+                               FREE_OP(free_op_data1);
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        } else {
                                value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type TSRMLS_CC);
+                               if ((opline+1)->op1_type == IS_VAR) {
+                                       FREE_OP(free_op_data1);
+                               }
                                if (RETURN_VALUE_USED(opline)) {
                                        ZVAL_COPY(EX_VAR(opline->result.var), value);
                                }
                                FREE_OP_VAR_PTR(free_op_data2);
                        }
                }
-               FREE_OP_IF_VAR(free_op_data1);
        }
 
        /* assign_dim has two opcodes! */
@@ -42682,7 +42666,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
 
        if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
                if (IS_CV == IS_TMP_VAR) {
-                       zval_dtor(value);
+
                }
                if (RETURN_VALUE_USED(opline)) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -44624,11 +44608,11 @@ void zend_init_opcodes_handlers(void)
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
-       ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
-       ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
-       ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
-       ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
-       ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
index ac7a96ce61fe3154aabefe085eabd395b4049350..b18b45b25c72854798f072900413dd957049b10e 100644 (file)
@@ -245,7 +245,7 @@ $op2_get_obj_zval_ptr_ptr = array(
 
 $op1_free_op = array(
        "ANY"    => "FREE_OP(free_op1)",
-       "TMP"    => "zval_dtor(free_op1.var)",
+       "TMP"    => "zval_ptr_dtor_nogc(free_op1.var)",
        "VAR"    => "zval_ptr_dtor_nogc(free_op1.var)",
        "CONST"  => "",
        "UNUSED" => "",
@@ -254,7 +254,7 @@ $op1_free_op = array(
 
 $op2_free_op = array(
        "ANY"    => "FREE_OP(free_op2)",
-       "TMP"    => "zval_dtor(free_op2.var)",
+       "TMP"    => "zval_ptr_dtor_nogc(free_op2.var)",
        "VAR"    => "zval_ptr_dtor_nogc(free_op2.var)",
        "CONST"  => "",
        "UNUSED" => "",
@@ -262,7 +262,7 @@ $op2_free_op = array(
 );
 
 $op1_free_op_if_var = array(
-       "ANY"    => "FREE_OP_IF_VAR(free_op1)",
+       "ANY"    => "if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(free_op1.var);}",
        "TMP"    => "",
        "VAR"    => "zval_ptr_dtor_nogc(free_op1.var)",
        "CONST"  => "",
@@ -271,7 +271,7 @@ $op1_free_op_if_var = array(
 );
 
 $op2_free_op_if_var = array(
-       "ANY"    => "FREE_OP_IF_VAR(free_op2)",
+       "ANY"    => "if (opline->op1_type == IS_VAR) {zval_ptr_dtor_nogc(free_op1.var);}",
        "TMP"    => "",
        "VAR"    => "zval_ptr_dtor_nogc(free_op2.var)",
        "CONST"  => "",
index 8d86ce23f1ed706a5e49fe3235f6f176c92a9f33..d02b7479a6af7954175d8bfca9b9866e3cf6ca74 100644 (file)
@@ -71,7 +71,7 @@ const char *zend_vm_opcodes_map[169] = {
        "ZEND_JMPZ_EX",
        "ZEND_JMPNZ_EX",
        "ZEND_CASE",
-       "ZEND_SWITCH_FREE",
+       NULL,
        "ZEND_BRK",
        "ZEND_CONT",
        "ZEND_BOOL",
index 70721b874b7376b649f3336776d3fc4fc9c27146..446f9187c5fda3c8ecf216d9d5bfe0719f8cef92 100644 (file)
@@ -72,7 +72,6 @@ ZEND_API const char *zend_get_opcode_name(zend_uchar opcode);
 #define ZEND_JMPZ_EX                          46
 #define ZEND_JMPNZ_EX                         47
 #define ZEND_CASE                             48
-#define ZEND_SWITCH_FREE                      49
 #define ZEND_BRK                              50
 #define ZEND_CONT                             51
 #define ZEND_BOOL                             52
index 31f76b6ca282b3a13eb08fb9284a61c158928f89..ce4b23ae5572ba4fcb033139da22f6cff15890dd 100644 (file)
@@ -203,14 +203,12 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg, zend_optimiz
                j = 0;
                for (i = 0; i< op_array->last_brk_cont; i++) {
                        if (op_array->brk_cont_array[i].start >= 0 &&
-                           (op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE ||
-                            op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_SWITCH_FREE)) {
+                           op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE) {
                                int parent = op_array->brk_cont_array[i].parent;
 
                                while (parent >= 0 &&
                                       op_array->brk_cont_array[parent].start < 0 &&
-                                      op_array->opcodes[op_array->brk_cont_array[parent].brk].opcode != ZEND_FREE &&
-                                      op_array->opcodes[op_array->brk_cont_array[parent].brk].opcode != ZEND_SWITCH_FREE) {
+                                      op_array->opcodes[op_array->brk_cont_array[parent].brk].opcode != ZEND_FREE) {
                                        parent = op_array->brk_cont_array[parent].parent;
                                }
                                op_array->brk_cont_array[i].parent = parent;
@@ -224,8 +222,7 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg, zend_optimiz
                        j = 0;
                        for (i = 0; i< op_array->last_brk_cont; i++) {
                                if (op_array->brk_cont_array[i].start >= 0 &&
-                                   (op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE ||
-                                    op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_SWITCH_FREE)) {
+                                   op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE) {
                                        if (i != j) {
                                                op_array->brk_cont_array[j] = op_array->brk_cont_array[i];
                                        }
@@ -1363,10 +1360,9 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_arra
                                } else if (0&& block->op1_to != block &&
                                   block->op1_to != blocks &&
                                                   op_array->last_try_catch == 0 &&
-                                          target->opcode != ZEND_FREE &&
-                                          target->opcode != ZEND_SWITCH_FREE) {
+                                          target->opcode != ZEND_FREE) {
                                    /* Block Reordering (saves one JMP on each "for" loop iteration)
-                                    * It is disabled for some cases (ZEND_FREE/ZEND_SWITCH_FREE)
+                                    * It is disabled for some cases (ZEND_FREE)
                                     * which may break register allocation.
                     */
                                        zend_bool can_reorder = 0;
index 5fa6560d48bd36d694b16a671469b50ed5a1fbb0..859bc2f3bca169135e0c9fa0726adfa410633fd8 100644 (file)
@@ -205,8 +205,7 @@ void zend_optimizer_pass2(zend_op_array *op_array TSRMLS_DC)
                                                array_offset = jmp_to->parent;
                                                if (--nest_levels > 0) {
                                                        if (opline->opcode == ZEND_BRK &&
-                                                           (op_array->opcodes[jmp_to->brk].opcode == ZEND_FREE ||
-                                                            op_array->opcodes[jmp_to->brk].opcode == ZEND_SWITCH_FREE)) {
+                                                           op_array->opcodes[jmp_to->brk].opcode == ZEND_FREE) {
                                                                dont_optimize = 1;
                                                                break;
                                                        }
index 84bf246d656d72f1a3de88d38afc952f7ecdaae6..125a85fe72a75c1b193ffd94cac5157950d81836 100644 (file)
@@ -232,7 +232,6 @@ const char *phpdbg_decode_opcode(zend_uchar opcode) /* {{{ */
                CASE(ZEND_JMPZ_EX);
                CASE(ZEND_JMPNZ_EX);
                CASE(ZEND_CASE);
-               CASE(ZEND_SWITCH_FREE);
                CASE(ZEND_BRK);
                CASE(ZEND_CONT);
                CASE(ZEND_BOOL);