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

Reply via email to