`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()`.

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).

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

Commit messages:
 - fixed windows build
 - refactoring

Changes: https://git.openjdk.org/jdk/pull/32565/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=32565&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8391720
  Stats: 733 lines in 17 files changed: 548 ins; 85 del; 100 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