< prev index next >
src/hotspot/share/ci/ciEnv.cpp
Print this page
*** 851,860 ****
--- 851,873 ----
(bc == Bytecodes::_invokestatic
? m->method_holder()->is_not_initialized()
: !m->method_holder()->is_loaded())) {
m = NULL;
}
+ if (m != NULL && EnableValhalla) {
+ // Cannot call a method if its holder class has an inconsistent
+ // declaration of ValueTypes vs the caller's class.
+ InstanceKlass* caller_klass = _task->method()->method_holder();
+ InstanceKlass* callee_klass = m->method_holder();
+ Thread* THREAD = Thread::current();
+ InstanceKlass::check_signature_for_value_types_consistency(
+ m->signature(), caller_klass, callee_klass, THREAD);
+ if (HAS_PENDING_EXCEPTION) {
+ CLEAR_PENDING_EXCEPTION;
+ m = NULL;
+ }
+ }
#ifdef ASSERT
if (m != NULL && ReplayCompiles && !ciReplay::is_loaded(m)) {
m = NULL;
}
#endif
< prev index next >