JDK-8361117 : JVM Crash in LShiftLNode::Ideal During JIT Optimization of ECJ-Compiled Bytecode
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 17.0.15
  • Priority: P4
  • Status: New
  • Resolution: Unresolved
  • OS: linux_ubuntu
  • CPU: x86_64
  • Submitted: 2025-06-25
  • Updated: 2025-07-01
Description
ADDITIONAL SYSTEM INFORMATION :
wsl2-ubuntu 22.04
Linux 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

java version "11.0.27" 2025-04-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.27+8-LTS-232)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.27+8-LTS-232, mixed mode)

java 17.0.15 2025-04-15 LTS
Java(TM) SE Runtime Environment (build 17.0.15+9-LTS-241)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.15+9-LTS-241, mixed mode, sharing)

Eclipse Compiler for Java(TM) v20250526-2018, 3.42.0, Copyright IBM Corp 2000, 2020. All rights reserved.

A DESCRIPTION OF THE PROBLEM :
Using Eclipse compiler for Java (ECJ) to compile the following test program and running it with HotSpot will cause JVM crash in JDK 11/17. However, OpenJ9 can run the same bytecode successfully.

Using javac to compile the same test program will execute successfully.

The ECJ version is 4.36 and can be downloaded from https://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops4/R-4.36-202505281830/ecj-4.36.jar

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Using JDK 17, run the following command:
```
java -jar ecj-4.36.jar --release 17 Test.java
java Test
```

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program should execute successfully.
ACTUAL -
The program will crash with the following error:
```
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fbdaa2c4648, pid=2673, tid=2686
#
# JRE version: Java(TM) SE Runtime Environment (17.0.15+9) (build 17.0.15+9-LTS-241)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0.15+9-LTS-241, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# V  [libjvm.so+0xbbe648]  LShiftLNode::Ideal(PhaseGVN*, bool)+0x378
...
```

---------- BEGIN SOURCE ----------
class Test {
    public static void test() {
        int size = 1000;
        int[] arr1 = new int[size];
        int[] arr2 = new int[size];
        for (int i = 0; i < size; i++) {
            arr1[i] = i;
        }
        for (int i = 0; i < size; i += 10) {
            for (int j = 0; j < 5; j++) {
                int srcPos = i + j;
                int destPos = i + j;
                int length = 5 - j;
                java.lang.System.arraycopy(arr1, srcPos, arr2, destPos,
                        length);
            }
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10_000; i++) {
            test();
        }
    }
}
---------- END SOURCE ----------