--- a/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template Fri Apr 29 23:15:15 2016 +0300
+++ b/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template Fri Apr 29 13:46:19 2016 -0700
@@ -105,6 +105,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));
@@ -114,6 +115,7 @@
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
+ assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE));
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
@@ -297,6 +299,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(recv, $value1$, $value2$);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(recv, $value1$, $value2$);
});
@@ -383,6 +389,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile($value1$, $value2$);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire($value1$, $value2$);
});
@@ -514,12 +524,19 @@
assertEquals(x, $value2$, "weakCompareAndSetRelease $type$");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(recv, $value2$, $value1$);
+ assertEquals(r, true, "weakCompareAndSetVolatile $type$");
+ $type$ x = ($type$) vh.get(recv);
+ assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value");
+ }
+
// Compare set and get
{
- $type$ o = ($type$) vh.getAndSet(recv, $value1$);
- assertEquals(o, $value2$, "getAndSet $type$");
+ $type$ o = ($type$) vh.getAndSet(recv, $value2$);
+ assertEquals(o, $value1$, "getAndSet $type$");
$type$ x = ($type$) vh.get(recv);
- assertEquals(x, $value1$, "getAndSet $type$ value");
+ assertEquals(x, $value2$, "getAndSet $type$ value");
}
#end[CAS]
@@ -559,6 +576,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(recv, $value1$, $value2$);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(recv, $value1$, $value2$);
});
@@ -684,18 +705,25 @@
}
{
- boolean r = (boolean) vh.weakCompareAndSetRelease( $value1$, $value2$);
+ boolean r = (boolean) vh.weakCompareAndSetRelease($value1$, $value2$);
assertEquals(r, true, "weakCompareAndSetRelease $type$");
$type$ x = ($type$) vh.get();
assertEquals(x, $value2$, "weakCompareAndSetRelease $type$");
}
+ {
+ boolean r = (boolean) vh.weakCompareAndSetVolatile($value2$, $value1$);
+ assertEquals(r, true, "weakCompareAndSetVolatile $type$");
+ $type$ x = ($type$) vh.get();
+ assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value");
+ }
+
// Compare set and get
{
- $type$ o = ($type$) vh.getAndSet( $value1$);
- assertEquals(o, $value2$, "getAndSet $type$");
+ $type$ o = ($type$) vh.getAndSet( $value2$);
+ assertEquals(o, $value1$, "getAndSet $type$");
$type$ x = ($type$) vh.get();
- assertEquals(x, $value1$, "getAndSet $type$ value");
+ assertEquals(x, $value2$, "getAndSet $type$ value");
}
#end[CAS]
@@ -735,6 +763,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile($value1$, $value2$);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire($value1$, $value2$);
});
@@ -869,12 +901,19 @@
assertEquals(x, $value2$, "weakCompareAndSetRelease $type$");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, $value2$, $value1$);
+ assertEquals(r, true, "weakCompareAndSetVolatile $type$");
+ $type$ x = ($type$) vh.get(array, i);
+ assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value");
+ }
+
// Compare set and get
{
- $type$ o = ($type$) vh.getAndSet(array, i, $value1$);
- assertEquals(o, $value2$, "getAndSet $type$");
+ $type$ o = ($type$) vh.getAndSet(array, i, $value2$);
+ assertEquals(o, $value1$, "getAndSet $type$");
$type$ x = ($type$) vh.get(array, i);
- assertEquals(x, $value1$, "getAndSet $type$ value");
+ assertEquals(x, $value2$, "getAndSet $type$ value");
}
#end[CAS]
@@ -918,6 +957,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, $value1$, $value2$);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(array, i, $value1$, $value2$);
});
@@ -997,6 +1040,10 @@
});
checkIOOBE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(array, ci, $value1$, $value2$);
+ });
+
+ checkIOOBE(() -> {
boolean r = vh.weakCompareAndSetAcquire(array, ci, $value1$, $value2$);
});