@@ -3640,10 +3640,6 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
36403640 break;
36413641 case ZEND_FE_FETCH_R:
36423642 case ZEND_FE_FETCH_RW:
3643- if (opline->op2_type == IS_CV) {
3644- old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3645- SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3646- }
36473643 exit_opline = (trace->opline == opline + 1) ?
36483644 ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) :
36493645 opline + 1;
@@ -3652,6 +3648,16 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
36523648 }
36533649 }
36543650
3651+ switch (opline->opcode) {
3652+ case ZEND_FE_FETCH_R:
3653+ case ZEND_FE_FETCH_RW:
3654+ if (opline->op2_type != IS_UNUSED) {
3655+ old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3656+ SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3657+ }
3658+ break;
3659+ }
3660+
36553661 if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) {
36563662 old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
36573663 SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
@@ -3665,7 +3671,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
36653671 switch (opline->opcode) {
36663672 case ZEND_FE_FETCH_R:
36673673 case ZEND_FE_FETCH_RW:
3668- if (opline->op2_type == IS_CV ) {
3674+ if (opline->op2_type != IS_UNUSED ) {
36693675 SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info);
36703676 }
36713677 break;
0 commit comments