Merge
authortwisti
Tue, 02 Jul 2013 22:51:23 -0700
changeset 18509 cde003d396e1
parent 18507 61bfc8995bb3 (current diff)
parent 18508 3b95160639d8 (diff)
child 18510 b4df166cc411
Merge
--- a/hotspot/src/share/vm/prims/methodHandles.cpp	Tue Jul 02 20:42:12 2013 -0400
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp	Tue Jul 02 22:51:23 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,
--- a/hotspot/src/share/vm/runtime/reflection.cpp	Tue Jul 02 20:42:12 2013 -0400
+++ b/hotspot/src/share/vm/runtime/reflection.cpp	Tue Jul 02 22:51:23 2013 -0700
@@ -458,7 +458,7 @@
   // doesn't have a classloader.
   if ((current_class == NULL) ||
       (current_class == new_class) ||
-      (InstanceKlass::cast(new_class)->is_public()) ||
+      (new_class->is_public()) ||
       is_same_class_package(current_class, new_class)) {
     return true;
   }