@@ -2008,7 +2008,6 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2008
2008
}
2009
2009
break ;
2010
2010
case TYPE_ATTRIBUTE_EXPLICIT_LAYOUT : {
2011
- guint8 * ref_bitmap ;
2012
2011
2013
2012
real_size = 0 ;
2014
2013
for (i = 0 ; i < top ; i ++ ) {
@@ -2054,8 +2053,9 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2054
2053
real_size = MAX (real_size , size + field_offsets [i ]);
2055
2054
}
2056
2055
2057
- if (klass -> has_references ) {
2058
- ref_bitmap = g_new0 (guint8 , real_size / sizeof (gpointer ));
2056
+ if (has_references ) {
2057
+ MonoType * * ref_bitmap ;
2058
+ ref_bitmap = g_new0 (MonoType * , real_size / sizeof (gpointer ));
2059
2059
2060
2060
/* Check for overlapping reference and non-reference fields */
2061
2061
for (i = 0 ; i < top ; i ++ ) {
@@ -2069,7 +2069,7 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2069
2069
continue ;
2070
2070
ftype = mono_type_get_underlying_type (field -> type );
2071
2071
if (MONO_TYPE_IS_REFERENCE (ftype ))
2072
- ref_bitmap [field_offsets [i ] / sizeof (gpointer )] = 1 ;
2072
+ ref_bitmap [field_offsets [i ] / sizeof (gpointer )] = ftype ;
2073
2073
}
2074
2074
for (i = 0 ; i < top ; i ++ ) {
2075
2075
field = & klass -> fields [i ];
@@ -2080,8 +2080,8 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2080
2080
continue ;
2081
2081
2082
2082
// FIXME: Too much code does this
2083
- #if 0
2084
- if (!MONO_TYPE_IS_REFERENCE (field -> type ) && ref_bitmap [field_offsets [i ] / sizeof (gpointer )]) {
2083
+ #if 1
2084
+ if (!MONO_TYPE_IS_REFERENCE (field -> type ) && ref_bitmap [ field_offsets [ i ] / sizeof ( gpointer )] && ! mono_metadata_type_equal ( field -> type , ref_bitmap [field_offsets [i ] / sizeof (gpointer )]) ) {
2085
2085
mono_class_set_type_load_failure (klass , "Could not load type '%s' because it contains an object field at offset %d that is incorrectly aligned or overlapped by a non-object field." , klass -> name , field_offsets [i ]);
2086
2086
}
2087
2087
#endif
0 commit comments