Mercurial > hg > graal-jvmci-8
comparison src/share/vm/ci/ciEnv.cpp @ 1336:0c3f888b7636
6626217: Fixed loader constraint array handling
Summary: Loader constraints track array elements, not arrays themselves.
Reviewed-by: dcubed, kevinw
author | acorn |
---|---|
date | Tue, 19 Jan 2010 16:03:09 -0500 |
parents | 148e5441d916 |
children | f5dd08ad65df |
comparison
equal
deleted
inserted
replaced
1334:b5d78a3b8843 | 1336:0c3f888b7636 |
---|---|
371 } | 371 } |
372 | 372 |
373 if (found_klass != NULL) { | 373 if (found_klass != NULL) { |
374 // Found it. Build a CI handle. | 374 // Found it. Build a CI handle. |
375 return get_object(found_klass)->as_klass(); | 375 return get_object(found_klass)->as_klass(); |
376 } | |
377 | |
378 // If we fail to find an array klass, look again for its element type. | |
379 // The element type may be available either locally or via constraints. | |
380 // In either case, if we can find the element type in the system dictionary, | |
381 // we must build an array type around it. The CI requires array klasses | |
382 // to be loaded if their element klasses are loaded, except when memory | |
383 // is exhausted. | |
384 if (sym->byte_at(0) == '[' && | |
385 (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L')) { | |
386 // We have an unloaded array. | |
387 // Build it on the fly if the element class exists. | |
388 symbolOop elem_sym = oopFactory::new_symbol(sym->as_utf8()+1, | |
389 sym->utf8_length()-1, | |
390 KILL_COMPILE_ON_FATAL_(fail_type)); | |
391 // Get element ciKlass recursively. | |
392 ciKlass* elem_klass = | |
393 get_klass_by_name_impl(accessing_klass, | |
394 get_object(elem_sym)->as_symbol(), | |
395 require_local); | |
396 if (elem_klass != NULL && elem_klass->is_loaded()) { | |
397 // Now make an array for it | |
398 return ciObjArrayKlass::make_impl(elem_klass); | |
399 } | |
400 } | 376 } |
401 | 377 |
402 if (require_local) return NULL; | 378 if (require_local) return NULL; |
403 // Not yet loaded into the VM, or not governed by loader constraints. | 379 // Not yet loaded into the VM, or not governed by loader constraints. |
404 // Make a CI representative for it. | 380 // Make a CI representative for it. |