< prev index next >

src/hotspot/share/interpreter/linkResolver.cpp

Print this page

        

@@ -1252,24 +1252,20 @@
                                             resolved_method->signature()));
       }
     }
 
     // Check that the class of objectref (the receiver) is the current class or interface,
-    // or a subtype of the current class or interface (the sender), or else they are
-    // nestmates, otherwise invokespecial throws IllegalAccessError.
+    // or a subtype of the current class or interface (the sender), otherwise invokespecial
+    // throws IllegalAccessError.
     // The verifier checks that the sender is a subtype of the class in the I/MR operand.
     // The verifier also checks that the receiver is a subtype of the sender, if the sender is
     // a class.  If the sender is an interface, the check has to be performed at runtime.
     InstanceKlass* cur_ik = InstanceKlass::cast(current_klass);
     InstanceKlass* sender = cur_ik->is_anonymous() ? cur_ik->host_klass() : cur_ik;
     if (sender->is_interface() && recv.not_null()) {
       Klass* receiver_klass = recv->klass();
-      if (!receiver_klass->is_subtype_of(sender) &&
-          (cur_ik == sender && // don't check nestmate access for anonymous classes
-           // Note: we check the resolved class here, not the receiver class - the latter
-           // may be a subtype of the resolved class defined outside the nest.
-           !sender->has_nestmate_access_to(InstanceKlass::cast(resolved_klass), THREAD))) {
+      if (!receiver_klass->is_subtype_of(sender)) {
         ResourceMark rm(THREAD);
         char buf[500];
         jio_snprintf(buf, sizeof(buf),
                      "Receiver class %s must be the current class or a subtype of interface %s",
                      receiver_klass->name()->as_C_string(),
< prev index next >