[jdk19] Integrated: 8290417: CDS cannot archive lamda proxy with useImplMethodHandle

Ioi Lam iklam at openjdk.org
Tue Jul 19 04:40:06 UTC 2022


On Mon, 18 Jul 2022 03:15:02 GMT, Ioi Lam <iklam at 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 <iklam at 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


More information about the core-libs-dev mailing list