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