| JDK 19 |
|---|
| 19 b10Fixed |
|
Duplicate :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
Support unresolved dynamic constants in CI.
ciConstant ciEnv::get_constant_by_index_impl(const constantPoolHandle& cpool,
int pool_index, int cache_index,
ciInstanceKlass* accessor) {
...
} else if (tag.is_dynamic_constant()) {
return ciConstant();
...
Right now, unresolved JVM_CONSTANT_Dynamic CP entries bail out compilations (both C1 and C2):
201 410 91 b 1 compiler.runtime.TestConstantsInError$Test_CD_9/0x0000000800c11000::test (3 bytes)
202 compilation bailout: could not resolve a constant
203 410 91 b 1 compiler.runtime.TestConstantsInError$Test_CD_9/0x0000000800c11000::test (3 bytes) COMPILE SKIPPED: could not resolve a constant (retry at different tier)
296 64 b Test_CD/0x0000000800c0a400::test (3 bytes)
296 64 b Test_CD/0x0000000800c0a400::test (3 bytes) COMPILE SKIPPED: cannot parse method (retry at different tier)
src/hotspot/share/c1/c1_GraphBuilder.cpp:
void GraphBuilder::load_constant() {
ciConstant con = stream()->get_constant();
if (con.basic_type() == T_ILLEGAL) {
// FIXME: an unresolved Dynamic constant can get here,
// and that should not terminate the whole compilation.
BAILOUT("could not resolve a constant");
src/hotspot/share/ci/ciTypeFlow.cpp:
// ciTypeFlow::StateVector::do_ldc
void ciTypeFlow::StateVector::do_ldc(ciBytecodeStream* str) {
ciConstant con = str->get_constant();
if (con.is_valid()) {
...
} else {
if (str->is_unresolved_klass_in_error()) {
trap(str, NULL, Deoptimization::make_trap_request(Deoptimization::Reason_unhandled,
Deoptimization::Action_none));
} else {
// OutOfMemoryError in the CI while loading constant
push_null();
outer()->record_failure("ldc did not link");
}
|