@@ -2757,6 +2757,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2757
2757
} else {
2758
2758
op2_def_addr = op2_addr ;
2759
2759
}
2760
+ op1_info = OP1_INFO ();
2760
2761
if (opline -> result_type == IS_UNUSED ) {
2761
2762
res_addr = 0 ;
2762
2763
res_info = -1 ;
@@ -2768,7 +2769,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2768
2769
&& (i + 1 ) <= end
2769
2770
&& (opline + 1 )-> opcode == ZEND_SEND_VAL
2770
2771
&& (opline + 1 )-> op1_type == IS_TMP_VAR
2771
- && (opline + 1 )-> op1 .var == opline -> result .var ) {
2772
+ && (opline + 1 )-> op1 .var == opline -> result .var
2773
+ && (!(op1_info & MAY_HAVE_DTOR ) || !(op1_info & MAY_BE_RC1 ))) {
2772
2774
i ++ ;
2773
2775
res_addr = ZEND_ADDR_MEM_ZVAL (ZREG_RX , (opline + 1 )-> result .var );
2774
2776
if (!zend_jit_reuse_ip (& dasm_state )) {
@@ -2777,7 +2779,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
2777
2779
}
2778
2780
}
2779
2781
if (!zend_jit_assign (& dasm_state , opline ,
2780
- OP1_INFO () , OP1_REG_ADDR (),
2782
+ op1_info , OP1_REG_ADDR (),
2781
2783
OP1_DEF_INFO (), OP1_DEF_REG_ADDR (),
2782
2784
OP2_INFO (), op2_addr , op2_def_addr ,
2783
2785
res_info , res_addr ,
0 commit comments