--- old/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java 2017-09-15 02:01:12.306645577 -0400 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java 2017-09-15 02:01:10.434539240 -0400 @@ -1010,7 +1010,10 @@ /** Do we need an access method to reference private symbol? */ boolean needsPrivateAccess(Symbol sym) { - if (disableAccessors || disablePrivateAccessors) return false; + if (disableAccessors || disablePrivateAccessors || + target.hasNestmateAccess()) { + return false; + } if ((sym.flags() & PRIVATE) == 0 || sym.owner == currentClass) { return false; } else if (sym.name == names.init && sym.owner.isLocal()) { --- old/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java 2017-09-15 02:01:18.102974811 -0400 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java 2017-09-15 02:01:16.218867793 -0400 @@ -1878,7 +1878,7 @@ // TODO: Need to skip this for Modules - not sure where // that check really belongs, but this works. - if (target.hasNestmates()) { + if (target.hasNestmateAccess()) { acount += writeNestMembersIfNeeded(c); acount += writeMemberOfNestIfNeeded(c); } --- old/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java 2017-09-15 02:01:23.771296773 -0400 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java 2017-09-15 02:01:21.899190437 -0400 @@ -2061,7 +2061,7 @@ //where private boolean nonVirtualForPrivateAccess(Symbol sym) { - return !virtualizePrivateAccess && + return !(virtualizePrivateAccess || target.hasVirtualPrivateInvoke()) && ((sym.flags() & PRIVATE) != 0); } --- old/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java 2017-09-15 02:01:29.467620325 -0400 +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Target.java 2017-09-15 02:01:27.595513989 -0400 @@ -151,9 +151,16 @@ return Integer.toString(this.ordinal() - Target.JDK1_1.ordinal() + 1); } - /** Does the target VM support nestmates? + /** Does the target VM support nestmate access? */ - public boolean hasNestmates() { + public boolean hasNestmateAccess() { return compareTo(JDK1_10) >= 0; } + + /** Does the target VM support virtual private invocations? + */ + public boolean hasVirtualPrivateInvoke() { + return compareTo(JDK1_10) >= 0; + } + }