@@ -3640,10 +3640,6 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
3640
3640
break;
3641
3641
case ZEND_FE_FETCH_R:
3642
3642
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
- }
3647
3643
exit_opline = (trace->opline == opline + 1) ?
3648
3644
ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) :
3649
3645
opline + 1;
@@ -3652,6 +3648,16 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
3652
3648
}
3653
3649
}
3654
3650
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
+
3655
3661
if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) {
3656
3662
old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
3657
3663
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
3665
3671
switch (opline->opcode) {
3666
3672
case ZEND_FE_FETCH_R:
3667
3673
case ZEND_FE_FETCH_RW:
3668
- if (opline->op2_type == IS_CV ) {
3674
+ if (opline->op2_type != IS_UNUSED ) {
3669
3675
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info);
3670
3676
}
3671
3677
break;
0 commit comments