mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 03:54:33 +02:00
6626217: Fixed loader constraint array handling
Loader constraints track array elements, not arrays themselves. Reviewed-by: dcubed, kevinw
This commit is contained in:
parent
d19aa4e217
commit
8101e71766
4 changed files with 31 additions and 68 deletions
|
@ -375,30 +375,6 @@ ciKlass* ciEnv::get_klass_by_name_impl(ciKlass* accessing_klass,
|
|||
return get_object(found_klass)->as_klass();
|
||||
}
|
||||
|
||||
// If we fail to find an array klass, look again for its element type.
|
||||
// The element type may be available either locally or via constraints.
|
||||
// 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')) {
|
||||
// We have an unloaded array.
|
||||
// Build it on the fly if the element class exists.
|
||||
symbolOop elem_sym = oopFactory::new_symbol(sym->as_utf8()+1,
|
||||
sym->utf8_length()-1,
|
||||
KILL_COMPILE_ON_FATAL_(fail_type));
|
||||
// Get element ciKlass recursively.
|
||||
ciKlass* elem_klass =
|
||||
get_klass_by_name_impl(accessing_klass,
|
||||
get_object(elem_sym)->as_symbol(),
|
||||
require_local);
|
||||
if (elem_klass != NULL && elem_klass->is_loaded()) {
|
||||
// Now make an array for it
|
||||
return ciObjArrayKlass::make_impl(elem_klass);
|
||||
}
|
||||
}
|
||||
|
||||
if (require_local) return NULL;
|
||||
// Not yet loaded into the VM, or not governed by loader constraints.
|
||||
// Make a CI representative for it.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue