On Fri, 29 May 2026 09:11:54 GMT, Maurizio Cimadamore <[email protected]> wrote:
>> This PR cleans the handling of unset strict fields which is needed for >> stackmap generation. >> In the current impl, this is done with UnsetFieldsInfo which is prepared by >> Flow, and then propagated to Gen/Code. >> The problem with this approach is that we introduce unnecessary coupling, as >> we need to keep track where, at the AST level, an assignment to a strict >> uninit variable takes place. >> This leads to issues as the AST-oriented view is too high-level for the kind >> of manipulation that Code needs. >> By modelling unset fields as a bitset in Code.State (same as what we do to >> keep track of local variable ranges), state merges are dealt with more >> naturally and succinctly. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java line 1070: > >> 1068: field.owner == meth.owner && >> 1069: state.peek().hasTag(UNINITIALIZED_THIS)) { >> 1070: state.unsetStrict.excl(field.adr); > > This is where all the magic happens -- if we see a putfield targeting a > strict instance field of this class and the "receiver" is uninitialized, we > transition that field to "init". clever ------------- PR Review Comment: https://git.openjdk.org/valhalla/pull/2487#discussion_r3325666551
