@@ -2066,7 +2066,6 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2066
2066
}
2067
2067
break ;
2068
2068
case TYPE_ATTRIBUTE_EXPLICIT_LAYOUT : {
2069
- guint8 * ref_bitmap ;
2070
2069
2071
2070
real_size = 0 ;
2072
2071
for (i = 0 ; i < top ; i ++ ) {
@@ -2112,8 +2111,9 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2112
2111
real_size = MAX (real_size , size + field_offsets [i ]);
2113
2112
}
2114
2113
2115
- if (klass -> has_references ) {
2116
- ref_bitmap = g_new0 (guint8 , real_size / sizeof (gpointer ));
2114
+ if (has_references ) {
2115
+ MonoType * * ref_bitmap ;
2116
+ ref_bitmap = g_new0 (MonoType * , real_size / sizeof (gpointer ));
2117
2117
2118
2118
/* Check for overlapping reference and non-reference fields */
2119
2119
for (i = 0 ; i < top ; i ++ ) {
@@ -2127,7 +2127,7 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2127
2127
continue ;
2128
2128
ftype = mono_type_get_underlying_type (field -> type );
2129
2129
if (MONO_TYPE_IS_REFERENCE (ftype ))
2130
- ref_bitmap [field_offsets [i ] / sizeof (gpointer )] = 1 ;
2130
+ ref_bitmap [field_offsets [i ] / sizeof (gpointer )] = ftype ;
2131
2131
}
2132
2132
for (i = 0 ; i < top ; i ++ ) {
2133
2133
field = & klass -> fields [i ];
@@ -2138,8 +2138,8 @@ mono_class_layout_fields (MonoClass *klass, int base_instance_size, int packing_
2138
2138
continue ;
2139
2139
2140
2140
// FIXME: Too much code does this
2141
- #if 0
2142
- if (!MONO_TYPE_IS_REFERENCE (field -> type ) && ref_bitmap [field_offsets [i ] / sizeof (gpointer )]) {
2141
+ #if 1
2142
+ 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 )]) ) {
2143
2143
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 ]);
2144
2144
}
2145
2145
#endif
0 commit comments