@@ -4902,33 +4902,30 @@ static int zend_jit_inc_dec(zend_jit_ctx *jit, const zend_op *opline, uint32_t o
4902
4902
int32_t exit_point;
4903
4903
const void *exit_addr;
4904
4904
zend_jit_trace_stack *stack;
4905
- uint32_t old_res_info = 0;
4905
+ uint32_t old_res_info = 0, old_op1_info = 0 ;
4906
4906
4907
4907
stack = JIT_G(current_frame)->stack;
4908
4908
if (opline->result_type != IS_UNUSED) {
4909
4909
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);
4910
4911
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);
4912
4915
}
4913
4916
}
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
+
4914
4921
exit_point = zend_jit_trace_get_exit_point(opline + 1, 0);
4915
4922
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
+
4929
4925
if (opline->result_type != IS_UNUSED) {
4930
4926
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_res_info);
4931
4927
}
4928
+ SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_op1_info);
4932
4929
} else {
4933
4930
if_overflow = ir_IF(ir_OVERFLOW(ref));
4934
4931
ir_IF_FALSE(if_overflow);
0 commit comments