8154755: Add a VarHandle weakCompareAndSet with volatile semantics
Reviewed-by: shade, vlivanov
diff --git a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java
index 36c84e2..65125e3 100644
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java
@@ -104,6 +104,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));
@@ -280,6 +281,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(recv, 1.0d, 2.0d);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, 2.0d);
});
@@ -362,6 +367,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(1.0d, 2.0d);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(1.0d, 2.0d);
});
@@ -434,6 +443,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(recv, 1.0d, 2.0d);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, 2.0d);
});
@@ -506,6 +519,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(1.0d, 2.0d);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(1.0d, 2.0d);
});
@@ -585,6 +602,10 @@
});
checkUOE(() -> {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, 1.0d, 2.0d);
+ });
+
+ checkUOE(() -> {
boolean r = vh.weakCompareAndSetAcquire(array, i, 1.0d, 2.0d);
});