On Fri, 4 Jun 2021 11:04:33 GMT, Jorn Vernee <jver...@openjdk.org> 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

Reply via email to