On Fri, 6 Feb 2026 07:58:58 GMT, Axel Boldt-Christmas <[email protected]> 
wrote:

>> `IS_DEST_UNINITIALIZED ` is ment to signal to the GC that you cannot read 
>> the contents of the field as it is uninitialized. This is used by the 
>> compiler which have strict control over its safepoints.
>> 
>> The MemAllocator in the runtime has no such guarantees, and will clear all 
>> oop fields before handing the allocated object. These objects can have been 
>> seen by the GC and even tenured before the call  
>> `HeapAccess<IS_DEST_UNINITIALIZED>::value_copy`. This is unsound. ZGC for 
>> example could miss young to old edges if the destination object had been 
>> tenured.
>> 
>> I propose we remove these and always use `HeapAccess<>::value_copy`. The 
>> behaviour will be the same for value objects which do not contain oops, and 
>> correct of values which contains oops. There is the potential in the future 
>> to add something along the lines of `IS_DEST_NULL` to provide more static 
>> information to the GC to optimise the barriers on. However the gain here is 
>> probably negligible.
>
> Axel Boldt-Christmas has updated the pull request with a new target base due 
> to a merge or a rebase. The pull request now contains two commits:
> 
>  - Merge remote-tracking branch 'upstream_valhalla/lworld' into JDK-8377243
>  - 8377243: [lworld] HeapAccess<IS_DEST_UNINITIALIZED>::value_copy uses in 
> the runtime are unsound

Thanks for the review.

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

PR Comment: https://git.openjdk.org/valhalla/pull/2048#issuecomment-3860637153

Reply via email to