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

ciTypeFlow does not correctly handle unresolved constant dynamic of array type

XMLWordPrintable

    • b10
    • 19
    • b21

      The test

      runtime/condy/escapeAnalysis/TestEscapeCondy.java

      fails with -Xcomp.

      Please, note that test just updated to accept VM flags and problemlisted. See PR:
      https://github.com/openjdk/jdk/pull/20894

      To reproduce:
      1) Change test
      diff --git a/test/hotspot/jtreg/runtime/condy/escapeAnalysis/TestEscapeCondy.java b/test/hotspot/jtreg/runtime/condy/escapeAnalysis/TestEscapeCondy.java
      --- a/test/hotspot/jtreg/runtime/condy/escapeAnalysis/TestEscapeCondy.java (revision 38441b3f2d0e735089c29a9a9ce441b2d7c75db1)
      +++ b/test/hotspot/jtreg/runtime/condy/escapeAnalysis/TestEscapeCondy.java (date 1726038766040)
      @@ -26,7 +26,6 @@
        * @bug 8216970
        * @summary Ensure escape analysis can handle an ldc of a dynamic
        * constant whose return type is an array of boolean.
      - * @requires vm.flagless
        * @modules java.base/jdk.internal.misc
        * @library /test/lib
        * @compile TestEscapeThroughInvokeWithCondy$A.jasm
      @@ -43,7 +42,7 @@
           public static void main(String args[]) throws Throwable {
               // 1. Test escape analysis of a method that contains
               // a ldc instruction of a condy whose return type is an array of boolean
      - ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(
      + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(
                    "-XX:CompileCommand=dontinline,runtime.condy.TestEscapeThroughInvokeWithCondy::create",
                    "runtime.condy.TestEscapeThroughInvokeWithCondy");
               OutputAnalyzer oa = new OutputAnalyzer(pb.start());


      2) Run test with additional flags -Xcomp -XX:CompileOnly=*TestEscapeThroughInvokeWithCondy::*

      #
      # A fatal error has been detected by the Java Runtime Environment:
      #
      # Internal Error (/opt/mach5/mesos/work_dir/slaves/a4a7850a-7c35-410a-b879-d77fbb2f6087-S144280/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/08836cc8-8e7f-4a71-8d0a-d202f86f4453/runs/e724b40e-6086-4fa3-b912-d25c41311728/workspace/open/src/hotspot/share/ci/ciTypeFlow.hpp:346), pid=88876, tid=88891
      # assert(array->is_type_array_klass()) failed: must be prim array type
      #
      # JRE version: Java(TM) SE Runtime Environment (24.0+15) (fastdebug build 24-ea+15-1632)
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 24-ea+15-1632, compiled mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
      # Problematic frame:
      # V [libjvm.so+0x93c6d4] ciTypeFlow::StateVector::pop_typeArray() [clone .isra.0]+0xc4
      ..........
      Command Line: -Xcomp -XX:CompileOnly=*TestEscapeThroughInvokeWithCondy::* -XX:CompileCommand=dontinline,runtime.condy.TestEscapeThroughInvokeWithCondy::create runtime.condy.TestEscapeThroughInvokeWithCondy
      ..........
      Current CompileTask:
      C2:57 6 b 4 runtime.condy.TestEscapeThroughInvokeWithCondy::create (27 bytes)

      Stack: [0x0000791487800000,0x0000791487900000], sp=0x00007914878fc690, free space=1009k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x93c6d4] ciTypeFlow::StateVector::pop_typeArray() [clone .isra.0]+0xc4 (ciTypeFlow.hpp:346)
      V [libjvm.so+0x9419a8] ciTypeFlow::StateVector::apply_one_bytecode(ciBytecodeStream*)+0x238 (ciTypeFlow.cpp:971)
      V [libjvm.so+0x946130] ciTypeFlow::flow_block(ciTypeFlow::Block*, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)+0x1e0 (ciTypeFlow.cpp:2428)
      V [libjvm.so+0x947839] ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)+0x449 (ciTypeFlow.cpp:2843)
      V [libjvm.so+0x947ce3] ciTypeFlow::flow_types()+0x263 (ciTypeFlow.cpp:2893)
      V [libjvm.so+0x949246] ciTypeFlow::do_flow()+0x26 (ciTypeFlow.cpp:3054)
      V [libjvm.so+0x8f0914] ciMethod::get_flow_analysis()+0x64 (ciMethod.cpp:330)
      V [libjvm.so+0x70843b] InlineTree::check_can_parse(ciMethod*)+0x5b (bytecodeInfo.cpp:532)
      V [libjvm.so+0x8555d8] CallGenerator::for_inline(ciMethod*, float)+0x18 (callGenerator.cpp:293)
      V [libjvm.so+0xa006eb] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x147b (compile.cpp:776)
      V [libjvm.so+0x850255] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x1d5 (c2compiler.cpp:142)
      V [libjvm.so+0xa0ca78] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x928 (compileBroker.cpp:2303)
      V [libjvm.so+0xa0d708] CompileBroker::compiler_thread_loop()+0x478 (compileBroker.cpp:1961)
      V [libjvm.so+0xeb40fc] JavaThread::thread_main_inner()+0xcc (javaThread.cpp:758)
      V [libjvm.so+0x17e13c6] Thread::call_run()+0xb6 (thread.cpp:225)
      V [libjvm.so+0x14ca587] thread_native_entry(Thread*)+0x127 (os_linux.cpp:858)

            thartmann Tobias Hartmann
            lmesnik Leonid Mesnik
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: