This didn't cause any harm, but resulted in a bit of unnecessary GC work and
memory usage.
continue;
if (mono_field_is_deleted (field))
continue;
+ // Special static fields do not need a domain-level static slot
+ if (mono_class_field_is_special_static (field))
+ continue;
if (mono_type_has_exceptions (field->type)) {
mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, NULL);
continue;
if (!(field->type->attrs & (FIELD_ATTRIBUTE_STATIC | FIELD_ATTRIBUTE_HAS_FIELD_RVA)))
continue;
+ // Special static fields don't have a domain-level static slot
+ if (mono_class_field_is_special_static (field))
+ continue;
field_ptr = (const char*)addr + field->offset;
if (field->type->byref)
break;
- if (static_fields && field->offset == -1)
- /* special static */
+ // Special static fields do not have a domain-level static slot
+ if (static_fields && mono_class_field_is_special_static (field))
continue;
pos = field->offset / sizeof (gpointer);