diff src/share/vm/jvmci/jvmciCompilerToVM.cpp @ 22584:f94fd2b4f794

CompilerToVM.getVtableIndexForInterfaceMethod check if receiver class is initialized (JDK-8136655)
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Fri, 18 Sep 2015 10:49:43 +0200
parents c9f8eec77163
children c016f4fc2bd7
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Fri Sep 18 10:10:55 2015 +0200
+++ b/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Fri Sep 18 10:49:43 2015 +0200
@@ -470,13 +470,19 @@
 C2V_VMENTRY(jint, getVtableIndexForInterfaceMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
   Klass* klass = CompilerToVM::asKlass(jvmci_type);
   Method* method = CompilerToVM::asMethod(jvmci_method);
+  err_msg error_message("");
   if (klass->is_interface()) {
-    ResourceMark rm;
-    THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Interface %s should be handled in Java code", klass->external_name()));
+    error_message = err_msg("Interface %s should be handled in Java code", klass->external_name());
   }
   if (!method->method_holder()->is_interface()) {
+    error_message = err_msg("Method %s is not held by an interface, this case should be handled in Java code", method->name_and_sig_as_C_string());
+  }
+  if (!InstanceKlass::cast(klass)->is_initialized()) {
+    error_message = err_msg("Class %s must be initialized", klass->external_name());
+  }
+  if (error_message.size() > 0) {
     ResourceMark rm;
-    THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Method %s is not held by an interface, this case should be handled in Java code", method->name_and_sig_as_C_string()));
+    THROW_MSG_0(vmSymbols::java_lang_InternalError(), error_message);
   }
   return LinkResolver::vtable_index_of_interface_method(klass, method);
 C2V_END