Skip to content

Commit 55ed0d8

Browse files
committedMay 29, 2020
8246040: java/foreign/TestAddressHandle fails on big endian platforms
Make test more robust by not relying on implicit endianness-related assumption Reviewed-by: chegar
1 parent 5967aaf commit 55ed0d8

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed
 

‎test/jdk/java/foreign/TestAddressHandle.java

+22-19
Original file line numberDiff line numberDiff line change
@@ -60,26 +60,29 @@ public class TestAddressHandle {
6060
}
6161

6262
@Test(dataProvider = "addressHandles")
63-
public void testAddressHandle(VarHandle addrHandle) {
63+
public void testAddressHandle(VarHandle addrHandle, int byteSize) {
6464
VarHandle longHandle = MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder());
6565
try (MemorySegment segment = MemorySegment.allocateNative(8)) {
66+
MemoryAddress target = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN ?
67+
segment.baseAddress().addOffset(8 - byteSize) :
68+
segment.baseAddress();
6669
longHandle.set(segment.baseAddress(), 42L);
67-
MemoryAddress address = (MemoryAddress)addrHandle.get(segment.baseAddress());
70+
MemoryAddress address = (MemoryAddress)addrHandle.get(target);
6871
assertEquals(address.toRawLongValue(), 42L);
6972
try {
7073
longHandle.get(address); // check that address cannot be de-referenced
7174
fail();
7275
} catch (UnsupportedOperationException ex) {
7376
assertTrue(true);
7477
}
75-
addrHandle.set(segment.baseAddress(), address.addOffset(1));
78+
addrHandle.set(target, address.addOffset(1));
7679
long result = (long)longHandle.get(segment.baseAddress());
7780
assertEquals(43L, result);
7881
}
7982
}
8083

8184
@Test(dataProvider = "addressHandles")
82-
public void testNull(VarHandle addrHandle) {
85+
public void testNull(VarHandle addrHandle, int byteSize) {
8386
VarHandle longHandle = MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder());
8487
try (MemorySegment segment = MemorySegment.allocateNative(8)) {
8588
longHandle.set(segment.baseAddress(), 0L);
@@ -118,29 +121,29 @@ public void testBadAdaptString() {
118121
static Object[][] addressHandles() {
119122
return new Object[][] {
120123
// long
121-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder())) },
122-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder()), 0)) },
123-
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_LONG.varHandle(long.class)) },
124+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder())), 8 },
125+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(long.class, ByteOrder.nativeOrder()), 0)), 8 },
126+
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_LONG.varHandle(long.class)), 8 },
124127

125128
// int
126-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(int.class, ByteOrder.nativeOrder())) },
127-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(int.class, ByteOrder.nativeOrder()), 0)) },
128-
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_INT.varHandle(int.class)) },
129+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(int.class, ByteOrder.nativeOrder())), 4 },
130+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(int.class, ByteOrder.nativeOrder()), 0)), 4 },
131+
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_INT.varHandle(int.class)), 4 },
129132

130133
// short
131-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(short.class, ByteOrder.nativeOrder())) },
132-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(short.class, ByteOrder.nativeOrder()), 0)) },
133-
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_SHORT.varHandle(short.class)) },
134+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(short.class, ByteOrder.nativeOrder())), 2 },
135+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(short.class, ByteOrder.nativeOrder()), 0)), 2 },
136+
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_SHORT.varHandle(short.class)), 2 },
134137

135138
// char
136-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(char.class, ByteOrder.nativeOrder())) },
137-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(char.class, ByteOrder.nativeOrder()), 0)) },
138-
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_CHAR.varHandle(char.class)) },
139+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(char.class, ByteOrder.nativeOrder())), 2 },
140+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(char.class, ByteOrder.nativeOrder()), 0)), 2 },
141+
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_CHAR.varHandle(char.class)), 2 },
139142

140143
// byte
141-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(byte.class, ByteOrder.nativeOrder())) },
142-
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(byte.class, ByteOrder.nativeOrder()), 0)) },
143-
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_BYTE.varHandle(byte.class)) }
144+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.varHandle(byte.class, ByteOrder.nativeOrder())), 1 },
145+
{ MemoryHandles.asAddressVarHandle(MemoryHandles.withOffset(MemoryHandles.varHandle(byte.class, ByteOrder.nativeOrder()), 0)), 1 },
146+
{ MemoryHandles.asAddressVarHandle(MemoryLayouts.JAVA_BYTE.varHandle(byte.class)), 1 }
144147
};
145148
}
146149

0 commit comments

Comments
 (0)