RFR: 8268192: LambdaMetafactory with invokespecial causes VerificationError [v2]
Dan Smith
dlsmith at openjdk.java.net
Tue Jun 8 15:30:34 UTC 2021
On Tue, 8 Jun 2021 15:27:04 GMT, Dan Smith <dlsmith at openjdk.org> wrote:
>> Small bug fix.
>
> Dan Smith has updated the pull request incrementally with one additional commit since the last revision:
>
> Clean up validation of implKind REF_invokeSpecial
src/java.base/share/classes/java/lang/invoke/AbstractValidatingLambdaMetafactory.java line 160:
> 158: // method with REF_invokeSpecial. Newer classes use REF_invokeVirtual or
> 159: // REF_invokeInterface, and we can use that instruction in the lambda class.
> 160: if (targetClass == implClass) {
The name `<init>` can't appear here. It's only used by `newInvokeSpecial`.
src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java line 189:
> 187: // to invoke directly. (javac prefers to avoid this situation by
> 188: // generating bridges in the target class)
> 189: useImplMethodHandle = (Modifier.isProtected(implInfo.getModifiers()) &&
Switched from `!Modifier.isPublic` to `Modifier.isProtected`. Access errors from the caller Lookup should already be caught by validation when the `implementation` is cracked. Protected and `super` calls are the only cases where the access from the nestmate is not equivalent.
-------------
PR: https://git.openjdk.java.net/jdk/pull/4403
More information about the core-libs-dev
mailing list