@@ -4902,33 +4902,30 @@ static int zend_jit_inc_dec(zend_jit_ctx *jit, const zend_op *opline, uint32_t o
49024902 int32_t exit_point;
49034903 const void *exit_addr;
49044904 zend_jit_trace_stack *stack;
4905- uint32_t old_res_info = 0;
4905+ uint32_t old_res_info = 0, old_op1_info = 0 ;
49064906
49074907 stack = JIT_G(current_frame)->stack;
49084908 if (opline->result_type != IS_UNUSED) {
49094909 old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
4910+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0);
49104911 if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) {
4911- SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0);
4912+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->result.var), ref);
4913+ } else {
4914+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->result.var), op1_lval_ref);
49124915 }
49134916 }
4917+ old_op1_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var));
4918+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_LONG, 0);
4919+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->op1.var), ref);
4920+
49144921 exit_point = zend_jit_trace_get_exit_point(opline + 1, 0);
49154922 exit_addr = zend_jit_trace_get_exit_addr(exit_point);
4916- if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) &&
4917- opline->result_type != IS_UNUSED) {
4918- if_overflow = ir_IF(ir_OVERFLOW(ref));
4919- ir_IF_FALSE_cold(if_overflow);
4920- jit_set_Z_LVAL(jit, res_addr, ref);
4921- if (Z_MODE(res_addr) != IS_REG) {
4922- jit_set_Z_TYPE_INFO(jit, res_addr, IS_LONG);
4923- }
4924- jit_SIDE_EXIT(jit, ir_CONST_ADDR(exit_addr));
4925- ir_IF_TRUE(if_overflow);
4926- } else {
4927- ir_GUARD(ir_OVERFLOW(ref), ir_CONST_ADDR(exit_addr));
4928- }
4923+ ir_GUARD(ir_OVERFLOW(ref), ir_CONST_ADDR(exit_addr));
4924+
49294925 if (opline->result_type != IS_UNUSED) {
49304926 SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info);
49314927 }
4928+ SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info);
49324929 } else {
49334930 if_overflow = ir_IF(ir_OVERFLOW(ref));
49344931 ir_IF_FALSE(if_overflow);
0 commit comments