--- old/src/share/vm/ci/ciTypeFlow.hpp 2017-01-09 14:53:25.454908957 +0100 +++ new/src/share/vm/ci/ciTypeFlow.hpp 2017-01-09 14:53:25.342908962 +0100 @@ -341,14 +341,16 @@ type_at_tos()->is_array_klass(), "must be array type"); pop(); } - // pop_objArray and pop_typeArray narrow the tos to ciObjArrayKlass - // or ciTypeArrayKlass (resp.). In the rare case that an explicit + // pop_valueOrobjArray and pop_typeArray narrow the tos to ciObjArrayKlass, + // ciValueArrayKlass or ciTypeArrayKlass (resp.). In the rare case that an explicit // null is popped from the stack, we return NULL. Caller beware. - ciObjArrayKlass* pop_objArray() { + ciArrayKlass* pop_objOrValueArray() { ciType* array = pop_value(); if (array == null_type()) return NULL; - assert(array->is_obj_array_klass(), "must be object array type"); - return array->as_obj_array_klass(); + // Value type arrays may contain oop or flattened representation + assert(array->is_obj_array_klass() || (ValueArrayFlatten && array->is_value_array_klass()), + "must be value or object array type"); + return array->as_array_klass(); } ciTypeArrayKlass* pop_typeArray() { ciType* array = pop_value(); @@ -362,7 +364,7 @@ void do_null_assert(ciKlass* unloaded_klass); // Helper convenience routines. - void do_aaload(ciBytecodeStream* str); + void do_aload(ciBytecodeStream* str); void do_checkcast(ciBytecodeStream* str); void do_getfield(ciBytecodeStream* str); void do_getstatic(ciBytecodeStream* str);