diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-07-07 16:53:00 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-07-07 16:53:00 +0200 |
commit | 15c265b789e245d0ca6a449f891de10de233e186 (patch) | |
tree | 760d5e6304d76d8156a9690307f56d6f9494eac3 /ext | |
parent | e45f7053cf2ad55a3318140a04b21c026f2a22de (diff) | |
download | php-git-15c265b789e245d0ca6a449f891de10de233e186.tar.gz |
Revert "More accurate reference-counter inference"
This reverts commit b35255ad21a4e441f2304d944014c0649e37d712.
Temporarily revert this, because it causes a memory leak on the
ext/intl/tests/bug72241.phpt test case, because temporary arrays
are not handled correctly.
Diffstat (limited to 'ext')
-rw-r--r-- | ext/opcache/Optimizer/zend_inference.c | 10 | ||||
-rw-r--r-- | ext/opcache/jit/zend_jit_x86.dasc | 9 |
2 files changed, 6 insertions, 13 deletions
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 76cc15f2da..d45b58d6d7 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -1972,15 +1972,15 @@ uint32_t zend_array_element_type(uint32_t t1, int write, int insert) if (tmp & MAY_BE_ARRAY) { tmp |= MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF; } - if (tmp & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { + if (t1 & MAY_BE_ARRAY_OF_REF) { if (!write) { /* can't be REF because of ZVAL_COPY_DEREF() usage */ - tmp |= MAY_BE_RCN; - } else if (t1 & MAY_BE_ARRAY_OF_REF) { - tmp |= MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN; - } else { tmp |= MAY_BE_RC1 | MAY_BE_RCN; + } else { + tmp |= MAY_BE_REF | MAY_BE_RC1 | MAY_BE_RCN; } + } else if (tmp & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { + tmp |= MAY_BE_RC1 | MAY_BE_RCN; } } if (write) { diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 2829cbd7ac..c186a7ee8f 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -5571,9 +5571,6 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) { var_info |= MAY_BE_REF; } - if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { - var_info |= MAY_BE_RC1; - } | // value = zend_assign_to_variable(variable_ptr, value, OP_DATA_TYPE); if (!zend_jit_assign_to_variable(Dst, opline, op_array, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0)) { return 0; @@ -5784,9 +5781,6 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) { var_info |= MAY_BE_REF; } - if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) { - var_info |= MAY_BE_RC1; - } if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, 8, 8, NULL, NULL)) { return 0; @@ -11138,8 +11132,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen |9: // END if (opline->op1_type != IS_UNUSED && !use_this && !op1_indirect) { if (opline->op1_type == IS_VAR - && opline->opcode == ZEND_FETCH_OBJ_W - && (op1_info & MAY_BE_RC1)) { + && opline->opcode == ZEND_FETCH_OBJ_W) { zend_jit_addr orig_op1_addr = OP1_ADDR(); | IF_NOT_ZVAL_REFCOUNTED orig_op1_addr, >1 |