< prev index next >

test/compiler/c2/Test6724218.java

Print this page
rev 11557 : 8132919: use package in compiler tests
Reviewed-by: duke


   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 6724218
  27  * @summary Fix raise_LCA_above_marks() early termination
  28  * @run main/othervm -Xbatch -XX:CompileCommand=exclude,Test.update Test



  29  */
  30 
  31 public class Test {
  32     Test   next  = null;


  33     Object value = null;
  34 
  35     static boolean _closed = false;
  36     static int size = 0;
  37     static Test list  = null;
  38     static int cache_size = 0;
  39     static Test cache = null;
  40 
  41     Object get(int i) {
  42         Test t = list;
  43         list = t.next;
  44         size -= 1;
  45         Object o = t.value;
  46         if (i > 0) {
  47             t.next = cache;
  48             t.value = null;
  49             cache = t;
  50             cache_size = +1;
  51         }
  52         return o;
  53     }
  54 
  55     void update() {
  56         // Exclude compilation of this one.
  57         if (size == 0) {
  58             Test t;
  59             if (cache_size > 0) {
  60                 t = cache;
  61                 cache = t.next;
  62                 cache_size = -1;
  63             } else {
  64                 t = new Test();
  65             }
  66             t.value = new Object();
  67             t.next = list;
  68             list = t;
  69             size += 1;
  70         }
  71     }
  72 
  73     synchronized Object test(int i) {
  74         while (true) {
  75             if (_closed) {
  76                 return null;
  77             } else if (size > 0) {
  78                 return get(i);
  79             }
  80             update();
  81         }
  82     }
  83 
  84     public static void main(String argv[]) throws Exception {
  85         Test t = new Test();
  86         int lim = 500000;
  87         Object o;
  88         for (int j = 0; j < lim; j++) {
  89             o = t.test(j&1);
  90             if (o == null) {
  91               throw new Exception("*** Failed on iteration " + j);
  92             }
  93             if ((j&1) == 0) {
  94               t.update();
  95             }
  96         }
  97     }
  98 }


   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 6724218
  27  * @summary Fix raise_LCA_above_marks() early termination
  28  *
  29  * @run main/othervm -Xbatch
  30  *      -XX:CompileCommand=exclude,compiler.c2.Test6724218::update
  31  *      compiler.c2.Test6724218
  32  */
  33 
  34 package compiler.c2;
  35 
  36 public class Test6724218 {
  37     Test6724218 next  = null;
  38     Object value = null;
  39 
  40     static boolean _closed = false;
  41     static int size = 0;
  42     static Test6724218 list  = null;
  43     static int cache_size = 0;
  44     static Test6724218 cache = null;
  45 
  46     Object get(int i) {
  47         Test6724218 t = list;
  48         list = t.next;
  49         size -= 1;
  50         Object o = t.value;
  51         if (i > 0) {
  52             t.next = cache;
  53             t.value = null;
  54             cache = t;
  55             cache_size = +1;
  56         }
  57         return o;
  58     }
  59 
  60     void update() {
  61         // Exclude compilation of this one.
  62         if (size == 0) {
  63             Test6724218 t;
  64             if (cache_size > 0) {
  65                 t = cache;
  66                 cache = t.next;
  67                 cache_size = -1;
  68             } else {
  69                 t = new Test6724218();
  70             }
  71             t.value = new Object();
  72             t.next = list;
  73             list = t;
  74             size += 1;
  75         }
  76     }
  77 
  78     synchronized Object test(int i) {
  79         while (true) {
  80             if (_closed) {
  81                 return null;
  82             } else if (size > 0) {
  83                 return get(i);
  84             }
  85             update();
  86         }
  87     }
  88 
  89     public static void main(String argv[]) throws Exception {
  90         Test6724218 t = new Test6724218();
  91         int lim = 500000;
  92         Object o;
  93         for (int j = 0; j < lim; j++) {
  94             o = t.test(j&1);
  95             if (o == null) {
  96               throw new Exception("*** Failed on iteration " + j);
  97             }
  98             if ((j&1) == 0) {
  99               t.update();
 100             }
 101         }
 102     }
 103 }
< prev index next >