Skip to content

Commit 3cce496

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Fix abstract trace consisency for FE_FETCH instruction
2 parents 279ffdb + da28a6b commit 3cce496

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3335,10 +3335,6 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
33353335
break;
33363336
case ZEND_FE_FETCH_R:
33373337
case ZEND_FE_FETCH_RW:
3338-
if (opline->op2_type == IS_CV) {
3339-
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3340-
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3341-
}
33423338
exit_opline = (trace->opline == opline + 1) ?
33433339
ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) :
33443340
opline + 1;
@@ -3347,6 +3343,16 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
33473343
}
33483344
}
33493345

3346+
switch (opline->opcode) {
3347+
case ZEND_FE_FETCH_R:
3348+
case ZEND_FE_FETCH_RW:
3349+
if (opline->op2_type != IS_UNUSED) {
3350+
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3351+
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3352+
}
3353+
break;
3354+
}
3355+
33503356
if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) {
33513357
old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
33523358
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
@@ -3360,7 +3366,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
33603366
switch (opline->opcode) {
33613367
case ZEND_FE_FETCH_R:
33623368
case ZEND_FE_FETCH_RW:
3363-
if (opline->op2_type == IS_CV) {
3369+
if (opline->op2_type != IS_UNUSED) {
33643370
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info);
33653371
}
33663372
break;

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3688,10 +3688,6 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
36883688
break;
36893689
case ZEND_FE_FETCH_R:
36903690
case ZEND_FE_FETCH_RW:
3691-
if (opline->op2_type == IS_CV) {
3692-
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3693-
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3694-
}
36953691
exit_opline = (trace->opline == opline + 1) ?
36963692
ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value) :
36973693
opline + 1;
@@ -3700,6 +3696,16 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
37003696
}
37013697
}
37023698

3699+
switch (opline->opcode) {
3700+
case ZEND_FE_FETCH_R:
3701+
case ZEND_FE_FETCH_RW:
3702+
if (opline->op2_type != IS_UNUSED) {
3703+
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var));
3704+
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
3705+
}
3706+
break;
3707+
}
3708+
37033709
if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) {
37043710
old_res_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
37053711
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
@@ -3713,7 +3719,7 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra
37133719
switch (opline->opcode) {
37143720
case ZEND_FE_FETCH_R:
37153721
case ZEND_FE_FETCH_RW:
3716-
if (opline->op2_type == IS_CV) {
3722+
if (opline->op2_type != IS_UNUSED) {
37173723
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info);
37183724
}
37193725
break;

0 commit comments

Comments
 (0)