} else {
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;
}
- } else {
+ } else if (op_array->function_name) {
ssa_vars[i].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
ssa_var_info[i].type = MAY_BE_UNDEF;
+ } else {
+ 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;
}
i++;
}
} else {
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;
}
- } else {
+ } else if (op_array->function_name) {
ssa_vars[v].no_val = ssa->vars ? ssa->vars[i].no_val : 0;
ssa_var_info[v].type = MAY_BE_UNDEF;
+ } else {
+ 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;
}
if (!(op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& i < op_array->num_args) {
ssa->var_info[i].type = info;
SET_STACK_TYPE(stack, i, concrete_type(info));
} else if (trace_buffer->start == ZEND_JIT_TRACE_START_ENTER
+ && op_array->function_name
&& i >= op_array->num_args) {
/* This must be already handled by trace type inference */
ZEND_ASSERT(0);