@@ -4808,33 +4808,30 @@ static int zend_jit_inc_dec(zend_jit_ctx *jit, const zend_op *opline, uint32_t o
48084808 int32_t exit_point;
48094809 const void *exit_addr;
48104810 zend_jit_trace_stack *stack;
4811- uint32_t old_res_info = 0;
4811+ uint32_t old_res_info = 0, old_op1_info = 0 ;
48124812
48134813 stack = JIT_G(current_frame)->stack;
48144814 if (opline->result_type != IS_UNUSED) {
48154815 old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
4816+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0);
48164817 if (opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) {
4817- SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_LONG, 0);
4818+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->result.var), ref);
4819+ } else {
4820+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->result.var), op1_lval_ref);
48184821 }
48194822 }
4823+ old_op1_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var));
4824+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_LONG, 0);
4825+ SET_STACK_REF(stack, EX_VAR_TO_NUM(opline->op1.var), ref);
4826+
48204827 exit_point = zend_jit_trace_get_exit_point(opline + 1, 0);
48214828 exit_addr = zend_jit_trace_get_exit_addr(exit_point);
4822- if ((opline->opcode == ZEND_PRE_INC || opline->opcode == ZEND_PRE_DEC) &&
4823- opline->result_type != IS_UNUSED) {
4824- if_overflow = ir_IF(ir_OVERFLOW(ref));
4825- ir_IF_FALSE_cold(if_overflow);
4826- jit_set_Z_LVAL(jit, res_addr, ref);
4827- if (Z_MODE(res_addr) != IS_REG) {
4828- jit_set_Z_TYPE_INFO(jit, res_addr, IS_LONG);
4829- }
4830- jit_SIDE_EXIT(jit, ir_CONST_ADDR(exit_addr));
4831- ir_IF_TRUE(if_overflow);
4832- } else {
4833- ir_GUARD(ir_OVERFLOW(ref), ir_CONST_ADDR(exit_addr));
4834- }
4829+ ir_GUARD(ir_OVERFLOW(ref), ir_CONST_ADDR(exit_addr));
4830+
48354831 if (opline->result_type != IS_UNUSED) {
48364832 SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info);
48374833 }
4834+ SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info);
48384835 } else {
48394836 if_overflow = ir_IF(ir_OVERFLOW(ref));
48404837 ir_IF_FALSE(if_overflow);
0 commit comments