Crash in Node::verify due to missing bailout check after process_for_post_loop_opts_igvn
reproduce by running some arbitrary tests with flags -XX:VerifyIterativeGVN=1111 -XX:+StressBailout XX:StressBailoutMean=1000.
Regardless of the artificial setting (combining two debugging modes) the problem seems to be a missing bailout check here:
https://github.com/openjdk/jdk/blob/560a92a6327221c90596bcd17a87722e4910472a/src/hotspot/share/opto/compile.cpp#L2526
afterJDK-8351414.
===
# SIGSEGV (0xb) at pc=0x00007fdb3d381146, pid=254005, tid=254027
#
# JRE version: Java(TM) SE Runtime Environment (27.0) (fastdebug build <...>)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug <...>, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0x1781146] Node::verify(int, VectorSet&, Node_List&)+0xa6
(Saw the crash on Test7046096_stringConcatInline)
===
Current CompileTask:
C2:6275 2565 4 com.sun.tools.javac.parser.UnicodeReader::next (9 bytes)
Stack: [0x00007fa68f7f9000,0x00007fa68f8f9000], sp=0x00007fa68f8f3e20, free space=1003k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x1781146] Node::verify(int, VectorSet&, Node_List&)+0xa6 (node.cpp:2739)
V [libjvm.so+0x188b8a1] PhaseIterGVN::verify_step(Node*) [clone .part.0]+0x581 (phaseX.cpp:865)
V [libjvm.so+0x189ad5a] PhaseIterGVN::transform_old(Node*)+0x70a (phaseX.cpp:2136)
V [libjvm.so+0x189f575] PhaseIterGVN::optimize()+0xc5 (phaseX.cpp:1054)
V [libjvm.so+0xbac8d4] Compile::process_for_merge_stores_igvn(PhaseIterGVN&)+0x124 (compile.cpp:1940)
V [libjvm.so+0xbb2025] Compile::Optimize()+0xd15 (compile.cpp:2527)
V [libjvm.so+0xbb5173] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x2023 (compile.cpp:862)
V [libjvm.so+0x9cc328] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x498 (c2compiler.cpp:147)
V [libjvm.so+0xbc4660] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x780 (compileBroker.cpp:2345)
V [libjvm.so+0xbc5ec0] CompileBroker::compiler_thread_loop()+0x530 (compileBroker.cpp:1989)
V [libjvm.so+0x112511b] JavaThread::thread_main_inner()+0x13b (javaThread.cpp:776)
V [libjvm.so+0x1bb14f6] Thread::call_run()+0xb6 (thread.cpp:242)
V [libjvm.so+0x1807098] thread_native_entry(Thread*)+0x118 (os_linux.cpp:860)
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000038
Pending compilation failure details for thread 0x00007fa6c0209ae0:
Time: 6.270886 seconds (0d 0h 0m 6s) Compile id: 2565
Reason: 'StressBailout'
Callstack:
[0x00007fa6c6dab6f2]Compile::failing() [clone .part.0]+0x62 (compile.hpp:840)
[0x00007fa6c6dac707]Compile::process_for_post_loop_opts_igvn(PhaseIterGVN&)+0x277 (compile.cpp:1893)
[0x00007fa6c6db201a]Compile::Optimize()+0xd0a (compile.cpp:2527)
[0x00007fa6c6db5173]Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x2023 (cHeapStringHolder.hpp:47)
reproduce by running some arbitrary tests with flags -XX:VerifyIterativeGVN=1111 -XX:+StressBailout XX:StressBailoutMean=1000.
Regardless of the artificial setting (combining two debugging modes) the problem seems to be a missing bailout check here:
https://github.com/openjdk/jdk/blob/560a92a6327221c90596bcd17a87722e4910472a/src/hotspot/share/opto/compile.cpp#L2526
after
===
# SIGSEGV (0xb) at pc=0x00007fdb3d381146, pid=254005, tid=254027
#
# JRE version: Java(TM) SE Runtime Environment (27.0) (fastdebug build <...>)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug <...>, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0x1781146] Node::verify(int, VectorSet&, Node_List&)+0xa6
(Saw the crash on Test7046096_stringConcatInline)
===
Current CompileTask:
C2:6275 2565 4 com.sun.tools.javac.parser.UnicodeReader::next (9 bytes)
Stack: [0x00007fa68f7f9000,0x00007fa68f8f9000], sp=0x00007fa68f8f3e20, free space=1003k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x1781146] Node::verify(int, VectorSet&, Node_List&)+0xa6 (node.cpp:2739)
V [libjvm.so+0x188b8a1] PhaseIterGVN::verify_step(Node*) [clone .part.0]+0x581 (phaseX.cpp:865)
V [libjvm.so+0x189ad5a] PhaseIterGVN::transform_old(Node*)+0x70a (phaseX.cpp:2136)
V [libjvm.so+0x189f575] PhaseIterGVN::optimize()+0xc5 (phaseX.cpp:1054)
V [libjvm.so+0xbac8d4] Compile::process_for_merge_stores_igvn(PhaseIterGVN&)+0x124 (compile.cpp:1940)
V [libjvm.so+0xbb2025] Compile::Optimize()+0xd15 (compile.cpp:2527)
V [libjvm.so+0xbb5173] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x2023 (compile.cpp:862)
V [libjvm.so+0x9cc328] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x498 (c2compiler.cpp:147)
V [libjvm.so+0xbc4660] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x780 (compileBroker.cpp:2345)
V [libjvm.so+0xbc5ec0] CompileBroker::compiler_thread_loop()+0x530 (compileBroker.cpp:1989)
V [libjvm.so+0x112511b] JavaThread::thread_main_inner()+0x13b (javaThread.cpp:776)
V [libjvm.so+0x1bb14f6] Thread::call_run()+0xb6 (thread.cpp:242)
V [libjvm.so+0x1807098] thread_native_entry(Thread*)+0x118 (os_linux.cpp:860)
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000038
Pending compilation failure details for thread 0x00007fa6c0209ae0:
Time: 6.270886 seconds (0d 0h 0m 6s) Compile id: 2565
Reason: 'StressBailout'
Callstack:
[0x00007fa6c6dab6f2]Compile::failing() [clone .part.0]+0x62 (compile.hpp:840)
[0x00007fa6c6dac707]Compile::process_for_post_loop_opts_igvn(PhaseIterGVN&)+0x277 (compile.cpp:1893)
[0x00007fa6c6db201a]Compile::Optimize()+0xd0a (compile.cpp:2527)
[0x00007fa6c6db5173]Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x2023 (cHeapStringHolder.hpp:47)