]> granicus.if.org Git - php/commitdiff
Removed unnecessary GC checks
authorDmitry Stogov <dmitry@zend.com>
Thu, 31 Oct 2013 07:33:39 +0000 (11:33 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 31 Oct 2013 07:33:39 +0000 (11:33 +0400)
Zend/zend_execute.c
Zend/zend_execute.h
Zend/zend_vm_execute.h
Zend/zend_vm_gen.php

index 9f78218d3de35272aa610657e0eb692142654e6f..b5c35ca40f028e9b0d0a515cebd3dc472d5a9143 100644 (file)
@@ -79,7 +79,6 @@ static zend_always_inline void zend_pzval_unlock_func(zval *z, zend_free_op *sho
                if (unref && Z_ISREF_P(z) && Z_REFCOUNT_P(z) == 1) {
                        Z_UNSET_ISREF_P(z);
                }
-               GC_ZVAL_CHECK_POSSIBLE_ROOT(z);
        }
 }
 
@@ -95,6 +94,7 @@ static zend_always_inline void zend_pzval_unlock_free_func(zval *z TSRMLS_DC)
 
 #undef zval_ptr_dtor
 #define zval_ptr_dtor(pzv) i_zval_ptr_dtor(*(pzv) ZEND_FILE_LINE_CC TSRMLS_CC)
+#define zval_ptr_dtor_nogc(pzv) i_zval_ptr_dtor_nogc(*(pzv) ZEND_FILE_LINE_CC TSRMLS_CC)
 
 #define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1 TSRMLS_CC)
 #define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u TSRMLS_CC)
@@ -125,18 +125,18 @@ static zend_always_inline void zend_pzval_unlock_free_func(zval *z TSRMLS_DC)
                if ((zend_uintptr_t)should_free.var & 1L) { \
                        zval_dtor((zval*)((zend_uintptr_t)should_free.var & ~1L)); \
                } else { \
-                       zval_ptr_dtor(&should_free.var); \
+                       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(&should_free.var); \
+               zval_ptr_dtor_nogc(&should_free.var); \
        }
 
 #define FREE_OP_VAR_PTR(should_free) \
        if (should_free.var) { \
-               zval_ptr_dtor(&should_free.var); \
+               zval_ptr_dtor_nogc(&should_free.var); \
        }
 
 #define TMP_FREE(z) (zval*)(((zend_uintptr_t)(z)) | 1L)
index b68a82ef896e93bc86b4d7cfc2df417308c1c4f6..5c900e5ceced5b8d18a6fb3c7f638a1108a85a47 100644 (file)
@@ -87,6 +87,20 @@ static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC
        }
 }
 
+static zend_always_inline void i_zval_ptr_dtor_nogc(zval *zval_ptr ZEND_FILE_LINE_DC TSRMLS_DC)
+{
+       if (!Z_DELREF_P(zval_ptr)) {
+               ZEND_ASSERT(zval_ptr != &EG(uninitialized_zval));
+               GC_REMOVE_ZVAL_FROM_BUFFER(zval_ptr);
+               zval_dtor(zval_ptr);
+               efree_rel(zval_ptr);
+       } else {
+               if (Z_REFCOUNT_P(zval_ptr) == 1) {
+                       Z_UNSET_ISREF_P(zval_ptr);
+               }
+       }
+}
+
 static zend_always_inline int i_zend_is_true(zval *op)
 {
        int result;
index 869bb199b2320808ab05174ec975c029f2c2fae6..7ad7dcf463f516588d1acbc263a8fe88a6614d7b 100644 (file)
@@ -1754,7 +1754,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                        zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -1803,7 +1803,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_H
                                zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
                        }
                        efree(lcname);
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                        call->object = NULL;
                        call->called_scope = NULL;
                        call->is_ctor_call = 0;
@@ -1822,7 +1822,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_H
                                /* Delay closure destruction until its invocation */
                                call->fbc->common.prototype = (zend_function*)function_name;
                        } else {
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                        }
                        call->is_ctor_call = 0;
                        EX(call) = call;
@@ -1893,7 +1893,7 @@ static int ZEND_FASTCALL  ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_H
                        }
                        call->is_ctor_call = 0;
                        EX(call) = call;
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                        CHECK_EXCEPTION();
                        ZEND_VM_NEXT_OPCODE();
                } else {
@@ -4972,7 +4972,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -4987,7 +4987,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5002,7 +5002,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5017,7 +5017,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5032,7 +5032,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5047,7 +5047,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5062,7 +5062,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5077,7 +5077,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5092,7 +5092,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_H
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5109,7 +5109,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCO
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5125,7 +5125,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDL
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5141,7 +5141,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_H
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5157,7 +5157,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HAN
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5173,7 +5173,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_O
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5188,7 +5188,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5203,7 +5203,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5218,7 +5218,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5233,7 +5233,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDL
                opline->op1.zv,
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5411,12 +5411,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HA
        if (IS_CONST == IS_TMP_VAR || IS_CONST == IS_CONST) {
                zval *container = opline->op1.zv;
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
        } else {
                container = NULL;
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (IS_CONST == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
 
                }
@@ -5510,7 +5510,7 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_VAR_HANDLER(ZE
                        }
                }
                if (IS_VAR != IS_CONST) {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
                if (UNEXPECTED(ce->constructor == NULL)) {
@@ -5559,7 +5559,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                                 opline->op1.zv,
                                 _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -5634,7 +5634,7 @@ num_index:
                                /* do nothing */
                                break;
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
@@ -5952,7 +5952,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                        generator->largest_used_integer_key = Z_LVAL_P(generator->key);
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                /* If no key was specified we use auto-increment keys */
                generator->largest_used_integer_key++;
@@ -10194,7 +10194,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10209,7 +10209,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10224,7 +10224,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10239,7 +10239,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10254,7 +10254,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10269,7 +10269,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10284,7 +10284,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10299,7 +10299,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10314,7 +10314,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10331,7 +10331,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
        zval_dtor(free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10347,7 +10347,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10363,7 +10363,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAN
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10379,7 +10379,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDL
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10395,7 +10395,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPC
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10410,7 +10410,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10425,7 +10425,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10440,7 +10440,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10455,7 +10455,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER
                _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(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10633,12 +10633,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HAND
        if (IS_TMP_VAR == IS_TMP_VAR || IS_TMP_VAR == IS_CONST) {
                zval *container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                zval_dtor(free_op1.var);
        } else {
                container = NULL;
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (IS_TMP_VAR == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
 
                }
@@ -10687,7 +10687,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_
         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
         * string offsets or overloaded objects
         */
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10745,7 +10745,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
                }
        } else {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_ptr_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 a non-object", function_name_strval);
@@ -10767,7 +10767,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -10783,7 +10783,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                 _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_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -10858,7 +10858,7 @@ num_index:
                                /* do nothing */
                                break;
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
@@ -11176,7 +11176,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                        generator->largest_used_integer_key = Z_LVAL_P(generator->key);
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                /* If no key was specified we use auto-increment keys */
                generator->largest_used_integer_key++;
@@ -12474,7 +12474,7 @@ static int ZEND_FASTCALL  ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        SAVE_OPLINE();
        bitwise_not_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12487,7 +12487,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        SAVE_OPLINE();
        boolean_not_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC) TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12509,7 +12509,7 @@ static int ZEND_FASTCALL  ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -12534,7 +12534,7 @@ static int ZEND_FASTCALL  ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12556,7 +12556,7 @@ static int ZEND_FASTCALL  ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -12581,7 +12581,7 @@ static int ZEND_FASTCALL  ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12600,7 +12600,7 @@ static int ZEND_FASTCALL  ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        }
        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -12624,7 +12624,7 @@ static int ZEND_FASTCALL  ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                fast_increment_function(*var_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12643,7 +12643,7 @@ static int ZEND_FASTCALL  ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        }
        if (IS_VAR == IS_VAR && UNEXPECTED(*var_ptr == &EG(error_zval))) {
                ZVAL_NULL(&EX_T(opline->result.var).tmp_var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -12667,7 +12667,7 @@ static int ZEND_FASTCALL  ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                fast_decrement_function(*var_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12686,7 +12686,7 @@ static int ZEND_FASTCALL  ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        }
        zend_print_variable(z);
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -12713,7 +12713,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                ret = Z_LVAL_P(val);
        } else {
                ret = i_zend_is_true(val);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                if (UNEXPECTED(EG(exception) != NULL)) {
                        HANDLE_EXCEPTION();
                }
@@ -12743,7 +12743,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                ret = Z_LVAL_P(val);
        } else {
                ret = i_zend_is_true(val);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                if (UNEXPECTED(EG(exception) != NULL)) {
                        HANDLE_EXCEPTION();
                }
@@ -12773,7 +12773,7 @@ static int ZEND_FASTCALL  ZEND_JMPZNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                retval = Z_LVAL_P(val);
        } else {
                retval = i_zend_is_true(val);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                if (UNEXPECTED(EG(exception) != NULL)) {
                        HANDLE_EXCEPTION();
                }
@@ -12807,7 +12807,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                retval = Z_LVAL_P(val);
        } else {
                retval = i_zend_is_true(val);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                if (UNEXPECTED(EG(exception) != NULL)) {
                        HANDLE_EXCEPTION();
                }
@@ -12838,7 +12838,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                retval = Z_LVAL_P(val);
        } else {
                retval = i_zend_is_true(val);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                if (UNEXPECTED(EG(exception) != NULL)) {
                        HANDLE_EXCEPTION();
                }
@@ -12879,7 +12879,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
 
        if (!EG(return_value_ptr_ptr)) {
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                if (IS_VAR == IS_CONST ||
                    IS_VAR == IS_TMP_VAR ||
@@ -12892,7 +12892,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                                zval_copy_ctor(ret);
                        }
                        *EG(return_value_ptr_ptr) = ret;
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
                           retval_ptr == &EG(uninitialized_zval)) {
                        zval *ret;
@@ -12929,7 +12929,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
                        retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                        if (!EG(return_value_ptr_ptr)) {
                                if (IS_VAR == IS_TMP_VAR) {
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                }
                        } else if (!0) { /* Not a temp var */
                                zval *ret;
@@ -12979,7 +12979,7 @@ static int ZEND_FASTCALL  ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
                }
        } while (0);
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        return zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
 }
 
@@ -13010,7 +13010,7 @@ static int ZEND_FASTCALL  ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 
        zend_throw_exception_object(exception TSRMLS_CC);
        zend_exception_restore(TSRMLS_C);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        HANDLE_EXCEPTION();
 }
 
@@ -13034,7 +13034,7 @@ static int ZEND_FASTCALL zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_AR
                        ALLOC_ZVAL(varptr);
                        INIT_PZVAL_COPY(varptr, original_var);
                        zval_copy_ctor(varptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else {
                        Z_UNSET_ISREF_P(varptr);
                }
@@ -13085,7 +13085,7 @@ static int ZEND_FASTCALL  ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
                if (!0) {
                        zval_copy_ctor(valptr);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
                zend_vm_stack_push(valptr TSRMLS_CC);
        }
        CHECK_EXCEPTION();
@@ -13124,7 +13124,7 @@ static int ZEND_FASTCALL  ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        Z_ADDREF_P(varptr);
        zend_vm_stack_push(varptr TSRMLS_CC);
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13150,7 +13150,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_SPEC_VAR_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_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC)));
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13227,7 +13227,7 @@ static int ZEND_FASTCALL  ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        AI_SET_PTR(&EX_T(opline->result.var), retval);
                }
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13269,7 +13269,7 @@ static int ZEND_FASTCALL  ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        if (use_copy) {
                                ZVAL_COPY_VALUE(result, &var_copy);
                                if (0) {
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                }
                        } else {
                                ZVAL_COPY_VALUE(result, expr);
@@ -13286,7 +13286,7 @@ static int ZEND_FASTCALL  ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                        convert_to_object(result);
                        break;
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13375,7 +13375,7 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
        if (tmp_inc_filename) {
                zval_ptr_dtor(&tmp_inc_filename);
        }
-       zval_ptr_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)) {
@@ -13511,13 +13511,13 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
 
                if (IS_VAR == IS_VAR && !(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                }
                if (iter && EXPECTED(EG(exception) == NULL)) {
                        array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
                } else {
                        if (IS_VAR == IS_VAR && opline->extended_value & ZEND_FE_RESET_VARIABLE) {
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                        if (!EG(exception)) {
                                zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
@@ -13536,7 +13536,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                        if (UNEXPECTED(EG(exception) != NULL)) {
                                zval_ptr_dtor(&array_ptr);
                                if (IS_VAR == IS_VAR && opline->extended_value & ZEND_FE_RESET_VARIABLE) {
-                                       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                                       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                                }
                                HANDLE_EXCEPTION();
                        }
@@ -13545,7 +13545,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                if (UNEXPECTED(EG(exception) != NULL)) {
                        zval_ptr_dtor(&array_ptr);
                        if (IS_VAR == IS_VAR && opline->extended_value & ZEND_FE_RESET_VARIABLE) {
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                        HANDLE_EXCEPTION();
                }
@@ -13577,7 +13577,7 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
        }
 
        if (IS_VAR == IS_VAR && opline->extended_value & ZEND_FE_RESET_VARIABLE) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        if (is_empty) {
                ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
@@ -13733,7 +13733,7 @@ static int ZEND_FASTCALL  ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                } else {
                        zend_print_variable(ptr);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
 #endif
        zend_bailout();
@@ -13754,14 +13754,14 @@ static int ZEND_FASTCALL  ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                if (!0) {
                        zendi_zval_copy_ctor(EX_T(opline->result.var).tmp_var);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
 #if DEBUG_ZEND>=2
                printf("Conditional jmp to %d\n", opline->op2.opline_num);
 #endif
                ZEND_VM_JMP(opline->op2.jmp_addr);
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13789,14 +13789,14 @@ static int ZEND_FASTCALL  ZEND_JMP_SET_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                                zval_copy_ctor(EX_T(opline->result.var).var.ptr);
                        }
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
 #if DEBUG_ZEND>=2
                printf("Conditional jmp to %d\n", opline->op2.opline_num);
 #endif
                ZEND_VM_JMP(opline->op2.jmp_addr);
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13814,7 +13814,7 @@ static int ZEND_FASTCALL  ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        if (!0) {
                zval_copy_ctor(&EX_T(opline->result.var).tmp_var);
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13842,7 +13842,7 @@ static int ZEND_FASTCALL  ZEND_QM_ASSIGN_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLE
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13863,7 +13863,7 @@ static int ZEND_FASTCALL  ZEND_INSTANCEOF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                result = 0;
        }
        ZVAL_BOOL(&EX_T(opline->result.var).tmp_var, result);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -13877,7 +13877,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_add_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13892,7 +13892,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13907,7 +13907,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13922,7 +13922,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_div_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13937,7 +13937,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13952,7 +13952,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
        shift_left_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13967,7 +13967,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG
        shift_right_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13982,7 +13982,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
        concat_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -13997,7 +13997,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
        is_identical_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14014,7 +14014,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14030,7 +14030,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDL
        ZVAL_BOOL(result, fast_equal_function(result,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14046,7 +14046,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14062,7 +14062,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14078,7 +14078,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_O
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC));
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14093,7 +14093,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_
        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14108,7 +14108,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14123,7 +14123,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14138,7 +14138,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDL
        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                opline->op2.zv TSRMLS_CC);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14249,7 +14249,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*b
                FREE_OP(free_op_data1);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -14304,7 +14304,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binar
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                        ZEND_VM_INC_OPCODE();
@@ -14335,11 +14335,11 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binar
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
                FREE_OP_VAR_PTR(free_op_data2);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_INC_OPCODE();
        } else {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -14429,7 +14429,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -14489,7 +14489,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14530,7 +14530,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
 
                ZVAL_NULL(retval);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -14591,7 +14591,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14640,7 +14640,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                                                zval_dtor(&tmp_varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -14650,7 +14650,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                        ce = EX_T(opline->op2.var).class_entry;
                }
                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
 /*
@@ -14687,11 +14687,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_CONST(int type,
                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                        case ZEND_FETCH_GLOBAL:
                                if (IS_VAR != IS_TMP_VAR) {
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                }
                                break;
                        case ZEND_FETCH_LOCAL:
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                                break;
                        case ZEND_FETCH_STATIC:
                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
@@ -14780,13 +14780,13 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HA
                zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 
                if (IS_VAR == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                }
        }
 
@@ -14811,7 +14811,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HA
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (UNEXPECTED(opline->extended_value != 0)) {
@@ -14845,7 +14845,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14860,7 +14860,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
        container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_IS TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -14883,7 +14883,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OP
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        } else {
                if (IS_CONST == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
@@ -14891,7 +14891,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OP
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_R TSRMLS_CC);
 
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -14919,7 +14919,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCOD
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                ZEND_VM_NEXT_OPCODE();
@@ -14976,7 +14976,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_CONST(
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15013,7 +15013,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HA
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
@@ -15056,7 +15056,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15098,7 +15098,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_H
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15132,7 +15132,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OP
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        } else {
@@ -15171,7 +15171,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCOD
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
@@ -15206,7 +15206,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -15286,7 +15286,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAN
                FREE_OP_VAR_PTR(free_op_data2);
                FREE_OP_IF_VAR(free_op_data1);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_dim has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -15340,7 +15340,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER
                }
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* zend_assign_to_variable() always takes care of op2, never free it! */
 
@@ -15422,7 +15422,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -15693,7 +15693,7 @@ static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPC
                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                        expr_ptr = new_expr;
                        zendi_zval_copy_ctor(*expr_ptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if (IS_VAR == IS_CV) {
                        Z_ADDREF_P(expr_ptr);
                }
@@ -15737,7 +15737,7 @@ num_index:
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -15806,7 +15806,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                                                zval_ptr_dtor(&varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -15830,7 +15830,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                zval_ptr_dtor(&varname);
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -15925,7 +15925,7 @@ num_index_dim:
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -15966,7 +15966,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16036,7 +16036,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPC
                if (IS_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -16188,7 +16188,7 @@ num_index_prop:
                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16270,7 +16270,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_
                                        generator->value = *value_ptr;
                                }
 
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                } else {
                        zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -16290,7 +16290,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_
                                }
 
                                generator->value = copy;
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                        } else {
                                if (IS_VAR == IS_CV) {
                                        Z_ADDREF_P(value);
@@ -16369,7 +16369,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_add_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16384,7 +16384,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16399,7 +16399,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16414,7 +16414,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_div_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16429,7 +16429,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16444,7 +16444,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16459,7 +16459,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16474,7 +16474,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        concat_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16489,7 +16489,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        is_identical_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16506,7 +16506,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
                _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);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16522,7 +16522,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
        ZVAL_BOOL(result, fast_equal_function(result,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16538,7 +16538,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16554,7 +16554,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16570,7 +16570,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPC
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16585,7 +16585,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16600,7 +16600,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16615,7 +16615,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16630,7 +16630,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER
        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                _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(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        zval_dtor(free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -16741,7 +16741,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*bin
                FREE_OP(free_op_data1);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -16796,7 +16796,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
                zval_dtor(free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                        ZEND_VM_INC_OPCODE();
@@ -16828,11 +16828,11 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
                FREE_OP_VAR_PTR(free_op_data2);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_INC_OPCODE();
        } else {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -16922,7 +16922,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t i
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -16982,7 +16982,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t i
        } else {
                zval_dtor(free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17023,7 +17023,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
                zval_dtor(free_op2.var);
                ZVAL_NULL(retval);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -17084,7 +17084,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t
        } else {
                zval_dtor(free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17111,13 +17111,13 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
                zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
                zval_dtor(free_op2.var);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
                zval_dtor(free_op2.var);
                if (IS_VAR == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                }
        }
 
@@ -17142,7 +17142,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (UNEXPECTED(opline->extended_value != 0)) {
@@ -17176,7 +17176,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17191,7 +17191,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_IS TSRMLS_CC);
        zval_dtor(free_op2.var);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17214,7 +17214,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
                zval_dtor(free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        } else {
                if (IS_TMP_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
@@ -17222,7 +17222,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_R TSRMLS_CC);
                zval_dtor(free_op2.var);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -17250,7 +17250,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                ZEND_VM_NEXT_OPCODE();
@@ -17307,7 +17307,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_TMP(ZE
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17344,7 +17344,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
@@ -17387,7 +17387,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17429,7 +17429,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HAN
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -17463,7 +17463,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCO
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        } else {
@@ -17502,7 +17502,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
@@ -17537,7 +17537,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
        } else {
                zval_dtor(free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -17618,7 +17618,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDL
                FREE_OP_VAR_PTR(free_op_data2);
                FREE_OP_IF_VAR(free_op_data1);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_dim has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -17672,7 +17672,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
                }
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* zend_assign_to_variable() always takes care of op2, never free it! */
 
@@ -17755,7 +17755,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE
        EX(call) = call;
 
        zval_dtor(free_op2.var);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -17930,7 +17930,7 @@ static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCOD
                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                        expr_ptr = new_expr;
                        zendi_zval_copy_ctor(*expr_ptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if (IS_VAR == IS_CV) {
                        Z_ADDREF_P(expr_ptr);
                }
@@ -17974,7 +17974,7 @@ num_index:
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -18084,7 +18084,7 @@ num_index_dim:
        } else {
                zval_dtor(free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -18125,7 +18125,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
        } else {
                zval_dtor(free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -18262,7 +18262,7 @@ num_index_prop:
                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -18344,7 +18344,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                                        generator->value = *value_ptr;
                                }
 
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                } else {
                        zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -18364,7 +18364,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_AR
                                }
 
                                generator->value = copy;
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                        } else {
                                if (IS_VAR == IS_CV) {
                                        Z_ADDREF_P(value);
@@ -18443,8 +18443,8 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_add_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18458,8 +18458,8 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18473,8 +18473,8 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18488,8 +18488,8 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_div_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18503,8 +18503,8 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18518,8 +18518,8 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18533,8 +18533,8 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18548,8 +18548,8 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        concat_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18563,8 +18563,8 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
        is_identical_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18580,8 +18580,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
                _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
-       zval_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18596,8 +18596,8 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER
        ZVAL_BOOL(result, fast_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18612,8 +18612,8 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18628,8 +18628,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18644,8 +18644,8 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPC
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18659,8 +18659,8 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18674,8 +18674,8 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18689,8 +18689,8 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18704,8 +18704,8 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER
        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -18729,7 +18729,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*bin
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -18810,12 +18810,12 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*bin
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                FREE_OP(free_op_data1);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -18869,8 +18869,8 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
-               zval_ptr_dtor(&free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               zval_ptr_dtor_nogc(&free_op2.var);
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                        ZEND_VM_INC_OPCODE();
@@ -18897,16 +18897,16 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_
                PZVAL_LOCK(*var_ptr);
                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
        }
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
                FREE_OP_VAR_PTR(free_op_data2);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_INC_OPCODE();
        } else {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -18991,12 +18991,12 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t i
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -19054,9 +19054,9 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t i
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19095,9 +19095,9 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                ZVAL_NULL(retval);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -19156,9 +19156,9 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19207,7 +19207,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                                                zval_dtor(&tmp_varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -19217,7 +19217,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                        ce = EX_T(opline->op2.var).class_entry;
                }
                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
 /*
@@ -19254,11 +19254,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_VAR(int type, ZE
                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                        case ZEND_FETCH_GLOBAL:
                                if (IS_VAR != IS_TMP_VAR) {
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                }
                                break;
                        case ZEND_FETCH_LOCAL:
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                                break;
                        case ZEND_FETCH_STATIC:
                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
@@ -19346,14 +19346,14 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_TMP_VAR || IS_VAR == IS_CONST) {
                zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_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(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                }
        }
 
@@ -19374,11 +19374,11 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAND
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (UNEXPECTED(opline->extended_value != 0)) {
@@ -19408,11 +19408,11 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_RW TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19426,8 +19426,8 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19449,16 +19449,16 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCO
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               zval_ptr_dtor(&free_op2.var);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               zval_ptr_dtor_nogc(&free_op2.var);
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        } else {
                if (IS_VAR == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
                }
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -19482,11 +19482,11 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_UNSET TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                ZEND_VM_NEXT_OPCODE();
@@ -19522,7 +19522,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_VAR(ZE
                zend_error(E_NOTICE, "Trying to get property of non-object");
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -19539,11 +19539,11 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_VAR(ZE
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19575,12 +19575,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAND
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
@@ -19618,12 +19618,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19644,7 +19644,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -19661,11 +19661,11 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HAN
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -19694,12 +19694,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCO
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        } else {
@@ -19733,12 +19733,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
@@ -19771,9 +19771,9 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
        if (0) {
                zval_ptr_dtor(&property_name);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -19803,7 +19803,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                if (0) {
                        zval_ptr_dtor(&property_name);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
                zend_free_op free_op2, free_op_data1, free_op_data2;
@@ -19812,7 +19812,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                zval **variable_ptr_ptr;
 
                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_VAR, BP_VAR_W TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
@@ -19854,7 +19854,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                FREE_OP_VAR_PTR(free_op_data2);
                FREE_OP_IF_VAR(free_op_data1);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_dim has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -19908,10 +19908,10 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
                }
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* zend_assign_to_variable() always takes care of op2, never free it! */
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -19937,7 +19937,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                }
                zend_error(E_STRICT, "Only variables should be assigned by reference");
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+                       if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);};
                        HANDLE_EXCEPTION();
                }
                return ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -19964,8 +19964,8 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDL
                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
-       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
+       if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20023,7 +20023,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
                }
        } else {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_ptr_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 a non-object", function_name_strval);
@@ -20045,8 +20045,8 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op2.var);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20136,7 +20136,7 @@ static int ZEND_FASTCALL  ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND
                        }
                }
                if (IS_VAR != IS_CONST) {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
                if (UNEXPECTED(ce->constructor == NULL)) {
@@ -20185,7 +20185,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                 _get_zval_ptr_var(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_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -20221,7 +20221,7 @@ static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                        expr_ptr = new_expr;
                        zendi_zval_copy_ctor(*expr_ptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if (IS_VAR == IS_CV) {
                        Z_ADDREF_P(expr_ptr);
                }
@@ -20260,12 +20260,12 @@ num_index:
                                /* do nothing */
                                break;
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20334,7 +20334,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                                                zval_ptr_dtor(&varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -20358,7 +20358,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                zval_ptr_dtor(&varname);
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -20426,7 +20426,7 @@ num_index_dim:
                                                zend_error(E_WARNING, "Illegal offset type in unset");
                                                break;
                                }
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                        }
                        case IS_OBJECT:
@@ -20440,20 +20440,20 @@ num_index_dim:
                                if (0) {
                                        zval_ptr_dtor(&offset);
                                } else {
-                                       zval_ptr_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_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20486,15 +20486,15 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                        }
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20564,7 +20564,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCOD
                if (IS_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -20652,7 +20652,7 @@ num_index_prop:
                                result = 1;
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
                if (0) {
                        MAKE_REAL_ZVAL_PTR(offset);
@@ -20675,7 +20675,7 @@ num_index_prop:
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
                zval tmp;
@@ -20704,9 +20704,9 @@ num_index_prop:
                                }
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
@@ -20716,7 +20716,7 @@ num_index_prop:
                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -20798,7 +20798,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                                        generator->value = *value_ptr;
                                }
 
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                } else {
                        zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -20818,7 +20818,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                                }
 
                                generator->value = copy;
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                        } else {
                                if (IS_VAR == IS_CV) {
                                        Z_ADDREF_P(value);
@@ -20863,7 +20863,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                        generator->largest_used_integer_key = Z_LVAL_P(generator->key);
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                /* If no key was specified we use auto-increment keys */
                generator->largest_used_integer_key++;
@@ -20994,7 +20994,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*
                FREE_OP(free_op_data1);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -21049,7 +21049,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*bina
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                        ZEND_VM_INC_OPCODE();
@@ -21080,11 +21080,11 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*bina
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
                FREE_OP_VAR_PTR(free_op_data2);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_INC_OPCODE();
        } else {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -21179,7 +21179,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                                        if (IS_VAR != IS_CONST && varname == &tmp_varname) {
                                                zval_dtor(&tmp_varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        CHECK_EXCEPTION();
                                        ZEND_VM_NEXT_OPCODE();
                                }
@@ -21189,7 +21189,7 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                        ce = EX_T(opline->op2.var).class_entry;
                }
                retval = zend_std_get_static_property(ce, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0, ((IS_VAR == IS_CONST) ? opline->op1.literal : NULL) TSRMLS_CC);
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
 /*
@@ -21226,11 +21226,11 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_VAR_UNUSED(int type,
                switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
                        case ZEND_FETCH_GLOBAL:
                                if (IS_VAR != IS_TMP_VAR) {
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                }
                                break;
                        case ZEND_FETCH_LOCAL:
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                                break;
                        case ZEND_FETCH_STATIC:
                                zval_update_constant(retval, (void*) 1 TSRMLS_CC);
@@ -21324,7 +21324,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_H
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (UNEXPECTED(opline->extended_value != 0)) {
@@ -21358,7 +21358,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -21381,7 +21381,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_O
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        } else {
                if (IS_UNUSED == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
@@ -21389,7 +21389,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_O
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_R TSRMLS_CC);
 
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -21468,7 +21468,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HA
                FREE_OP_VAR_PTR(free_op_data2);
                FREE_OP_IF_VAR(free_op_data1);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_dim has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -21629,7 +21629,7 @@ static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                        expr_ptr = new_expr;
                        zendi_zval_copy_ctor(*expr_ptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if (IS_VAR == IS_CV) {
                        Z_ADDREF_P(expr_ptr);
                }
@@ -21673,7 +21673,7 @@ num_index:
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -21742,7 +21742,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HAN
                                        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                                                zval_ptr_dtor(&varname);
                                        }
-                                       zval_ptr_dtor(&free_op1.var);
+                                       zval_ptr_dtor_nogc(&free_op1.var);
                                        HANDLE_EXCEPTION();
                                }
                                if (UNEXPECTED(ce == NULL)) {
@@ -21766,7 +21766,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HAN
        } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
                zval_ptr_dtor(&varname);
        }
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -21835,7 +21835,7 @@ static int ZEND_FASTCALL  ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OP
                if (IS_VAR != IS_CONST && varname == &tmp) {
                        zval_dtor(&tmp);
                }
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
 
        if (opline->extended_value & ZEND_ISSET) {
@@ -21943,7 +21943,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER
                                        generator->value = *value_ptr;
                                }
 
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                } else {
                        zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -21963,7 +21963,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER
                                }
 
                                generator->value = copy;
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                        } else {
                                if (IS_VAR == IS_CV) {
                                        Z_ADDREF_P(value);
@@ -22042,7 +22042,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_add_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22057,7 +22057,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_sub_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22072,7 +22072,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_mul_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22087,7 +22087,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_div_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22102,7 +22102,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        fast_mod_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22117,7 +22117,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_left_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22132,7 +22132,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        shift_right_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22147,7 +22147,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        concat_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22162,7 +22162,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
        is_identical_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22179,7 +22179,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
                _get_zval_ptr_var(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);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22195,7 +22195,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_
        ZVAL_BOOL(result, fast_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22211,7 +22211,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
        ZVAL_BOOL(result, fast_not_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22227,7 +22227,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
        ZVAL_BOOL(result, fast_is_smaller_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22243,7 +22243,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCO
        ZVAL_BOOL(result, fast_is_smaller_or_equal_function(result,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22258,7 +22258,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
        bitwise_or_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22273,7 +22273,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_and_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22288,7 +22288,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
        bitwise_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22303,7 +22303,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_
        boolean_xor_function(&EX_T(opline->result.var).tmp_var,
                _get_zval_ptr_var(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_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22414,7 +22414,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*bina
                FREE_OP(free_op_data1);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -22469,7 +22469,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_o
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
                        ZEND_VM_INC_OPCODE();
@@ -22500,11 +22500,11 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_o
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
                FREE_OP_VAR_PTR(free_op_data2);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_INC_OPCODE();
        } else {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -22594,7 +22594,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t in
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -22654,7 +22654,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t in
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -22695,7 +22695,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t i
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
 
                ZVAL_NULL(retval);
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -22756,7 +22756,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t i
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -22783,13 +22783,13 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDL
                zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
 
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        } else {
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
 
                if (IS_VAR == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                }
        }
 
@@ -22814,7 +22814,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDL
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (UNEXPECTED(opline->extended_value != 0)) {
@@ -22848,7 +22848,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -22863,7 +22863,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
        container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_IS TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -22886,7 +22886,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCOD
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
 
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        } else {
                if (IS_CV == IS_UNUSED) {
                        zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
@@ -22894,7 +22894,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCOD
                container = _get_zval_ptr_ptr_var_fast(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_R TSRMLS_CC);
 
-               zval_ptr_dtor(&free_op1.var);
+               zval_ptr_dtor_nogc(&free_op1.var);
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -22922,7 +22922,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_H
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        if (UNEXPECTED(EX_T(opline->result.var).var.ptr_ptr == NULL)) {
                zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
                ZEND_VM_NEXT_OPCODE();
@@ -22979,7 +22979,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_VAR_CV(ZEN
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -23016,7 +23016,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDL
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* We are going to assign the result by reference */
        if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
@@ -23059,7 +23059,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -23101,7 +23101,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HAND
                }
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -23135,7 +23135,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCOD
                if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        } else {
@@ -23174,7 +23174,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_H
        if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        PZVAL_UNLOCK(*EX_T(opline->result.var).var.ptr_ptr, &free_res);
        if (EX_T(opline->result.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
@@ -23209,7 +23209,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_obj has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -23289,7 +23289,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
                FREE_OP_VAR_PTR(free_op_data2);
                FREE_OP_IF_VAR(free_op_data1);
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        /* assign_dim has two opcodes! */
        CHECK_EXCEPTION();
        ZEND_VM_INC_OPCODE();
@@ -23343,7 +23343,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
                }
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        /* zend_assign_to_variable() always takes care of op2, never free it! */
 
@@ -23398,7 +23398,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLE
                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
        }
 
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -23478,7 +23478,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -23652,7 +23652,7 @@ static int ZEND_FASTCALL  ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE
                        INIT_PZVAL_COPY(new_expr, expr_ptr);
                        expr_ptr = new_expr;
                        zendi_zval_copy_ctor(*expr_ptr);
-                       zval_ptr_dtor(&free_op1.var);
+                       zval_ptr_dtor_nogc(&free_op1.var);
                } else if (IS_VAR == IS_CV) {
                        Z_ADDREF_P(expr_ptr);
                }
@@ -23696,7 +23696,7 @@ num_index:
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
-               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
        }
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -23806,7 +23806,7 @@ num_index_dim:
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -23847,7 +23847,7 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
        } else {
 
        }
-       if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+       if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -23984,7 +23984,7 @@ num_index_prop:
                Z_LVAL(EX_T(opline->result.var).tmp_var) = !result;
        }
 
-       zval_ptr_dtor(&free_op1.var);
+       zval_ptr_dtor_nogc(&free_op1.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -24066,7 +24066,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                        generator->value = *value_ptr;
                                }
 
-                               if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
+                               if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);};
                        }
                } else {
                        zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
@@ -24086,7 +24086,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                }
 
                                generator->value = copy;
-                               zval_ptr_dtor(&free_op1.var);
+                               zval_ptr_dtor_nogc(&free_op1.var);
                        } else {
                                if (IS_VAR == IS_CV) {
                                        Z_ADDREF_P(value);
@@ -26973,7 +26973,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -27054,7 +27054,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                FREE_OP(free_op_data1);
        }
@@ -27112,7 +27112,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*bina
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
@@ -27140,7 +27140,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*bina
                PZVAL_LOCK(*var_ptr);
                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
        }
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
@@ -27234,7 +27234,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
@@ -27297,7 +27297,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -27338,7 +27338,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                ZVAL_NULL(retval);
 
                CHECK_EXCEPTION();
@@ -27399,7 +27399,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -27433,7 +27433,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR
                zend_error(E_NOTICE, "Trying to get property of non-object");
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -27450,7 +27450,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
@@ -27485,7 +27485,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_H
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -27527,7 +27527,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -27553,7 +27553,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_
            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -27570,7 +27570,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
@@ -27602,7 +27602,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_O
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -27641,7 +27641,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCO
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -27678,7 +27678,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HA
        if (0) {
                zval_ptr_dtor(&property_name);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        /* assign_obj has two opcodes! */
@@ -27726,7 +27726,7 @@ static int ZEND_FASTCALL  ZEND_ADD_VAR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDL
         * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
         * string offsets or overloaded objects
         */
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -27784,7 +27784,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC
                }
        } else {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_ptr_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 a non-object", function_name_strval);
@@ -27806,7 +27806,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -27889,7 +27889,7 @@ num_index_dim:
                                                zend_error(E_WARNING, "Illegal offset type in unset");
                                                break;
                                }
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                        }
                        case IS_OBJECT:
@@ -27903,18 +27903,18 @@ num_index_dim:
                                if (0) {
                                        zval_ptr_dtor(&offset);
                                } else {
-                                       zval_ptr_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_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -27948,13 +27948,13 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                        }
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -28028,7 +28028,7 @@ num_index_prop:
                                result = 1;
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
                if (0) {
                        MAKE_REAL_ZVAL_PTR(offset);
@@ -28051,7 +28051,7 @@ num_index_prop:
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
                zval tmp;
@@ -28080,9 +28080,9 @@ num_index_prop:
                                }
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
@@ -28236,7 +28236,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER
                        generator->largest_used_integer_key = Z_LVAL_P(generator->key);
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                /* If no key was specified we use auto-increment keys */
                generator->largest_used_integer_key++;
@@ -35431,7 +35431,7 @@ static int ZEND_FASTCALL  ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35446,7 +35446,7 @@ static int ZEND_FASTCALL  ZEND_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35461,7 +35461,7 @@ static int ZEND_FASTCALL  ZEND_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35476,7 +35476,7 @@ static int ZEND_FASTCALL  ZEND_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35491,7 +35491,7 @@ static int ZEND_FASTCALL  ZEND_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35506,7 +35506,7 @@ static int ZEND_FASTCALL  ZEND_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35521,7 +35521,7 @@ static int ZEND_FASTCALL  ZEND_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35536,7 +35536,7 @@ static int ZEND_FASTCALL  ZEND_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35551,7 +35551,7 @@ static int ZEND_FASTCALL  ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35568,7 +35568,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
        Z_LVAL_P(result) = !Z_LVAL_P(result);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35584,7 +35584,7 @@ static int ZEND_FASTCALL  ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35600,7 +35600,7 @@ static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35616,7 +35616,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35632,7 +35632,7 @@ static int ZEND_FASTCALL  ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCO
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC));
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35647,7 +35647,7 @@ static int ZEND_FASTCALL  ZEND_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35662,7 +35662,7 @@ static int ZEND_FASTCALL  ZEND_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35677,7 +35677,7 @@ static int ZEND_FASTCALL  ZEND_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35692,7 +35692,7 @@ static int ZEND_FASTCALL  ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_
                _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -35716,7 +35716,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*bina
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to assign property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                FREE_OP(free_op_data1);
 
                if (RETURN_VALUE_USED(opline)) {
@@ -35797,7 +35797,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*bina
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                FREE_OP(free_op_data1);
        }
@@ -35855,7 +35855,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_o
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
                CHECK_EXCEPTION();
                if (opline->extended_value == ZEND_ASSIGN_DIM) {
@@ -35883,7 +35883,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_o
                PZVAL_LOCK(*var_ptr);
                AI_SET_PTR(&EX_T(opline->result.var), *var_ptr);
        }
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        if (opline->extended_value == ZEND_ASSIGN_DIM) {
                FREE_OP(free_op_data1);
@@ -35977,7 +35977,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t in
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (RETURN_VALUE_USED(opline)) {
                        PZVAL_LOCK(&EG(uninitialized_zval));
                        *retval = &EG(uninitialized_zval);
@@ -36040,7 +36040,7 @@ static int ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t in
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -36081,7 +36081,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t i
 
        if (UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                ZVAL_NULL(retval);
 
                CHECK_EXCEPTION();
@@ -36142,7 +36142,7 @@ static int ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t i
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -36332,12 +36332,12 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDL
        if (IS_CV == IS_TMP_VAR || IS_CV == IS_CONST) {
                zval *container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), &container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
        } else {
                container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
                if (IS_CV == IS_VAR && !(opline->extended_value & ZEND_FETCH_ADD_LOCK)) {
 
                }
@@ -36360,7 +36360,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDL
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
@@ -36393,7 +36393,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_RW TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
@@ -36411,7 +36411,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var TSRMLS_CC);
        zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_IS TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -36434,7 +36434,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCOD
                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
        } else {
                if (IS_VAR == IS_UNUSED) {
@@ -36442,7 +36442,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCOD
                }
                container = _get_zval_ptr_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
                zend_fetch_dimension_address_read(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_R TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
        }
        CHECK_EXCEPTION();
@@ -36467,7 +36467,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_H
                zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
        }
        zend_fetch_dimension_address(&EX_T(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_UNSET TSRMLS_CC);
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
        }
@@ -36507,7 +36507,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_VAR(ZEN
                zend_error(E_NOTICE, "Trying to get property of non-object");
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -36524,7 +36524,7 @@ static int ZEND_FASTCALL zend_fetch_property_address_read_helper_SPEC_CV_VAR(ZEN
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
@@ -36559,7 +36559,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDL
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -36601,7 +36601,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -36627,7 +36627,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
            UNEXPECTED(Z_OBJ_HT_P(container)->read_property == NULL)) {
                PZVAL_LOCK(&EG(uninitialized_zval));
                AI_SET_PTR(&EX_T(opline->result.var), &EG(uninitialized_zval));
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zval *retval;
 
@@ -36644,7 +36644,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HAND
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        }
 
@@ -36676,7 +36676,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCOD
                if (0) {
                        zval_ptr_dtor(&property);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
                if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                        EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -36715,7 +36715,7 @@ static int ZEND_FASTCALL  ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_H
        if (0) {
                zval_ptr_dtor(&property);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
        if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
                EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
@@ -36752,7 +36752,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
        if (0) {
                zval_ptr_dtor(&property_name);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        /* assign_obj has two opcodes! */
@@ -36784,7 +36784,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                if (0) {
                        zval_ptr_dtor(&property_name);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
                zend_free_op free_op2, free_op_data1, free_op_data2;
@@ -36793,7 +36793,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                zval **variable_ptr_ptr;
 
                zend_fetch_dimension_address(&EX_T((opline+1)->op2.var), object_ptr, dim, IS_VAR, BP_VAR_W TSRMLS_CC);
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
 
                value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
                variable_ptr_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
@@ -36890,7 +36890,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_AR
        }
 
        /* zend_assign_to_variable() always takes care of op2, never free it! */
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -36916,7 +36916,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                }
                zend_error(E_STRICT, "Only variables should be assigned by reference");
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+                       if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);};
                        HANDLE_EXCEPTION();
                }
                return ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -36943,7 +36943,7 @@ static int ZEND_FASTCALL  ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLE
                AI_SET_PTR(&EX_T(opline->result.var), *variable_ptr_ptr);
        }
 
-       if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
+       if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);};
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37001,7 +37001,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
                }
        } else {
                if (UNEXPECTED(EG(exception) != NULL)) {
-                       zval_ptr_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 a non-object", function_name_strval);
@@ -37023,7 +37023,7 @@ static int ZEND_FASTCALL  ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_
        call->is_ctor_call = 0;
        EX(call) = call;
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
 
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
@@ -37039,7 +37039,7 @@ static int ZEND_FASTCALL  ZEND_CASE_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                                 _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC),
                                 _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC) TSRMLS_CC);
 
-       zval_ptr_dtor(&free_op2.var);
+       zval_ptr_dtor_nogc(&free_op2.var);
        CHECK_EXCEPTION();
        ZEND_VM_NEXT_OPCODE();
 }
@@ -37114,7 +37114,7 @@ num_index:
                                /* do nothing */
                                break;
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                zend_hash_next_index_insert(Z_ARRVAL(EX_T(opline->result.var).tmp_var), &expr_ptr, sizeof(zval *), NULL);
        }
@@ -37280,7 +37280,7 @@ num_index_dim:
                                                zend_error(E_WARNING, "Illegal offset type in unset");
                                                break;
                                }
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                        }
                        case IS_OBJECT:
@@ -37294,18 +37294,18 @@ num_index_dim:
                                if (0) {
                                        zval_ptr_dtor(&offset);
                                } else {
-                                       zval_ptr_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_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                                break;
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -37339,13 +37339,13 @@ static int ZEND_FASTCALL  ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
-                               zval_ptr_dtor(&free_op2.var);
+                               zval_ptr_dtor_nogc(&free_op2.var);
                        }
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        CHECK_EXCEPTION();
@@ -37504,7 +37504,7 @@ num_index_prop:
                                result = 1;
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else if (Z_TYPE_P(container) == IS_OBJECT) {
                if (0) {
                        MAKE_REAL_ZVAL_PTR(offset);
@@ -37527,7 +37527,7 @@ num_index_prop:
                if (0) {
                        zval_ptr_dtor(&offset);
                } else {
-                       zval_ptr_dtor(&free_op2.var);
+                       zval_ptr_dtor_nogc(&free_op2.var);
                }
        } else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
                zval tmp;
@@ -37556,9 +37556,9 @@ num_index_prop:
                                }
                        }
                }
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        }
 
        Z_TYPE(EX_T(opline->result.var).tmp_var) = IS_BOOL;
@@ -37712,7 +37712,7 @@ static int ZEND_FASTCALL  ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                        generator->largest_used_integer_key = Z_LVAL_P(generator->key);
                }
 
-               zval_ptr_dtor(&free_op2.var);
+               zval_ptr_dtor_nogc(&free_op2.var);
        } else {
                /* If no key was specified we use auto-increment keys */
                generator->largest_used_integer_key++;
index a65349c4ed63dbd669db3657af2d7dbbe3c8999d..a0546460d0e441f2d5f793a2de9613611b406698 100644 (file)
@@ -218,7 +218,7 @@ $op2_is_tmp_free = array(
 $op1_free_op = array(
        "ANY"    => "FREE_OP(free_op1)",
        "TMP"    => "zval_dtor(free_op1.var)",
-       "VAR"    => "zval_ptr_dtor(&free_op1.var)",
+       "VAR"    => "zval_ptr_dtor_nogc(&free_op1.var)",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
@@ -227,7 +227,7 @@ $op1_free_op = array(
 $op2_free_op = array(
        "ANY"    => "FREE_OP(free_op2)",
        "TMP"    => "zval_dtor(free_op2.var)",
-       "VAR"    => "zval_ptr_dtor(&free_op2.var)",
+       "VAR"    => "zval_ptr_dtor_nogc(&free_op2.var)",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
@@ -236,7 +236,7 @@ $op2_free_op = array(
 $op1_free_op_if_var = array(
        "ANY"    => "FREE_OP_IF_VAR(free_op1)",
        "TMP"    => "",
-       "VAR"    => "zval_ptr_dtor(&free_op1.var)",
+       "VAR"    => "zval_ptr_dtor_nogc(&free_op1.var)",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
@@ -245,33 +245,33 @@ $op1_free_op_if_var = array(
 $op2_free_op_if_var = array(
        "ANY"    => "FREE_OP_IF_VAR(free_op2)",
        "TMP"    => "",
-       "VAR"    => "zval_ptr_dtor(&free_op2.var)",
+       "VAR"    => "zval_ptr_dtor_nogc(&free_op2.var)",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
 );
 
 $op1_free_op_var_ptr = array(
-       "ANY"    => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}",
+       "ANY"    => "if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);}",
        "TMP"    => "",
-       "VAR"    => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}",
+       "VAR"    => "if (free_op1.var) {zval_ptr_dtor_nogc(&free_op1.var);}",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
 );
 $op1_free_op_var_ptr_fast = $op1_free_op_var_ptr;
-$op1_free_op_var_ptr_fast["VAR"] = "zval_ptr_dtor(&free_op1.var)";
+$op1_free_op_var_ptr_fast["VAR"] = "zval_ptr_dtor_nogc(&free_op1.var)";
 
 $op2_free_op_var_ptr = array(
-       "ANY"    => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}",
+       "ANY"    => "if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);}",
        "TMP"    => "",
-       "VAR"    => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}",
+       "VAR"    => "if (free_op2.var) {zval_ptr_dtor_nogc(&free_op2.var);}",
        "CONST"  => "",
        "UNUSED" => "",
        "CV"     => "",
 );
 $op2_free_op_var_ptr_fast = $op2_free_op_var_ptr;
-$op2_free_op_var_ptr_fast["VAR"] = "zval_ptr_dtor(&free_op2.var)";
+$op2_free_op_var_ptr_fast["VAR"] = "zval_ptr_dtor_nogc(&free_op2.var)";
 
 $list    = array(); // list of opcode handlers and helpers in original order
 $opcodes = array(); // opcode handlers by code