From 0abe742d72f64fa6ab85bd10093c302fd064a62d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 28 May 2020 17:43:29 +0300 Subject: [PATCH] Fixed incorrect trace type inference for top-level code --- ext/opcache/jit/zend_jit_trace.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index e45bef79ea..41409dd953 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1196,9 +1196,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } 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++; } @@ -1591,9 +1593,11 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin } 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) { @@ -2588,6 +2592,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par 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); -- 2.50.1