test/compiler/7100757/Test7100757.java

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

author
fzhinkin
date
Mon, 28 Jul 2014 15:06:38 -0700
changeset 6997
dbb05f6d93c4
parent 0
f90c822e73f8
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

     1 /*
     2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     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  */
    25 /**
    26  * @test
    27  * @bug 7100757
    28  * @summary The BitSet.nextSetBit() produces incorrect result in 32bit VM on Sparc
    29  *
    30  * @run main/timeout=300 Test7100757
    31  */
    33 import java.util.*;
    35 public class Test7100757 {
    37   public static final int NBITS = 256;
    39   public static void main(String[] args) {
    41     BitSet bs = new BitSet(NBITS);
    42     Random rnd = new Random();
    43     long[] ra = new long[(NBITS+63)/64];
    45     for(int l=0; l < 5000000; l++) {
    47       for(int r = 0; r < ra.length; r++) {
    48         ra[r] = rnd.nextLong();
    49       }
    50       test(ra, bs);
    51     }
    52   }
    54   static void test(long[] ra, BitSet bs) {
    55       bs.clear();
    56       int bits_set = 0;
    57       for(int i = 0, t = 0, b = 0; i < NBITS; i++) {
    58         long bit = 1L << b++;
    59         if((ra[t]&bit) != 0) {
    60           bs.set(i);
    61           bits_set++;
    62         }
    63         if(b == 64) {
    64           t++;
    65           b = 0;
    66         }
    67       }
    68       // Test Long.bitCount()
    69       int check_bits = bs.cardinality();
    70       if (check_bits != bits_set) {
    71         String bs_str = bs.toString();
    72         System.err.printf("cardinality bits: %d != %d  bs: %s\n", check_bits, bits_set, bs_str);
    73         System.exit(97);
    74       }
    75       // Test Long.numberOfTrailingZeros()
    76       check_bits = 0;
    77       for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
    78         check_bits++;
    79       }
    80       if (check_bits != bits_set) {
    81         String bs_str = bs.toString();
    82         System.err.printf("nextSetBit bits: %d != %d  bs: %s\n", check_bits, bits_set, bs_str);
    83         System.exit(97);
    84       }
    85       // Test Long.numberOfLeadingZeros()
    86       for(int i = bs.length(); i > 0; i = bs.length()) {
    87         bs.clear(i-1);
    88       }
    89       // Test Long.bitCount()
    90       check_bits = bs.cardinality();
    91       if (check_bits != 0) {
    92         String bs_str = bs.toString();
    93         System.err.printf("after clear bits: %d != 0  bs: %s\n", check_bits, bs_str);
    94         System.exit(97);
    95       }
    96   }
    98 };

mercurial