Don't assign vtable slots to static iface methods.
authorRodrigo Kumpera <kumpera@gmail.com>
Tue, 19 Oct 2010 13:36:39 +0000 (11:36 -0200)
committerRodrigo Kumpera <kumpera@gmail.com>
Tue, 19 Oct 2010 13:47:02 +0000 (11:47 -0200)
* reflection.c (ensure_runtime_vtable): When recalculating
method slots, ignore static methods.

Fixes #640780

mono/metadata/reflection.c

index 118ab16f4b8880a06e51bd5d98daf5da314faa27..cca63a33c4d1be894329f90554b1ff84700bd764 100644 (file)
@@ -10841,8 +10841,12 @@ ensure_runtime_vtable (MonoClass *klass)
        }
 
        if (klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
-               for (i = 0; i < klass->method.count; ++i)
-                       klass->methods [i]->slot = i;
+               int slot_num = 0;
+               for (i = 0; i < klass->method.count; ++i) {
+                       MonoMethod *im = klass->methods [i];
+                       if (!(im->flags & METHOD_ATTRIBUTE_STATIC))
+                               im->slot = slot_num++;
+               }
                
                klass->interfaces_packed = NULL; /*make setup_interface_offsets happy*/
                mono_class_setup_interface_offsets (klass);