hotspot/test/compiler/stable/TestStableBoolean.java
changeset 25641 d99065e4572b
parent 23192 f6a1c8866065
child 26916 8a1deee4f9b4
equal deleted inserted replaced
25640:eb0d8ef2f700 25641:d99065e4572b
    24  */
    24  */
    25 
    25 
    26 /*
    26 /*
    27  * @test TestStableBoolean
    27  * @test TestStableBoolean
    28  * @summary tests on stable fields and arrays
    28  * @summary tests on stable fields and arrays
    29  * @library /testlibrary
    29  * @library /testlibrary /testlibrary/whitebox
    30  * @compile -XDignore.symbol.file TestStableBoolean.java
    30  * @build TestStableBoolean StableConfiguration sun.hotspot.WhiteBox
       
    31  * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
    31  * @run main ClassFileInstaller
    32  * @run main ClassFileInstaller
       
    33  *           java/lang/invoke/StableConfiguration
    32  *           java/lang/invoke/TestStableBoolean
    34  *           java/lang/invoke/TestStableBoolean
    33  *           java/lang/invoke/TestStableBoolean$BooleanStable
    35  *           java/lang/invoke/TestStableBoolean$BooleanStable
    34  *           java/lang/invoke/TestStableBoolean$StaticBooleanStable
    36  *           java/lang/invoke/TestStableBoolean$StaticBooleanStable
    35  *           java/lang/invoke/TestStableBoolean$VolatileBooleanStable
    37  *           java/lang/invoke/TestStableBoolean$VolatileBooleanStable
    36  *           java/lang/invoke/TestStableBoolean$BooleanArrayDim1
    38  *           java/lang/invoke/TestStableBoolean$BooleanArrayDim1
    46  *           java/lang/invoke/TestStableBoolean$NestedStableField2
    48  *           java/lang/invoke/TestStableBoolean$NestedStableField2
    47  *           java/lang/invoke/TestStableBoolean$NestedStableField2$A
    49  *           java/lang/invoke/TestStableBoolean$NestedStableField2$A
    48  *           java/lang/invoke/TestStableBoolean$NestedStableField3
    50  *           java/lang/invoke/TestStableBoolean$NestedStableField3
    49  *           java/lang/invoke/TestStableBoolean$NestedStableField3$A
    51  *           java/lang/invoke/TestStableBoolean$NestedStableField3$A
    50  *           java/lang/invoke/TestStableBoolean$DefaultValue
    52  *           java/lang/invoke/TestStableBoolean$DefaultValue
       
    53  *           java/lang/invoke/TestStableBoolean$DefaultStaticValue
    51  *           java/lang/invoke/TestStableBoolean$ObjectArrayLowerDim2
    54  *           java/lang/invoke/TestStableBoolean$ObjectArrayLowerDim2
    52  *
    55  *
    53  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    56  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    54  *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:+UseCompressedOop
    57  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    55  *                   -server -XX:-TieredCompilation -Xcomp
    58  *                   -server -XX:-TieredCompilation
       
    59  *                   -XX:+FoldStableValues
       
    60  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
       
    61  *                   java.lang.invoke.TestStableBoolean
       
    62  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
       
    63  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
       
    64  *                   -server -XX:-TieredCompilation
       
    65  *                   -XX:-FoldStableValues
    56  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    66  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    57  *                   java.lang.invoke.TestStableBoolean
    67  *                   java.lang.invoke.TestStableBoolean
    58  *
    68  *
    59  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    69  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    60  *                   -XX:+UnlockDiagnosticVMOptions -XX:+FoldStableValues -XX:-UseCompressedOop
    70  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    61  *                   -server -XX:-TieredCompilation -Xcomp
    71  *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
       
    72  *                   -XX:+FoldStableValues
       
    73  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
       
    74  *                   java.lang.invoke.TestStableBoolean
       
    75  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
       
    76  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
       
    77  *                   -server -XX:+TieredCompilation -XX:TieredStopAtLevel=1
       
    78  *                   -XX:-FoldStableValues
    62  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    79  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    63  *                   java.lang.invoke.TestStableBoolean
    80  *                   java.lang.invoke.TestStableBoolean
    64  *
    81  *
    65  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    82  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    66  *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:+UseCompressedOop
    83  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    67  *                   -server -XX:-TieredCompilation -Xcomp
    84  *                   -client -XX:-TieredCompilation
       
    85  *                   -XX:+FoldStableValues
    68  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    86  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    69  *                   java.lang.invoke.TestStableBoolean
    87  *                   java.lang.invoke.TestStableBoolean
    70  *
       
    71  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    88  * @run main/othervm -Xbootclasspath/a:. -XX:+IgnoreUnrecognizedVMOptions
    72  *                   -XX:+UnlockDiagnosticVMOptions -XX:-FoldStableValues -XX:-UseCompressedOop
    89  *                   -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xcomp
    73  *                   -server -XX:-TieredCompilation -Xcomp
    90  *                   -client -XX:-TieredCompilation
       
    91  *                   -XX:-FoldStableValues
    74  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    92  *                   -XX:CompileOnly=::get,::get1,::get2,::get3,::get4
    75  *                   java.lang.invoke.TestStableBoolean
    93  *                   java.lang.invoke.TestStableBoolean
    76  */
    94  */
    77 package java.lang.invoke;
    95 package java.lang.invoke;
    78 
    96 
    79 import com.sun.management.HotSpotDiagnosticMXBean;
       
    80 import com.sun.management.VMOption;
       
    81 import sun.management.ManagementFactoryHelper;
       
    82 import java.lang.reflect.InvocationTargetException;
    97 import java.lang.reflect.InvocationTargetException;
    83 
    98 
    84 public class TestStableBoolean {
    99 public class TestStableBoolean {
       
   100     static final boolean isStableEnabled    = StableConfiguration.isStableEnabled;
       
   101     static final boolean isServerWithStable = StableConfiguration.isServerWithStable;
       
   102 
    85     public static void main(String[] args) throws Exception {
   103     public static void main(String[] args) throws Exception {
    86         System.out.println("@Stable enabled: "+isStableEnabled);
       
    87         System.out.println();
       
    88 
       
    89         run(DefaultValue.class);
   104         run(DefaultValue.class);
    90         run(BooleanStable.class);
   105         run(BooleanStable.class);
       
   106         run(DefaultStaticValue.class);
    91         run(StaticBooleanStable.class);
   107         run(StaticBooleanStable.class);
    92         run(VolatileBooleanStable.class);
   108         run(VolatileBooleanStable.class);
    93 
   109 
    94         // @Stable arrays: Dim 1-4
   110         // @Stable arrays: Dim 1-4
    95         run(BooleanArrayDim1.class);
   111         run(BooleanArrayDim1.class);
   143         }
   159         }
   144     }
   160     }
   145 
   161 
   146     /* ==================================================== */
   162     /* ==================================================== */
   147 
   163 
       
   164     static class DefaultStaticValue {
       
   165         public static @Stable boolean v;
       
   166 
       
   167         public static final DefaultStaticValue c = new DefaultStaticValue();
       
   168         public static boolean get() { return c.v; }
       
   169         public static void test() throws Exception {
       
   170                         boolean val1 = get();
       
   171             c.v = true; boolean val2 = get();
       
   172             assertEquals(val1, false);
       
   173             assertEquals(val2, true);
       
   174         }
       
   175     }
       
   176 
       
   177     /* ==================================================== */
       
   178 
   148     static class StaticBooleanStable {
   179     static class StaticBooleanStable {
   149         public static @Stable boolean v;
   180         public static @Stable boolean v;
   150 
   181 
   151         public static final StaticBooleanStable c = new StaticBooleanStable();
   182         public static final StaticBooleanStable c = new StaticBooleanStable();
   152         public static boolean get() { return c.v; }
   183         public static boolean get() { return c.v; }
   186         public static void test() throws Exception {
   217         public static void test() throws Exception {
   187             {
   218             {
   188                 c.v = new boolean[1]; c.v[0] = true;  boolean val1 = get();
   219                 c.v = new boolean[1]; c.v[0] = true;  boolean val1 = get();
   189                                       c.v[0] = false; boolean val2 = get();
   220                                       c.v[0] = false; boolean val2 = get();
   190                 assertEquals(val1, true);
   221                 assertEquals(val1, true);
   191                 assertEquals(val2, (isStableEnabled ? true : false));
   222                 assertEquals(val2, (isServerWithStable ? true : false));
   192             }
   223             }
   193 
   224 
   194             {
   225             {
   195                 c.v = new boolean[20]; c.v[10] = true;  boolean val1 = get1();
   226                 c.v = new boolean[20]; c.v[10] = true;  boolean val1 = get1();
   196                                        c.v[10] = false; boolean val2 = get1();
   227                                        c.v[10] = false; boolean val2 = get1();
   197                 assertEquals(val1, true);
   228                 assertEquals(val1, true);
   198                 assertEquals(val2, (isStableEnabled ? true : false));
   229                 assertEquals(val2, (isServerWithStable ? true : false));
   199             }
   230             }
   200 
   231 
   201             {
   232             {
   202                 c.v = new boolean[1]; boolean[] val1 = get2();
   233                 c.v = new boolean[1]; boolean[] val1 = get2();
   203                 c.v = new boolean[1]; boolean[] val2 = get2();
   234                 c.v = new boolean[1]; boolean[] val2 = get2();
   218         public static void test() throws Exception {
   249         public static void test() throws Exception {
   219             {
   250             {
   220                 c.v = new boolean[1][1]; c.v[0][0] = true;  boolean val1 = get();
   251                 c.v = new boolean[1][1]; c.v[0][0] = true;  boolean val1 = get();
   221                                          c.v[0][0] = false; boolean val2 = get();
   252                                          c.v[0][0] = false; boolean val2 = get();
   222                 assertEquals(val1, true);
   253                 assertEquals(val1, true);
   223                 assertEquals(val2, (isStableEnabled ? true : false));
   254                 assertEquals(val2, (isServerWithStable ? true : false));
   224 
   255 
   225                 c.v = new boolean[1][1]; c.v[0][0] = false; boolean val3 = get();
   256                 c.v = new boolean[1][1]; c.v[0][0] = false; boolean val3 = get();
   226                 assertEquals(val3, (isStableEnabled ? true : false));
   257                 assertEquals(val3, (isServerWithStable ? true : false));
   227 
   258 
   228                 c.v[0] = new boolean[1]; c.v[0][0] = false; boolean val4 = get();
   259                 c.v[0] = new boolean[1]; c.v[0][0] = false; boolean val4 = get();
   229                 assertEquals(val4, (isStableEnabled ? true : false));
   260                 assertEquals(val4, (isServerWithStable ? true : false));
   230             }
   261             }
   231 
   262 
   232             {
   263             {
   233                 c.v = new boolean[1][1]; boolean[] val1 = get1();
   264                 c.v = new boolean[1][1]; boolean[] val1 = get1();
   234                 c.v[0] = new boolean[1]; boolean[] val2 = get1();
   265                 c.v[0] = new boolean[1]; boolean[] val2 = get1();
   235                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   266                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   236             }
   267             }
   237 
   268 
   238             {
   269             {
   239                 c.v = new boolean[1][1]; boolean[][] val1 = get2();
   270                 c.v = new boolean[1][1]; boolean[][] val1 = get2();
   240                 c.v = new boolean[1][1]; boolean[][] val2 = get2();
   271                 c.v = new boolean[1][1]; boolean[][] val2 = get2();
   256         public static void test() throws Exception {
   287         public static void test() throws Exception {
   257             {
   288             {
   258                 c.v = new boolean[1][1][1]; c.v[0][0][0] = true;  boolean val1 = get();
   289                 c.v = new boolean[1][1][1]; c.v[0][0][0] = true;  boolean val1 = get();
   259                                             c.v[0][0][0] = false; boolean val2 = get();
   290                                             c.v[0][0][0] = false; boolean val2 = get();
   260                 assertEquals(val1, true);
   291                 assertEquals(val1, true);
   261                 assertEquals(val2, (isStableEnabled ? true : false));
   292                 assertEquals(val2, (isServerWithStable ? true : false));
   262 
   293 
   263                 c.v = new boolean[1][1][1]; c.v[0][0][0] = false; boolean val3 = get();
   294                 c.v = new boolean[1][1][1]; c.v[0][0][0] = false; boolean val3 = get();
   264                 assertEquals(val3, (isStableEnabled ? true : false));
   295                 assertEquals(val3, (isServerWithStable ? true : false));
   265 
   296 
   266                 c.v[0] = new boolean[1][1]; c.v[0][0][0] = false; boolean val4 = get();
   297                 c.v[0] = new boolean[1][1]; c.v[0][0][0] = false; boolean val4 = get();
   267                 assertEquals(val4, (isStableEnabled ? true : false));
   298                 assertEquals(val4, (isServerWithStable ? true : false));
   268 
   299 
   269                 c.v[0][0] = new boolean[1]; c.v[0][0][0] = false; boolean val5 = get();
   300                 c.v[0][0] = new boolean[1]; c.v[0][0][0] = false; boolean val5 = get();
   270                 assertEquals(val5, (isStableEnabled ? true : false));
   301                 assertEquals(val5, (isServerWithStable ? true : false));
   271             }
   302             }
   272 
   303 
   273             {
   304             {
   274                 c.v = new boolean[1][1][1]; boolean[] val1 = get1();
   305                 c.v = new boolean[1][1][1]; boolean[] val1 = get1();
   275                 c.v[0][0] = new boolean[1]; boolean[] val2 = get1();
   306                 c.v[0][0] = new boolean[1]; boolean[] val2 = get1();
   276                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   307                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   277             }
   308             }
   278 
   309 
   279             {
   310             {
   280                 c.v = new boolean[1][1][1]; boolean[][] val1 = get2();
   311                 c.v = new boolean[1][1][1]; boolean[][] val1 = get2();
   281                 c.v[0] = new boolean[1][1]; boolean[][] val2 = get2();
   312                 c.v[0] = new boolean[1][1]; boolean[][] val2 = get2();
   282                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   313                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   283             }
   314             }
   284 
   315 
   285             {
   316             {
   286                 c.v = new boolean[1][1][1]; boolean[][][] val1 = get3();
   317                 c.v = new boolean[1][1][1]; boolean[][][] val1 = get3();
   287                 c.v = new boolean[1][1][1]; boolean[][][] val2 = get3();
   318                 c.v = new boolean[1][1][1]; boolean[][][] val2 = get3();
   304         public static void test() throws Exception {
   335         public static void test() throws Exception {
   305             {
   336             {
   306                 c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = true;  boolean val1 = get();
   337                 c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = true;  boolean val1 = get();
   307                                                c.v[0][0][0][0] = false; boolean val2 = get();
   338                                                c.v[0][0][0][0] = false; boolean val2 = get();
   308                 assertEquals(val1, true);
   339                 assertEquals(val1, true);
   309                 assertEquals(val2, (isStableEnabled ? true : false));
   340                 assertEquals(val2, (isServerWithStable ? true : false));
   310 
   341 
   311                 c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = false; boolean val3 = get();
   342                 c.v = new boolean[1][1][1][1]; c.v[0][0][0][0] = false; boolean val3 = get();
   312                 assertEquals(val3, (isStableEnabled ? true : false));
   343                 assertEquals(val3, (isServerWithStable ? true : false));
   313 
   344 
   314                 c.v[0] = new boolean[1][1][1]; c.v[0][0][0][0] = false; boolean val4 = get();
   345                 c.v[0] = new boolean[1][1][1]; c.v[0][0][0][0] = false; boolean val4 = get();
   315                 assertEquals(val4, (isStableEnabled ? true : false));
   346                 assertEquals(val4, (isServerWithStable ? true : false));
   316 
   347 
   317                 c.v[0][0] = new boolean[1][1]; c.v[0][0][0][0] = false; boolean val5 = get();
   348                 c.v[0][0] = new boolean[1][1]; c.v[0][0][0][0] = false; boolean val5 = get();
   318                 assertEquals(val5, (isStableEnabled ? true : false));
   349                 assertEquals(val5, (isServerWithStable ? true : false));
   319 
   350 
   320                 c.v[0][0][0] = new boolean[1]; c.v[0][0][0][0] = false; boolean val6 = get();
   351                 c.v[0][0][0] = new boolean[1]; c.v[0][0][0][0] = false; boolean val6 = get();
   321                 assertEquals(val6, (isStableEnabled ? true : false));
   352                 assertEquals(val6, (isServerWithStable ? true : false));
   322             }
   353             }
   323 
   354 
   324             {
   355             {
   325                 c.v = new boolean[1][1][1][1]; boolean[] val1 = get1();
   356                 c.v = new boolean[1][1][1][1]; boolean[] val1 = get1();
   326                 c.v[0][0][0] = new boolean[1]; boolean[] val2 = get1();
   357                 c.v[0][0][0] = new boolean[1]; boolean[] val2 = get1();
   327                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   358                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   328             }
   359             }
   329 
   360 
   330             {
   361             {
   331                 c.v = new boolean[1][1][1][1]; boolean[][] val1 = get2();
   362                 c.v = new boolean[1][1][1][1]; boolean[][] val1 = get2();
   332                 c.v[0][0] = new boolean[1][1]; boolean[][] val2 = get2();
   363                 c.v[0][0] = new boolean[1][1]; boolean[][] val2 = get2();
   333                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   364                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   334             }
   365             }
   335 
   366 
   336             {
   367             {
   337                 c.v = new boolean[1][1][1][1]; boolean[][][] val1 = get3();
   368                 c.v = new boolean[1][1][1][1]; boolean[][][] val1 = get3();
   338                 c.v[0] = new boolean[1][1][1]; boolean[][][] val2 = get3();
   369                 c.v[0] = new boolean[1][1][1]; boolean[][][] val2 = get3();
   339                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   370                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   340             }
   371             }
   341 
   372 
   342             {
   373             {
   343                 c.v = new boolean[1][1][1][1]; boolean[][][][] val1 = get4();
   374                 c.v = new boolean[1][1][1][1]; boolean[][][][] val1 = get4();
   344                 c.v = new boolean[1][1][1][1]; boolean[][][][] val2 = get4();
   375                 c.v = new boolean[1][1][1][1]; boolean[][][][] val2 = get4();
   397 
   428 
   398             {
   429             {
   399                 c.v = new boolean[1][1]; c.v[0] = new boolean[0]; boolean[] val1 = get1();
   430                 c.v = new boolean[1][1]; c.v[0] = new boolean[0]; boolean[] val1 = get1();
   400                                          c.v[0] = new boolean[0]; boolean[] val2 = get1();
   431                                          c.v[0] = new boolean[0]; boolean[] val2 = get1();
   401 
   432 
   402                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   433                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   403             }
   434             }
   404 
   435 
   405             {
   436             {
   406                 c.v = new boolean[0][0]; Object[] val1 = get2();
   437                 c.v = new boolean[0][0]; Object[] val1 = get2();
   407                 c.v = new boolean[0][0]; Object[] val2 = get2();
   438                 c.v = new boolean[0][0]; Object[] val2 = get2();
   433 
   464 
   434             {
   465             {
   435                 c.v = new boolean[1][1][1]; c.v[0][0] = new boolean[0]; boolean[] val1 = get1();
   466                 c.v = new boolean[1][1][1]; c.v[0][0] = new boolean[0]; boolean[] val1 = get1();
   436                                             c.v[0][0] = new boolean[0]; boolean[] val2 = get1();
   467                                             c.v[0][0] = new boolean[0]; boolean[] val2 = get1();
   437 
   468 
   438                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   469                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   439             }
   470             }
   440 
   471 
   441             {
   472             {
   442                 c.v = new boolean[1][1][1]; c.v[0] = new boolean[0][0]; boolean[][] val1 = get2();
   473                 c.v = new boolean[1][1][1]; c.v[0] = new boolean[0][0]; boolean[][] val1 = get2();
   443                                             c.v[0] = new boolean[0][0]; boolean[][] val2 = get2();
   474                                             c.v[0] = new boolean[0][0]; boolean[][] val2 = get2();
   444 
   475 
   445                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   476                 assertTrue((isServerWithStable ? (val1 == val2) : (val1 != val2)));
   446             }
   477             }
   447 
   478 
   448             {
   479             {
   449                 c.v = new boolean[0][0][0]; Object[][] val1 = get3();
   480                 c.v = new boolean[0][0][0]; Object[][] val1 = get3();
   450                 c.v = new boolean[0][0][0]; Object[][] val2 = get3();
   481                 c.v = new boolean[0][0][0]; Object[][] val2 = get3();
   575                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   606                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   576                                elem.a = true;  boolean val1 = get(); boolean val2 = get1();
   607                                elem.a = true;  boolean val1 = get(); boolean val2 = get1();
   577                                elem.a = false; boolean val3 = get(); boolean val4 = get1();
   608                                elem.a = false; boolean val3 = get(); boolean val4 = get1();
   578 
   609 
   579                 assertEquals(val1, true);
   610                 assertEquals(val1, true);
   580                 assertEquals(val3, (isStableEnabled ? true : false));
   611                 assertEquals(val3, (isServerWithStable ? true : false));
   581 
   612 
   582                 assertEquals(val2, true);
   613                 assertEquals(val2, true);
   583                 assertEquals(val4, false);
   614                 assertEquals(val4, false);
   584             }
   615             }
   585         }
   616         }
   609                 System.out.println("FAILED");
   640                 System.out.println("FAILED");
   610                 ex.printStackTrace(System.out);
   641                 ex.printStackTrace(System.out);
   611             }
   642             }
   612         }
   643         }
   613     }
   644     }
   614 
       
   615     static final boolean isStableEnabled;
       
   616     static {
       
   617         HotSpotDiagnosticMXBean diagnostic
       
   618                 = ManagementFactoryHelper.getDiagnosticMXBean();
       
   619         VMOption tmp;
       
   620         try {
       
   621             tmp = diagnostic.getVMOption("FoldStableValues");
       
   622         } catch (IllegalArgumentException e) {
       
   623             tmp = null;
       
   624         }
       
   625         isStableEnabled = (tmp == null ? false : Boolean.parseBoolean(tmp.getValue()));
       
   626     }
       
   627 }
   645 }