On Fri, 4 Jun 2021 11:04:33 GMT, Jorn Vernee <[email protected]> wrote:
>> Nick Gasson has updated the pull request incrementally with one additional
>> commit since the last revision:
>>
>> No variadic upcalls
>>
>> Change-Id: Ibf91c570c88be2587e9e23240477c4a5cc56b4c5
>> CustomizedGitHooks: yes
>
> 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).
-------------
PR: https://git.openjdk.java.net/jdk/pull/3617