RFR: 8334252: Verifier error for lambda declared in early construction context
Archie Cobbs
acobbs at openjdk.org
Thu Jun 13 17:43:27 UTC 2024
When a lambda is declared in an early construction context, any reference to an outer instance must be acquired through the synthetic constructor rather than the synthetic outer instance field, because 'this' is not available yet.
The code in `LambdaToMethod.java` has logic for this using the `typesUnderConstruction` field, but that logic assumes that the only early construction context that can exist is within a `super()` or `this()` parameter list. While this was true previously, with the "flexible constructors" JEP 482, this is no longer the case.
So the fix is to update the logic for managing `typesUnderConstruction` to also include any statements prior to `super()` or `this()`.
-------------
Commit messages:
- Update LambdaToMethod.typesUnderConstruction to include new constructor prologue.
Changes: https://git.openjdk.org/jdk/pull/19707/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19707&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8334252
Stats: 63 lines in 2 files changed: 50 ins; 6 del; 7 mod
Patch: https://git.openjdk.org/jdk/pull/19707.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/19707/head:pull/19707
PR: https://git.openjdk.org/jdk/pull/19707
More information about the compiler-dev
mailing list