Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/compiler/c2/Test6843752.java
41149 views
1
/*
2
* Copyright (c) 2009, 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
24
/*
25
* @test
26
* @bug 6843752 8192992
27
* @summary missing code for an anti-dependent Phi in GCM
28
*
29
* @run main/othervm -Xbatch compiler.c2.Test6843752
30
*/
31
32
package compiler.c2;
33
34
public class Test6843752 {
35
36
Item list;
37
38
static class Item {
39
public Item next;
40
public Item prev;
41
public boolean remove;
42
43
Item(boolean r) { remove = r; }
44
}
45
46
private void linkIn(Item item) {
47
Item head = list;
48
if (head == null) {
49
item.next = item;
50
item.prev = item;
51
list = item;
52
} else {
53
item.next = head;
54
item.prev = head.prev;
55
head.prev.next = item;
56
head.prev = item;
57
}
58
}
59
60
private void linkOut(Item item) {
61
Item head = list;
62
if (item.next == item) {
63
list = null;
64
} else {
65
item.prev.next = item.next;
66
item.next.prev = item.prev;
67
if (head == item) {
68
list = item.next;
69
}
70
}
71
item.next = null;
72
item.prev = null; // this is the null pointer we are seeing
73
}
74
75
private void removeItems(int numItems) {
76
Item item = list;
77
if (item == null) {
78
return;
79
}
80
Item last = item.prev;
81
boolean done = false;
82
while (!done && numItems > 1) {
83
// the original code "done = (item == last);" triggered an infinite loop
84
// and was changed slightly in order to produce an exception instead.
85
done = (item.next == last.next);
86
item = item.next;
87
if (item.prev.remove) {
88
linkOut(item.prev);
89
}
90
}
91
}
92
93
public void perform(int numItems) {
94
for (int i = 0; i < numItems; i++) {
95
linkIn(new Item(i == 0));
96
}
97
removeItems(numItems);
98
list = null;
99
}
100
101
static public void main(String[] args) {
102
int caseCnt = 0;
103
Test6843752 bj = new Test6843752();
104
try {
105
for (; caseCnt < 500000;) {
106
int numItems = (++caseCnt % 2);
107
if ((caseCnt % 64) == 0) {
108
numItems = 5;
109
}
110
bj.perform(numItems);
111
if ((caseCnt % 100000) == 0) {
112
System.out.println("successfully performed " + caseCnt + " cases");
113
}
114
}
115
} catch (Exception e) {
116
System.out.println("ERROR: crashed during case " + caseCnt);
117
e.printStackTrace(System.out);
118
System.exit(97);
119
}
120
}
121
}
122
123
124