Skip to content

Commit 6e50e2a

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fixed alias handling
2 parents 18d2b7f + e3c63de commit 6e50e2a

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,6 +1940,16 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
19401940
if (ssa_ops[idx].result_def >= 0) {
19411941
zend_jit_trace_copy_ssa_var_range(op_array, ssa, ssa_opcodes, tssa, ssa_ops[idx].result_def);
19421942
}
1943+
} else {
1944+
if (ssa_ops[idx].op1_def >= 0) {
1945+
ssa_vars[ssa_ops[idx].op1_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->op1.var));
1946+
}
1947+
if (ssa_ops[idx].op2_def >= 0) {
1948+
ssa_vars[ssa_ops[idx].op2_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->op2.var));
1949+
}
1950+
if (ssa_ops[idx].result_def >= 0) {
1951+
ssa_vars[ssa_ops[idx].result_def].alias = zend_jit_var_may_alias(op_array, ssa, EX_VAR_TO_NUM(opline->result.var));
1952+
}
19431953
}
19441954
if (opline->opcode == ZEND_RECV_INIT
19451955
&& !(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) {
@@ -2001,19 +2011,22 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
20012011
if (ssa->var_info
20022012
&& zend_jit_trace_copy_ssa_var_info(op_array, ssa, ssa_opcodes, tssa, v)) {
20032013
/* pass */
2004-
} else if (op_array->arg_info) {
2005-
zend_arg_info *arg_info = &op_array->arg_info[i];
2006-
zend_class_entry *ce;
2007-
uint32_t tmp = zend_fetch_arg_info_type(script, arg_info, &ce);
2014+
} else {
2015+
ssa_vars[v].alias = zend_jit_var_may_alias(op_array, ssa, i);
2016+
if (op_array->arg_info) {
2017+
zend_arg_info *arg_info = &op_array->arg_info[i];
2018+
zend_class_entry *ce;
2019+
uint32_t tmp = zend_fetch_arg_info_type(script, arg_info, &ce);
20082020

2009-
if (ZEND_ARG_SEND_MODE(arg_info)) {
2010-
tmp |= MAY_BE_REF;
2021+
if (ZEND_ARG_SEND_MODE(arg_info)) {
2022+
tmp |= MAY_BE_REF;
2023+
}
2024+
ssa_var_info[v].type = tmp;
2025+
ssa_var_info[v].ce = ce;
2026+
ssa_var_info[v].is_instanceof = 1;
2027+
} else {
2028+
ssa_var_info[v].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
20112029
}
2012-
ssa_var_info[v].type = tmp;
2013-
ssa_var_info[v].ce = ce;
2014-
ssa_var_info[v].is_instanceof = 1;
2015-
} else {
2016-
ssa_var_info[v].type = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
20172030
}
20182031
} else {
20192032
if (ssa->vars) {

0 commit comments

Comments
 (0)