# HG changeset patch # User iklam # Date 1539929101 25200 # Node ID f08c1d7a5c53ea8db23830a085b8af6b0f6e76df # Parent 6eb876ac68270c4aa3ff676ea035c98fce443488 8212642: Remove SystemDictionary::InitOption enum Reviewed-by: dholmes, kvn, redestad diff -r 6eb876ac6827 -r f08c1d7a5c53 src/hotspot/share/ci/ciEnv.cpp --- a/src/hotspot/share/ci/ciEnv.cpp Thu Oct 18 21:14:49 2018 +0200 +++ b/src/hotspot/share/ci/ciEnv.cpp Thu Oct 18 23:05:01 2018 -0700 @@ -77,7 +77,7 @@ ciObject* ciEnv::_null_object_instance; -#define WK_KLASS_DEFN(name, ignore_s, ignore_o) ciInstanceKlass* ciEnv::_##name = NULL; +#define WK_KLASS_DEFN(name, ignore_s) ciInstanceKlass* ciEnv::_##name = NULL; WK_KLASSES_DO(WK_KLASS_DEFN) #undef WK_KLASS_DEFN diff -r 6eb876ac6827 -r f08c1d7a5c53 src/hotspot/share/ci/ciEnv.hpp --- a/src/hotspot/share/ci/ciEnv.hpp Thu Oct 18 21:14:49 2018 +0200 +++ b/src/hotspot/share/ci/ciEnv.hpp Thu Oct 18 23:05:01 2018 -0700 @@ -82,7 +82,7 @@ // Distinguished instances of certain ciObjects.. static ciObject* _null_object_instance; -#define WK_KLASS_DECL(name, ignore_s, ignore_o) static ciInstanceKlass* _##name; +#define WK_KLASS_DECL(name, ignore_s) static ciInstanceKlass* _##name; WK_KLASSES_DO(WK_KLASS_DECL) #undef WK_KLASS_DECL @@ -374,7 +374,7 @@ // Access to certain well known ciObjects. -#define WK_KLASS_FUNC(name, ignore_s, ignore_o) \ +#define WK_KLASS_FUNC(name, ignore_s) \ ciInstanceKlass* name() { \ return _##name;\ } diff -r 6eb876ac6827 -r f08c1d7a5c53 src/hotspot/share/ci/ciObjectFactory.cpp --- a/src/hotspot/share/ci/ciObjectFactory.cpp Thu Oct 18 21:14:49 2018 +0200 +++ b/src/hotspot/share/ci/ciObjectFactory.cpp Thu Oct 18 23:05:01 2018 -0700 @@ -157,8 +157,8 @@ ciEnv::_null_object_instance = new (_arena) ciNullObject(); init_ident_of(ciEnv::_null_object_instance); -#define WK_KLASS_DEFN(name, ignore_s, opt) \ - if (SystemDictionary::name() != NULL) \ +#define WK_KLASS_DEFN(name, ignore_s) \ + if (SystemDictionary::name##_is_loaded()) \ ciEnv::_##name = get_metadata(SystemDictionary::name())->as_instance_klass(); WK_KLASSES_DO(WK_KLASS_DEFN) diff -r 6eb876ac6827 -r f08c1d7a5c53 src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp Thu Oct 18 21:14:49 2018 +0200 +++ b/src/hotspot/share/classfile/systemDictionary.cpp Thu Oct 18 23:05:01 2018 -0700 @@ -1963,41 +1963,30 @@ // Compact table of directions on the initialization of klasses: static const short wk_init_info[] = { - #define WK_KLASS_INIT_INFO(name, symbol, option) \ - ( ((int)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol) \ - << SystemDictionary::CEIL_LG_OPTION_LIMIT) \ - | (int)SystemDictionary::option ), + #define WK_KLASS_INIT_INFO(name, symbol) \ + ((short)vmSymbols::VM_SYMBOL_ENUM_NAME(symbol)), + WK_KLASSES_DO(WK_KLASS_INIT_INFO) #undef WK_KLASS_INIT_INFO 0 }; -bool SystemDictionary::resolve_wk_klass(WKID id, int init_opt, TRAPS) { +bool SystemDictionary::resolve_wk_klass(WKID id, TRAPS) { assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); - int info = wk_init_info[id - FIRST_WKID]; - int sid = (info >> CEIL_LG_OPTION_LIMIT); + int sid = wk_init_info[id - FIRST_WKID]; Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); InstanceKlass** klassp = &_well_known_klasses[id]; - bool must_load; + #if INCLUDE_JVMCI - if (EnableJVMCI) { - // If JVMCI is enabled we require its classes to be found. - must_load = (init_opt < SystemDictionary::Opt) || (init_opt == SystemDictionary::Jvmci); - } else + if (id >= FIRST_JVMCI_WKID) { + assert(EnableJVMCI, "resolve JVMCI classes only when EnableJVMCI is true"); + } #endif - { - must_load = (init_opt < SystemDictionary::Opt); - } if ((*klassp) == NULL) { - Klass* k; - if (must_load) { - k = resolve_or_fail(symbol, true, CHECK_0); // load required class - } else { - k = resolve_or_null(symbol, CHECK_0); // load optional klass - } - (*klassp) = (k == NULL) ? NULL : InstanceKlass::cast(k); + Klass* k = resolve_or_fail(symbol, true, CHECK_0); + (*klassp) = InstanceKlass::cast(k); } return ((*klassp) != NULL); } @@ -2006,11 +1995,7 @@ assert((int)start_id <= (int)limit_id, "IDs are out of order!"); for (int id = (int)start_id; id < (int)limit_id; id++) { assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); - int info = wk_init_info[id - FIRST_WKID]; - int sid = (info >> CEIL_LG_OPTION_LIMIT); - int opt = (info & right_n_bits(CEIL_LG_OPTION_LIMIT)); - - resolve_wk_klass((WKID)id, opt, CHECK); + resolve_wk_klass((WKID)id, CHECK); } // move the starting value forward to the limit: diff -r 6eb876ac6827 -r f08c1d7a5c53 src/hotspot/share/classfile/systemDictionary.hpp --- a/src/hotspot/share/classfile/systemDictionary.hpp Thu Oct 18 21:14:49 2018 +0200 +++ b/src/hotspot/share/classfile/systemDictionary.hpp Thu Oct 18 23:05:01 2018 -0700 @@ -94,127 +94,125 @@ #define WK_KLASS_ENUM_NAME(kname) kname##_knum // Each well-known class has a short klass name (like object_klass), -// a vmSymbol name (like java_lang_Object), and a flag word -// that makes some minor distinctions, like whether the klass -// is preloaded, optional, release-specific, etc. +// and a vmSymbol name (like java_lang_Object). // The order of these definitions is significant; it is the order in which // preloading is actually performed by resolve_preloaded_classes. -#define WK_KLASSES_DO(do_klass) \ - /* well-known classes */ \ - do_klass(Object_klass, java_lang_Object, Pre ) \ - do_klass(String_klass, java_lang_String, Pre ) \ - do_klass(Class_klass, java_lang_Class, Pre ) \ - do_klass(Cloneable_klass, java_lang_Cloneable, Pre ) \ - do_klass(ClassLoader_klass, java_lang_ClassLoader, Pre ) \ - do_klass(Serializable_klass, java_io_Serializable, Pre ) \ - do_klass(System_klass, java_lang_System, Pre ) \ - do_klass(Throwable_klass, java_lang_Throwable, Pre ) \ - do_klass(Error_klass, java_lang_Error, Pre ) \ - do_klass(ThreadDeath_klass, java_lang_ThreadDeath, Pre ) \ - do_klass(Exception_klass, java_lang_Exception, Pre ) \ - do_klass(RuntimeException_klass, java_lang_RuntimeException, Pre ) \ - do_klass(SecurityManager_klass, java_lang_SecurityManager, Pre ) \ - do_klass(ProtectionDomain_klass, java_security_ProtectionDomain, Pre ) \ - do_klass(AccessControlContext_klass, java_security_AccessControlContext, Pre ) \ - do_klass(SecureClassLoader_klass, java_security_SecureClassLoader, Pre ) \ - do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException, Pre ) \ - do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError, Pre ) \ - do_klass(LinkageError_klass, java_lang_LinkageError, Pre ) \ - do_klass(ClassCastException_klass, java_lang_ClassCastException, Pre ) \ - do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException, Pre ) \ - do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError, Pre ) \ - do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError, Pre ) \ - do_klass(StackOverflowError_klass, java_lang_StackOverflowError, Pre ) \ - do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException, Pre ) \ - do_klass(Reference_klass, java_lang_ref_Reference, Pre ) \ - \ - /* Preload ref klasses and set reference types */ \ - do_klass(SoftReference_klass, java_lang_ref_SoftReference, Pre ) \ - do_klass(WeakReference_klass, java_lang_ref_WeakReference, Pre ) \ - do_klass(FinalReference_klass, java_lang_ref_FinalReference, Pre ) \ - do_klass(PhantomReference_klass, java_lang_ref_PhantomReference, Pre ) \ - do_klass(Finalizer_klass, java_lang_ref_Finalizer, Pre ) \ - \ - do_klass(Thread_klass, java_lang_Thread, Pre ) \ - do_klass(ThreadGroup_klass, java_lang_ThreadGroup, Pre ) \ - do_klass(Properties_klass, java_util_Properties, Pre ) \ - do_klass(Module_klass, java_lang_Module, Pre ) \ - do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject, Pre ) \ - do_klass(reflect_Field_klass, java_lang_reflect_Field, Pre ) \ - do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter, Opt ) \ - do_klass(reflect_Method_klass, java_lang_reflect_Method, Pre ) \ - do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor, Pre ) \ - \ - /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \ - /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ - do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl, Opt ) \ - do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl, Pre ) \ - do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl, Pre ) \ - do_klass(reflect_DelegatingClassLoader_klass, reflect_DelegatingClassLoader, Opt ) \ - do_klass(reflect_ConstantPool_klass, reflect_ConstantPool, Opt ) \ - do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, reflect_UnsafeStaticFieldAccessorImpl, Opt ) \ - do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive, Opt ) \ - \ - /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ - do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \ - do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle, Pre ) \ - do_klass(VarHandle_klass, java_lang_invoke_VarHandle, Pre ) \ - do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre ) \ - do_klass(ResolvedMethodName_klass, java_lang_invoke_ResolvedMethodName, Pre ) \ - do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre ) \ - do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \ - do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre ) \ - do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre ) \ - do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre ) \ - do_klass(Context_klass, java_lang_invoke_MethodHandleNatives_CallSiteContext, Pre ) \ - do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite, Pre ) \ - do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite, Pre ) \ - do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite, Pre ) \ - /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \ - \ - do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives, Pre ) \ - do_klass(StringBuffer_klass, java_lang_StringBuffer, Pre ) \ - do_klass(StringBuilder_klass, java_lang_StringBuilder, Pre ) \ - do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe, Pre ) \ - do_klass(module_Modules_klass, jdk_internal_module_Modules, Pre ) \ - \ - /* support for CDS */ \ - do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream, Pre ) \ - do_klass(URL_klass, java_net_URL, Pre ) \ - do_klass(Jar_Manifest_klass, java_util_jar_Manifest, Pre ) \ - do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders, Pre ) \ - do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader, Pre ) \ - do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader, Pre ) \ - do_klass(CodeSource_klass, java_security_CodeSource, Pre ) \ - \ - do_klass(StackTraceElement_klass, java_lang_StackTraceElement, Opt ) \ - \ - /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ - do_klass(nio_Buffer_klass, java_nio_Buffer, Opt ) \ - \ - /* Stack Walking */ \ - do_klass(StackWalker_klass, java_lang_StackWalker, Opt ) \ - do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker, Opt ) \ - do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo, Opt ) \ - do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo, Opt ) \ - \ - /* support for stack dump lock analysis */ \ - do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer, Pre ) \ - \ - /* Preload boxing klasses */ \ - do_klass(Boolean_klass, java_lang_Boolean, Pre ) \ - do_klass(Character_klass, java_lang_Character, Pre ) \ - do_klass(Float_klass, java_lang_Float, Pre ) \ - do_klass(Double_klass, java_lang_Double, Pre ) \ - do_klass(Byte_klass, java_lang_Byte, Pre ) \ - do_klass(Short_klass, java_lang_Short, Pre ) \ - do_klass(Integer_klass, java_lang_Integer, Pre ) \ - do_klass(Long_klass, java_lang_Long, Pre ) \ - \ - /* JVMCI classes. These are loaded on-demand. */ \ - JVMCI_WK_KLASSES_DO(do_klass) \ - \ +#define WK_KLASSES_DO(do_klass) \ + /* well-known classes */ \ + do_klass(Object_klass, java_lang_Object ) \ + do_klass(String_klass, java_lang_String ) \ + do_klass(Class_klass, java_lang_Class ) \ + do_klass(Cloneable_klass, java_lang_Cloneable ) \ + do_klass(ClassLoader_klass, java_lang_ClassLoader ) \ + do_klass(Serializable_klass, java_io_Serializable ) \ + do_klass(System_klass, java_lang_System ) \ + do_klass(Throwable_klass, java_lang_Throwable ) \ + do_klass(Error_klass, java_lang_Error ) \ + do_klass(ThreadDeath_klass, java_lang_ThreadDeath ) \ + do_klass(Exception_klass, java_lang_Exception ) \ + do_klass(RuntimeException_klass, java_lang_RuntimeException ) \ + do_klass(SecurityManager_klass, java_lang_SecurityManager ) \ + do_klass(ProtectionDomain_klass, java_security_ProtectionDomain ) \ + do_klass(AccessControlContext_klass, java_security_AccessControlContext ) \ + do_klass(SecureClassLoader_klass, java_security_SecureClassLoader ) \ + do_klass(ClassNotFoundException_klass, java_lang_ClassNotFoundException ) \ + do_klass(NoClassDefFoundError_klass, java_lang_NoClassDefFoundError ) \ + do_klass(LinkageError_klass, java_lang_LinkageError ) \ + do_klass(ClassCastException_klass, java_lang_ClassCastException ) \ + do_klass(ArrayStoreException_klass, java_lang_ArrayStoreException ) \ + do_klass(VirtualMachineError_klass, java_lang_VirtualMachineError ) \ + do_klass(OutOfMemoryError_klass, java_lang_OutOfMemoryError ) \ + do_klass(StackOverflowError_klass, java_lang_StackOverflowError ) \ + do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \ + do_klass(Reference_klass, java_lang_ref_Reference ) \ + \ + /* Preload ref klasses and set reference types */ \ + do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \ + do_klass(WeakReference_klass, java_lang_ref_WeakReference ) \ + do_klass(FinalReference_klass, java_lang_ref_FinalReference ) \ + do_klass(PhantomReference_klass, java_lang_ref_PhantomReference ) \ + do_klass(Finalizer_klass, java_lang_ref_Finalizer ) \ + \ + do_klass(Thread_klass, java_lang_Thread ) \ + do_klass(ThreadGroup_klass, java_lang_ThreadGroup ) \ + do_klass(Properties_klass, java_util_Properties ) \ + do_klass(Module_klass, java_lang_Module ) \ + do_klass(reflect_AccessibleObject_klass, java_lang_reflect_AccessibleObject ) \ + do_klass(reflect_Field_klass, java_lang_reflect_Field ) \ + do_klass(reflect_Parameter_klass, java_lang_reflect_Parameter ) \ + do_klass(reflect_Method_klass, java_lang_reflect_Method ) \ + do_klass(reflect_Constructor_klass, java_lang_reflect_Constructor ) \ + \ + /* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \ + /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ + do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \ + do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \ + do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl ) \ + do_klass(reflect_DelegatingClassLoader_klass, reflect_DelegatingClassLoader ) \ + do_klass(reflect_ConstantPool_klass, reflect_ConstantPool ) \ + do_klass(reflect_UnsafeStaticFieldAccessorImpl_klass, reflect_UnsafeStaticFieldAccessorImpl ) \ + do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive ) \ + \ + /* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \ + do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \ + do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \ + do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \ + do_klass(MemberName_klass, java_lang_invoke_MemberName ) \ + do_klass(ResolvedMethodName_klass, java_lang_invoke_ResolvedMethodName ) \ + do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives ) \ + do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm ) \ + do_klass(MethodType_klass, java_lang_invoke_MethodType ) \ + do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError ) \ + do_klass(CallSite_klass, java_lang_invoke_CallSite ) \ + do_klass(Context_klass, java_lang_invoke_MethodHandleNatives_CallSiteContext ) \ + do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite ) \ + do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite ) \ + do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite ) \ + /* Note: MethodHandle must be first, and VolatileCallSite last in group */ \ + \ + do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives ) \ + do_klass(StringBuffer_klass, java_lang_StringBuffer ) \ + do_klass(StringBuilder_klass, java_lang_StringBuilder ) \ + do_klass(internal_Unsafe_klass, jdk_internal_misc_Unsafe ) \ + do_klass(module_Modules_klass, jdk_internal_module_Modules ) \ + \ + /* support for CDS */ \ + do_klass(ByteArrayInputStream_klass, java_io_ByteArrayInputStream ) \ + do_klass(URL_klass, java_net_URL ) \ + do_klass(Jar_Manifest_klass, java_util_jar_Manifest ) \ + do_klass(jdk_internal_loader_ClassLoaders_klass, jdk_internal_loader_ClassLoaders ) \ + do_klass(jdk_internal_loader_ClassLoaders_AppClassLoader_klass, jdk_internal_loader_ClassLoaders_AppClassLoader) \ + do_klass(jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass, jdk_internal_loader_ClassLoaders_PlatformClassLoader) \ + do_klass(CodeSource_klass, java_security_CodeSource ) \ + \ + do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \ + \ + /* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \ + do_klass(nio_Buffer_klass, java_nio_Buffer ) \ + \ + /* Stack Walking */ \ + do_klass(StackWalker_klass, java_lang_StackWalker ) \ + do_klass(AbstractStackWalker_klass, java_lang_StackStreamFactory_AbstractStackWalker ) \ + do_klass(StackFrameInfo_klass, java_lang_StackFrameInfo ) \ + do_klass(LiveStackFrameInfo_klass, java_lang_LiveStackFrameInfo ) \ + \ + /* support for stack dump lock analysis */ \ + do_klass(java_util_concurrent_locks_AbstractOwnableSynchronizer_klass, java_util_concurrent_locks_AbstractOwnableSynchronizer) \ + \ + /* Preload boxing klasses */ \ + do_klass(Boolean_klass, java_lang_Boolean ) \ + do_klass(Character_klass, java_lang_Character ) \ + do_klass(Float_klass, java_lang_Float ) \ + do_klass(Double_klass, java_lang_Double ) \ + do_klass(Byte_klass, java_lang_Byte ) \ + do_klass(Short_klass, java_lang_Short ) \ + do_klass(Integer_klass, java_lang_Integer ) \ + do_klass(Long_klass, java_lang_Long ) \ + \ + /* JVMCI classes. These are loaded on-demand. */ \ + JVMCI_WK_KLASSES_DO(do_klass) \ + \ /*end*/ @@ -226,7 +224,7 @@ enum WKID { NO_WKID = 0, - #define WK_KLASS_ENUM(name, symbol, ignore_o) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name), + #define WK_KLASS_ENUM(name, symbol) WK_KLASS_ENUM_NAME(name), WK_KLASS_ENUM_NAME(symbol) = WK_KLASS_ENUM_NAME(name), WK_KLASSES_DO(WK_KLASS_ENUM) #undef WK_KLASS_ENUM @@ -240,21 +238,6 @@ FIRST_WKID = NO_WKID + 1 }; - enum InitOption { - Pre, // preloaded; error if not present - - // Order is significant. Options before this point require resolve_or_fail. - // Options after this point will use resolve_or_null instead. - - Opt, // preload tried; NULL if not present -#if INCLUDE_JVMCI - Jvmci, // preload tried; error if not present if JVMCI enabled -#endif - OPTION_LIMIT, - CEIL_LG_OPTION_LIMIT = 2 // OPTION_LIMIT <= (1<is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { + if (SystemDictionary::reflect_MagicAccessorImpl_klass_is_loaded() && + current_class->is_subclass_of(SystemDictionary::reflect_MagicAccessorImpl_klass())) { return ACCESS_OK; }