diff src/share/vm/prims/methodHandles.cpp @ 11081:c1bd7b5bdc70

8017571: JSR292: JVM crashing on assert "cast to instanceKlass" while producing MethodHandle for array methods with MethodHandle.findVirtual Reviewed-by: kvn
author twisti
date Tue, 02 Jul 2013 20:27:00 -0700
parents b7fa10a3a69a
children 6b0fd0964b87 b2e698d2276c
line wrap: on
line diff
--- a/src/share/vm/prims/methodHandles.cpp	Tue Jul 02 07:51:31 2013 +0200
+++ b/src/share/vm/prims/methodHandles.cpp	Tue Jul 02 20:27:00 2013 -0700
@@ -1137,7 +1137,12 @@
   if (VerifyMethodHandles && caller_jh != NULL &&
       java_lang_invoke_MemberName::clazz(mname()) != NULL) {
     Klass* reference_klass = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname()));
-    if (reference_klass != NULL) {
+    if (reference_klass != NULL && reference_klass->oop_is_objArray()) {
+      reference_klass = ObjArrayKlass::cast(reference_klass)->bottom_klass();
+    }
+
+    // Reflection::verify_class_access can only handle instance classes.
+    if (reference_klass != NULL && reference_klass->oop_is_instance()) {
       // Emulate LinkResolver::check_klass_accessability.
       Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh));
       if (!Reflection::verify_class_access(caller,