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

Reply via email to