--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java Fri Apr 29 23:15:15 2016 +0300
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java Fri Apr 29 13:46:19 2016 -0700
@@ -104,6 +104,7 @@
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
+ assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE));
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
@@ -421,12 +422,19 @@
assertEquals(x, 2, "weakCompareAndSetRelease int");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(recv, 2, 1);
+ assertEquals(r, true, "weakCompareAndSetVolatile int");
+ int x = (int) vh.get(recv);
+ assertEquals(x, 1, "weakCompareAndSetVolatile int value");
+ }
+
// Compare set and get
{
- int o = (int) vh.getAndSet(recv, 1);
- assertEquals(o, 2, "getAndSet int");
+ int o = (int) vh.getAndSet(recv, 2);
+ assertEquals(o, 1, "getAndSet int");
int x = (int) vh.get(recv);
- assertEquals(x, 1, "getAndSet int value");
+ assertEquals(x, 2, "getAndSet int value");
}
vh.set(recv, 1);
@@ -549,18 +557,25 @@
}
{
- boolean r = (boolean) vh.weakCompareAndSetRelease( 1, 2);
+ boolean r = (boolean) vh.weakCompareAndSetRelease(1, 2);
assertEquals(r, true, "weakCompareAndSetRelease int");
int x = (int) vh.get();
assertEquals(x, 2, "weakCompareAndSetRelease int");
}
+ {
+ boolean r = (boolean) vh.weakCompareAndSetVolatile(2, 1);
+ assertEquals(r, true, "weakCompareAndSetVolatile int");
+ int x = (int) vh.get();
+ assertEquals(x, 1, "weakCompareAndSetVolatile int value");
+ }
+
// Compare set and get
{
- int o = (int) vh.getAndSet( 1);
- assertEquals(o, 2, "getAndSet int");
+ int o = (int) vh.getAndSet( 2);
+ assertEquals(o, 1, "getAndSet int");
int x = (int) vh.get();
- assertEquals(x, 1, "getAndSet int value");
+ assertEquals(x, 2, "getAndSet int value");
}
vh.set(1);
@@ -692,12 +707,19 @@
assertEquals(x, 2, "weakCompareAndSetRelease int");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, 2, 1);
+ assertEquals(r, true, "weakCompareAndSetVolatile int");
+ int x = (int) vh.get(array, i);
+ assertEquals(x, 1, "weakCompareAndSetVolatile int value");
+ }
+
// Compare set and get
{
- int o = (int) vh.getAndSet(array, i, 1);
- assertEquals(o, 2, "getAndSet int");
+ int o = (int) vh.getAndSet(array, i, 2);
+ assertEquals(o, 1, "getAndSet int");
int x = (int) vh.get(array, i);
- assertEquals(x, 1, "getAndSet int value");
+ assertEquals(x, 2, "getAndSet int value");
}
vh.set(array, i, 1);
@@ -778,6 +800,10 @@
});
checkIOOBE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(array, ci, 1, 2);
+ });
+
+ checkIOOBE(() -> {
boolean r = vh.weakCompareAndSetAcquire(array, ci, 1, 2);
});