< prev index next >
src/hotspot/share/opto/type.cpp
Print this page
*** 2362,2373 ****
const TypeInstPtr* tinst;
if (_elem->isa_narrowoop())
tinst = _elem->make_ptr()->isa_instptr();
else
tinst = _elem->isa_instptr();
! if (tinst)
! return tklass->as_instance_klass()->is_final();
const TypeAryPtr* tap;
if (_elem->isa_narrowoop())
tap = _elem->make_ptr()->isa_aryptr();
else
tap = _elem->isa_aryptr();
--- 2362,2380 ----
const TypeInstPtr* tinst;
if (_elem->isa_narrowoop())
tinst = _elem->make_ptr()->isa_instptr();
else
tinst = _elem->isa_instptr();
! if (tinst) {
! if (tklass->as_instance_klass()->is_final()) {
! if (tinst->is_valuetypeptr() && (tinst->ptr() == TypePtr::BotPTR || tinst->ptr() == TypePtr::TopPTR)) {
! return false;
! }
! return true;
! }
! return false;
! }
const TypeAryPtr* tap;
if (_elem->isa_narrowoop())
tap = _elem->make_ptr()->isa_aryptr();
else
tap = _elem->isa_aryptr();
*** 3447,3457 ****
const TypeOopPtr* etype = TypeOopPtr::make_from_klass_common(klass->as_array_klass()->element_klass(), false, try_for_exact);
bool null_free = klass->is_loaded() && klass->as_array_klass()->storage_properties().is_null_free();
if (null_free && etype->is_valuetypeptr()) {
etype = etype->join_speculative(TypePtr::NOTNULL)->is_oopptr();
}
! bool xk = etype->klass_is_exact();
const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS);
// We used to pass NotNull in here, asserting that the sub-arrays
// are all not-null. This is not true in generally, as code can
// slam NULLs down in the subarrays.
const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::BotPTR, arr0, klass, xk, Offset(0));
--- 3454,3464 ----
const TypeOopPtr* etype = TypeOopPtr::make_from_klass_common(klass->as_array_klass()->element_klass(), false, try_for_exact);
bool null_free = klass->is_loaded() && klass->as_array_klass()->storage_properties().is_null_free();
if (null_free && etype->is_valuetypeptr()) {
etype = etype->join_speculative(TypePtr::NOTNULL)->is_oopptr();
}
! bool xk = etype->klass_is_exact() && (!etype->is_valuetypeptr() || null_free);
const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS);
// We used to pass NotNull in here, asserting that the sub-arrays
// are all not-null. This is not true in generally, as code can
// slam NULLs down in the subarrays.
const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::BotPTR, arr0, klass, xk, Offset(0));
< prev index next >