From: Dmitry Stogov Date: Mon, 27 Jul 2020 18:53:58 +0000 (+0300) Subject: Correct assertion X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee00f51e0a2591c696a82ca93b5a0a73553b8579;p=php Correct assertion --- diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index ea57f5d68c..a55f04a82a 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -743,7 +743,15 @@ static int zend_jit_trace_restrict_ssa_var_info(const zend_op_array *op_array, c tssa->var_info[ssa_var].type &= info->type; if (info->ce) { if (tssa->var_info[ssa_var].ce) { - ZEND_ASSERT(tssa->var_info[ssa_var].ce == info->ce); + if (tssa->var_info[ssa_var].ce != info->ce) { + if (instanceof_function(tssa->var_info[ssa_var].ce, info->ce)) { + /* everything fine */ + } else if (instanceof_function(info->ce, tssa->var_info[ssa_var].ce)) { + // TODO: TSSA may miss Pi() functions and corresponding instanceof() constraints ??? + } else { + ZEND_UNREACHABLE(); + } + } tssa->var_info[ssa_var].is_instanceof = tssa->var_info[ssa_var].is_instanceof && info->is_instanceof; } else {