@@ -4808,33 +4808,30 @@ static int zend_jit_inc_dec(zend_jit_ctx *jit, const zend_op *opline, uint32_t o
4808
4808
int32_t exit_point;
4809
4809
const void *exit_addr;
4810
4810
zend_jit_trace_stack *stack;
4811
- uint32_t old_res_info = 0;
4811
+ uint32_t old_res_info = 0, old_op1_info = 0 ;
4812
4812
4813
4813
stack = JIT_G(current_frame)->stack;
4814
4814
if (opline->result_type != IS_UNUSED) {
4815
4815
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);
4816
4817
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);
4818
4821
}
4819
4822
}
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
+
4820
4827
exit_point = zend_jit_trace_get_exit_point(opline + 1, 0);
4821
4828
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
+
4835
4831
if (opline->result_type != IS_UNUSED) {
4836
4832
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info);
4837
4833
}
4834
+ SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info);
4838
4835
} else {
4839
4836
if_overflow = ir_IF(ir_OVERFLOW(ref));
4840
4837
ir_IF_FALSE(if_overflow);
0 commit comments