| Other |
|---|
| tbdResolved |
|
Duplicate :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
In recent days, we run some Java fuzzer tests with C2's experimental feature PostLoopMultiversioning and find a crash.
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/subnode.cpp:688
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/penli01/jdk_src/src/hotspot/share/opto/subnode.cpp:688), pid=2675636, tid=2675649
# assert(cmp == __null) failed: A cmp with 2 OpaqueZeroTripGuard inputs
#
# JRE version: OpenJDK Runtime Environment (21.0) (fastdebug build 21-internal-adhoc.penli01.jdksrc)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 21-internal-adhoc.penli01.jdksrc, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
# Problematic frame:
# V [libjvm.so+0x1913b68] CmpINode::Value(PhaseGVN*) const+0x708
#
# Core dump will be written. Default location: /tmp/core.2675636
#
# An error report file with more information is saved as:
# /home/penli01/reduce2/hs_err_pid2675636.log
#
# Compiler replay data is saved as:
# /home/penli01/reduce2/replay_pid2675636.log
#
# If you would like to submit a bug report, please visit:
# https://bugreport.java.com/bugreport/crash.jsp
#
We narrowed down the fuzzer test case to a very small one. Below code can reproduce the crash on CPUs with masked vector support (x86 AVX-512 or AArch64 SVE).
public class Foo {
private static short s;
private static short[] sa = new short[400];
private static void bar() {
int i = 1, j = 1;
while (i < 300) {
j = 1;
do {
for (int k = j; k < 1; k--) {
i++;
}
sa[i] = s;
} while (++j < 6);
}
}
public static void main(String[] args) {
for (int i = 0; i < 20000; i++) {
bar();
}
}
}
java -Xbatch -XX:+UnlockExperimentalVMOptions -XX:+PostLoopMultiversioning Foo
|