2010-01-19 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Tue, 19 Jan 2010 20:50:56 +0000 (20:50 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Tue, 19 Jan 2010 20:50:56 +0000 (20:50 -0000)
* icall.c (ves_icall_Remoting_RemotingServices_GetVirtualMethod): This
function is generics variance aware.

svn path=/trunk/mono/; revision=149838

mono/metadata/ChangeLog
mono/metadata/icall.c

index a5c7cd53d964721afd288fb9b21e80595691dd7d..56b9da4fca64038e62e2b93448ae00e6f45bbe45 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-19  Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * icall.c (ves_icall_Remoting_RemotingServices_GetVirtualMethod): This
+       function is generics variance aware.
+
 2010-01-19  Sebastien Pouliot  <sebastien@ximian.com>
 
        * security-core-clr.c (mono_security_core_clr_can_access_internals):
index f02067119dfdc365a7ab0a2e641f4342e091e9e6..12f85e374508960e7676d0f2a9243368cdb2dcec 100644 (file)
@@ -6661,7 +6661,9 @@ ves_icall_Remoting_RemotingServices_GetVirtualMethod (
        vtable = klass->vtable;
 
        if (method->klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
-               int offs = mono_class_interface_offset (klass, method->klass);
+               gboolean variance_used = FALSE;
+               /*MS fails with variant interfaces but it's the right thing to do anyway.*/
+               int offs = mono_class_interface_offset_with_variance (klass, method->klass, &variance_used);
                if (offs >= 0)
                        res = vtable [offs + method->slot];
        } else {