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
