< prev index next >

src/hotspot/share/ci/ciEnv.cpp

Print this page

@@ -851,10 +851,23 @@
           (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 >