Skip to content

Commit 59ffa2d

Browse files
committed
8366267: [lworld] Injected ACC_IDENTITY escapes to instrumentation of older classes
Reviewed-by: liach
1 parent 1207841 commit 59ffa2d

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

src/hotspot/share/oops/instanceKlass.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3264,6 +3264,10 @@ void InstanceKlass::set_minor_version(u2 minor_version) { _constants->set_minor_
32643264
u2 InstanceKlass::major_version() const { return _constants->major_version(); }
32653265
void InstanceKlass::set_major_version(u2 major_version) { _constants->set_major_version(major_version); }
32663266

3267+
bool InstanceKlass::supports_inline_types() const {
3268+
return major_version() >= Verifier::VALUE_TYPES_MAJOR_VERSION && minor_version() == Verifier::JAVA_PREVIEW_MINOR_VERSION;
3269+
}
3270+
32673271
const InstanceKlass* InstanceKlass::get_klass_version(int version) const {
32683272
for (const InstanceKlass* ik = this; ik != nullptr; ik = ik->previous_versions()) {
32693273
if (ik->constants()->version() == version) {

src/hotspot/share/oops/instanceKlass.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,8 @@ class InstanceKlass: public Klass {
754754
u2 major_version() const;
755755
void set_major_version(u2 major_version);
756756

757+
bool supports_inline_types() const;
758+
757759
// source debug extension
758760
const char* source_debug_extension() const { return _source_debug_extension; }
759761
void set_source_debug_extension(const char* array, int length);

src/hotspot/share/prims/jvmtiClassFileReconstituter.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,12 @@ void JvmtiClassFileReconstituter::write_inner_classes_attribute(int length) {
572572
write_u2(iter.inner_class_info_index());
573573
write_u2(iter.outer_class_info_index());
574574
write_u2(iter.inner_name_index());
575-
write_u2(iter.inner_access_flags());
575+
u2 flags = iter.inner_access_flags();
576+
// ClassFileParser may add identity to inner class attributes, so remove it.
577+
if (!ik()->supports_inline_types()) {
578+
flags &= ~JVM_ACC_IDENTITY;;
579+
}
580+
write_u2(flags);
576581
}
577582
}
578583

test/jdk/ProblemList.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,4 +850,3 @@ java/awt/Modal/NativeDialogToFrontBackTest.java 7188049 windows-all,linux-all
850850
# valhalla
851851
jdk/classfile/AccessFlagsTest.java 8366270 generic-all
852852
jdk/jfr/event/runtime/TestSyncOnValueBasedClassEvent.java 8328777 generic-all
853-
java/lang/instrument/VerifyLocalVariableTableOnRetransformTest.java 8366267 generic-all

0 commit comments

Comments
 (0)