@@ -5567,6 +5567,9 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze
5567
5567
if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
5568
5568
var_info |= MAY_BE_REF;
5569
5569
}
5570
+ if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
5571
+ var_info |= MAY_BE_RC1;
5572
+ }
5570
5573
| // value = zend_assign_to_variable(variable_ptr, value, OP_DATA_TYPE);
5571
5574
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)) {
5572
5575
return 0;
@@ -5777,6 +5780,9 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const
5777
5780
if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
5778
5781
var_info |= MAY_BE_REF;
5779
5782
}
5783
+ if (var_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)) {
5784
+ var_info |= MAY_BE_RC1;
5785
+ }
5780
5786
5781
5787
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, 8, 8, NULL, NULL)) {
5782
5788
return 0;
@@ -11126,7 +11132,8 @@ static int zend_jit_fetch_obj(dasm_State **Dst, const zend_op *opline, const zen
11126
11132
|9: // END
11127
11133
if (opline->op1_type != IS_UNUSED && !use_this && !op1_indirect) {
11128
11134
if (opline->op1_type == IS_VAR
11129
- && opline->opcode == ZEND_FETCH_OBJ_W) {
11135
+ && opline->opcode == ZEND_FETCH_OBJ_W
11136
+ && (op1_info & MAY_BE_RC1)) {
11130
11137
zend_jit_addr orig_op1_addr = OP1_ADDR();
11131
11138
11132
11139
| IF_NOT_ZVAL_REFCOUNTED orig_op1_addr, >1
0 commit comments