[lworld] RFR: 8359370: [lworld] allow instance fields of identity classes to be readable in the prologue phase

Chen Liang liach at openjdk.org
Mon Aug 18 18:19:20 UTC 2025


On Fri, 15 Aug 2025 21:38:08 GMT, Vicente Romero <vromero at openjdk.org> wrote:

> Before this fix only strict fields were readable in the prologue phase. The proposed fix should allow any instance fields of identity classes to be readable in the prologue phase. This implies changes in flow analysis as before we were only tracking final and strict fields. There is also some "cooperation" needed in the code to detect cases when reading a field is not allowed in the prologue phase. For example some methods in Resolve don't have all the needed information at the moment they are dealing with some ASTs and part of the processing needs to be done in Attr
> 
> TIA

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java line 1259:

> 1257:                     for (JCTree stat : tree.body.stats) {
> 1258:                         prologueCode.add(stat);
> 1259:                         // gather all the stats in the body until a `super` or `this` invocation is found

I think this comment should explain that super/this invocation is included because its arguments are restricted too.

test/langtools/tools/javac/SuperInit/EarlyIndirectOuterCapture.java line 21:

> 19:         class InnerInnerOuter extends EarlyIndirectOuterCapture {   // not accessible
> 20:             InnerInnerOuter() {
> 21:                 super(new InnerSuperclass() { }); // should this be accepted?, InnerSuperclass is not an inner class of InnerInnerOuter

Probably yes, I think our agreement last time is that local/anonymous classes' captures, including the "outer this", are synthetic.

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/1523#discussion_r2280164233
PR Review Comment: https://git.openjdk.org/valhalla/pull/1523#discussion_r2280171982


More information about the valhalla-dev mailing list