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

Reply via email to