[mono] Avoid a JIT assert. (#58127)
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Fri, 27 Aug 2021 18:17:38 +0000 (11:17 -0700)
committerGitHub <noreply@github.com>
Fri, 27 Aug 2021 18:17:38 +0000 (11:17 -0700)
Workaround for https://github.com/dotnet/runtime/issues/57560.

Co-authored-by: Zoltan Varga <vargaz@gmail.com>
src/mono/mono/mini/method-to-ir.c

index 5b607e5..96ac001 100644 (file)
@@ -5324,20 +5324,20 @@ handle_call_res_devirt (MonoCompile *cfg, MonoMethod *cmethod, MonoInst *call_re
                        MonoClass *gcomparer = mono_class_get_geqcomparer_class ();
                        g_assert (gcomparer);
                        gcomparer_inst = mono_class_inflate_generic_class_checked (gcomparer, &ctx, error);
-                       mono_error_assert_ok (error);
+                       if (is_ok (error)) {
+                               MONO_INST_NEW (cfg, typed_objref, OP_TYPED_OBJREF);
+                               typed_objref->type = STACK_OBJ;
+                               typed_objref->dreg = alloc_ireg_ref (cfg);
+                               typed_objref->sreg1 = call_res->dreg;
+                               typed_objref->klass = gcomparer_inst;
+                               MONO_ADD_INS (cfg->cbb, typed_objref);
 
-                       MONO_INST_NEW (cfg, typed_objref, OP_TYPED_OBJREF);
-                       typed_objref->type = STACK_OBJ;
-                       typed_objref->dreg = alloc_ireg_ref (cfg);
-                       typed_objref->sreg1 = call_res->dreg;
-                       typed_objref->klass = gcomparer_inst;
-                       MONO_ADD_INS (cfg->cbb, typed_objref);
+                               call_res = typed_objref;
 
-                       call_res = typed_objref;
-
-                       /* Force decompose */
-                       cfg->flags |= MONO_CFG_NEEDS_DECOMPOSE;
-                       cfg->cbb->needs_decompose = TRUE;
+                               /* Force decompose */
+                               cfg->flags |= MONO_CFG_NEEDS_DECOMPOSE;
+                               cfg->cbb->needs_decompose = TRUE;
+                       }
                }
        }