[lworld] RFR: 8372824: [lworld] C2 hits "Unexpected argument type" assertion with --enable-preview [v2]

Tobias Hartmann thartmann at openjdk.org
Tue Jan 20 16:25:15 UTC 2026


On Tue, 20 Jan 2026 15:58:52 GMT, Quan Anh Mai <qamai at openjdk.org> 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:
> 
>   Unproblemlist

src/hotspot/share/opto/graphKit.cpp line 1960:

> 1958:           // scalarized receiver instead.
> 1959:           assert(arg_idx == 0 && !call->method()->is_static(), "must be the receiver");
> 1960:           arg = InlineTypeNode::make_from_oop(this, arg, t->inline_klass());

So this is post-parse call-devirtualization, i.e. [JDK-8257211](https://bugs.openjdk.org/browse/JDK-8257211), right? Could we assert `call->generator()->is_virtual_late_inline()` here?

-------------

PR Review Comment: https://git.openjdk.org/valhalla/pull/1935#discussion_r2709104941


More information about the valhalla-dev mailing list