On Wed, 21 Jan 2026 15:43:31 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.
>
> Quan Anh Mai has updated the pull request incrementally with one additional
> commit since the last revision:
>
> assert that we are during devirtualization of calls
Great! That looks good to me.
-------------
Marked as reviewed by thartmann (Committer).
PR Review:
https://git.openjdk.org/valhalla/pull/1935#pullrequestreview-3688050846