< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Print this page
@@ -47,10 +47,11 @@
  #include "oops/constantPool.inline.hpp"
  #include "oops/instanceKlass.inline.hpp"
  #include "oops/instanceMirrorKlass.hpp"
  #include "oops/method.inline.hpp"
  #include "oops/objArrayKlass.inline.hpp"
+ #include "oops/trainingData.hpp"
  #include "oops/typeArrayOop.inline.hpp"
  #include "prims/jvmtiExport.hpp"
  #include "prims/methodHandles.hpp"
  #include "prims/nativeLookup.hpp"
  #include "runtime/arguments.hpp"

@@ -503,15 +504,19 @@
          }
          goto unexpected;
        }
      } else if (JVMCIENV->isa_HotSpotMethodData(base_object)) {
        jlong base_address = (intptr_t) JVMCIENV->asMethodData(base_object);
-       klass = *((Klass**) (intptr_t) (base_address + offset));
-       if (klass == nullptr || !klass->is_loader_alive()) {
+       Klass* k = *((Klass**) (intptr_t) (base_address + offset));
+       if (k == nullptr || k->class_loader_data() == nullptr || !TrainingData::is_klass_loaded(k)) {
+         return nullptr;
+       }
+       if (!k->is_loader_alive()) {
          // Klasses in methodData might be concurrently unloading so return null in that case.
          return nullptr;
        }
+       klass = k;
      } else {
        goto unexpected;
      }
    } else {
      goto unexpected;
< prev index next >