Skip to content

Commit b155529

Browse files
committed
[GR-67325] Handle JDK 25+ class modifiers changes.
PullRequest: graal/21781
2 parents e1751e9 + 14ad107 commit b155529

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/LinkedKlassFieldLayout.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ private static boolean storeAsFinal(ParserKlass klass, ParserField field) {
147147
if (klassType == Types.java_lang_System && (fieldName == Names.in || fieldName == Names.out || fieldName == Names.err)) {
148148
return false;
149149
}
150+
// We're updating the class modifiers during redefinition if they change, so don't allow the
151+
// compiler to fold the reads.
152+
if (klassType == Types.java_lang_Class && fieldName == Names.modifiers) {
153+
return false;
154+
}
150155
return field.isFinal();
151156
}
152157

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/ObjectKlass.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,6 +1472,12 @@ public void redefineClass(ChangePacket packet, List<ObjectKlass> invalidatedClas
14721472
getContext().getClassHierarchyOracle().registerNewKlassVersion(klassVersion);
14731473

14741474
incrementKlassRedefinitionCount();
1475+
// Update the class modifiers in the guest for jdk 25+,
1476+
// but only call out to the guest if they have changed.
1477+
if (getContext().getJavaVersion().java25OrLater() && oldVersion.getClassModifiers() != klassVersion.getClassModifiers()) {
1478+
// update the guest value class modifiers
1479+
getMeta().java_lang_Class_modifiers.setChar(mirror(), (char) klassVersion.getClassModifiers());
1480+
}
14751481
oldVersion.assumption.invalidate();
14761482
}
14771483

0 commit comments

Comments
 (0)