On Thu, 12 Feb 2026 13:47:49 GMT, Jean-Philippe Bempel <[email protected]> 
wrote:

>> …retransformed
>> 
>> Fix a retransform error when retransforming a record with type annotation. 
>> processing the record type annotation was done by calling the wrong method 
>> and using the one to process regular annotation. Regular annotations have 
>> not the same structure and decoding was therefore incorrect. The decoding 
>> methods detect a problem but this error was not propagated correctly outside 
>> of VM_RedfineClass::load_new_class_versions method, swallowing the error and 
>> leaving the retransformed class in bad state.
>> 
>> Here we have fixed the call to the right method for decoding the type 
>> annotations but also propagated the error when rewriting the constant pool 
>> as an JVMTI_ERROR_INTERNAL
>
> Jean-Philippe Bempel has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   fix whitespaces

This seems to work:

diff --git 
a/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
 
b/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
index 628eb460564..e8f1ba176d1 100644
--- 
a/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
+++ 
b/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
@@ -32,7 +32,8 @@
  * @modules java.compiler
  *          java.instrument
  * @compile ../NamedBuffer.java
- * @run driver RunAsmTools altered/MyRecord.jcod altered
+ * @compile altered/MyRecord.jcod
+ * @run driver jdk.test.lib.helpers.ClassFileInstaller MyRecord
  * @compile MyRecord.java
  * @run main RedefineClassHelper
  * @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine*=debug 
TestRetransformRecord
@@ -57,7 +58,7 @@ public class TestRetransformRecord {
 
     public static void main(String[] args) throws Exception {
         MyRecord.parse("foo");
-        File clsfile = new File(DEST + "/altered/MyRecord.class");
+        File clsfile = new File("MyRecord.class");
         byte[] buf = null;
         try (FileInputStream str = new FileInputStream(clsfile)) {
             buf = NamedBuffer.loadBufferFromStream(str);

The ClassfileInstaller copies the class file from the test-classes directory to 
the `pwd` and so we can load it from there.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/29445#issuecomment-3995875985

Reply via email to