[lworld] RFR: 8371382: [lworld] Javac accepts field initializer that refers to a superclass field [v4]

Vicente Romero vromero at openjdk.org
Sat Nov 15 14:28:18 UTC 2025


On Sat, 15 Nov 2025 14:24:42 GMT, Vicente Romero <vromero at openjdk.org> wrote:

>> Javac is accepting this code:
>> 
>> 
>> abstract value class ValueParent {
>>     int b = 5;
>> }
>> 
>> value class ValueClass extends ValueParent {
>>     int a = b;
>> }
>> 
>> This is not allowed as in value classes field initializers will run in the prologue phase where references to super class fields are forbidden
>> 
>> TIA
>
> Vicente Romero has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:
> 
>  - adding test
>  - Merge branch 'lworld' into JDK-8371382
>  - fixing bug
>  - Merge branch 'lworld' into JDK-8371382
>  - additional test
>  - 8371382: [lworld] Javac accepts field initializer that refers to a superclass field

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

> 1521:                             (!localEnv.enclClass.sym.isValueClass() &&
> 1522:                              (sym.flags_field & HASINIT) != 0 &&
> 1523:                              !isInitializer))

it is OK for a field with initializer to refer to another field with initializer, so no warning or error if we are analyzing a field initializer

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/1728#discussion_r2529920759


More information about the valhalla-dev mailing list