test/compiler/stable/TestStableInt.java

changeset 6747
ee1c924763d2
parent 6528
248ff38d2950
child 6876
710a3c8b516e
child 7787
1ec24746bb40
     1.1 --- a/test/compiler/stable/TestStableInt.java	Wed Jul 02 22:54:18 2014 +0200
     1.2 +++ b/test/compiler/stable/TestStableInt.java	Thu Jul 10 12:04:43 2014 -0700
     1.3 @@ -26,9 +26,11 @@
     1.4  /*
     1.5   * @test TestStableInt
     1.6   * @summary tests on stable fields and arrays
     1.7 - * @library /testlibrary
     1.8 - * @compile -XDignore.symbol.file TestStableInt.java
     1.9 + * @library /testlibrary /testlibrary/whitebox
    1.10 + * @build TestStableInt StableConfiguration sun.hotspot.WhiteBox
    1.11 + * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
    1.12   * @run main ClassFileInstaller
    1.13 + *           java/lang/invoke/StableConfiguration
    1.14   *           java/lang/invoke/TestStableInt
    1.15   *           java/lang/invoke/TestStableInt$IntStable
    1.16   *           java/lang/invoke/TestStableInt$StaticIntStable
    1.17 @@ -48,46 +50,60 @@
    1.18   *           java/lang/invoke/TestStableInt$NestedStableField3
    1.19   *           java/lang/invoke/TestStableInt$NestedStableField3$A
    1.20   *           java/lang/invoke/TestStableInt$DefaultValue
    1.21 + *           java/lang/invoke/TestStableInt$DefaultStaticValue
    1.22   *           java/lang/invoke/TestStableInt$ObjectArrayLowerDim2
    1.23   *
    1.24   * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.25 - *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop
    1.26 - *                   -server -XX:-TieredCompilation -Xcomp
    1.27 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.28 + *                   -server -XX:-TieredCompilation
    1.29 + *                   -XX:+FoldStableValues
    1.30 + *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.31 + *                   java.lang.invoke.TestStableInt
    1.32 + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.33 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.34 + *                   -server -XX:-TieredCompilation
    1.35 + *                   -XX:-FoldStableValues
    1.36   *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.37   *                   java.lang.invoke.TestStableInt
    1.38   *
    1.39   * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.40 - *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop
    1.41 - *                   -server -XX:-TieredCompilation -Xcomp
    1.42 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.43 + *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
    1.44 + *                   -XX:+FoldStableValues
    1.45 + *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.46 + *                   java.lang.invoke.TestStableInt
    1.47 + * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.48 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.49 + *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
    1.50 + *                   -XX:-FoldStableValues
    1.51   *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.52   *                   java.lang.invoke.TestStableInt
    1.53   *
    1.54   * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.55 - *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop
    1.56 - *                   -server -XX:-TieredCompilation -Xcomp
    1.57 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.58 + *                   -client -XX:-TieredCompilation
    1.59 + *                   -XX:+FoldStableValues
    1.60   *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.61   *                   java.lang.invoke.TestStableInt
    1.62 - *
    1.63   * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    1.64 - *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop
    1.65 - *                   -server -XX:-TieredCompilation -Xcomp
    1.66 + *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    1.67 + *                   -client -XX:-TieredCompilation
    1.68 + *                   -XX:-FoldStableValues
    1.69   *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    1.70   *                   java.lang.invoke.TestStableInt
    1.71   */
    1.72  package java.lang.invoke;
    1.73  
    1.74 -import com.sun.management.HotSpotDiagnosticMXBean;
    1.75 -import com.sun.management.VMOption;
    1.76 -import sun.management.ManagementFactoryHelper;
    1.77  import java.lang.reflect.InvocationTargetException;
    1.78  
    1.79  public class TestStableInt {
    1.80 +    static final boolean isStableEnabled    = StableConfiguration.isStableEnabled;
    1.81 +    static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
    1.82 +
    1.83      public static void main(String[] args) throws Exception {
    1.84 -        System.out.println("@Stable enabled: "+isStableEnabled);
    1.85 -        System.out.println();
    1.86 -
    1.87          run(DefaultValue.class);
    1.88          run(IntStable.class);
    1.89 +        run(DefaultStaticValue.class);
    1.90          run(StaticIntStable.class);
    1.91          run(VolatileIntStable.class);
    1.92  
    1.93 @@ -145,6 +161,21 @@
    1.94  
    1.95      /* ==================================================== */
    1.96  
    1.97 +    static class DefaultStaticValue {
    1.98 +        public static @Stable int v;
    1.99 +
   1.100 +        public static final DefaultStaticValue c = new DefaultStaticValue();
   1.101 +        public static int get() { return c.v; }
   1.102 +        public static void test() throws Exception {
   1.103 +                        int val1 = get();
   1.104 +            c.v = 1; int val2 = get();
   1.105 +            assertEquals(val1, 0);
   1.106 +            assertEquals(val2, 1);
   1.107 +        }
   1.108 +    }
   1.109 +
   1.110 +    /* ==================================================== */
   1.111 +
   1.112      static class StaticIntStable {
   1.113          public static @Stable int v;
   1.114  
   1.115 @@ -188,20 +219,22 @@
   1.116                  c.v = new int[1]; c.v[0] = 1; int val1 = get();
   1.117                                    c.v[0] = 2; int val2 = get();
   1.118                  assertEquals(val1, 1);
   1.119 -                assertEquals(val2, (isStableEnabled ? 1 : 2));
   1.120 +                assertEquals(val2, (isServerWithStable ? 1 : 2));
   1.121  
   1.122                  c.v = new int[1]; c.v[0] = 3; int val3 = get();
   1.123 -                assertEquals(val3, (isStableEnabled ? 1 : 3));
   1.124 +                assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.125 +                                                    : 3));
   1.126              }
   1.127  
   1.128              {
   1.129                  c.v = new int[20]; c.v[10] = 1; int val1 = get1();
   1.130                                     c.v[10] = 2; int val2 = get1();
   1.131                  assertEquals(val1, 1);
   1.132 -                assertEquals(val2, (isStableEnabled ? 1 : 2));
   1.133 +                assertEquals(val2, (isServerWithStable ? 1 : 2));
   1.134  
   1.135                  c.v = new int[20]; c.v[10] = 3; int val3 = get1();
   1.136 -                assertEquals(val3, (isStableEnabled ? 1 : 3));
   1.137 +                assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.138 +                                                    : 3));
   1.139              }
   1.140  
   1.141              {
   1.142 @@ -226,19 +259,21 @@
   1.143                  c.v = new int[1][1]; c.v[0][0] = 1; int val1 = get();
   1.144                                       c.v[0][0] = 2; int val2 = get();
   1.145                  assertEquals(val1, 1);
   1.146 -                assertEquals(val2, (isStableEnabled ? 1 : 2));
   1.147 +                assertEquals(val2, (isServerWithStable ? 1 : 2));
   1.148  
   1.149                  c.v = new int[1][1]; c.v[0][0] = 3; int val3 = get();
   1.150 -                assertEquals(val3, (isStableEnabled ? 1 : 3));
   1.151 +                assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.152 +                                                    : 3));
   1.153  
   1.154                  c.v[0] = new int[1]; c.v[0][0] = 4; int val4 = get();
   1.155 -                assertEquals(val4, (isStableEnabled ? 1 : 4));
   1.156 +                assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.157 +                                                    : 4));
   1.158              }
   1.159  
   1.160              {
   1.161                  c.v = new int[1][1]; int[] val1 = get1();
   1.162                  c.v[0] = new int[1]; int[] val2 = get1();
   1.163 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.164 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.165              }
   1.166  
   1.167              {
   1.168 @@ -264,28 +299,31 @@
   1.169                  c.v = new int[1][1][1]; c.v[0][0][0] = 1; int val1 = get();
   1.170                                          c.v[0][0][0] = 2; int val2 = get();
   1.171                  assertEquals(val1, 1);
   1.172 -                assertEquals(val2, (isStableEnabled ? 1 : 2));
   1.173 +                assertEquals(val2, (isServerWithStable ? 1 : 2));
   1.174  
   1.175                  c.v = new int[1][1][1]; c.v[0][0][0] = 3; int val3 = get();
   1.176 -                assertEquals(val3, (isStableEnabled ? 1 : 3));
   1.177 +                assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.178 +                                                    : 3));
   1.179  
   1.180                  c.v[0] = new int[1][1]; c.v[0][0][0] = 4; int val4 = get();
   1.181 -                assertEquals(val4, (isStableEnabled ? 1 : 4));
   1.182 +                assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.183 +                                                    : 4));
   1.184  
   1.185                  c.v[0][0] = new int[1]; c.v[0][0][0] = 5; int val5 = get();
   1.186 -                assertEquals(val5, (isStableEnabled ? 1 : 5));
   1.187 +                assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.188 +                                                    : 5));
   1.189              }
   1.190  
   1.191              {
   1.192                  c.v = new int[1][1][1]; int[] val1 = get1();
   1.193                  c.v[0][0] = new int[1]; int[] val2 = get1();
   1.194 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.195 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.196              }
   1.197  
   1.198              {
   1.199                  c.v = new int[1][1][1]; int[][] val1 = get2();
   1.200                  c.v[0] = new int[1][1]; int[][] val2 = get2();
   1.201 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.202 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.203              }
   1.204  
   1.205              {
   1.206 @@ -312,37 +350,41 @@
   1.207                  c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 1; int val1 = get();
   1.208                                             c.v[0][0][0][0] = 2; int val2 = get();
   1.209                  assertEquals(val1, 1);
   1.210 -                assertEquals(val2, (isStableEnabled ? 1 : 2));
   1.211 +                assertEquals(val2, (isServerWithStable ? 1 : 2));
   1.212  
   1.213                  c.v = new int[1][1][1][1]; c.v[0][0][0][0] = 3; int val3 = get();
   1.214 -                assertEquals(val3, (isStableEnabled ? 1 : 3));
   1.215 +                assertEquals(val3, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.216 +                                                    : 3));
   1.217  
   1.218                  c.v[0] = new int[1][1][1]; c.v[0][0][0][0] = 4; int val4 = get();
   1.219 -                assertEquals(val4, (isStableEnabled ? 1 : 4));
   1.220 +                assertEquals(val4, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.221 +                                                    : 4));
   1.222  
   1.223                  c.v[0][0] = new int[1][1]; c.v[0][0][0][0] = 5; int val5 = get();
   1.224 -                assertEquals(val5, (isStableEnabled ? 1 : 5));
   1.225 +                assertEquals(val5, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.226 +                                                    : 5));
   1.227  
   1.228                  c.v[0][0][0] = new int[1]; c.v[0][0][0][0] = 6; int val6 = get();
   1.229 -                assertEquals(val6, (isStableEnabled ? 1 : 6));
   1.230 +                assertEquals(val6, (isStableEnabled ? (isServerWithStable ? 1 : 2)
   1.231 +                                                    : 6));
   1.232              }
   1.233  
   1.234              {
   1.235                  c.v = new int[1][1][1][1]; int[] val1 = get1();
   1.236                  c.v[0][0][0] = new int[1]; int[] val2 = get1();
   1.237 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.238 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.239              }
   1.240  
   1.241              {
   1.242                  c.v = new int[1][1][1][1]; int[][] val1 = get2();
   1.243                  c.v[0][0] = new int[1][1]; int[][] val2 = get2();
   1.244 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.245 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.246              }
   1.247  
   1.248              {
   1.249                  c.v = new int[1][1][1][1]; int[][][] val1 = get3();
   1.250                  c.v[0] = new int[1][1][1]; int[][][] val2 = get3();
   1.251 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.252 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.253              }
   1.254  
   1.255              {
   1.256 @@ -350,13 +392,11 @@
   1.257                  c.v = new int[1][1][1][1]; int[][][][] val2 = get4();
   1.258                  assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.259              }
   1.260 -
   1.261          }
   1.262      }
   1.263  
   1.264      /* ==================================================== */
   1.265      // Dynamic Dim is higher than static
   1.266 -
   1.267      static class ObjectArrayLowerDim0 {
   1.268          public @Stable Object v;
   1.269  
   1.270 @@ -404,7 +444,7 @@
   1.271                  c.v = new int[1][1]; c.v[0] = new int[0]; int[] val1 = get1();
   1.272                                       c.v[0] = new int[0]; int[] val2 = get1();
   1.273  
   1.274 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.275 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.276              }
   1.277  
   1.278              {
   1.279 @@ -440,14 +480,14 @@
   1.280                  c.v = new int[1][1][1]; c.v[0][0] = new int[0]; int[] val1 = get1();
   1.281                                          c.v[0][0] = new int[0]; int[] val2 = get1();
   1.282  
   1.283 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.284 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.285              }
   1.286  
   1.287              {
   1.288                  c.v = new int[1][1][1]; c.v[0] = new int[0][0]; int[][] val1 = get2();
   1.289                                          c.v[0] = new int[0][0]; int[][] val2 = get2();
   1.290  
   1.291 -                assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   1.292 +                assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   1.293              }
   1.294  
   1.295              {
   1.296 @@ -582,7 +622,7 @@
   1.297                                 elem.a = 2; int val3 = get(); int val4 = get1();
   1.298  
   1.299                  assertEquals(val1, 1);
   1.300 -                assertEquals(val3, (isStableEnabled ? 1 : 2));
   1.301 +                assertEquals(val3, (isServerWithStable ? 1 : 2));
   1.302  
   1.303                  assertEquals(val2, 1);
   1.304                  assertEquals(val4, 2);
   1.305 @@ -616,17 +656,4 @@
   1.306              }
   1.307          }
   1.308      }
   1.309 -
   1.310 -    static final boolean isStableEnabled;
   1.311 -    static {
   1.312 -        HotSpotDiagnosticMXBean diagnostic
   1.313 -                = ManagementFactoryHelper.getDiagnosticMXBean();
   1.314 -        VMOption tmp;
   1.315 -        try {
   1.316 -            tmp = diagnostic.getVMOption("FoldStableValues");
   1.317 -        } catch (IllegalArgumentException e) {
   1.318 -            tmp = null;
   1.319 -        }
   1.320 -        isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue()));
   1.321 -    }
   1.322  }

mercurial