diff -r 7b5c930b878c -r 614068b0ddd7 src/hotspot/share/jvmci/jvmciCompilerToVM.cpp --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Wed Nov 29 13:58:28 2017 +0100 +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp Fri Dec 22 18:34:36 2017 +0100 @@ -749,8 +749,13 @@ C2V_END C2V_VMENTRY(jobject, getImplementor, (JNIEnv *, jobject, jobject jvmci_type)) - InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type); - oop implementor = CompilerToVM::get_jvmci_type(klass->implementor(), CHECK_NULL); + Klass* klass = CompilerToVM::asKlass(jvmci_type); + if (!klass->is_interface()) { + THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), + err_msg("Expected interface type, got %s", klass->external_name())); + } + InstanceKlass* iklass = InstanceKlass::cast(klass); + oop implementor = CompilerToVM::get_jvmci_type(iklass->implementor(), CHECK_NULL); return JNIHandles::make_local(THREAD, implementor); C2V_END @@ -989,8 +994,12 @@ C2V_END C2V_VMENTRY(jobject, getClassInitializer, (JNIEnv *, jobject, jobject jvmci_type)) - InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type); - oop result = CompilerToVM::get_jvmci_method(klass->class_initializer(), CHECK_NULL); + Klass* klass = CompilerToVM::asKlass(jvmci_type); + if (!klass->is_instance_klass()) { + return NULL; + } + InstanceKlass* iklass = InstanceKlass::cast(klass); + oop result = CompilerToVM::get_jvmci_method(iklass->class_initializer(), CHECK_NULL); return JNIHandles::make_local(THREAD, result); C2V_END