2009-01-21 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Wed, 21 Jan 2009 17:40:10 +0000 (17:40 -0000)
committerZoltan Varga <vargaz@gmail.com>
Wed, 21 Jan 2009 17:40:10 +0000 (17:40 -0000)
Backport of r124065.

* class.c (mono_class_setup_vtable_general): In the generic instance
optimization, set method->slot for abstract virtual methods. Fixes part of
#467834.

svn path=/branches/mono-2-2/mono/; revision=124066

mono/metadata/ChangeLog
mono/metadata/class.c

index b6fd1cd37b3e529d08f39347008b82b7ec15c699..f0df741fd8bc1c7fe5e7abae53a24ebd78887628 100644 (file)
@@ -1,3 +1,11 @@
+2009-01-21  Zoltan Varga  <vargaz@gmail.com>
+
+       Backport of r124065.
+       
+       * class.c (mono_class_setup_vtable_general): In the generic instance
+       optimization, set method->slot for abstract virtual methods. Fixes part of
+       #467834.
+
 2009-01-21  Mark Probst  <mark.probst@gmail.com>
 
        Backport of r124022.
index f3340b426bb112f654d42a5185e669b71dcd39ff..b7c78d5e2acacf9fd3cd303c0de10417000c107d 100644 (file)
@@ -2904,6 +2904,13 @@ mono_class_setup_vtable_general (MonoClass *class, MonoMethod **overrides, int o
                        mono_memory_barrier ();
                        class->vtable = tmp;
 
+                       /* Have to set method->slot for abstract virtual methods */
+                       if (class->methods && gklass->methods) {
+                               for (i = 0; i < class->method.count; ++i)
+                                       if (class->methods [i]->slot == -1)
+                                               class->methods [i]->slot = gklass->methods [i]->slot;
+                       }
+
                        return;
                }
        }