[lworld] RFR: 8377243: [lworld] HeapAccess<IS_DEST_UNINITIALIZED>::value_copy uses in the runtime are unsound [v2]

Axel Boldt-Christmas aboldtch at openjdk.org
Fri Feb 6 14:01:42 UTC 2026


On Fri, 6 Feb 2026 07:58:58 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> 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


More information about the valhalla-dev mailing list