On Mon, 18 Jul 2022 03:15:02 GMT, Ioi Lam <ik...@openjdk.org> wrote: > Since the impact of this bug can be big, and the fix is simple and low risk > (just avoids doing optimizations), I'd like to put this into JDK 19 before > RDP2 (Jul 21). > > CDS cannot handle Lambda proxy classes that are generated in the > useImplMethodHandle mode. This could happen with classfiles generated by JDK > 8 or JDK 11 that access protected methods in a base class from a different > package. E.g., > > > class pkg1.Base { > protected void doit(String s) { > System.out.println(s); > } > } > class pkg2.Child extends pkg1.Base { > void test() { > Optional<String> opt = Optional.of("foo"); > opt.ifPresent(this::doit); > } > } > > > More details of useImplMethodHandle can be found here: > https://github.com/openjdk/jdk/blob/522b65743ca10fcba0a27d25b8fa11319999e228/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java#L183-L191 > > More details about the condition that triggers the error can be found in the > test file Child.jcod.
This pull request has now been integrated. Changeset: 4dc421ca Author: Ioi Lam <ik...@openjdk.org> URL: https://git.openjdk.org/jdk19/commit/4dc421caa02caedd7061ede6a5ec44dbb6ec738e Stats: 435 lines in 7 files changed: 433 ins; 0 del; 2 mod 8290417: CDS cannot archive lamda proxy with useImplMethodHandle Reviewed-by: dholmes, ccheung, mchung ------------- PR: https://git.openjdk.org/jdk19/pull/146