On Mon, 1 Dec 2025 15:40:40 GMT, Chen Liang <[email protected]> wrote:
>> Currently, the hotspot compiler (as in ciField) trusts final fields in
>> hidden classes, record classes, and selected jdk packages. Some classes in
>> the JDK wish to be trusted, but they cannot apply package-wide opt-in due to
>> other legacy classes in the package, such as java.util.
>>
>> They currently can use `@Stable` as a workaround, but this is fragile
>> because a stable final field may hold a trusted null, zero, or false value,
>> which is currently treated as non-constant by ciField.
>>
>> We should add an annotation to opt-in for a whole class, mainly for legacy
>> packages. This would benefit greatly some of our classes already using a lot
>> of Stable, such as java.util.Optional, whose empty instance is now
>> constant-foldable, as demonstrated in a new IR test.
>>
>> Paging @minborg who requested Optional folding for review.
>>
>> I think we can remove redundant Stable in a few other java.util classes
>> after this patch is integrated. I plan to do that in subsequent patches.
>
> Chen Liang has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Doc tweaks
With one small change, the runtime part of this change looks good.
src/hotspot/share/ci/ciField.cpp line 220:
> 218: return false;
> 219: // Explicit opt-in from system classes
> 220: if (holder->trust_final_fields())
This is missing { } so not sure where it ends, especially that it encloses an
if statement, and other code.
-------------
Changes requested by coleenp (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/28540#pullrequestreview-3525748039
PR Review Comment: https://git.openjdk.org/jdk/pull/28540#discussion_r2577662841