> `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

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

Changes: https://git.openjdk.org/valhalla/pull/2048/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2048&range=01
  Stats: 22 lines in 4 files changed: 0 ins; 12 del; 10 mod
  Patch: https://git.openjdk.org/valhalla/pull/2048.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2048/head:pull/2048

PR: https://git.openjdk.org/valhalla/pull/2048

Reply via email to