Handle gsharing and marshal by ref.
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Feb 2011 13:44:28 +0000 (14:44 +0100)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 17 Feb 2011 13:46:21 +0000 (14:46 +0100)
* method-to-ir.c (mono_emit_method_call_full): Non virtual
marshal by ref methods with gsharing context must always
be called using indirect calls.

Fixes #665893

mono/mini/method-to-ir.c

index d075a817729b48fef131b0814ceedc76e5764098..0b6a75d4aae4b3601d404b2cd4334bc853e8c1f9 100644 (file)
@@ -2369,11 +2369,12 @@ mono_emit_method_call_full (MonoCompile *cfg, MonoMethod *method, MonoMethodSign
                sig = ctor_sig;
        }
 
+       context_used = mono_method_check_context_used (method);
+
        might_be_remote = this && sig->hasthis &&
                (method->klass->marshalbyref || method->klass == mono_defaults.object_class) &&
-               !(method->flags & METHOD_ATTRIBUTE_VIRTUAL) && !MONO_CHECK_THIS (this);
+               !(method->flags & METHOD_ATTRIBUTE_VIRTUAL) && (!MONO_CHECK_THIS (this) || context_used);
 
-       context_used = mono_method_check_context_used (method);
        if (might_be_remote && context_used) {
                MonoInst *addr;