< prev index next > src/hotspot/share/cds/cdsEnumKlass.cpp
Print this page
if (fd.field_type() != T_OBJECT && fd.field_type() != T_ARRAY) {
guarantee(false, "static field %s::%s must be T_OBJECT or T_ARRAY",
ik->external_name(), fd.name()->as_C_string());
}
oop oop_field = mirror->obj_field(fd.offset());
+ // There should be no oops for ObjArrayKlass but InstanceKlass::array_klasses holds a list of ObjArrayKlass,
+ // therefore we need the super of the refined array klass.
+ Klass* oop_field_klass = oop_field->is_refined_objArray() ? oop_field->klass()->super() : oop_field->klass();
if (oop_field == nullptr) {
guarantee(false, "static field %s::%s must not be null",
ik->external_name(), fd.name()->as_C_string());
- } else if (oop_field->klass() != ik && oop_field->klass() != ik->array_klass_or_null()) {
+ } else if (oop_field_klass != ik && oop_field_klass != ik->array_klass_or_null()) {
guarantee(false, "static field %s::%s is of the wrong type",
ik->external_name(), fd.name()->as_C_string());
}
bool success = HeapShared::archive_reachable_objects_from(level, subgraph_info, oop_field);
assert(success, "VM should have exited with unarchivable objects for _level > 1");
< prev index next >