RFR: JDK-8274848: LambdaMetaFactory::metafactory on REF_invokeSpecial impl method has incorrect behavior

Mandy Chung mchung at openjdk.java.net
Mon Oct 11 21:04:15 UTC 2021


Classes compiled prior to the nestmate support will generate `REF_invokeSpecial` if the implementation method is a private instance method.   Since a lambda proxy class is a hidden class, a nestmate of the host class, it can invoke the private implementation method but it has to use `REF_invokeVirtual` or `REF_invokeInterface`.   In order to support the old classes running on the new runtime, LMF implementation adjusts the reference kind from `REF_invokeSpecial` to `REF_invokeVirtual/REF_invokeInterface`. 

This PR fixes the check properly to ensure the adjustment is only made if the implementation method is private method in the host class.

-------------

Commit messages:
 - JDK-8274848: LambdaMetaFactory::metafactory on REF_invokeSpecial impl method has incorrect behavior

Changes: https://git.openjdk.java.net/jdk/pull/5901/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5901&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8274848
  Stats: 379 lines in 4 files changed: 378 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/5901.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/5901/head:pull/5901

PR: https://git.openjdk.java.net/jdk/pull/5901


More information about the jdk-dev mailing list