Skip to content

Commit 0abe742

Browse files
committed
Fixed incorrect trace type inference for top-level code
1 parent 1d98bd4 commit 0abe742

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,9 +1196,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
11961196
} else {
11971197
ssa_var_info[i].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;
11981198
}
1199-
} else {
1199+
} else if (op_array->function_name) {
12001200
ssa_vars[i].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
12011201
ssa_var_info[i].type = MAY_BE_UNDEF;
1202+
} else {
1203+
ssa_var_info[i].type = MAY_BE_UNDEF | 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;
12021204
}
12031205
i++;
12041206
}
@@ -1591,9 +1593,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
15911593
} else {
15921594
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;
15931595
}
1594-
} else {
1596+
} else if (op_array->function_name) {
15951597
ssa_vars[v].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
15961598
ssa_var_info[v].type = MAY_BE_UNDEF;
1599+
} else {
1600+
ssa_var_info[v].type = MAY_BE_UNDEF | 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;
15971601
}
15981602
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
15991603
&& i < op_array->num_args) {
@@ -2588,6 +2592,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
25882592
ssa->var_info[i].type = info;
25892593
SET_STACK_TYPE(stack, i, concrete_type(info));
25902594
} else if (trace_buffer->start == ZEND_JIT_TRACE_START_ENTER
2595+
&& op_array->function_name
25912596
&& i >= op_array->num_args) {
25922597
/* This must be already handled by trace type inference */
25932598
ZEND_ASSERT(0);

0 commit comments

Comments
 (0)