test/compiler/7052494/Test7052494.java

Mon, 28 Jul 2014 15:06:38 -0700

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 3004
3fbb609d9e96
child 6876
710a3c8b516e
permissions
-rw-r--r--

8051344: JVM crashed in Compile::start() during method parsing w/ UseRTMDeopt turned on
Summary: call rtm_deopt() only if there were no compilation bailouts before.
Reviewed-by: kvn

kvn@2979 1 /*
kvn@2979 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
kvn@2979 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
kvn@2979 4 *
kvn@2979 5 * This code is free software; you can redistribute it and/or modify it
kvn@2979 6 * under the terms of the GNU General Public License version 2 only, as
kvn@2979 7 * published by the Free Software Foundation.
kvn@2979 8 *
kvn@2979 9 * This code is distributed in the hope that it will be useful, but WITHOUT
kvn@2979 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
kvn@2979 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kvn@2979 12 * version 2 for more details (a copy is included in the LICENSE file that
kvn@2979 13 * accompanied this code).
kvn@2979 14 *
kvn@2979 15 * You should have received a copy of the GNU General Public License version
kvn@2979 16 * 2 along with this work; if not, write to the Free Software Foundation,
kvn@2979 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
kvn@2979 18 *
kvn@2979 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
kvn@2979 20 * or visit www.oracle.com if you need additional information or have any
kvn@2979 21 * questions.
kvn@2979 22 *
kvn@2979 23 */
kvn@2979 24
kvn@2979 25 /**
kvn@2979 26 * @test
kvn@2979 27 * @bug 7052494
kvn@2979 28 * @summary Eclipse test fails on JDK 7 b142
kvn@2979 29 *
kvn@2979 30 * @run main/othervm -Xbatch Test7052494
kvn@2979 31 */
kvn@2979 32
kvn@2979 33
kvn@2979 34 public class Test7052494 {
kvn@2979 35
kvn@2979 36 static int test1(int i, int limit) {
kvn@2979 37 int result = 0;
kvn@2979 38 while (i++ != 0) {
kvn@2979 39 if (result >= limit)
kvn@2979 40 break;
kvn@2979 41 result = i*2;
kvn@2979 42 }
kvn@2979 43 return result;
kvn@2979 44 }
kvn@2979 45
kvn@2979 46 static int test2(int i, int limit) {
kvn@2979 47 int result = 0;
kvn@2979 48 while (i-- != 0) {
kvn@2979 49 if (result <= limit)
kvn@2979 50 break;
kvn@2979 51 result = i*2;
kvn@2979 52 }
kvn@2979 53 return result;
kvn@2979 54 }
kvn@2979 55
kvn@2979 56 static void test3(int i, int limit, int arr[]) {
kvn@2979 57 while (i++ != 0) {
kvn@2979 58 if (arr[i-1] >= limit)
kvn@2979 59 break;
kvn@2979 60 arr[i] = i*2;
kvn@2979 61 }
kvn@2979 62 }
kvn@2979 63
kvn@2979 64 static void test4(int i, int limit, int arr[]) {
kvn@2979 65 while (i-- != 0) {
kvn@2979 66 if (arr[arr.length + i + 1] <= limit)
kvn@2979 67 break;
kvn@2979 68 arr[arr.length + i] = i*2;
kvn@2979 69 }
kvn@2979 70 }
kvn@2979 71
kvn@2979 72 // Empty loop rolls through MAXINT if i > 0
kvn@3004 73
kvn@3004 74 static final int limit5 = Integer.MIN_VALUE + 10000;
kvn@3004 75
kvn@2979 76 static int test5(int i) {
kvn@2979 77 int result = 0;
kvn@3004 78 while (i++ != limit5) {
kvn@2979 79 result = i*2;
kvn@2979 80 }
kvn@2979 81 return result;
kvn@2979 82 }
kvn@2979 83
kvn@2979 84 // Empty loop rolls through MININT if i < 0
kvn@3004 85
kvn@3004 86 static final int limit6 = Integer.MAX_VALUE - 10000;
kvn@3004 87
kvn@2979 88 static int test6(int i) {
kvn@2979 89 int result = 0;
kvn@3004 90 while (i-- != limit6) {
kvn@2979 91 result = i*2;
kvn@2979 92 }
kvn@2979 93 return result;
kvn@2979 94 }
kvn@2979 95
kvn@2979 96 public static void main(String [] args) {
kvn@2979 97 boolean failed = false;
kvn@2979 98 int[] arr = new int[8];
kvn@2979 99 int[] ar3 = { 0, 0, 4, 6, 8, 10, 0, 0 };
kvn@2979 100 int[] ar4 = { 0, 0, 0, -10, -8, -6, -4, 0 };
kvn@3004 101 System.out.println("test1");
kvn@2979 102 for (int i = 0; i < 11000; i++) {
kvn@2979 103 int k = test1(1, 10);
kvn@2979 104 if (k != 10) {
kvn@2979 105 System.out.println("FAILED: " + k + " != 10");
kvn@2979 106 failed = true;
kvn@2979 107 break;
kvn@2979 108 }
kvn@2979 109 }
kvn@3004 110 System.out.println("test2");
kvn@2979 111 for (int i = 0; i < 11000; i++) {
kvn@2979 112 int k = test2(-1, -10);
kvn@2979 113 if (k != -10) {
kvn@2979 114 System.out.println("FAILED: " + k + " != -10");
kvn@2979 115 failed = true;
kvn@2979 116 break;
kvn@2979 117 }
kvn@2979 118 }
kvn@3004 119 System.out.println("test3");
kvn@2979 120 for (int i = 0; i < 11000; i++) {
kvn@2979 121 java.util.Arrays.fill(arr, 0);
kvn@2979 122 test3(1, 10, arr);
kvn@2979 123 if (!java.util.Arrays.equals(arr,ar3)) {
kvn@2979 124 System.out.println("FAILED: arr = { " + arr[0] + ", "
kvn@2979 125 + arr[1] + ", "
kvn@2979 126 + arr[2] + ", "
kvn@2979 127 + arr[3] + ", "
kvn@2979 128 + arr[4] + ", "
kvn@2979 129 + arr[5] + ", "
kvn@2979 130 + arr[6] + ", "
kvn@2979 131 + arr[7] + " }");
kvn@2979 132 failed = true;
kvn@2979 133 break;
kvn@2979 134 }
kvn@2979 135 }
kvn@3004 136 System.out.println("test4");
kvn@2979 137 for (int i = 0; i < 11000; i++) {
kvn@2979 138 java.util.Arrays.fill(arr, 0);
kvn@2979 139 test4(-1, -10, arr);
kvn@2979 140 if (!java.util.Arrays.equals(arr,ar4)) {
kvn@2979 141 System.out.println("FAILED: arr = { " + arr[0] + ", "
kvn@2979 142 + arr[1] + ", "
kvn@2979 143 + arr[2] + ", "
kvn@2979 144 + arr[3] + ", "
kvn@2979 145 + arr[4] + ", "
kvn@2979 146 + arr[5] + ", "
kvn@2979 147 + arr[6] + ", "
kvn@2979 148 + arr[7] + " }");
kvn@2979 149 failed = true;
kvn@2979 150 break;
kvn@2979 151 }
kvn@2979 152 }
kvn@3004 153 System.out.println("test5");
kvn@2979 154 for (int i = 0; i < 11000; i++) {
kvn@3004 155 int k = test5(limit6);
kvn@3004 156 if (k != limit5*2) {
kvn@3004 157 System.out.println("FAILED: " + k + " != " + limit5*2);
kvn@2979 158 failed = true;
kvn@2979 159 break;
kvn@2979 160 }
kvn@2979 161 }
kvn@3004 162 System.out.println("test6");
kvn@2979 163 for (int i = 0; i < 11000; i++) {
kvn@3004 164 int k = test6(limit5);
kvn@3004 165 if (k != limit6*2) {
kvn@3004 166 System.out.println("FAILED: " + k + " != " + limit6*2);
kvn@2979 167 failed = true;
kvn@2979 168 break;
kvn@2979 169 }
kvn@2979 170 }
kvn@3004 171 System.out.println("finish");
kvn@2979 172 if (failed)
kvn@2979 173 System.exit(97);
kvn@2979 174 }
kvn@2979 175 }

mercurial