> `FieldClosure` is used for iterating fields in an object. For Valhalla, it 
> has been enhanced to handle fields that are inside inlined fields. However, 
> the current implementation has two problems:
> 
> [1] It type casts the address of an inlined field into an `oop` pointer. This 
> is unsafe as many operations, such as getting the header of an `oop`, will 
> not work with such an `oop` pointer:
> 
> https://github.com/openjdk/jdk/blob/b1f975efa481bd5e20c1b7d58a87d0866df205e6/src/hotspot/share/runtime/fieldDescriptor.cpp#L216
> 
> [2] The parameter `base_offset` is used in many functions. Its meaning is 
> unclear and inconsistent.
> 
> https://github.com/openjdk/jdk/blob/b1f975efa481bd5e20c1b7d58a87d0866df205e6/src/hotspot/share/runtime/fieldDescriptor.cpp#L159
> 
> https://github.com/openjdk/jdk/blob/b1f975efa481bd5e20c1b7d58a87d0866df205e6/src/hotspot/share/oops/instanceKlass.hpp#L99-L101
> 
> This RFE refactors `FieldClosure` to avoid the above problems. `FieldClosure` 
> now carries information about inlined fields. This information can be used by 
> various field iteration code to simplify their operations. See 
> `FieldClosure::inline_klass()` and `FieldClosure::inline_offset()`.
> 
> As a result, users of `FieldClosure` and `FieldDescriptor()` no longer need 
> to perform obscure arithmetics with `InlineKlass::payload_offset()`.
> 
> This RFE also moves a few common operations into utility functions to avoid 
> code duplication.
> 
> Also:
> - Fixed a bug in `FlatArrayKlass::oop_print_elements_on()` in the handling of 
> nullable elements.
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

Ioi Lam has updated the pull request with a new target base due to a merge or a 
rebase. The pull request now contains 14 commits:

 - Merge branch 'master' into clean-up-flat-field-iteration
 - @stefank comments
 - @stefank and @matias9927 comments
 - fixed whitespaces
 - Restored ValuePayloadContext::klass() and added test case with abstract 
value class
 - clean up: ValuePayloadContext::_klass is used only in asserts
 - Alternative
 - @fparain comment: fixed null marker printing, added tests
 - clean up names with new naming convention (see 
https://github.com/openjdk/jdk/pull/32673)
 - Merge branch 'master' into clean-up-flat-field-iteration
 - ... and 4 more: https://git.openjdk.org/jdk/compare/4ab51270...0b85c347

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

Changes: https://git.openjdk.org/jdk/pull/32565/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32565&range=09
  Stats: 849 lines in 19 files changed: 645 ins; 93 del; 111 mod
  Patch: https://git.openjdk.org/jdk/pull/32565.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/32565/head:pull/32565

PR: https://git.openjdk.org/jdk/pull/32565

Reply via email to