@@ -2263,7 +2263,7 @@ C2V_VMENTRY_NULL(jobjectArray, getDeclaredFieldsInfo, (JNIEnv* env, jobject, ARG
22632263 InstanceKlass* iklass = InstanceKlass::cast(klass);
22642264 int java_fields, injected_fields;
22652265 GrowableArray<FieldInfo>* fields = FieldInfoStream::create_FieldInfoArray(iklass->fieldinfo_stream (), &java_fields, &injected_fields);
2266- JVMCIObjectArray array = JVMCIENV->new_FieldInfo_array (fields->length (), JVMCIENV );
2266+ JVMCIObjectArray array = JVMCIENV->new_FieldInfo_array (fields->length (), JVMCI_CHECK_NULL );
22672267 for (int i = 0 ; i < fields->length (); i++) {
22682268 JVMCIObject field_info = JVMCIENV->new_FieldInfo (fields->adr_at (i), JVMCI_CHECK_NULL);
22692269 JVMCIENV->put_object_at (array, i, field_info);
@@ -2876,11 +2876,12 @@ C2V_VMENTRY_0(jlong, translate, (JNIEnv* env, jobject, jobject obj_handle, jbool
28762876 JVMCIObject methodObject = thisEnv->get_HotSpotNmethod_method (obj);
28772877 methodHandle mh (THREAD, thisEnv->asMethod (methodObject));
28782878 jboolean isDefault = thisEnv->get_HotSpotNmethod_isDefault (obj);
2879+ jboolean profileDeopt = thisEnv->get_HotSpotNmethod_profileDeopt (obj);
28792880 jlong compileIdSnapshot = thisEnv->get_HotSpotNmethod_compileIdSnapshot (obj);
28802881 JVMCIObject name_string = thisEnv->get_InstalledCode_name (obj);
28812882 const char * cstring = name_string.is_null () ? nullptr : thisEnv->as_utf8_string (name_string);
28822883 // Create a new HotSpotNmethod instance in the peer runtime
2883- result = PEER_JVMCIENV->new_HotSpotNmethod (mh, cstring, isDefault, compileIdSnapshot, JVMCI_CHECK_0);
2884+ result = PEER_JVMCIENV->new_HotSpotNmethod (mh, cstring, isDefault, profileDeopt, compileIdSnapshot, JVMCI_CHECK_0);
28842885 JVMCINMethodHandle nmethod_handle (THREAD);
28852886 nmethod* nm = JVMCIENV->get_nmethod (obj, nmethod_handle);
28862887 if (result.is_null ()) {
@@ -2969,13 +2970,21 @@ C2V_VMENTRY_NULL(jobject, asReflectionExecutable, (JNIEnv* env, jobject, ARGUMEN
29692970 return JNIHandles::make_local(THREAD, executable);
29702971C2V_END
29712972
2973+ // Checks that `index` denotes a non-injected field in `klass`
29722974static InstanceKlass* check_field (Klass* klass, jint index, JVMCI_TRAPS) {
29732975 if (!klass->is_instance_klass ()) {
29742976 JVMCI_THROW_MSG_NULL (IllegalArgumentException,
29752977 err_msg (" Expected non-primitive type, got %s" , klass->external_name ()));
29762978 }
29772979 InstanceKlass* iklass = InstanceKlass::cast (klass);
2978- if (index < 0 || index > iklass->total_fields_count ()) {
2980+ if (index < 0 || index >= iklass->java_fields_count ()) {
2981+ if (index >= 0 && index < iklass->total_fields_count ()) {
2982+ fieldDescriptor fd (iklass, index);
2983+ if (fd.is_injected ()) {
2984+ JVMCI_THROW_MSG_NULL (IllegalArgumentException,
2985+ err_msg (" Cannot get Field for injected %s.%s" , klass->external_name (), fd.name ()->as_C_string ()));
2986+ }
2987+ }
29792988 JVMCI_THROW_MSG_NULL (IllegalArgumentException,
29802989 err_msg (" Field index %d out of bounds for %s" , index, klass->external_name ()));
29812990 }
@@ -2985,15 +2994,15 @@ static InstanceKlass* check_field(Klass* klass, jint index, JVMCI_TRAPS) {
29852994C2V_VMENTRY_NULL (jobject, asReflectionField, (JNIEnv* env, jobject, ARGUMENT_PAIR(klass), jint index))
29862995 requireInHotSpot(" asReflectionField" , JVMCI_CHECK_NULL);
29872996 Klass* klass = UNPACK_PAIR(Klass, klass);
2988- InstanceKlass* iklass = check_field(klass, index, JVMCIENV );
2997+ InstanceKlass* iklass = check_field(klass, index, JVMCI_CHECK_NULL );
29892998 fieldDescriptor fd (iklass, index);
29902999 oop reflected = Reflection::new_field(&fd, CHECK_NULL);
29913000 return JNIHandles::make_local(THREAD, reflected);
29923001C2V_END
29933002
29943003static jbyteArray get_encoded_annotation_data (InstanceKlass* holder, AnnotationArray* annotations_array, bool for_class,
29953004 jint filter_length, jlong filter_klass_pointers,
2996- JavaThread* THREAD, JVMCIEnv* JVMCIENV ) {
3005+ JavaThread* THREAD, JVMCI_TRAPS ) {
29973006 // Get a ConstantPool object for annotation parsing
29983007 Handle jcp = reflect_ConstantPool::create (CHECK_NULL);
29993008 reflect_ConstantPool::set_cp (jcp (), holder->constants ());
@@ -3071,7 +3080,7 @@ C2V_END
30713080C2V_VMENTRY_NULL (jbyteArray, getEncodedFieldAnnotationData, (JNIEnv* env, jobject, ARGUMENT_PAIR(klass), jint index,
30723081 jobject filter, jint filter_length, jlong filter_klass_pointers))
30733082 CompilerThreadCanCallJava canCallJava(thread, true ); // Requires Java support
3074- InstanceKlass* holder = check_field(InstanceKlass::cast(UNPACK_PAIR(Klass, klass)), index, JVMCIENV );
3083+ InstanceKlass* holder = check_field(InstanceKlass::cast(UNPACK_PAIR(Klass, klass)), index, JVMCI_CHECK_NULL );
30753084 fieldDescriptor fd (holder, index);
30763085 return get_encoded_annotation_data(holder, fd.annotations(), false , filter_length, filter_klass_pointers, THREAD, JVMCIENV);
30773086C2V_END
0 commit comments