test/hotspot/jtreg/compiler/c2/Test6880034.java
author iignatyev
Mon, 18 Feb 2019 09:31:07 -0800
changeset 53791 bec6c8739833
parent 47216 71c04702a3d5
permissions -rw-r--r--
8219157: vm/mlvm/mixed/stress/java/findDeadlock should be problem-listed only on mac Reviewed-by: thartmann
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     1
/*
35594
cc13089c6327 8147937: Adapt SAP copyrights to new company name.
goetz
parents: 27699
diff changeset
     2
 * Copyright (c) 2009 SAP SE. All rights reserved.
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     4
 *
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     7
 * published by the Free Software Foundation.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     8
 *
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    13
 * accompanied this code).
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    14
 *
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4010
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4010
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4010
diff changeset
    21
 * questions.
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    22
 */
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    23
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    24
/**
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    25
 * @test
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    26
 * @bug 6880034
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    27
 * @summary SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    28
 *
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    29
 * @run main/othervm -Xcomp -Xbatch
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    30
 *    -XX:+PrintCompilation
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    31
 *    -XX:CompileCommand=compileonly,compiler.c2.Test6880034::deopt_compiledframe_at_safepoint
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    32
 *    compiler.c2.Test6880034
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    33
 */
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    34
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    35
package compiler.c2;
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    36
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    37
// This test provokes a deoptimisation at a safepoint.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    38
//
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    39
// It achieves this by compiling the method 'deopt_compiledframe_at_safepoint'
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    40
// before its first usage at a point in time when a call to the virtual method
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    41
// A::doSomething() from within 'deopt_compiledframe_at_safepoint' can be
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    42
// optimised to a static call because class A has no descendants.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    43
//
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    44
// Later, when deopt_compiledframe_at_safepoint() is running, class B which
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    45
// extends A and overrides the virtual method "doSomething()", is loaded
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    46
// asynchronously in another thread.  This makes the compiled code of
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    47
// 'deopt_compiledframe_at_safepoint' invalid and triggers a deoptimisation of
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    48
// the frame where 'deopt_compiledframe_at_safepoint' is running in a
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    49
// loop.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    50
//
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    51
// The deoptimisation leads to a SIGBUS on 64-bit server VMs on SPARC and to
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    52
// an incorrect result on 32-bit server VMs on SPARC due to a regression
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    53
// introduced by the change: "6420645: Create a vm that uses compressed oops
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    54
// for up to 32gb heapsizes"
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    55
// (http://hg.openjdk.java.net/jdk7/jdk7/hotspot/rev/ba764ed4b6f2).  Further
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    56
// investigation showed that change 6420645 is not really the root cause of
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    57
// this error but only reveals a problem with the float register encodings in
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    58
// sparc.ad which was hidden until now.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    59
//
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    60
// Notice that for this test to fail in jtreg it is crucial that
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    61
// deopt_compiledframe_at_safepoint() runs in the main thread. Otherwise a
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    62
// crash in deopt_compiledframe_at_safepoint() will not be detected as a test
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    63
// failure by jtreg.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    64
//
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    65
// Author: Volker H. Simonis
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    66
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    67
public class Test6880034 {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    68
  static class A {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    69
    public int doSomething() {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    70
      return 0;
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    71
    }
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    72
  }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    73
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    74
  static class B extends A {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    75
    public B() {}
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    76
    // override 'A::doSomething()'
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    77
    public int doSomething() {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    78
      return 1;
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    79
    }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    80
  }
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    81
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    82
  static class G {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    83
    public static volatile A a = new A();
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    84
40059
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    85
    // Change 'a' to point to a 'B' object
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    86
    public static void setAtoB() {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    87
      try {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    88
        a =  (A) ClassLoader.
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    89
                getSystemClassLoader().
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    90
                loadClass("B").
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    91
                getConstructor(new Class[] {}).
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    92
                newInstance(new Object[] {});
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    93
      }
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    94
      catch (Exception e) {
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    95
        System.out.println(e);
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    96
      }
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    97
    }
c2304140ed64 8132919: Put compiler tests in packages
tpivovarova
parents: 35594
diff changeset
    98
  }
4010
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
    99
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   100
  public static volatile boolean is_in_loop = false;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   101
  public static volatile boolean stop_while_loop = false;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   102
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   103
  public static double deopt_compiledframe_at_safepoint() {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   104
    // This will be an optimised static call to A::doSomething() until we load "B"
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   105
    int i = G.a.doSomething();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   106
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   107
    // Need more than 16 'double' locals in this frame
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   108
    double local1 = 1;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   109
    double local2 = 2;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   110
    double local3 = 3;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   111
    double local4 = 4;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   112
    double local5 = 5;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   113
    double local6 = 6;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   114
    double local7 = 7;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   115
    double local8 = 8;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   116
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   117
    long k = 0;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   118
    // Once we load "B", this method will be made 'not entrant' and deoptimised
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   119
    // at the safepoint which is at the end of this loop.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   120
    while (!stop_while_loop) {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   121
      if (k ==  1) local1 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   122
      if (k ==  2) local2 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   123
      if (k ==  3) local3 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   124
      if (k ==  4) local4 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   125
      if (k ==  5) local5 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   126
      if (k ==  6) local6 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   127
      if (k ==  7) local7 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   128
      if (k ==  8) local8 += i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   129
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   130
      // Tell the world that we're now running wild in the loop
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   131
      if (k++ == 20000) is_in_loop = true;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   132
    }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   133
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   134
    return
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   135
      local1 + local2 + local3 + local4 +
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   136
      local5 + local6 + local7 + local8 + i;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   137
  }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   138
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   139
  public static void main(String[] args) {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   140
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   141
    // Just to resolve G before we compile deopt_compiledframe_at_safepoint()
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   142
    G g = new G();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   143
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   144
    // Asynchronous thread which will eventually invalidate the code for
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   145
    // deopt_compiledframe_at_safepoint() and therefore triggering a
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   146
    // deoptimisation of that method.
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   147
    new Thread() {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   148
      public void run() {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   149
        while (!is_in_loop) {
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   150
          // Wait until the loop is running
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   151
        }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   152
        // Load class 'B' asynchronously..
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   153
        G.setAtoB();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   154
        // ..and stop the loop
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   155
        stop_while_loop = true;
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   156
      }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   157
    }.start();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   158
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   159
    // Run the loop in deopt_compiledframe_at_safepoint()
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   160
    double retVal = deopt_compiledframe_at_safepoint();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   161
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   162
    System.out.println(retVal == 36 ? "OK" : "ERROR : " + retVal);
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   163
    if (retVal != 36) throw new RuntimeException();
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   164
  }
7467ebf34334 6880034: SIGBUS during deoptimisation at a safepoint on 64bit-SPARC
kvn
parents:
diff changeset
   165
}