< prev index next >
src/share/vm/ci/ciEnv.cpp
Print this page
@@ -441,11 +441,11 @@
// In either case, if we can find the element type in the system dictionary,
// we must build an array type around it. The CI requires array klasses
// to be loaded if their element klasses are loaded, except when memory
// is exhausted.
if (sym->byte_at(0) == '[' &&
- (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L')) {
+ (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L' || sym->byte_at(1) == 'Q')) {
// We have an unloaded array.
// Build it on the fly if the element class exists.
TempNewSymbol elem_sym = SymbolTable::new_symbol(sym->as_utf8()+1,
sym->utf8_length()-1,
KILL_COMPILE_ON_FATAL_(fail_type));
@@ -456,13 +456,17 @@
cpool,
get_symbol(elem_sym),
require_local);
if (elem_klass != NULL && elem_klass->is_loaded()) {
// Now make an array for it
+ if (elem_klass->is_valuetype() && elem_klass->as_value_klass()->flatten_array()) {
+ return ciValueArrayKlass::make_impl(elem_klass);
+ } else {
return ciObjArrayKlass::make_impl(elem_klass);
}
}
+ }
if (found_klass() == NULL && !cpool.is_null() && cpool->has_preresolution()) {
// Look inside the constant pool for pre-resolved class entries.
for (int i = cpool->length() - 1; i >= 1; i--) {
if (cpool->tag_at(i).is_klass()) {
< prev index next >