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). ------------- Commit messages: - fix Changes: https://git.openjdk.org/valhalla/pull/2569/files Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=2569&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8382226 Stats: 182 lines in 2 files changed: 178 ins; 1 del; 3 mod Patch: https://git.openjdk.org/valhalla/pull/2569.diff Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2569/head:pull/2569 PR: https://git.openjdk.org/valhalla/pull/2569
