diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-04-12 01:01:47 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-04-12 01:01:47 +0300 |
commit | 39505764adbf1b46656ea2a5c8337e667356ae4b (patch) | |
tree | 2d68b6f70611ee94e13d0f3e0d8f8edc38104cbe /Zend/zend_execute.c | |
parent | 7604f295cae6c092fc55d17f7acdd108b8d532d1 (diff) | |
parent | 88a2268d6b9ff152399a8761dc826ce414c0b985 (diff) | |
download | php-git-39505764adbf1b46656ea2a5c8337e667356ae4b.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Replace "ZEND_CALL_CTOR" hack by additional live-range
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 1d626a0def..3877981ad0 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3675,12 +3675,6 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o zend_vm_stack_free_args(EX(call)); if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) { - if (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR) { - GC_DELREF(Z_OBJ(call->This)); - if (GC_REFCOUNT(Z_OBJ(call->This)) == 1) { - zend_object_store_ctor_failed(Z_OBJ(call->This)); - } - } OBJ_RELEASE(Z_OBJ(call->This)); } if (call->func->common.fn_flags & ZEND_ACC_CLOSURE) { @@ -3729,6 +3723,12 @@ static void cleanup_live_vars(zend_execute_data *execute_data, uint32_t op_num, if (kind == ZEND_LIVE_TMPVAR) { zval_ptr_dtor_nogc(var); + } else if (kind == ZEND_LIVE_NEW) { + zend_object *obj; + ZEND_ASSERT(Z_TYPE_P(var) == IS_OBJECT); + obj = Z_OBJ_P(var); + zend_object_store_ctor_failed(obj); + OBJ_RELEASE(obj); } else if (kind == ZEND_LIVE_LOOP) { if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) { zend_hash_iterator_del(Z_FE_ITER_P(var)); |