< prev index next >
src/hotspot/share/classfile/classFileParser.cpp
Print this page
*** 4072,4081 ****
--- 4072,4082 ----
const bool has_nonstatic_value_fields = nonstatic_value_type_count > 0;
if (is_value_type() && (!has_nonstatic_fields)) {
// There are a number of fixes required throughout the type system and JIT
throwValueTypeLimitation(THREAD_AND_LOCATION, "Value Types do not support zero instance size yet");
+ return;
}
// Prepare list of oops for oop map generation.
//
// "offset" and "count" lists are describing the set of contiguous oop
*** 4529,4539 ****
info->static_field_size = static_field_size;
info->nonstatic_field_size = nonstatic_field_size;
info->has_nonstatic_fields = has_nonstatic_fields;
}
! void ClassFileParser::set_precomputed_flags(InstanceKlass* ik) {
assert(ik != NULL, "invariant");
const Klass* const super = ik->super();
// Check if this klass has an empty finalize method (i.e. one with return bytecode only),
--- 4530,4540 ----
info->static_field_size = static_field_size;
info->nonstatic_field_size = nonstatic_field_size;
info->has_nonstatic_fields = has_nonstatic_fields;
}
! void ClassFileParser::set_precomputed_flags(InstanceKlass* ik, TRAPS) {
assert(ik != NULL, "invariant");
const Klass* const super = ik->super();
// Check if this klass has an empty finalize method (i.e. one with return bytecode only),
*** 4562,4571 ****
--- 4563,4576 ----
#endif
// Check if this klass supports the java.lang.Cloneable interface
if (SystemDictionary::Cloneable_klass_loaded()) {
if (ik->is_subtype_of(SystemDictionary::Cloneable_klass())) {
+ if (ik->is_value()) {
+ throwValueTypeLimitation(THREAD_AND_LOCATION, "Value Types do not support Cloneable");
+ return;
+ }
ik->set_is_cloneable();
}
}
// Check if this klass has a vanilla default constructor
*** 5738,5748 ****
if (oop_map_blocks->nonstatic_oop_map_count > 0) {
oop_map_blocks->copy(ik->start_of_nonstatic_oop_maps());
}
// Fill in has_finalizer, has_vanilla_constructor, and layout_helper
! set_precomputed_flags(ik);
// check if this class can access its super class
check_super_class_access(ik, CHECK);
// check if this class can access its superinterfaces
--- 5743,5753 ----
if (oop_map_blocks->nonstatic_oop_map_count > 0) {
oop_map_blocks->copy(ik->start_of_nonstatic_oop_maps());
}
// Fill in has_finalizer, has_vanilla_constructor, and layout_helper
! set_precomputed_flags(ik, CHECK);
// check if this class can access its super class
check_super_class_access(ik, CHECK);
// check if this class can access its superinterfaces
< prev index next >