From 492b954f81f75cedec50fabc4e6071cabb53acc0 Mon Sep 17 00:00:00 2001 From: Stefan Karlsson Date: Tue, 9 Apr 2024 12:31:13 +0000 Subject: [PATCH] 8329750: Change Universe functions to return more specific Klass* types Reviewed-by: coleenp --- .../share/classfile/systemDictionary.cpp | 2 +- src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 2 +- src/hotspot/share/memory/oopFactory.cpp | 35 ++++++++----------- src/hotspot/share/memory/universe.cpp | 12 ++++--- src/hotspot/share/memory/universe.hpp | 24 ++++++------- src/hotspot/share/prims/vectorSupport.cpp | 2 +- 6 files changed, 36 insertions(+), 41 deletions(-) diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp index 1cc012d24f7..6a8d2975059 100644 --- a/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp @@ -368,7 +368,7 @@ Klass* SystemDictionary::resolve_array_class_or_null(Symbol* class_name, } } else { k = Universe::typeArrayKlass(t); - k = TypeArrayKlass::cast(k)->array_klass(ndims, CHECK_NULL); + k = k->array_klass(ndims, CHECK_NULL); } return k; } diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp index 861a96318b4..98b61d5174b 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp @@ -636,7 +636,7 @@ C2V_VMENTRY_NULL(jobject, lookupType, (JNIEnv* env, jobject, jstring jname, ARGU resolved_klass = resolved_klass->array_klass(ndim, CHECK_NULL); } } else { - resolved_klass = TypeArrayKlass::cast(Universe::typeArrayKlass(ss.type()))->array_klass(ndim, CHECK_NULL); + resolved_klass = Universe::typeArrayKlass(ss.type())->array_klass(ndim, CHECK_NULL); } } else { resolved_klass = SystemDictionary::find_instance_klass(THREAD, class_name, diff --git a/src/hotspot/share/memory/oopFactory.cpp b/src/hotspot/share/memory/oopFactory.cpp index 017e3811236..02cd7108cdf 100644 --- a/src/hotspot/share/memory/oopFactory.cpp +++ b/src/hotspot/share/memory/oopFactory.cpp @@ -41,41 +41,41 @@ #include "utilities/utf8.hpp" typeArrayOop oopFactory::new_boolArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::boolArrayKlass())->allocate(length, THREAD); + return Universe::boolArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_charArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::charArrayKlass())->allocate(length, THREAD); + return Universe::charArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_floatArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::floatArrayKlass())->allocate(length, THREAD); + return Universe::floatArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_doubleArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::doubleArrayKlass())->allocate(length, THREAD); + return Universe::doubleArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_byteArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::byteArrayKlass())->allocate(length, THREAD); + return Universe::byteArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_shortArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::shortArrayKlass())->allocate(length, THREAD); + return Universe::shortArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_intArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::intArrayKlass())->allocate(length, THREAD); + return Universe::intArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_longArray(int length, TRAPS) { - return TypeArrayKlass::cast(Universe::longArrayKlass())->allocate(length, THREAD); + return Universe::longArrayKlass()->allocate(length, THREAD); } // create java.lang.Object[] objArrayOop oopFactory::new_objectArray(int length, TRAPS) { assert(Universe::objectArrayKlass() != nullptr, "Too early?"); - return ObjArrayKlass::cast(Universe::objectArrayKlass())->allocate(length, THREAD); + return Universe::objectArrayKlass()->allocate(length, THREAD); } typeArrayOop oopFactory::new_charArray(const char* utf8_str, TRAPS) { @@ -88,10 +88,8 @@ typeArrayOop oopFactory::new_charArray(const char* utf8_str, TRAPS) { } typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) { - Klass* klass = Universe::typeArrayKlass(type); - TypeArrayKlass* typeArrayKlass = TypeArrayKlass::cast(klass); - typeArrayOop result = typeArrayKlass->allocate(length, THREAD); - return result; + TypeArrayKlass* klass = Universe::typeArrayKlass(type); + return klass->allocate(length, THREAD); } // Create a Java array that points to Symbol. @@ -100,17 +98,12 @@ typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) { // this. They cast Symbol* into this type. typeArrayOop oopFactory::new_symbolArray(int length, TRAPS) { BasicType type = LP64_ONLY(T_LONG) NOT_LP64(T_INT); - Klass* klass = Universe::typeArrayKlass(type); - TypeArrayKlass* typeArrayKlass = TypeArrayKlass::cast(klass); - typeArrayOop result = typeArrayKlass->allocate(length, THREAD); - return result; + return new_typeArray(type, length, THREAD); } typeArrayOop oopFactory::new_typeArray_nozero(BasicType type, int length, TRAPS) { - Klass* klass = Universe::typeArrayKlass(type); - TypeArrayKlass* typeArrayKlass = TypeArrayKlass::cast(klass); - typeArrayOop result = typeArrayKlass->allocate_common(length, false, THREAD); - return result; + TypeArrayKlass* klass = Universe::typeArrayKlass(type); + return klass->allocate_common(length, false, THREAD); } diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index d6f1d25d1a1..3769285d08c 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -111,9 +111,9 @@ static LatestMethodCache _throw_no_such_method_error_cache; // Unsafe.throwNoSuc static LatestMethodCache _do_stack_walk_cache; // AbstractStackWalker.doStackWalk() // Known objects -Klass* Universe::_typeArrayKlasses[T_LONG+1] = { nullptr /*, nullptr...*/ }; -Klass* Universe::_objectArrayKlass = nullptr; -Klass* Universe::_fillerArrayKlass = nullptr; +TypeArrayKlass* Universe::_typeArrayKlasses[T_LONG+1] = { nullptr /*, nullptr...*/ }; +ObjArrayKlass* Universe::_objectArrayKlass = nullptr; +Klass* Universe::_fillerArrayKlass = nullptr; OopHandle Universe::_basic_type_mirrors[T_VOID+1]; #if INCLUDE_CDS_JAVA_HEAP int Universe::_archived_basic_type_mirror_indices[T_VOID+1]; @@ -472,8 +472,10 @@ void Universe::genesis(TRAPS) { // ordinary object arrays, _objectArrayKlass will be loaded when // SystemDictionary::initialize(CHECK); is run. See the extra check // for Object_klass_loaded in objArrayKlassKlass::allocate_objArray_klass_impl. - _objectArrayKlass = InstanceKlass:: - cast(vmClasses::Object_klass())->array_klass(1, CHECK); + { + Klass* oak = vmClasses::Object_klass()->array_klass(CHECK); + _objectArrayKlass = ObjArrayKlass::cast(oak); + } // OLD // Add the class to the class hierarchy manually to make sure that // its vtable is initialized after core bootstrapping is completed. diff --git a/src/hotspot/share/memory/universe.hpp b/src/hotspot/share/memory/universe.hpp index b8a011fd2aa..c5e366f507f 100644 --- a/src/hotspot/share/memory/universe.hpp +++ b/src/hotspot/share/memory/universe.hpp @@ -65,8 +65,8 @@ class Universe: AllStatic { private: // Known classes in the VM - static Klass* _typeArrayKlasses[T_LONG+1]; - static Klass* _objectArrayKlass; + static TypeArrayKlass* _typeArrayKlasses[T_LONG+1]; + static ObjArrayKlass* _objectArrayKlass; // Special int-Array that represents filler objects that are used by GC to overwrite // dead objects. References to them are generally an error. static Klass* _fillerArrayKlass; @@ -174,20 +174,20 @@ class Universe: AllStatic { static void set_verify_data(uintptr_t mask, uintptr_t bits) PRODUCT_RETURN; // Known classes in the VM - static Klass* boolArrayKlass() { return typeArrayKlass(T_BOOLEAN); } - static Klass* byteArrayKlass() { return typeArrayKlass(T_BYTE); } - static Klass* charArrayKlass() { return typeArrayKlass(T_CHAR); } - static Klass* intArrayKlass() { return typeArrayKlass(T_INT); } - static Klass* shortArrayKlass() { return typeArrayKlass(T_SHORT); } - static Klass* longArrayKlass() { return typeArrayKlass(T_LONG); } - static Klass* floatArrayKlass() { return typeArrayKlass(T_FLOAT); } - static Klass* doubleArrayKlass() { return typeArrayKlass(T_DOUBLE); } + static TypeArrayKlass* boolArrayKlass() { return typeArrayKlass(T_BOOLEAN); } + static TypeArrayKlass* byteArrayKlass() { return typeArrayKlass(T_BYTE); } + static TypeArrayKlass* charArrayKlass() { return typeArrayKlass(T_CHAR); } + static TypeArrayKlass* intArrayKlass() { return typeArrayKlass(T_INT); } + static TypeArrayKlass* shortArrayKlass() { return typeArrayKlass(T_SHORT); } + static TypeArrayKlass* longArrayKlass() { return typeArrayKlass(T_LONG); } + static TypeArrayKlass* floatArrayKlass() { return typeArrayKlass(T_FLOAT); } + static TypeArrayKlass* doubleArrayKlass() { return typeArrayKlass(T_DOUBLE); } - static Klass* objectArrayKlass() { return _objectArrayKlass; } + static ObjArrayKlass* objectArrayKlass() { return _objectArrayKlass; } static Klass* fillerArrayKlass() { return _fillerArrayKlass; } - static Klass* typeArrayKlass(BasicType t) { + static TypeArrayKlass* typeArrayKlass(BasicType t) { assert((uint)t >= T_BOOLEAN, "range check for type: %s", type2name(t)); assert((uint)t < T_LONG+1, "range check for type: %s", type2name(t)); assert(_typeArrayKlasses[t] != nullptr, "domain check"); diff --git a/src/hotspot/share/prims/vectorSupport.cpp b/src/hotspot/share/prims/vectorSupport.cpp index fdb5e83598f..e0517c91e95 100644 --- a/src/hotspot/share/prims/vectorSupport.cpp +++ b/src/hotspot/share/prims/vectorSupport.cpp @@ -138,7 +138,7 @@ Handle VectorSupport::allocate_vector_payload_helper(InstanceKlass* ik, frame* f int elem_size = type2aelembytes(elem_bt); // On-heap vector values are represented as primitive arrays. - TypeArrayKlass* tak = TypeArrayKlass::cast(Universe::typeArrayKlass(elem_bt)); + TypeArrayKlass* tak = Universe::typeArrayKlass(elem_bt); typeArrayOop arr = tak->allocate(num_elem, CHECK_NH); // safepoint