On Tue, 20 Jan 2026 15:43:42 GMT, Quan Anh Mai <[email protected]> wrote:
> Since I overrode `MyValue1::equals` in #1929 , `TestIntrinsics` has failed
> with `-XX:PerMethodSpecTrapLimit=0 -XX:PerMethodTrapLimit=0`. The failed test
> is this one:
>
> // Value class array creation via reflection
> @Test
> public void test51(int len) {
> Object[] va = (Object[])Array.newInstance(MyValue1.class, len);
> for (int i = 0; i < len; ++i) {
> Asserts.assertEQ(va[i], null);
> }
> }
>
> During parsing, `Array::newInstance` is not inlined, so `va` is of type
> `Object[]` and `va[i]` is of type `Object`. `Asserts.assertEQ` calls
> `va[i].equals(null)` which resolves to a `CallJavaDynamic` with its receiver
> of type `Object`, which is passed in as an oop. During incremental inline, It
> is revealed that `va` is a `MyValue1[]` and `va[i]` is of type `MyValue1`.
> This allows the devirtualization of `va[i]::equals`. Since this is a method
> call on a value object, the calling convention changes, which leads to the
> assert because the input is an oop.
>
> I relaxed the assert a little bit to allow changing of the calling convention
> due to devirtualization.
>
> Please take a look and leave your review, thansk a lot.
This pull request has now been integrated.
Changeset: d16ef895
Author: Quan Anh Mai <[email protected]>
URL:
https://git.openjdk.org/valhalla/commit/d16ef895ef04054fe307853b4d75cbe91f807019
Stats: 17 lines in 2 files changed: 12 ins; 2 del; 3 mod
8372824: [lworld] C2 hits "Unexpected argument type" assertion with
--enable-preview
Reviewed-by: thartmann
-------------
PR: https://git.openjdk.org/valhalla/pull/1935