comparison 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
comparison
equal deleted inserted replaced
22583:c9f8eec77163 22584:f94fd2b4f794
468 C2V_END 468 C2V_END
469 469
470 C2V_VMENTRY(jint, getVtableIndexForInterfaceMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method)) 470 C2V_VMENTRY(jint, getVtableIndexForInterfaceMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
471 Klass* klass = CompilerToVM::asKlass(jvmci_type); 471 Klass* klass = CompilerToVM::asKlass(jvmci_type);
472 Method* method = CompilerToVM::asMethod(jvmci_method); 472 Method* method = CompilerToVM::asMethod(jvmci_method);
473 err_msg error_message("");
473 if (klass->is_interface()) { 474 if (klass->is_interface()) {
475 error_message = err_msg("Interface %s should be handled in Java code", klass->external_name());
476 }
477 if (!method->method_holder()->is_interface()) {
478 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());
479 }
480 if (!InstanceKlass::cast(klass)->is_initialized()) {
481 error_message = err_msg("Class %s must be initialized", klass->external_name());
482 }
483 if (error_message.size() > 0) {
474 ResourceMark rm; 484 ResourceMark rm;
475 THROW_MSG_0(vmSymbols::java_lang_InternalError(), err_msg("Interface %s should be handled in Java code", klass->external_name())); 485 THROW_MSG_0(vmSymbols::java_lang_InternalError(), error_message);
476 }
477 if (!method->method_holder()->is_interface()) {
478 ResourceMark rm;
479 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()));
480 } 486 }
481 return LinkResolver::vtable_index_of_interface_method(klass, method); 487 return LinkResolver::vtable_index_of_interface_method(klass, method);
482 C2V_END 488 C2V_END
483 489
484 C2V_VMENTRY(jobject, resolveMethod, (JNIEnv *, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type)) 490 C2V_VMENTRY(jobject, resolveMethod, (JNIEnv *, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type))