On Tue, 5 Nov 2024 14:12:42 GMT, Per Minborg <pminb...@openjdk.org> wrote:

>> Also, don't we already check the alignment before when calling 
>> `checkMemberOffset`? Why is it checked again here?
>
>> Also, don't we already check the alignment before when calling 
>> `checkMemberOffset`? Why is it checked again here?
> 
> Good catch.

> What happens here if an element is already aligned, and `padding.byteSize() 
> == element.byteAlignment()`? e.g. 
> `MemoryLayout.structLayout(MemoryLayout.paddingLayout(4), 
> ValueLayout.JAVA_INT)`?

This is an error that existed before this PR. On the main branch:


    @Test
    public void alignedByInitialPadding() {
        Linker linker = Linker.nativeLinker();
        var struct = MemoryLayout.structLayout(
                MemoryLayout.paddingLayout(Integer.BYTES),
                JAVA_INT);
        var fd = FunctionDescriptor.of(struct, struct, struct);
        linker.downcallHandle(fd);
    }


would produce:


test TestLinker.alignedByInitialPadding(): failure
java.lang.IllegalArgumentException: Member layout 'i4', of '[x4i4]' found at 
unexpected offset: 4 != 0
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.checkMemberOffset(AbstractLinker.java:235)
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.checkLayoutRecursive(AbstractLinker.java:195)
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.checkLayout(AbstractLinker.java:176)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.checkLayouts(AbstractLinker.java:167)
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.downcallHandle0(AbstractLinker.java:98)
        at 
java.base/jdk.internal.foreign.abi.AbstractLinker.downcallHandle(AbstractLinker.java:92)
        at TestLinker.alignedByInitialPadding(TestLinker.java:160)
        at 
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21041#discussion_r1829438324

Reply via email to