Mercurial > hg > graal-jvmci-8
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)) |