is_interface = method->klass->flags & TYPE_ATTRIBUTE_INTERFACE ? TRUE : FALSE;
load_imt_reg = is_virtual_generic || is_interface;
- if (is_interface && !is_virtual_generic)
+ if (is_interface)
offset = ((gint32)mono_method_get_imt_slot (method) - MONO_IMT_SIZE) * SIZEOF_VOID_P;
else
offset = G_STRUCT_OFFSET (MonoVTable, vtable) + ((mono_method_get_vtable_index (method)) * (SIZEOF_VOID_P));
public static int test_42_pass_16byte_struct_split () {
return pass_struct16 (null, null, null, null, null, new Struct16 () { a = 42 });
}
+
+ public interface IComparer2
+ {
+ Type foo<T> ();
+ }
+
+ public class AClass : IComparer2 {
+ public Type foo<T> () {
+ return typeof(T);
+ }
+ }
+
+ public static int test_0_delegate_to_virtual_generic_on_ifaces () {
+ IComparer2 c = new AClass ();
+
+ Func<Type> f = c.foo<string>;
+ return f () == typeof(string) ? 0 : 1;
+ }
+
}
#if __MOBILE__