-
Sub-task
-
Resolution: Duplicate
-
P4
-
23
-
x86_64
-
linux_ubuntu
ADDITIONAL SYSTEM INFORMATION :
```bash
$ cat /etc/os-release
VERSION="22.04.4 LTS (Jammy Jellyfish)"
$ oracle-jdk-21.0.2/bin/java -version
java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)
$ oracle-jdk-17.0.10/bin/java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
$ jdk23u/bin/java -version
openjdk version "23-internal" 2024-09-17
OpenJDK Runtime Environment (fastdebug build 23-internal-adhoc.jdk23u)
OpenJDK 64-Bit Server VM (fastdebug build 23-internal-adhoc.jdk23u, mixed mode)
```
A DESCRIPTION OF THE PROBLEM :
When I compile and run the following code with JDK, I sometimes get incorrect results. The JDK versions involved include:
- jdk17u (source code from github jdk17u repo)
- oracle-jdk-17 (binary download from Oracle website)
- jdk21u (source code from github jdk21u repo)
- oracle-jdk-21 (binary download from Oracle website)
- jdk23u (source code from github jdk repo)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
java Test
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
6528000
13056000
19584000
26112000
32640000
39168000
45696000
52224000
58752000
65280000
ACTUAL -
6528000
13056000
19584000
26112000
32640000
38743680
44814720
50885760
56956800
63027840
---------- BEGIN SOURCE ----------
class Test {
int N = 256;
long instanceCount;
int[] iArrFld = new int[N];
long vMeth_check_sum = 0;
void vMeth() {
int[] iArr = new int[N];
for (int i12 = 1; i12 < 3; ++i12) {
i12 <<= instanceCount;
for (int i = 0; i < iArr.length; ++i)
vMeth_check_sum += i;
}
}
void mainTest(String[] strArr1) {
int i = 6, i2;
for (int i1 = 6; i1 < 149; ++i1) {
try {
i2 = i / iArrFld[i1 - 1];
i = i1;
} catch (ArithmeticException a_e) {
}
vMeth();
instanceCount -= 8;
for (int i28 = i1; i28 < 35; i28++) {
instanceCount *= i;
iArrFld[i1] <<= 11;
synchronized (new Test()) {
}
}
}
for (int i30 = 5; i30 < 134; ++i30) {
int var46 = 0;
do var46++; while (var46 < 20000);
iArrFld[i30] = 11;
}
System.out.println(vMeth_check_sum);
}
public static void main(String[] strArr) {
Test _instance = new Test();
for (int i = 0; i < 10; i++) _instance.mainTest(strArr);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use -Xint to disable JIT
```bash
$ cat /etc/os-release
VERSION="22.04.4 LTS (Jammy Jellyfish)"
$ oracle-jdk-21.0.2/bin/java -version
java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)
$ oracle-jdk-17.0.10/bin/java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
$ jdk23u/bin/java -version
openjdk version "23-internal" 2024-09-17
OpenJDK Runtime Environment (fastdebug build 23-internal-adhoc.jdk23u)
OpenJDK 64-Bit Server VM (fastdebug build 23-internal-adhoc.jdk23u, mixed mode)
```
A DESCRIPTION OF THE PROBLEM :
When I compile and run the following code with JDK, I sometimes get incorrect results. The JDK versions involved include:
- jdk17u (source code from github jdk17u repo)
- oracle-jdk-17 (binary download from Oracle website)
- jdk21u (source code from github jdk21u repo)
- oracle-jdk-21 (binary download from Oracle website)
- jdk23u (source code from github jdk repo)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
java Test
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
6528000
13056000
19584000
26112000
32640000
39168000
45696000
52224000
58752000
65280000
ACTUAL -
6528000
13056000
19584000
26112000
32640000
38743680
44814720
50885760
56956800
63027840
---------- BEGIN SOURCE ----------
class Test {
int N = 256;
long instanceCount;
int[] iArrFld = new int[N];
long vMeth_check_sum = 0;
void vMeth() {
int[] iArr = new int[N];
for (int i12 = 1; i12 < 3; ++i12) {
i12 <<= instanceCount;
for (int i = 0; i < iArr.length; ++i)
vMeth_check_sum += i;
}
}
void mainTest(String[] strArr1) {
int i = 6, i2;
for (int i1 = 6; i1 < 149; ++i1) {
try {
i2 = i / iArrFld[i1 - 1];
i = i1;
} catch (ArithmeticException a_e) {
}
vMeth();
instanceCount -= 8;
for (int i28 = i1; i28 < 35; i28++) {
instanceCount *= i;
iArrFld[i1] <<= 11;
synchronized (new Test()) {
}
}
}
for (int i30 = 5; i30 < 134; ++i30) {
int var46 = 0;
do var46++; while (var46 < 20000);
iArrFld[i30] = 11;
}
System.out.println(vMeth_check_sum);
}
public static void main(String[] strArr) {
Test _instance = new Test();
for (int i = 0; i < 10; i++) _instance.mainTest(strArr);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use -Xint to disable JIT
- duplicates
-
JDK-8327963 [Umbrella] Incorrect result of C2 compiled code since JDK-8237581
- Open