[Nestmates] RFR (XS) 8193112: [Nestmates] Remove nestmate access check from invokespecial interface invocation check
David Holmes
david.holmes at oracle.com
Wed Dec 6 04:37:08 UTC 2017
bug: https://bugs.openjdk.java.net/browse/JDK-8193112
webrev: http://cr.openjdk.java.net/~dholmes/8193112/webrev/
While working on test coverage I discovered this leftover code fragment
from the initial invokespecial changes. The nestmate access check is not
reachable in this context, with correctly verified code, and so the
change is reverted to the original code.
Thanks,
David
-- old/src/hotspot/share/interpreter/linkResolver.cpp 2017-12-05
23:33:03.756495932 -0500
+++ new/src/hotspot/share/interpreter/linkResolver.cpp 2017-12-05
23:33:01.616373994 -0500
@@ -1146,8 +1146,7 @@
return NULL;
}
- // check that invokespecial's interface method reference is in a
direct superinterface,
- // unless we are dealing with nestmates.
+ // check that invokespecial's interface method reference is in an
indirect superinterface
Klass* current_klass = link_info.current_klass();
if (current_klass != NULL && resolved_klass->is_interface()) {
InstanceKlass* ck = InstanceKlass::cast(current_klass);
@@ -1159,13 +1158,11 @@
SystemDictionary::reflect_MagicAccessorImpl_klass());
if (!is_reflect &&
- !klass_to_check->is_same_or_direct_interface(resolved_klass) &&
- (ck == klass_to_check && // don't check nestmate access for
anonymous classes
-
!klass_to_check->has_nestmate_access_to(InstanceKlass::cast(resolved_klass),
THREAD))) {
+ !klass_to_check->is_same_or_direct_interface(resolved_klass)) {
ResourceMark rm(THREAD);
char buf[200];
jio_snprintf(buf, sizeof(buf),
- "Interface method reference: %s, is not in a direct
superinterface of %s",
+ "Interface method reference: %s, is in an indirect
superinterface of %s",
Method::name_and_sig_as_C_string(resolved_klass,
resolved_method->name(),
resolved_method->signature()),
More information about the valhalla-dev
mailing list