On Thu, 6 Aug 2026 20:08:07 GMT, Chen Liang <[email protected]> wrote:

>> [JDK-8376522](https://bugs.openjdk.org/browse/JDK-8376522) indicates that 
>> the thisUninit should be applied even when uninitializedThis is on the 
>> stack. Previous implementations failed to do this, so this patch properly 
>> enforces this spec change. 
>> 
>> Now that both the stack and locals must be considered when applying 
>> flagThisUninit, the origin of the flag needs to  be preserved, so the 
>> StackMapReader now tracks if the flag originated from locals or the stack. 
>> Since the stack is cleared between frames, only an uninitializedThis from 
>> locals is preserved. 
>> 
>> In addition to VM changes, the ClassFile API had to be updated as it only 
>> considered stack frame locals. The test case offered by @liach in the JBS 
>> issue has been adapted to a JASM test to verify the change. Verified with 
>> tier 1-5 tests.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> src/hotspot/share/classfile/stackMapTable.cpp line 356:
> 
>> 354:     u2 stack_size = 1;
>> 355:     u1 flags = _prev_frame->flags();
>> 356:     stack[0] = parse_verification_type(&flags, CHECK_VERIFY_(_verifier, 
>> nullptr));
> 
> Thsi is not correct - all stack map frames clear all previous stacks. So if a 
> previous frame has `flagThisUninit` due to an `uninitializedThis` on the 
> stack only, this logic is wrong if the new stack has no `uninitializedThis`

Thanks for the quick response, Chen but this is still in the draft phase, as of 
now I haven't finished testing. Either way, thanks for pointing this out!

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

PR Review Comment: https://git.openjdk.org/jdk/pull/32242#discussion_r3731766892

Reply via email to