[mono][aot] Avoid prefer-ing gsharedvt versions of AsyncMethodBuilderCore etc. method...
authorZoltan Varga <vargaz@gmail.com>
Mon, 10 Jul 2023 23:07:24 +0000 (19:07 -0400)
committerGitHub <noreply@github.com>
Mon, 10 Jul 2023 23:07:24 +0000 (19:07 -0400)
The gsharedvt versions might not be generated if they are not in the profile, leading to crashes
at runtime.

Fixes https://github.com/dotnet/runtime/issues/87856.

src/mono/mono/mini/aot-compiler.c

index 7873a3c..c7e2141 100644 (file)
@@ -4300,7 +4300,7 @@ static gboolean
 prefer_gsharedvt_method (MonoAotCompile *acfg, MonoMethod *method)
 {
        /* One instantiation with valuetypes is generated for each async method */
-       if (m_class_get_image (method->klass) == mono_defaults.corlib && (!strcmp (m_class_get_name (method->klass), "AsyncMethodBuilderCore") || !strcmp (m_class_get_name (method->klass), "AsyncVoidMethodBuilder")))
+       if (!acfg->aot_opts.profile_only && m_class_get_image (method->klass) == mono_defaults.corlib && (!strcmp (m_class_get_name (method->klass), "AsyncMethodBuilderCore") || !strcmp (m_class_get_name (method->klass), "AsyncVoidMethodBuilder")))
                return TRUE;
        else
                return FALSE;