RFR: 8345119: Some java/foreign tests wrongly assume aligned memory
Jorn Vernee
jvernee at openjdk.org
Wed Nov 27 19:45:39 UTC 2024
On Wed, 27 Nov 2024 16:57:49 GMT, Quan Anh Mai <qamai at openjdk.org> wrote:
>> test/jdk/java/foreign/TestByteBuffer.java line 414:
>>
>>> 412: ByteBuffer bb;
>>> 413: try (Arena arena = Arena.ofConfined()) {
>>> 414: MemorySegment segment = arena.allocate(bytes, Long.BYTES);
>>
>> Why does this segment need to be aligned?
>
> Because the `bufferHandle` here iterates through all kinds of element types:
>
> @DataProvider(name = "bufferHandleOps")
> public static Object[][] bufferHandleOps() throws Throwable {
> return new Object[][]{
> { MethodHandles.byteBufferViewVarHandle(char[].class, ByteOrder.nativeOrder()) },
> { MethodHandles.byteBufferViewVarHandle(short[].class, ByteOrder.nativeOrder()) },
> { MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.nativeOrder()) },
> { MethodHandles.byteBufferViewVarHandle(long[].class, ByteOrder.nativeOrder()) },
> { MethodHandles.byteBufferViewVarHandle(float[].class, ByteOrder.nativeOrder()) },
> { MethodHandles.byteBufferViewVarHandle(double[].class, ByteOrder.nativeOrder()) }
>
> The test then does all kind of accesses on these:
>
> static Map<MethodHandle, Object[]> varHandleMembers(ByteBuffer bb, VarHandle handle) {
> Map<MethodHandle, Object[]> members = new HashMap<>();
> for (VarHandle.AccessMode mode : VarHandle.AccessMode.values()) {
> Class<?>[] params = handle.accessModeType(mode).parameterArray();
> Object[] args = Stream.concat(Stream.of(bb), Stream.of(params).skip(1)
> .map(TestByteBuffer::defaultValue))
> .toArray();
> try {
> members.put(MethodHandles.varHandleInvoker(mode, handle.accessModeType(mode)), args);
> } catch (Throwable ex) {
> throw new AssertionError(ex);
> }
> }
> return members;
> }
>
> And for access other than plain `get` and `set`, the natural alignment is required.
Ok, thanks for the explanation.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22415#discussion_r1861172810
More information about the core-libs-dev
mailing list