< 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 >