< prev index next >
src/hotspot/share/interpreter/interpreterRuntime.cpp
Print this page
@@ -367,11 +367,19 @@
instanceHandle mirror_h(THREAD, (instanceOop)mirror);
InstanceKlass* klass = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
int offset = klass->field_offset(index);
assert(mirror->obj_field(offset) == NULL,"Field must not be initialized twice");
- Klass* field_k = klass->get_value_field_klass(index);
+ Klass* field_k = klass->get_value_field_klass_or_null(index);
+ if (field_k == NULL) {
+ field_k = SystemDictionary::resolve_or_fail(klass->field_signature(index),
+ Handle(THREAD, klass->class_loader()),
+ Handle(THREAD, klass->protection_domain()), true, CHECK);
+ assert(field_k != NULL, "Sanity check");
+ assert(field_k->access_flags().is_value_type(), "Value type expected");
+ klass->set_value_field_klass(index, field_k);
+ }
ValueKlass* field_vklass = ValueKlass::cast(field_k);
// allocate instance, because it is going to be assigned to a static field
// it must not be a buffered value
instanceOop res = field_vklass->allocate_instance(CHECK);
instanceHandle res_h(THREAD, res);
< prev index next >