hotspot/test/compiler/stable/TestStableObject.java
changeset 39422 52e7ddc77845
parent 38207 2ed792c9481d
child 40059 c2304140ed64
equal deleted inserted replaced
39421:a9652c919db8 39422:52e7ddc77845
   100         public @Stable Object v;
   100         public @Stable Object v;
   101 
   101 
   102         public static final DefaultValue c = new DefaultValue();
   102         public static final DefaultValue c = new DefaultValue();
   103         public static Object get() { return c.v; }
   103         public static Object get() { return c.v; }
   104         public static void test() throws Exception {
   104         public static void test() throws Exception {
   105             Object val1 = get();
   105                             Object val1 = get();
   106             c.v = Values.A; Object val2 = get();
   106             c.v = Values.A; Object val2 = get();
   107             assertEquals(val1, null);
   107             assertEquals(val1, null);
   108             assertEquals(val2, Values.A);
   108             assertEquals(val2, Values.A);
   109         }
   109         }
   110     }
   110     }
   130         public static @Stable Object v;
   130         public static @Stable Object v;
   131 
   131 
   132         public static final DefaultStaticValue c = new DefaultStaticValue();
   132         public static final DefaultStaticValue c = new DefaultStaticValue();
   133         public static Object get() { return c.v; }
   133         public static Object get() { return c.v; }
   134         public static void test() throws Exception {
   134         public static void test() throws Exception {
   135             Object val1 = get();
   135                             Object val1 = get();
   136             c.v = Values.A; Object val2 = get();
   136             c.v = Values.A; Object val2 = get();
   137             assertEquals(val1, null);
   137             assertEquals(val1, null);
   138             assertEquals(val2, Values.A);
   138             assertEquals(val2, Values.A);
   139         }
   139         }
   140     }
   140     }
   180         public static Object get1() { return c.v[10]; }
   180         public static Object get1() { return c.v[10]; }
   181         public static Object[] get2() { return c.v; }
   181         public static Object[] get2() { return c.v; }
   182         public static void test() throws Exception {
   182         public static void test() throws Exception {
   183             {
   183             {
   184                 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get();
   184                 c.v = new Object[1]; c.v[0] = Values.A; Object val1 = get();
   185                 c.v[0] = Values.B; Object val2 = get();
   185                                      c.v[0] = Values.B; Object val2 = get();
   186                 assertEquals(val1, Values.A);
   186                 assertEquals(val1, Values.A);
   187                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   187                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   188 
   188 
   189                 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get();
   189                 c.v = new Object[1]; c.v[0] = Values.C; Object val3 = get();
   190                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   190                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   191                         : Values.C));
   191                                                     : Values.C));
   192             }
   192             }
   193 
   193 
   194             {
   194             {
   195                 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1();
   195                 c.v = new Object[20]; c.v[10] = Values.A; Object val1 = get1();
   196                 c.v[10] = Values.B; Object val2 = get1();
   196                                       c.v[10] = Values.B; Object val2 = get1();
   197                 assertEquals(val1, Values.A);
   197                 assertEquals(val1, Values.A);
   198                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   198                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   199 
   199 
   200                 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1();
   200                 c.v = new Object[20]; c.v[10] = Values.C; Object val3 = get1();
   201                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   201                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   202                         : Values.C));
   202                                                     : Values.C));
   203             }
   203             }
   204 
   204 
   205             {
   205             {
   206                 c.v = new Object[1]; Object[] val1 = get2();
   206                 c.v = new Object[1]; Object[] val1 = get2();
   207                 c.v = new Object[1]; Object[] val2 = get2();
   207                 c.v = new Object[1]; Object[] val2 = get2();
   220         public static Object[] get1() { return c.v[0]; }
   220         public static Object[] get1() { return c.v[0]; }
   221         public static Object[][] get2() { return c.v; }
   221         public static Object[][] get2() { return c.v; }
   222         public static void test() throws Exception {
   222         public static void test() throws Exception {
   223             {
   223             {
   224                 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get();
   224                 c.v = new Object[1][1]; c.v[0][0] = Values.A; Object val1 = get();
   225                 c.v[0][0] = Values.B; Object val2 = get();
   225                                         c.v[0][0] = Values.B; Object val2 = get();
   226                 assertEquals(val1, Values.A);
   226                 assertEquals(val1, Values.A);
   227                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   227                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   228 
   228 
   229                 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get();
   229                 c.v = new Object[1][1]; c.v[0][0] = Values.C; Object val3 = get();
   230                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   230                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   231                         : Values.C));
   231                                                     : Values.C));
   232 
   232 
   233                 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get();
   233                 c.v[0] = new Object[1]; c.v[0][0] = Values.D; Object val4 = get();
   234                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   234                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   235                         : Values.D));
   235                                                     : Values.D));
   236             }
   236             }
   237 
   237 
   238             {
   238             {
   239                 c.v = new Object[1][1]; Object[] val1 = get1();
   239                 c.v = new Object[1][1]; Object[] val1 = get1();
   240                 c.v[0] = new Object[1]; Object[] val2 = get1();
   240                 c.v[0] = new Object[1]; Object[] val2 = get1();
   260         public static Object[][] get2() { return c.v[0]; }
   260         public static Object[][] get2() { return c.v[0]; }
   261         public static Object[][][] get3() { return c.v; }
   261         public static Object[][][] get3() { return c.v; }
   262         public static void test() throws Exception {
   262         public static void test() throws Exception {
   263             {
   263             {
   264                 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get();
   264                 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.A; Object val1 = get();
   265                 c.v[0][0][0] = Values.B; Object val2 = get();
   265                                            c.v[0][0][0] = Values.B; Object val2 = get();
   266                 assertEquals(val1, Values.A);
   266                 assertEquals(val1, Values.A);
   267                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   267                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   268 
   268 
   269                 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get();
   269                 c.v = new Object[1][1][1]; c.v[0][0][0] = Values.C; Object val3 = get();
   270                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   270                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   271                         : Values.C));
   271                                                     : Values.C));
   272 
   272 
   273                 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get();
   273                 c.v[0] = new Object[1][1]; c.v[0][0][0] = Values.D; Object val4 = get();
   274                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   274                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   275                         : Values.D));
   275                                                     : Values.D));
   276 
   276 
   277                 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get();
   277                 c.v[0][0] = new Object[1]; c.v[0][0][0] = Values.E; Object val5 = get();
   278                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   278                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   279                         : Values.E));
   279                                                     : Values.E));
   280             }
   280             }
   281 
   281 
   282             {
   282             {
   283                 c.v = new Object[1][1][1]; Object[] val1 = get1();
   283                 c.v = new Object[1][1][1]; Object[] val1 = get1();
   284                 c.v[0][0] = new Object[1]; Object[] val2 = get1();
   284                 c.v[0][0] = new Object[1]; Object[] val2 = get1();
   311         public static Object[][][] get3() { return c.v[0]; }
   311         public static Object[][][] get3() { return c.v[0]; }
   312         public static Object[][][][] get4() { return c.v; }
   312         public static Object[][][][] get4() { return c.v; }
   313         public static void test() throws Exception {
   313         public static void test() throws Exception {
   314             {
   314             {
   315                 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get();
   315                 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.A; Object val1 = get();
   316                 c.v[0][0][0][0] = Values.B; Object val2 = get();
   316                                               c.v[0][0][0][0] = Values.B; Object val2 = get();
   317                 assertEquals(val1, Values.A);
   317                 assertEquals(val1, Values.A);
   318                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   318                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   319 
   319 
   320                 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get();
   320                 c.v = new Object[1][1][1][1]; c.v[0][0][0][0] = Values.C; Object val3 = get();
   321                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   321                 assertEquals(val3, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   322                         : Values.C));
   322                                                     : Values.C));
   323 
   323 
   324                 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get();
   324                 c.v[0] = new Object[1][1][1]; c.v[0][0][0][0] = Values.D; Object val4 = get();
   325                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   325                 assertEquals(val4, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   326                         : Values.D));
   326                                                     : Values.D));
   327 
   327 
   328                 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get();
   328                 c.v[0][0] = new Object[1][1]; c.v[0][0][0][0] = Values.E; Object val5 = get();
   329                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   329                 assertEquals(val5, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   330                         : Values.E));
   330                                                     : Values.E));
   331 
   331 
   332                 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get();
   332                 c.v[0][0][0] = new Object[1]; c.v[0][0][0][0] = Values.F; Object val6 = get();
   333                 assertEquals(val6, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   333                 assertEquals(val6, (isStableEnabled ? (isStableEnabled ? Values.A : Values.B)
   334                         : Values.F));
   334                                                     : Values.F));
   335             }
   335             }
   336 
   336 
   337             {
   337             {
   338                 c.v = new Object[1][1][1][1]; Object[] val1 = get1();
   338                 c.v = new Object[1][1][1][1]; Object[] val1 = get1();
   339                 c.v[0][0][0] = new Object[1]; Object[] val2 = get1();
   339                 c.v[0][0][0] = new Object[1]; Object[] val2 = get1();
   370         public static Object[] get1() { return (Object[])c.v; }
   370         public static Object[] get1() { return (Object[])c.v; }
   371 
   371 
   372         public static void test() throws Exception {
   372         public static void test() throws Exception {
   373             {
   373             {
   374                 c.v = new Object[1]; ((Object[])c.v)[0] = Values.A; Object val1 = get();
   374                 c.v = new Object[1]; ((Object[])c.v)[0] = Values.A; Object val1 = get();
   375                 ((Object[])c.v)[0] = Values.B; Object val2 = get();
   375                                      ((Object[])c.v)[0] = Values.B; Object val2 = get();
   376 
   376 
   377                 assertEquals(val1, Values.A);
   377                 assertEquals(val1, Values.A);
   378                 assertEquals(val2, Values.B);
   378                 assertEquals(val2, Values.B);
   379             }
   379             }
   380 
   380 
   397         public static Object[] get2() { return c.v; }
   397         public static Object[] get2() { return c.v; }
   398 
   398 
   399         public static void test() throws Exception {
   399         public static void test() throws Exception {
   400             {
   400             {
   401                 c.v = new Object[1][1]; ((Object[][])c.v)[0][0] = Values.A; Object val1 = get();
   401                 c.v = new Object[1][1]; ((Object[][])c.v)[0][0] = Values.A; Object val1 = get();
   402                 ((Object[][])c.v)[0][0] = Values.B; Object val2 = get();
   402                                         ((Object[][])c.v)[0][0] = Values.B; Object val2 = get();
   403 
   403 
   404                 assertEquals(val1, Values.A);
   404                 assertEquals(val1, Values.A);
   405                 assertEquals(val2, Values.B);
   405                 assertEquals(val2, Values.B);
   406             }
   406             }
   407 
   407 
   408             {
   408             {
   409                 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1();
   409                 c.v = new Object[1][1]; c.v[0] = new Object[0]; Object[] val1 = get1();
   410                 c.v[0] = new Object[0]; Object[] val2 = get1();
   410                                         c.v[0] = new Object[0]; Object[] val2 = get1();
   411 
   411 
   412                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   412                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   413             }
   413             }
   414 
   414 
   415             {
   415             {
   433         public static Object[][] get3() { return c.v; }
   433         public static Object[][] get3() { return c.v; }
   434 
   434 
   435         public static void test() throws Exception {
   435         public static void test() throws Exception {
   436             {
   436             {
   437                 c.v = new Object[1][1][1]; ((Object[][][])c.v)[0][0][0] = Values.A; Object val1 = get();
   437                 c.v = new Object[1][1][1]; ((Object[][][])c.v)[0][0][0] = Values.A; Object val1 = get();
   438                 ((Object[][][])c.v)[0][0][0] = Values.B; Object val2 = get();
   438                                            ((Object[][][])c.v)[0][0][0] = Values.B; Object val2 = get();
   439 
   439 
   440                 assertEquals(val1, Values.A);
   440                 assertEquals(val1, Values.A);
   441                 assertEquals(val2, Values.B);
   441                 assertEquals(val2, Values.B);
   442             }
   442             }
   443 
   443 
   444             {
   444             {
   445                 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1();
   445                 c.v = new Object[1][1][1]; c.v[0][0] = new Object[0]; Object[] val1 = get1();
   446                 c.v[0][0] = new Object[0]; Object[] val2 = get1();
   446                                            c.v[0][0] = new Object[0]; Object[] val2 = get1();
   447 
   447 
   448                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   448                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   449             }
   449             }
   450 
   450 
   451             {
   451             {
   452                 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2();
   452                 c.v = new Object[1][1][1]; c.v[0] = new Object[0][0]; Object[][] val1 = get2();
   453                 c.v[0] = new Object[0][0]; Object[][] val2 = get2();
   453                                            c.v[0] = new Object[0][0]; Object[][] val2 = get2();
   454 
   454 
   455                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   455                 assertTrue((isStableEnabled ? (val1 == val2) : (val1 != val2)));
   456             }
   456             }
   457 
   457 
   458             {
   458             {
   478         public static Object get1() { return get().a; }
   478         public static Object get1() { return get().a; }
   479 
   479 
   480         public static void test() throws Exception {
   480         public static void test() throws Exception {
   481             {
   481             {
   482                 c.v = new A(); c.v.a = Values.A; A val1 = get();
   482                 c.v = new A(); c.v.a = Values.A; A val1 = get();
   483                 c.v.a = Values.B; A val2 = get();
   483                                c.v.a = Values.B; A val2 = get();
   484 
   484 
   485                 assertEquals(val1.a, Values.B);
   485                 assertEquals(val1.a, Values.B);
   486                 assertEquals(val2.a, Values.B);
   486                 assertEquals(val2.a, Values.B);
   487             }
   487             }
   488 
   488 
   489             {
   489             {
   490                 c.v = new A(); c.v.a = Values.A; Object val1 = get1();
   490                 c.v = new A(); c.v.a = Values.A; Object val1 = get1();
   491                 c.v.a = Values.B; Object val2 = get1();
   491                                c.v.a = Values.B; Object val2 = get1();
   492                 c.v = new A(); c.v.a = Values.C; Object val3 = get1();
   492                 c.v = new A(); c.v.a = Values.C; Object val3 = get1();
   493 
   493 
   494                 assertEquals(val1, Values.A);
   494                 assertEquals(val1, Values.A);
   495                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   495                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   496                 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
   496                 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
   512         public static Object get1() { return get().a; }
   512         public static Object get1() { return get().a; }
   513 
   513 
   514         public static void test() throws Exception {
   514         public static void test() throws Exception {
   515             {
   515             {
   516                 c.v = new A(); c.v.next = new A();   c.v.next.next  = c.v;
   516                 c.v = new A(); c.v.next = new A();   c.v.next.next  = c.v;
   517                 c.v.a = Values.A; c.v.next.a = Values.A; A val1 = get();
   517                                c.v.a = Values.A; c.v.next.a = Values.A; A val1 = get();
   518                 c.v.a = Values.B; c.v.next.a = Values.B; A val2 = get();
   518                                c.v.a = Values.B; c.v.next.a = Values.B; A val2 = get();
   519 
   519 
   520                 assertEquals(val1.a, Values.B);
   520                 assertEquals(val1.a, Values.B);
   521                 assertEquals(val2.a, Values.B);
   521                 assertEquals(val2.a, Values.B);
   522             }
   522             }
   523 
   523 
   524             {
   524             {
   525                 c.v = new A(); c.v.next = c.v;
   525                 c.v = new A(); c.v.next = c.v;
   526                 c.v.a = Values.A; Object val1 = get1();
   526                                c.v.a = Values.A; Object val1 = get1();
   527                 c.v.a = Values.B; Object val2 = get1();
   527                                c.v.a = Values.B; Object val2 = get1();
   528                 c.v = new A(); c.v.next = c.v;
   528                 c.v = new A(); c.v.next = c.v;
   529                 c.v.a = Values.C; Object val3 = get1();
   529                                c.v.a = Values.C; Object val3 = get1();
   530 
   530 
   531                 assertEquals(val1, Values.A);
   531                 assertEquals(val1, Values.A);
   532                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   532                 assertEquals(val2, (isStableEnabled ? Values.A : Values.B));
   533                 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
   533                 assertEquals(val3, (isStableEnabled ? Values.A : Values.C));
   534             }
   534             }
   550         public static Object get1() { return c.v.left.left.right.left.a; }
   550         public static Object get1() { return c.v.left.left.right.left.a; }
   551 
   551 
   552         public static void test() throws Exception {
   552         public static void test() throws Exception {
   553             {
   553             {
   554                 c.v = new A(); c.v.left = c.v.right = c.v;
   554                 c.v = new A(); c.v.left = c.v.right = c.v;
   555                 c.v.a = Values.A; Object val1 = get(); Object val2 = get1();
   555                                c.v.a = Values.A; Object val1 = get(); Object val2 = get1();
   556                 c.v.a = Values.B; Object val3 = get(); Object val4 = get1();
   556                                c.v.a = Values.B; Object val3 = get(); Object val4 = get1();
   557 
   557 
   558                 assertEquals(val1, Values.A);
   558                 assertEquals(val1, Values.A);
   559                 assertEquals(val3, (isStableEnabled ? Values.A : Values.B));
   559                 assertEquals(val3, (isStableEnabled ? Values.A : Values.B));
   560 
   560 
   561                 assertEquals(val2, Values.A);
   561                 assertEquals(val2, Values.A);
   581 
   581 
   582         public static void test() throws Exception {
   582         public static void test() throws Exception {
   583             {
   583             {
   584                 A elem = new A();
   584                 A elem = new A();
   585                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   585                 c.v = new A[] { elem, elem }; c.v[0].left = c.v[0].right = c.v;
   586                 elem.a = Values.A; Object val1 = get(); Object val2 = get1();
   586                                elem.a = Values.A; Object val1 = get(); Object val2 = get1();
   587                 elem.a = Values.B; Object val3 = get(); Object val4 = get1();
   587                                elem.a = Values.B; Object val3 = get(); Object val4 = get1();
   588 
   588 
   589                 assertEquals(val1, Values.A);
   589                 assertEquals(val1, Values.A);
   590                 assertEquals(val3, (isStableEnabled ? Values.A : Values.B));
   590                 assertEquals(val3, (isStableEnabled ? Values.A : Values.B));
   591 
   591 
   592                 assertEquals(val2, Values.A);
   592                 assertEquals(val2, Values.A);