> 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 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 14 additional commits since the 
last revision:

 - Recommended test tweaks
 - Merge branch 'master' of https://github.com/openjdk/jdk into 
feature/class-final-trusting
 - Merge branch 'master' of https://github.com/openjdk/jdk into 
feature/class-final-trusting
 - Jorn review
 - Merge branch 'master' of https://github.com/openjdk/jdk into 
feature/class-final-trusting
 - bracket styles
 - Doc tweaks
 - Essay
 - Spurious change
 - Merge branch 'master' of https://github.com/openjdk/jdk into 
feature/class-final-trusting
 - ... and 4 more: https://git.openjdk.org/jdk/compare/57f00286...567e8925

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/28540/files
  - new: https://git.openjdk.org/jdk/pull/28540/files/b20b7f5b..567e8925

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=28540&range=05
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=28540&range=04-05

  Stats: 21935 lines in 436 files changed: 14170 ins; 4911 del; 2854 mod
  Patch: https://git.openjdk.org/jdk/pull/28540.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28540/head:pull/28540

PR: https://git.openjdk.org/jdk/pull/28540

Reply via email to