Skip to content

Commit 0960ecc

Browse files
committedJun 8, 2022
8287700: C2 Crash running eclipse benchmark from Dacapo
Reviewed-by: chagedorn, kvn, xliu, thartmann
1 parent 590337e commit 0960ecc

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed
 

‎src/hotspot/share/opto/escape.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -2641,7 +2641,7 @@ bool ConnectionGraph::split_AddP(Node *addp, Node *base) {
26412641
// this code branch will go away.
26422642
//
26432643
if (!t->is_known_instance() &&
2644-
!t->maybe_java_subtype_of(base_t)) {
2644+
!base_t->maybe_java_subtype_of(t)) {
26452645
return false; // bail out
26462646
}
26472647
const TypeOopPtr *tinst = base_t->add_offset(t->offset())->is_oopptr();
@@ -3325,7 +3325,7 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist,
33253325
} else {
33263326
tn_t = tn_type->isa_oopptr();
33273327
}
3328-
if (tn_t != NULL && tn_t->maybe_java_subtype_of(tinst)) {
3328+
if (tn_t != NULL && tinst->maybe_java_subtype_of(tn_t)) {
33293329
if (tn_type->isa_narrowoop()) {
33303330
tn_type = tinst->make_narrowoop();
33313331
} else {
@@ -3338,7 +3338,7 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist,
33383338
record_for_optimizer(n);
33393339
} else {
33403340
assert(tn_type == TypePtr::NULL_PTR ||
3341-
tn_t != NULL && !tinst->is_java_subtype_of(tn_t),
3341+
tn_t != NULL && !tinst->maybe_java_subtype_of(tn_t),
33423342
"unexpected type");
33433343
continue; // Skip dead path with different type
33443344
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright (c) 2022, Red Hat, Inc. 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 8287700
27+
* @summary C2 Crash running eclipse benchmark from Dacapo
28+
*
29+
* @run main/othervm -XX:-BackgroundCompilation TestEACheckCastPP
30+
*
31+
*/
32+
33+
public class TestEACheckCastPP {
34+
public static void main(String[] args) {
35+
for (int i = 0; i < 20_000; i++) {
36+
test(false);
37+
test_helper2(new A(), true);
38+
}
39+
}
40+
41+
private static void test(boolean flag) {
42+
I i = test_helper();
43+
test_helper2(i, flag);
44+
}
45+
46+
private static void test_helper2(I i, boolean flag) {
47+
if (flag) {
48+
// branch never taken when called from test()
49+
A a = (A)i;
50+
C c = new C();
51+
c.a = a;
52+
}
53+
}
54+
55+
private static I test_helper() {
56+
B b = new B();
57+
return b;
58+
}
59+
60+
interface I {
61+
62+
}
63+
64+
private static class A implements I {
65+
66+
}
67+
private static class B extends A {
68+
}
69+
70+
private static class C {
71+
public A a;
72+
}
73+
}

1 commit comments

Comments
 (1)

openjdk-notifier[bot] commented on Jun 8, 2022

@openjdk-notifier[bot]
Please sign in to comment.