Adapter sharing is broken with -XX:+ValueTypePassFieldsAsArgs
Tobias Hartmann
tobias.hartmann at oracle.com
Tue Mar 28 11:18:00 UTC 2017
On 28.03.2017 13:07, Roland Westrelin wrote:
>> Because we would still treat these signatures as equal (MyValue has an int field):
>>
>> m1(MyValue v) -> (T_VALUETYPE, T_INT, T_VOID)
>> m2(Object o1, int i, Object o2) -> (T_OBJECT, T_INT, T_OBJECT)
>>
>> Which is not correct because we cannot use the adapter for m2 to pass a value type to m1.
>
> I see. But T_VOID doesn't become T_OBJECT, right?
Yes, you are right. T_VOID stays T_VOID. But if MyValue has an Object field, it's still a problem:
m1(MyValue v) -> (T_VALUETYPE, T_OBJECT, T_VOID) -> (T_LONG, T_LONG, T_VOID)
m2(Object o1, long i) -> (T_OBJECT, T_LONG, T_VOID) > (T_LONG, T_LONG, T_VOID)
> Anyway, your change looks good.
Thanks for reviewing this.
Best regards,
Tobias
More information about the valhalla-dev
mailing list