RFR: 8345119: Some java/foreign tests wrongly assume aligned memory
Quan Anh Mai
qamai at openjdk.org
Wed Nov 27 17:00:38 UTC 2024
On Wed, 27 Nov 2024 16:41:39 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> Hi,
>>
>> This patch resolves some issues I found that the tests wrongly assume sufficient alignment from the segment returned by `Arena::allocate`.
>>
>> Please take a look and leave your reviews, thanks a lot.
>
> 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.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/22415#discussion_r1860998302
More information about the core-libs-dev
mailing list