comparison 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
comparison
equal deleted inserted replaced
11079:738e04fb1232 11081:c1bd7b5bdc70
1135 // The trusted Java code that calls this method should already have performed 1135 // The trusted Java code that calls this method should already have performed
1136 // access checks on behalf of the given caller. But, we can verify this. 1136 // access checks on behalf of the given caller. But, we can verify this.
1137 if (VerifyMethodHandles && caller_jh != NULL && 1137 if (VerifyMethodHandles && caller_jh != NULL &&
1138 java_lang_invoke_MemberName::clazz(mname()) != NULL) { 1138 java_lang_invoke_MemberName::clazz(mname()) != NULL) {
1139 Klass* reference_klass = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); 1139 Klass* reference_klass = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname()));
1140 if (reference_klass != NULL) { 1140 if (reference_klass != NULL && reference_klass->oop_is_objArray()) {
1141 reference_klass = ObjArrayKlass::cast(reference_klass)->bottom_klass();
1142 }
1143
1144 // Reflection::verify_class_access can only handle instance classes.
1145 if (reference_klass != NULL && reference_klass->oop_is_instance()) {
1141 // Emulate LinkResolver::check_klass_accessability. 1146 // Emulate LinkResolver::check_klass_accessability.
1142 Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh)); 1147 Klass* caller = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(caller_jh));
1143 if (!Reflection::verify_class_access(caller, 1148 if (!Reflection::verify_class_access(caller,
1144 reference_klass, 1149 reference_klass,
1145 true)) { 1150 true)) {