• 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

            chagedorn Christian Hagedorn
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: