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

[C1] LIRGenerator::do_CheckCast needs to exclude is_invokespecial_receiver_check() when using PatchAlot

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P3
    • Resolution: Fixed
    • Affects Version/s: 11
    • Fix Version/s: 11
    • Component/s: hotspot
    • Labels:
    • Subcomponent:
    • Introduced In Build:
      b07
    • Introduced In Version:
      10
    • Resolved In Build:
      b12

      Description

      JDK-8168699 introduced a special case for is_invokespecial_receiver_check() in LIRGenerator::do_CheckCast:

        } else if (x->is_invokespecial_receiver_check()) {
          assert(patching_info == NULL, "can't patch this");
          stub = new DeoptimizeStub(info_for_exception,
                                    Deoptimization::Reason_class_check,
                                    Deoptimization::Action_none);

      but overlooked a potential bad interaction with PatchAlot. This can lead to the assertion failure as observed during testing for JDK-8200167 with Graal. The proposed fix is quite simple but needs to be applied to each of the CPU specific files:

      diff --git a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
      --- a/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
      +++ b/src/hotspot/cpu/x86/c1_LIRGenerator_x86.cpp
      @@ -1314,7 +1314,7 @@
          LIRItem obj(x->obj(), this);

          CodeEmitInfo* patching_info = NULL;
      - if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check())) {
      + if (!x->klass()->is_loaded() || (PatchALot && !x->is_incompatible_class_change_check() && !x->is_invokespecial_receiver_check())) {
            // must do this before locking the destination register as an oop register,
            // and before the obj is loaded (the latter is for deoptimization)
            patching_info = state_for(x, x->state_before());

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                dholmes David Holmes
                Reporter:
                dholmes David Holmes
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: