IBM Support

IJ41694: INCORRECT JIT OPTIMIZATION OF JAVA CODE

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • Error Message: The problem can result in a wide variety of
    symptoms including but not limited to unexpected exceptions,
    incorrect behavior and incorrect calculations.
    .
    Stack Trace: If the problem presents as a JIT compile time
    crash, the stack trace would look like this:
       TR::VPConstraint::intersect
       OMR::ValuePropagation::addGlobalConstraint
       OMR::ValuePropagation::getConstraint
       canFoldNonOverriddenGuard
       constrainIfcmpeqne
    For other types of symptoms the stack trace will depend on the
    Java code being executed.
    .
    The problem can cause the Java JIT compiler to make incorrect
    assumptions about the class of an object that is being used in
    an operation or cause it to assume incorrectly that a reference
    must be null or that it must be non-null.  This can result in
    incorrect optimizations being performed by the JIT compiler -
    for example, it might remove checks of whether a
    NullPointerException or ClassCastException should be thrown, it
    might change the code to cause such exceptions to be thrown
    always, it might assume that the implementation of a method
    defined by a particular class will be invoked based on an
    incorrect assumption about the class of an object, and so on.
    Those incorrect optimizations might result in unexpected
    exceptions or errors being thrown, result in expected exceptions
    or errors not being detected, or result in other incorrect
    behavior. The issue can occur starting with Java 8.0.5.36 on all
    platforms and JVM configurations as long as the JIT is enabled
    

Local fix

  • The problem can be avoided by specifying the java command line
    option -Xjit:disableGlobalVP.  Specifying that option will
    likely have a noticeable impact on performance of a Java
    program.
    

Problem summary

  • The problem is triggered when the Java JIT compiler generates
    inline code for a reference to a method along with code that
    determines, while the code is running, whether to run the
    inlined version of the method or to perform an actual method
    invocation.  Subsequent optimizations might result in two or
    more copies of the code that makes that run-time determination.
    In analyzing whether one of those copies of the code will always
    select the inlined version of the method, the JIT compiler
    might
    not take into account the presence of the other copies of that
    code and make incorrect assumptions about values that reach the
    point of the call.
    

Problem conclusion

  • The problem was resolved by changing the Java JIT compiler to
    analyze whether the block of code that makes the run-time
    determination will always select the inlined version of the
    method only if there is no other copy of that block of code.
    .
    This APAR will be fixed in the following Releases:
    .
    IBM SDK, Java Technology Edition
       8    SR7 FP16  (8.0.7.16)
    .
    Contact your IBM Product's Service Team for these Service
    Refreshes and Fix Packs.
    For those running stand-alone, information about the available
    maintenance can be found at:
               https://www.ibm.com/support/pages/java-sdk
    

Temporary fix

Comments

APAR Information

  • APAR number

    IJ41694

  • Reported component name

    JIT

  • Reported component ID

    620700124

  • Reported release

    130

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2022-08-10

  • Closed date

    2022-08-30

  • Last modified date

    2022-09-15

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    JIT

  • Fixed component ID

    620700124

Applicable component levels

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSNVBF","label":"Runtimes for Java Technology"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"130","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

Document Information

Modified date:
15 September 2022