--- a/hotspot/test/compiler/stable/TestStableInt.java Mon Jul 14 03:24:35 2014 -0700
+++ b/hotspot/test/compiler/stable/TestStableInt.java Mon Jul 14 03:25:40 2014 -0700
@@ -26,9 +26,11 @@
/*
* @test TestStableInt
* @summary tests on stable fields and arrays
- * @library /testlibrary
- * @compile -XDignore.symbol.file TestStableInt.java
+ * @library /testlibrary /testlibrary/whitebox
+ * @build TestStableInt StableConfiguration sun.hotspot.WhiteBox
+ * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
* @run main ClassFileInstaller
+ * java/lang/invoke/StableConfiguration
* java/lang/invoke/TestStableInt
* java/lang/invoke/TestStableInt$IntStable
* java/lang/invoke/TestStableInt$StaticIntStable
@@ -48,46 +50,60 @@
* java/lang/invoke/TestStableInt$NestedStableField3
* java/lang/invoke/TestStableInt$NestedStableField3$A
* java/lang/invoke/TestStableInt$DefaultValue
+ * java/lang/invoke/TestStableInt$DefaultStaticValue
* java/lang/invoke/TestStableInt$ObjectArrayLowerDim2
*
* @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
- * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop
- * -server -XX:-TieredCompilation -Xcomp
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -server -XX:-TieredCompilation
+ * -XX:+FoldStableValues
+ * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
+ * java.lang.invoke.TestStableInt
+ * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -server -XX:-TieredCompilation
+ * -XX:-FoldStableValues
* -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
* java.lang.invoke.TestStableInt
*
* @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
- * -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop
- * -server -XX:-TieredCompilation -Xcomp
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
+ * -XX:+FoldStableValues
+ * -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
+ * java.lang.invoke.TestStableInt
+ * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
+ * -XX:-FoldStableValues
* -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
* java.lang.invoke.TestStableInt
*
* @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
- * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop
- * -server -XX:-TieredCompilation -Xcomp
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -client -XX:-TieredCompilation
+ * -XX:+FoldStableValues
* -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
* java.lang.invoke.TestStableInt
- *
* @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
- * -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop
- * -server -XX:-TieredCompilation -Xcomp
+ * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
+ * -client -XX:-TieredCompilation
+ * -XX:-FoldStableValues
* -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
* java.lang.invoke.TestStableInt
*/
package java.lang.invoke;
-import com.sun.management.HotSpotDiagnosticMXBean;
-import com.sun.management.VMOption;
-import sun.management.ManagementFactoryHelper;
import java.lang.reflect.InvocationTargetException;
public class TestStableInt {
+ static final boolean isStableEnabled = StableConfiguration.isStableEnabled;
+ static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
+
public static void main(String[] args) throws Exception {
- System.out.println("@Stable enabled: "+isStableEnabled);
- System.out.println();
-
run(DefaultValue.class);
run(IntStable.class);
+ run(DefaultStaticValue.class);
run(StaticIntStable.class);
run(VolatileIntStable.class);
@@ -145,6 +161,21 @@
/* ==================================================== */
+ static class DefaultStaticValue {
+ public static @Stable int v;
+
+ public static final DefaultStaticValue c = new DefaultStaticValue();
+ public static int get() { return c.v; }
+ public static void test() throws Exception {
+ int val1 = get();
+ c.v = 1; int val2 = get();
+ assertEquals(val1, 0);
+ assertEquals(val2, 1);
+ }
+ }
+
+ /* ==================================================== */
+
static class StaticIntStable {
public static @Stable int v;
@@ -188,20 +219,22 @@
c.v = new int[1]; c.v[0] = 1; int val1 = get();
c.v[0] = 2; int val2 = get();
assertEquals(val1, 1);
- assertEquals(val2, (isStableEnabled ? 1 : 2));
+ assertEquals(val2, (isServerWithStable ? 1 : 2));
c.v = new int[1]; c.v[0] = 3; int val3 = get();
- assertEquals(val3, (isStableEnabled ? 1 : 3));
+ assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 3));
}
{
c.v = new int[20]; c.v[10] = 1; int val1 = get1();
c.v[10] = 2; int val2 = get1();
assertEquals(val1, 1);
- assertEquals(val2, (isStableEnabled ? 1 : 2));
+ assertEquals(val2, (isServerWithStable ? 1 : 2));
c.v = new int[20]; c.v[10] = 3; int val3 = get1();
- assertEquals(val3, (isStableEnabled ? 1 : 3));
+ assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 3));
}
{
@@ -226,19 +259,21 @@
c.v = new int[1][1]; c.v[0][0] = 1; int val1 = get();
c.v[0][0] = 2; int val2 = get();
assertEquals(val1, 1);
- assertEquals(val2, (isStableEnabled ? 1 : 2));
+ assertEquals(val2, (isServerWithStable ? 1 : 2));
c.v = new int[1][1]; c.v[0][0] = 3; int val3 = get();
- assertEquals(val3, (isStableEnabled ? 1 : 3));
+ assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 3));
c.v[0] = new int[1]; c.v[0][0] = 4; int val4 = get();
- assertEquals(val4, (isStableEnabled ? 1 : 4));
+ assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 4));
}
{
c.v = new int[1][1]; int[] val1 = get1();
c.v[0] = new int[1]; int[] val2 = get1();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
@@ -264,28 +299,31 @@
c.v = new int[1][1][1]; c.v[0][0][0] = 1; int val1 = get();
c.v[0][0][0] = 2; int val2 = get();
assertEquals(val1, 1);
- assertEquals(val2, (isStableEnabled ? 1 : 2));
+ assertEquals(val2, (isServerWithStable ? 1 : 2));
c.v = new int[1][1][1]; c.v[0][0][0] = 3; int val3 = get();
- assertEquals(val3, (isStableEnabled ? 1 : 3));
+ assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 3));
c.v[0] = new int[1][1]; c.v[0][0][0] = 4; int val4 = get();
- assertEquals(val4, (isStableEnabled ? 1 : 4));
+ assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 4));
c.v[0][0] = new int[1]; c.v[0][0][0] = 5; int val5 = get();
- assertEquals(val5, (isStableEnabled ? 1 : 5));
+ assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 5));
}
{
c.v = new int[1][1][1]; int[] val1 = get1();
c.v[0][0] = new int[1]; int[] val2 = get1();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
c.v = new int[1][1][1]; int[][] val1 = get2();
c.v[0] = new int[1][1]; int[][] val2 = get2();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
@@ -312,37 +350,41 @@
c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 1; int val1 = get();
c.v[0][0][0][0] = 2; int val2 = get();
assertEquals(val1, 1);
- assertEquals(val2, (isStableEnabled ? 1 : 2));
+ assertEquals(val2, (isServerWithStable ? 1 : 2));
c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 3; int val3 = get();
- assertEquals(val3, (isStableEnabled ? 1 : 3));
+ assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 3));
c.v[0] = new int[1][1][1]; c.v[0][0][0][0] = 4; int val4 = get();
- assertEquals(val4, (isStableEnabled ? 1 : 4));
+ assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 4));
c.v[0][0] = new int[1][1]; c.v[0][0][0][0] = 5; int val5 = get();
- assertEquals(val5, (isStableEnabled ? 1 : 5));
+ assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 5));
c.v[0][0][0] = new int[1]; c.v[0][0][0][0] = 6; int val6 = get();
- assertEquals(val6, (isStableEnabled ? 1 : 6));
+ assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2)
+ : 6));
}
{
c.v = new int[1][1][1][1]; int[] val1 = get1();
c.v[0][0][0] = new int[1]; int[] val2 = get1();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
c.v = new int[1][1][1][1]; int[][] val1 = get2();
c.v[0][0] = new int[1][1]; int[][] val2 = get2();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
c.v = new int[1][1][1][1]; int[][][] val1 = get3();
c.v[0] = new int[1][1][1]; int[][][] val2 = get3();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
@@ -350,13 +392,11 @@
c.v = new int[1][1][1][1]; int[][][][] val2 = get4();
assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
}
-
}
}
/* ==================================================== */
// Dynamic Dim is higher than static
-
static class ObjectArrayLowerDim0 {
public @Stable Object v;
@@ -404,7 +444,7 @@
c.v = new int[1][1]; c.v[0] = new int[0]; int[] val1 = get1();
c.v[0] = new int[0]; int[] val2 = get1();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
@@ -440,14 +480,14 @@
c.v = new int[1][1][1]; c.v[0][0] = new int[0]; int[] val1 = get1();
c.v[0][0] = new int[0]; int[] val2 = get1();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
c.v = new int[1][1][1]; c.v[0] = new int[0][0]; int[][] val1 = get2();
c.v[0] = new int[0][0]; int[][] val2 = get2();
- assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
+ assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
}
{
@@ -582,7 +622,7 @@
elem.a = 2; int val3 = get(); int val4 = get1();
assertEquals(val1, 1);
- assertEquals(val3, (isStableEnabled ? 1 : 2));
+ assertEquals(val3, (isServerWithStable ? 1 : 2));
assertEquals(val2, 1);
assertEquals(val4, 2);
@@ -616,17 +656,4 @@
}
}
}
-
- static final boolean isStableEnabled;
- static {
- HotSpotDiagnosticMXBean diagnostic
- = ManagementFactoryHelper.getDiagnosticMXBean();
- VMOption tmp;
- try {
- tmp = diagnostic.getVMOption("FoldStableValues");
- } catch (IllegalArgumentException e) {
- tmp = null;
- }
- isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue()));
- }
}