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

[lworld] C2: Hoisting speculative array access type check wrongly moves array access before its range check

XMLWordPrintable

      compiler/intrinsics/string/TestStringIntrinsicRangeChecks.java
      compiler/intrinsics/string/TestStringConstruction.java

      Reproduce directly without jtreg:
      $ java -XX:-TieredCompilation -XX:+StressGCM TestStringConstruction.java

      # A fatal error has been detected by the Java Runtime Environment:
      #
      # SIGSEGV (0xb) at pc=0x00007f53591742a1, pid=3151228, tid=3151245
      #
      # JRE version: Java(TM) SE Runtime Environment (23.0) (fastdebug build 23-lworld5ea-2024-05-08-0913027.tobias...)
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 23-lworld5ea-2024-05-08-0913027.tobias..., mixed mode, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
      # Problematic frame:
      # J 28 c2 java.util.Formatter.format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; java.base (284 bytes) @ 0x00007f53591742a1 [0x00007f5359173140+0x0000000000001161]

      Stack: [0x00007f5341164000,0x00007f5341265000], sp=0x00007f5341262ef0, free space=1019k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      J 28 c2 java.util.Formatter.format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter; java.base (284 bytes) @ 0x00007f53591742a1 [0x00007f5359173140+0x0000000000001161]
      j java.util.Formatter.format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;+7 java.base
      j java.lang.String.format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+9 java.base
      j jdk.internal.util.Preconditions.outOfBoundsMessage(Ljava/lang/String;Ljava/util/List;)Ljava/lang/String;+418 java.base
      j jdk.internal.util.Preconditions$4.apply(Ljava/lang/String;Ljava/util/List;)Ljava/lang/RuntimeException;+6 java.base
      j jdk.internal.util.Preconditions$4.apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+9 java.base
      j jdk.internal.util.Preconditions.outOfBounds(Ljava/util/function/BiFunction;Ljava/lang/String;[Ljava/lang/Number;)Ljava/lang/RuntimeException;+16 java.base
      j jdk.internal.util.Preconditions.outOfBoundsCheckFromIndexSize(Ljava/util/function/BiFunction;III)Ljava/lang/RuntimeException;+28 java.base
      j jdk.internal.util.Preconditions.checkFromIndexSize(IIILjava/util/function/BiFunction;)I+19 java.base
      j java.lang.String.checkBoundsOffCount(III)I+6 java.base
      j java.lang.String.rangeCheck([CII)Ljava/lang/Void;+4 java.base
      j java.lang.String.<init>([CII)V+7 java.base
      j compiler.intrinsics.string.TestStringConstruction.test([C)Ljava/lang/String;+8
      j compiler.intrinsics.string.TestStringConstruction.main([Ljava/lang/String;)V+15
      j java.lang.invoke.LambdaForm$DMH+0x000000008a0c6000.invokeStatic(Ljava/lang/Object;Ljava/lang/Object;)V+10 java.base
      j java.lang.invoke.LambdaForm$MH+0x000000008a0c7c00.invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+33 java.base
      j java.lang.invoke.LambdaForm$MH+0x000000008a0c8000.invokeExact_MT(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+20 java.base
      j jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+55 java.base
      j jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+23 java.base
      j java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+102 java.base
      j com.sun.javatest.regtest.agent.MainWrapper$MainTask.run()V+134
      j java.lang.Thread.runWith(Ljava/lang/Object;Ljava/lang/Runnable;)V+5 java.base
      j java.lang.Thread.run()V+19 java.base
      v ~StubRoutines::call_stub 0x00007f5359000d21
      V [libjvm.so+0xf1490a] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x4aa (javaCalls.cpp:429)
      V [libjvm.so+0xf152a5] JavaCalls::call_virtual(JavaValue*, Klass*, Symbol*, Symbol*, JavaCallArguments*, JavaThread*)+0x345 (javaCalls.cpp:331)
      V [libjvm.so+0xf154c6] JavaCalls::call_virtual(JavaValue*, Handle, Klass*, Symbol*, Symbol*, JavaThread*)+0x76 (javaCalls.cpp:193)
      V [libjvm.so+0x107cc73] thread_entry(JavaThread*, JavaThread*)+0x93 (jvm.cpp:3044)
      V [libjvm.so+0xf4a4ac] JavaThread::thread_main_inner()+0xcc (javaThread.cpp:722)
      V [libjvm.so+0x1870aa6] Thread::call_run()+0xb6 (thread.cpp:221)
      V [libjvm.so+0x155fb77] thread_native_entry(Thread*)+0x127 (os_linux.cpp:817)

            chagedorn Christian Hagedorn
            thartmann Tobias Hartmann
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: