Skip to content

Commit 7cc8ab0

Browse files
authored
Merge pull request #22732 from AditiS11/Issue-22648_testFieldGetter
Mark final fields in value classes as Trusted Final fields
2 parents 946f941 + edf4fb2 commit 7cc8ab0

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

runtime/jcl/common/reflecthelp.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -834,11 +834,12 @@ createField(struct J9VMThread *vmThread, jfieldID fieldID)
834834
J9VMJAVALANGREFLECTFIELD_SET_CLAZZ(vmThread, fieldObject, J9VM_J9CLASS_TO_HEAPCLASS(j9FieldID->declaringClass));
835835
J9VMJAVALANGREFLECTFIELD_SET_MODIFIERS(vmThread, fieldObject, j9FieldID->field->modifiers & CFR_FIELD_ACCESS_MASK);
836836
#if JAVA_SPEC_VERSION >= 15
837-
/* Trust that static final fields and final record or hidden class fields will not be modified. */
837+
/* Trust that static final fields, and final fields of hidden, record or value classes will not be modified. */
838838
if (J9_ARE_ALL_BITS_SET(j9FieldID->field->modifiers, J9AccFinal)) {
839839
if (J9_ARE_ALL_BITS_SET(j9FieldID->field->modifiers, J9AccStatic)
840-
|| J9ROMCLASS_IS_RECORD(j9FieldID->declaringClass->romClass)
841-
|| J9ROMCLASS_IS_HIDDEN(j9FieldID->declaringClass->romClass)
840+
|| J9ROMCLASS_IS_HIDDEN(j9FieldID->declaringClass->romClass)
841+
|| J9ROMCLASS_IS_RECORD(j9FieldID->declaringClass->romClass)
842+
|| J9ROMCLASS_IS_VALUE(j9FieldID->declaringClass->romClass)
842843
) {
843844
#if defined(J9VM_OPT_VALHALLA_VALUE_TYPES)
844845
fieldFlags |= TRUST_FINAL;

runtime/oti/VMHelpers.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1960,8 +1960,8 @@ class VM_VMHelpers
19601960
/**
19611961
* Determine if the field is a trusted final field.
19621962
*
1963-
* A trusted final field must have be a static final field or
1964-
* a final field defined in either a hidden class or Record class
1963+
* A trusted final field must be a static final field or,
1964+
* a final field defined in a hidden, record or value class.
19651965
*
19661966
* @param field the field to be checked
19671967
* @param romClass the declaring class of the field
@@ -1972,7 +1972,11 @@ class VM_VMHelpers
19721972
{
19731973
bool result = false;
19741974
if (J9_ARE_ALL_BITS_SET(field->modifiers, J9AccFinal)) {
1975-
if (J9_ARE_ALL_BITS_SET(field->modifiers, J9AccStatic) || J9ROMCLASS_IS_HIDDEN(romClass) || J9ROMCLASS_IS_RECORD(romClass)) {
1975+
if (J9_ARE_ALL_BITS_SET(field->modifiers, J9AccStatic)
1976+
|| J9ROMCLASS_IS_HIDDEN(romClass)
1977+
|| J9ROMCLASS_IS_RECORD(romClass)
1978+
|| J9ROMCLASS_IS_VALUE(romClass)
1979+
) {
19761980
result = true;
19771981
}
19781982
}

0 commit comments

Comments
 (0)