changeset 5799:769557390c43

8029415: java/lang/reflect/Method/invoke/TestPrivateInterfaceMethodReflect.java fails on all platforms with hs25-b61 Summary: Check first that a class is not a dynamically-generated bytecode associated with 1.4 reflection implementation, to emitting an ICCE of an invokespecial IMR of a method in an indirect superinterface. Reviewed-by: acorn, hseigel Contributed-by: lois.foltan@oracle.com
author hseigel
date Fri, 06 Dec 2013 11:33:10 -0500
parents e84d2afb2fb0
children a150ff9e8efc
files src/share/vm/interpreter/linkResolver.cpp
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/interpreter/linkResolver.cpp	Tue Dec 03 13:56:10 2013 -0800
+++ b/src/share/vm/interpreter/linkResolver.cpp	Fri Dec 06 11:33:10 2013 -0500
@@ -943,8 +943,17 @@
     Klass *klass_to_check = !InstanceKlass::cast(current_klass())->is_anonymous() ?
                                   current_klass() :
                                   InstanceKlass::cast(current_klass())->host_klass();
+    // As of the fix for 4486457 we disable verification for all of the
+    // dynamically-generated bytecodes associated with the 1.4
+    // reflection implementation, not just those associated with
+    // sun/reflect/SerializationConstructorAccessor.
+    bool is_reflect = JDK_Version::is_gte_jdk14x_version() &&
+                      UseNewReflection &&
+                      klass_to_check->is_subclass_of(
+                        SystemDictionary::reflect_MagicAccessorImpl_klass());
 
-    if (!InstanceKlass::cast(klass_to_check)->is_same_or_direct_interface(resolved_klass())) {
+    if (!is_reflect &&
+        !InstanceKlass::cast(klass_to_check)->is_same_or_direct_interface(resolved_klass())) {
       ResourceMark rm(THREAD);
       char buf[200];
       jio_snprintf(buf, sizeof(buf),