RFR: 8340205: Native linker allows MemoryLayout consisting of only PaddingLayout [v5]

Maurizio Cimadamore mcimadamore at openjdk.org
Mon Oct 7 12:52:39 UTC 2024


On Mon, 7 Oct 2024 11:27:33 GMT, Vladimir Kozelkov <duke at openjdk.org> wrote:

> Another test example. I can create a structure ending with PaddingLayout
> 
> ```
> {
>     Linker linker = Linker.nativeLinker();
>     var sequence0a8 = MemoryLayout.sequenceLayout(0, JAVA_LONG);
>     var sequence3a1 = MemoryLayout.sequenceLayout(3, JAVA_BYTE);
>     var padding5a1 = MemoryLayout.paddingLayout(5);
>     var struct8a8 = MemoryLayout.structLayout(sequence0a8, sequence3a1, padding5a1);
>     var fd = FunctionDescriptor.of(struct8a8, struct8a8, struct8a8);
>     linker.downcallHandle(fd);
> }
> ```
> 
> Is it just me or is this a legal way to create an over-aligned layout?
> 
> ```
> {
>     Linker linker = Linker.nativeLinker();
>     var sequence0a8 = MemoryLayout.sequenceLayout(0, JAVA_LONG);
>     var sequence8a1 = MemoryLayout.sequenceLayout(8, JAVA_BYTE);
>     var struct8a8 = MemoryLayout.structLayout(sequence0a8, sequence8a1);
>     var fd = FunctionDescriptor.of(struct8a8, struct8a8, struct8a8);
>     linker.downcallHandle(fd);
> }
> ```
> 
> If I remove the PaddingLayout, the structure appears to be completely normal, except that it doesn't contain a single real element that needs alignment 8

I think the new rules should explicitly ban zero-element sequence layouts.

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

PR Comment: https://git.openjdk.org/jdk/pull/21041#issuecomment-2396840477


More information about the core-libs-dev mailing list