]> granicus.if.org Git - php/commitdiff
Correct assertion
authorDmitry Stogov <dmitry@zend.com>
Mon, 27 Jul 2020 18:53:58 +0000 (21:53 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 27 Jul 2020 18:53:58 +0000 (21:53 +0300)
ext/opcache/jit/zend_jit_trace.c

index ea57f5d68c61ddbd6164f2ee22ec1e84e489a299..a55f04a82aaec99d5ffd9a0b866481628c384dea 100644 (file)
@@ -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 {