On Thu, 16 Apr 2026 11:17:48 GMT, Christian Hagedorn <[email protected]> wrote:
>> This patch fixes various issues found with abstract value classes where the >> assumption was that we have a concrete value class but we actually could >> have an abstract value class as well. >> >> The main issue found is that a concrete value class is represented with an >> `InlineKlass` while an abstract value class is represented with an >> `InstanceKlass`. Therefore, we cannot cast the latter to `InlineKlass`. >> While working on this, I checked all `is_inlinetype()` uses and found more >> issues. I also found issues around the `Arrays.copyOf/copyOfRange` intrinsic >> but left it as follow-up work and filed >> [JDK-8382226](https://bugs.openjdk.org/browse/JDK-8382226) for it. >> >> Here is a list of fixes included in this patch, together with corresponding >> tests: >> 1. `GraphKit::get_layout_helper()`: Wrong old assumption that nullable >> implies not-flat. >> 2. Checking whether we have a load/store from/to a field of an empty value >> class: >> a. C1: `GraphBuilder::access_field()`, for static and instance field. >> b. C2: `Parse::do_get_xxx()`, for loading >> c. C2: `Parse::do_set_xxx()`, for storing >> 3. `arraycopy` instrinsic: Not bailing out when src or dest is a flat >> abstract value class array - in this case we don't know the layout. We >> currently hit an assert due to an invalid cast, assuming concrete value >> classes when an array is flat. >> >> Additional changes: >> - Added some more asserts >> - Some small code cleanups >> >> Thanks, >> Christian >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Christian Hagedorn has updated the pull request incrementally with one > additional commit since the last revision: > > improve assert message src/hotspot/share/opto/macroArrayCopy.cpp line 1500: > 1498: // 2) src and dest do not have the same flatness. > 1499: // 3) src or dest is a flat abstract value class array (we don't know > the exact layout and cannot use the stub). > 1500: // 4) dest is a flat value class array with oop fields and requires > to emit write barriers (we don't have such a stub). This should be `src or dest` similar to other comments, because loading an oop may require load barrier, too. src/hotspot/share/opto/parse3.cpp line 169: > 167: } > 168: } > 169: if (ld == nullptr) { Probably add an assert that `field` is not flat here. src/hotspot/share/opto/parse3.cpp line 302: > 300: } > 301: if (do_store) { > 302: // Store the value. Similarly, assert that `field` is not flat. ------------- PR Review Comment: https://git.openjdk.org/valhalla/pull/2325#discussion_r3092916623 PR Review Comment: https://git.openjdk.org/valhalla/pull/2325#discussion_r3092947429 PR Review Comment: https://git.openjdk.org/valhalla/pull/2325#discussion_r3092950669
