RFR: 8263512: [macos_aarch64] issues with calling va_args functions from invoke_native [v3]
Nick Gasson
ngasson at openjdk.java.net
Fri Jun 4 15:10:19 UTC 2021
On Fri, 4 Jun 2021 11:07:27 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> test/jdk/java/foreign/valist/VaListTest.java line 706:
>>
>>> 704: vaList.skip(BigPoint_LAYOUT);
>>> 705: assertEquals((long) vaList.vargAsLong(C_LONG), 42);
>>> 706: })},
>>
>> Looks like a carrier size mismatch here:
>>
>>
>> java.lang.IllegalArgumentException: Carrier size mismatch: long != b32[abi/kind=LONG]
>> at jdk.incubator.foreign/jdk.internal.foreign.Utils.checkPrimitiveCarrierCompat(Utils.java:111)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.SharedUtils.checkCompatibleType(SharedUtils.java:231)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.read(WinVaList.java:114)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.read(WinVaList.java:109)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.x64.windows.WinVaList.vargAsLong(WinVaList.java:84)
>> at VaListTest.lambda$upcalls$58(VaListTest.java:705)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.ProgrammableInvoker.invokeNative(Native Method)
>> at jdk.incubator.foreign/jdk.internal.foreign.abi.ProgrammableInvoker.invokeMoves(ProgrammableInvoker.java:290)
>> at VaListTest.testUpcall(VaListTest.java:530)
>>
>>
>> Need to use `C_LONG_LONG` to be cross-platform compatible. (sorry for not noticing this).
>>
>> Suggestion:
>>
>> { linkVaListCB("upcallBigStructPlusScalar"), VaListConsumer.mh(vaList -> {
>> MemorySegment struct = vaList.vargAsSegment(BigPoint_LAYOUT, ResourceScope.newImplicitScope());
>> assertEquals((long) VH_BigPoint_x.get(struct), 8);
>> assertEquals((long) VH_BigPoint_y.get(struct), 16);
>>
>> assertEquals((long) vaList.vargAsLong(C_LONG_LONG), 42);
>> })},
>> { linkVaListCB("upcallBigStructPlusScalar"), VaListConsumer.mh(vaList -> {
>> vaList.skip(BigPoint_LAYOUT);
>> assertEquals((long) vaList.vargAsLong(C_LONG_LONG), 42);
>> })},
>
> Also, it looks like the cast to `(long)` on the `vaList.vargAsLong` lines is redundant (thanks IntelliJ).
Thanks for your help! These are both fixed now.
-------------
PR: https://git.openjdk.java.net/jdk/pull/3617
More information about the core-libs-dev
mailing list