Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8314580

PhaseIdealLoop::transform_long_range_checks fails with assert "was tested before"

    XMLWordPrintable

Details

    • b14

    Backports

      Description

        This code crashes the JVM:

        public class CrashExample {
            private static final VarHandle byteHandle = MethodHandles.memorySegmentViewVarHandle(ValueLayout.JAVA_BYTE);
            private static final long len = 100;
            private static final byte CR = (byte) '\r';
            private static final byte LF = (byte) '\n';

            public static void main(String[] args) {
                for(int round = 0; round < 1000; round++) {
                    try(Arena arena = Arena.ofConfined()) {
                        MemorySegment memorySegment = arena.allocateArray(ValueLayout.JAVA_BYTE, len);
                        for(int i = 0; i < 100000; i++) {
                            int index = i % 99;
                            byteHandle.set(memorySegment, index, CR);
                            byteHandle.set(memorySegment, index + 1, LF);
                            byte[] bytes = readUntil(memorySegment, CR, LF);
                        }
                    }
                }
            }

            private static byte[] readUntil(MemorySegment segment, byte... separators) {
                for(long cur = 0; cur <= segment.byteSize() - separators.length; cur++) {
                    if(matches(segment, cur, separators)) {
                        return segment.asSlice(0, cur).toArray(ValueLayout.JAVA_BYTE);
                    }
                }
                return null;
            }

            public static boolean matches(MemorySegment m, long offset, byte[] bytes) {
                for(int index = 0; index < bytes.length; index++) {
                    if ((byte) byteHandle.get(m, offset + index) != bytes[index]) {
                        return false;
                    }
                }
                return true;
            }
        }

        # A fatal error has been detected by the Java Runtime Environment:
        #
        # Internal Error (/oracle/jdk/open/src/hotspot/share/opto/loopnode.cpp:1269), pid=1045773, tid=1045790
        # assert(ok) failed: inconsistent: was tested before
        #
        # JRE version: Java(TM) SE Runtime Environment (22.0) (fastdebug build 22-internal-2023-08-07-1346088.tobias...)
        # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 22-internal-2023-08-07-1346088.tobias..., mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
        # Problematic frame:
        # V [libjvm.so+0x1292fe2] PhaseIdealLoop::transform_long_range_checks(int, Node_List const&, Node*, Node*, Node*, Node*, LoopNode*)+0x1272

        Current CompileTask:
        C2: 752 589 % ! 4 CrashExample::main @ 29 (136 bytes)

        Stack: [0x00007f072267e000,0x00007f072277f000], sp=0x00007f0722779b20, free space=1006k
        Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
        V [libjvm.so+0x1292fe2] PhaseIdealLoop::transform_long_range_checks(int, Node_List const&, Node*, Node*, Node*, Node*, LoopNode*)+0x1272 (loopnode.cpp:1269)
        V [libjvm.so+0x129862e] PhaseIdealLoop::create_loop_nest(IdealLoopTree*, Node_List&)+0xf4e (loopnode.cpp:1047)
        V [libjvm.so+0x126f388] IdealLoopTree::iteration_split_impl(PhaseIdealLoop*, Node_List&)+0x318 (loopTransform.cpp:3602)
        V [libjvm.so+0x126f6b7] IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x117 (loopTransform.cpp:3726)
        V [libjvm.so+0x126f5d3] IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x33 (loopTransform.cpp:3710)
        V [libjvm.so+0x129d6d7] PhaseIdealLoop::build_and_optimize()+0xca7 (loopnode.cpp:4604)
        V [libjvm.so+0x9eff5e] PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)+0x3ce (loopnode.hpp:1114)
        V [libjvm.so+0x9ec9ef] Compile::Optimize()+0xdaf (compile.cpp:2166)
        V [libjvm.so+0x9eed10] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1b60 (compile.cpp:850)
        V [libjvm.so+0x84a5db] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x13b (c2compiler.cpp:119)
        V [libjvm.so+0x9fac37] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x977 (compileBroker.cpp:2276)
        V [libjvm.so+0x9fb978] CompileBroker::compiler_thread_loop()+0x5f8 (compileBroker.cpp:1944)
        V [libjvm.so+0xeb883c] JavaThread::thread_main_inner()+0xcc (javaThread.cpp:720)
        V [libjvm.so+0x179b04a] Thread::call_run()+0xba (thread.cpp:217)
        V [libjvm.so+0x1499d01] thread_native_entry(Thread*)+0x121 (os_linux.cpp:783)

        # A fatal error has been detected by the Java Runtime Environment:
        #
        # SIGSEGV (0xb) at pc=0x00007f3f941154b7, pid=1045889, tid=1045906
        #
        # JRE version: Java(TM) SE Runtime Environment (22.0) (build 22-internal-2023-08-09-1155514.tobias...)
        # Java VM: Java HotSpot(TM) 64-Bit Server VM (22-internal-2023-08-09-1155514.tobias..., mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
        # Problematic frame:
        # V [libjvm.so+0x4084b7] AddNode::IdealIL(PhaseGVN*, bool, BasicType)+0x37

        Current CompileTask:
        C2: 405 632 % ! 4 CrashExample::main @ 29 (136 bytes)

        Stack: [0x00007f3f65eff000,0x00007f3f66000000], sp=0x00007f3f65ffb7e0, free space=1009k
        Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
        V [libjvm.so+0x4084b7] AddNode::IdealIL(PhaseGVN*, bool, BasicType)+0x37 (addnode.cpp:265)
        V [libjvm.so+0xd11bde] PhaseIterGVN::transform_old(Node*)+0x9e (phaseX.cpp:667)
        V [libjvm.so+0xd0db09] PhaseIterGVN::optimize()+0xf9 (phaseX.cpp:1045)
        V [libjvm.so+0x6445af] Compile::Optimize()+0x151f (loopnode.hpp:1199)
        V [libjvm.so+0x6456c2] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0xed2 (compile.cpp:850)
        V [libjvm.so+0x574079] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x159 (c2compiler.cpp:119)
        V [libjvm.so+0x64b2fe] CompileBroker::invoke_compiler_on_method(CompileTask*)+0xa9e (compileBroker.cpp:2276)
        V [libjvm.so+0x64e558] CompileBroker::compiler_thread_loop()+0x698 (compileBroker.cpp:1944)
        V [libjvm.so+0x8f8038] JavaThread::thread_main_inner() [clone .part.0]+0xb8 (javaThread.cpp:720)
        V [libjvm.so+0xe9aa18] Thread::call_run()+0xa8 (thread.cpp:217)
        V [libjvm.so+0xcbfaaa] thread_native_entry(Thread*)+0xda (os_linux.cpp:783)

        Attachments

          1. CrashExample.java
            2 kB
            Tobias Hartmann
          2. hs_err_pid1045773.log
            81 kB
            Tobias Hartmann

          Issue Links

            Activity

              People

                roland Roland Westrelin
                mcimadamore Maurizio Cimadamore
                Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: