# HG changeset patch # User twisti # Date 1372830683 25200 # Node ID bed0eddd82cd87b6785ae5282c1932d5f2222d15 # Parent b800986664f45dc36ed05d9c782d3d604927f0c3# Parent c1bd7b5bdc7045c2f518ea61889c19af2d94143f Merge diff -r b800986664f4 -r bed0eddd82cd src/share/vm/prims/methodHandles.cpp --- a/src/share/vm/prims/methodHandles.cpp Tue Jul 02 20:42:12 2013 -0400 +++ b/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, diff -r b800986664f4 -r bed0eddd82cd src/share/vm/runtime/reflection.cpp --- a/src/share/vm/runtime/reflection.cpp Tue Jul 02 20:42:12 2013 -0400 +++ b/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; }