# HG changeset patch # User Stefan Anzinger # Date 1442566183 -7200 # Node ID f94fd2b4f7942f1ed56874fcf27bef888be5b940 # Parent c9f8eec7716358e4abc6cbb0e8890fbba6ca86f0 CompilerToVM.getVtableIndexForInterfaceMethod check if receiver class is initialized (JDK-8136655) diff -r c9f8eec77163 -r f94fd2b4f794 jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/CompilerToVM.java --- a/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/CompilerToVM.java Fri Sep 18 10:10:55 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.hotspot/src/jdk/internal/jvmci/hotspot/CompilerToVM.java Fri Sep 18 10:49:43 2015 +0200 @@ -516,7 +516,7 @@ * v-table. * * @throws InternalError if {@code type} is an interface or {@code method} is not held by an - * interface + * interface or class represented by {@code type} is not initialized */ native int getVtableIndexForInterfaceMethod(HotSpotResolvedObjectTypeImpl type, HotSpotResolvedJavaMethodImpl method); diff -r c9f8eec77163 -r f94fd2b4f794 src/share/vm/jvmci/jvmciCompilerToVM.cpp --- 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