On Thu, 27 Nov 2025 16:16:05 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.

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 definitely nicer than listing specific classes. It would be nicer again 
once we can make this exceptions go away.

src/java.base/share/classes/jdk/internal/vm/annotation/TrustFinalFields.java 
line 61:

> 59: /// fields in classes specified by this annotation.
> 60: ///
> 61: /// This annotation is only recognized on privileged code and is ignored 
> elsewhere.

"privileged code" hints of protection domains, permissions or security manager. 
Some of the annotations are limited to classes defined by the boot loader, is 
it the case here too?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28540#discussion_r2569767299
PR Review Comment: https://git.openjdk.org/jdk/pull/28540#discussion_r2569764340

Reply via email to