RFR: 8326172: Dubious claim on long[]/double[] alignment in MemorySegment javadoc [v2]

Maurizio Cimadamore mcimadamore at openjdk.org
Mon Feb 26 16:24:43 UTC 2024


On Mon, 26 Feb 2024 16:05:51 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:

>> This patch changes the alignment for `JAVA_LONG` and `JAVA_DOUBLE` to 8, regardless of the underlying platform. This means that atomic access modes work on memory segments wrapping `long[]` or `double[]`, as they already do when using `MethodHandless::arrayAccessVarHandle`.
>> 
>> After discussion, we came to the conclusion that it is reasonable for the JDK to require the elements of a `long[]` and `double[]` to be 8 byte aligned. It is ultimately up to the JDK to set these requirements, which are for the VM to implement.
>> 
>> I was seeing a stack overflow when running test/jdk/java/foreign/stackwalk/TestReentrantUpcalls.java on x86, so I've lowered the recursion to 50 (which is still more than enough I think).
>> 
>> Testing: `jdk_foreign` on x64 Windows, x64 Windows + fallback linker, and x86 Linux (uses fallback linker)
>
> Jorn Vernee has updated the pull request incrementally with one additional commit since the last revision:
> 
>   review comments

test/jdk/java/foreign/TestLayouts.java line 164:

> 162:         );
> 163:         assertEquals(struct.byteSize(), 1 + 1 + 2 + 4 + 8);
> 164:         assertEquals(struct.byteAlignment(), 8);

Looking at this PR:
https://github.com/openjdk/jdk/pull/18007

This test seemed to cover more case before that PR - e.g. a layout generator was tweaked to exclude long/doubles. I believe revert the test changes now?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18007#discussion_r1502938943


More information about the core-libs-dev mailing list