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

Reply via email to