On Thu, 28 Aug 2025 20:27:06 GMT, Vicente Romero <[email protected]> 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
>> 
>> This PR is a remake of https://github.com/openjdk/valhalla/pull/1490
>
> Vicente Romero has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   removing unnecessary imports

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

> 1447:                              * not allowed in the prologue
> 1448:                              */
> 1449:                             if (insideLambdaOrClassDef ||

I'm not entirely convinced about these checks. They seem to lead to very 
strange asymmetries:


import java.util.function.*;

class Test3 {

    int x = 4;
    int y;

    Test3() {
        System.out.println(x); //error
        Supplier<Integer> s1 = () -> x; // error
        y = 2;
        System.out.println(y); // ok
        Supplier<Integer> s2 = () -> y; // error
        super();
    }
}


I understand that references to `x` are invalid here -- `x` is not a strict 
field, so it will be initialized _after_ the prologue. So the first couple of 
references are errors, fine.

But in the last couple, we have that `print(x)` is good, but the reference from 
the lambda is flagged as an error. I'm not sure what's the rationale here? 
After all the lambda is defined _after_ `y` has been assigned, so what are we 
trying to protect against?

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

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

Reply via email to