On Fri, 19 Jun 2026 12:34:36 GMT, Christian Hagedorn <[email protected]> wrote:
> The provided test cases fail when inlining the `Array.copyOf/copyOfRange()` > intrinsics where the source array is flat and from an abstract value class. > > The current code checks whether the source array or the destination array > klass contain oops by assuming that a flat value class array is always > concrete and thus an `InlineKlass` (i.e. can call `inline_klass()`). However, > we could also have abstract value class arrays that are known to be flat (see > test cases). This leads to a cast assertion failure because abstract value > classes are represented by an `InstanceKlass` and not an `InlineKlass`. > > To fix this, I added a simple bailout when detecting an abstract flat value > class array. This is a conservative correctness fix and should be revisited > again post-Valhalla-integration. We have > [JDK-8251971](https://bugs.openjdk.org/browse/JDK-8251971) in place for that > which should also tackle other issues around the arraycopy intrinsics and > also address performance problems. > > Thanks, > Christian > > --------- > - [x] I confirm that I make this contribution in accordance with the [OpenJDK > Interim AI Policy](https://openjdk.org/legal/ai). src/hotspot/share/opto/library_call.cpp line 5203: > 5201: const TypeAryPtr* orig_t = _gvn.type(original)->isa_aryptr(); > 5202: const TypeKlassPtr* tklass = _gvn.type(klass_node)->is_klassptr(); > 5203: const bool is_src_abstract_flat_value_array = orig_t != nullptr && > !orig_t->elem()->is_inlinetypeptr() && orig_t->is_flat(); Should we check for `!orig_t->is_not_flat()` instead? ------------- PR Review Comment: https://git.openjdk.org/valhalla/pull/2569#discussion_r3442654589
