@@ -2709,6 +2709,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2709
2709
} else {
2710
2710
op2_def_addr = op2_addr ;
2711
2711
}
2712
+ op1_info = OP1_INFO ();
2712
2713
if (opline -> result_type == IS_UNUSED ) {
2713
2714
res_addr = 0 ;
2714
2715
res_info = -1 ;
@@ -2720,7 +2721,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2720
2721
&& (i + 1 ) <= end
2721
2722
&& (opline + 1 )-> opcode == ZEND_SEND_VAL
2722
2723
&& (opline + 1 )-> op1_type == IS_TMP_VAR
2723
- && (opline + 1 )-> op1 .var == opline -> result .var ) {
2724
+ && (opline + 1 )-> op1 .var == opline -> result .var
2725
+ && (!(op1_info & MAY_HAVE_DTOR ) || !(op1_info & MAY_BE_RC1 ))) {
2724
2726
i ++ ;
2725
2727
res_addr = ZEND_ADDR_MEM_ZVAL (ZREG_RX , (opline + 1 )-> result .var );
2726
2728
if (!zend_jit_reuse_ip (& dasm_state )) {
@@ -2729,7 +2731,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2729
2731
}
2730
2732
}
2731
2733
if (!zend_jit_assign (& dasm_state , opline ,
2732
- OP1_INFO () , OP1_REG_ADDR (),
2734
+ op1_info , OP1_REG_ADDR (),
2733
2735
OP1_DEF_INFO (), OP1_DEF_REG_ADDR (),
2734
2736
OP2_INFO (), op2_addr , op2_def_addr ,
2735
2737
res_info , res_addr ,
0 commit comments