--- old/src/share/vm/opto/type.cpp 2017-01-09 14:53:33.050908603 +0100 +++ new/src/share/vm/opto/type.cpp 2017-01-09 14:53:32.906908610 +0100 @@ -3200,9 +3200,9 @@ } } return TypeInstPtr::make(TypePtr::BotPTR, klass, klass_is_exact, NULL, 0); - } else if (klass->is_obj_array_klass()) { - // Element is an object array. Recursively call ourself. - const TypeOopPtr *etype = TypeOopPtr::make_from_klass_common(klass->as_obj_array_klass()->element_klass(), false, try_for_exact); + } else if (klass->is_obj_array_klass() || klass->is_value_array_klass()) { + // Element is an object or value array. Recursively call ourself. + const TypeOopPtr* etype = TypeOopPtr::make_from_klass_common(klass->as_array_klass()->element_klass(), false, try_for_exact); 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 @@ -3245,10 +3245,10 @@ return TypeInstPtr::make(TypePtr::NotNull, klass, true, NULL, 0); } return TypeInstPtr::make(o); - } else if (klass->is_obj_array_klass()) { + } else if (klass->is_obj_array_klass() || klass->is_value_array_klass()) { // Element is an object array. Recursively call ourself. const TypeOopPtr *etype = - TypeOopPtr::make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); + TypeOopPtr::make_from_klass_raw(klass->as_array_klass()->element_klass()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // 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 @@ -5115,7 +5115,6 @@ ciKlass* TypeAryPtr::compute_klass(DEBUG_ONLY(bool verify)) const { // Compute _klass based on element type. ciKlass* k_ary = NULL; - const TypeInstPtr *tinst; const TypeAryPtr *tary; const Type* el = elem(); if (el->isa_narrowoop()) { @@ -5123,9 +5122,9 @@ } // Get element klass - if ((tinst = el->isa_instptr()) != NULL) { - // Compute array klass from element klass - k_ary = ciObjArrayKlass::make(tinst->klass()); + if (el->isa_instptr() || el->isa_valuetypeptr()) { + // Compute object array klass from element klass + k_ary = ciArrayKlass::make(el->is_oopptr()->klass()); } else if ((tary = el->isa_aryptr()) != NULL) { // Compute array klass from element klass ciKlass* k_elem = tary->klass();