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
