Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"record" feature in jpf-core/java-17 #484

Open
eklaDFF opened this issue Jul 29, 2024 · 68 comments
Open

"record" feature in jpf-core/java-17 #484

eklaDFF opened this issue Jul 29, 2024 · 68 comments

Comments

@eklaDFF
Copy link

eklaDFF commented Jul 29, 2024

@cyrille-artho
@pparizek

This issue is to track the record feature of java-17 on JPF.

Here is the Test to test record :

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RecordFeatureTest extends TestJPF {

    record Point(int x, int y){}


    // Official documents suggest that fields of "record" are "private" and "final".
    // So we are testing by direct access. It should fail here at compile time, but do not know why it works.
    @Test
    public void testRecordFieldsDirectly(){
        Point point = new Point(4, 5);

        assertEquals("",4,point.x);
        assertEquals("",5,point.y);
    }

    @Test
    public void testRecordFields(){
        Point point = new Point(4, 5);

        assertEquals("",4,point.x());
        assertEquals("",5,point.y());
    }

    @Test
    public void testRecordEquality(){
        Point point1 = new Point(4,5);
        Point point2 = new Point(4,5);
        Point point3 = new Point(3,5);

        assertEquals("",point1, point2);
        assertNotEquals("",point1, point3);
    }

    @Test
    public void testRecordHashCode() {
        Point point1 = new Point(4, 5);
        Point point2 = new Point(4, 5);
        Point point3 = new Point(3,5);

        assertEquals("", point1.hashCode(), point2.hashCode());
        assertNotEquals("",point1.hashCode(),point3.hashCode());
    }

    @Test
    public void testRecordToString() {
        Point point = new Point(4, 5);

        assertEquals("Point[x=4, y=5]", point.toString());
    }
}

All of the above Tests passes (currently on OpenJDK-17).

Question 1 : How can we access the 'private field ?
Question 2 : These Tests passed on underlying JVM. Do verifyNoPropertyViolation will make it run on JPF ?

@eklaDFF
Copy link
Author

eklaDFF commented Jul 29, 2024

BTW, when we wrap the Tests with verifyNoPropertyViolation(), like below :

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RecordFeatureTest extends TestJPF {

    record Point(int x, int y){}


    // Official documents suggest that fields of "record" are "private" and "final".
    // So we are testing by direct access. It should fail here at compile time, but do not know why it works.
    @Test
    public void testRecordFieldsDirectly(){
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("",4,point.x);
            assertEquals("",5,point.y);

        }
    }

    @Test
    public void testRecordFields(){
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("",4,point.x());
            assertEquals("",5,point.y());

        }
    }

    @Test
    public void testRecordEquality(){
        if (verifyNoPropertyViolation()){

            Point point1 = new Point(4,5);
            Point point2 = new Point(4,5);
            Point point3 = new Point(3,5);

            assertEquals("",point1, point2);
            assertNotEquals("",point1, point3);

        }
    }

    @Test
    public void testRecordHashCode() {
        if (verifyNoPropertyViolation()){

            Point point1 = new Point(4, 5);
            Point point2 = new Point(4, 5);
            Point point3 = new Point(3,5);

            assertEquals("", point1.hashCode(), point2.hashCode());
            assertNotEquals("",point1.hashCode(),point3.hashCode());

        }
    }

    @Test
    public void testRecordToString() {
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("Point[x=4, y=5]", point.toString());

        }
    }
}

All the above Tests failed with output :

java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131)
	at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
	at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:112)
	at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
	at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
	at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:80)
	at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:770)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
	at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
	at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
	at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
	at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
	at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
	at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
	at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
	at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
	at gov.nasa.jpf.search.Search.forward(Search.java:937)
	at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
	at gov.nasa.jpf.JPF.run(JPF.java:613)
	at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
	at java17.RecordFeatureTest.testRecordFields(RecordFeatureTest.java:27)
        ......
        ......
        ......

@cyrille-artho
Copy link
Member

Please look into the compiled bytecode to see what may have caused this behavior in JPF. It is possible that JPF completely misinterprets new bytecode attributes that were introduced in Java 17, as its class loader has been written for older versions of Java.
Also, share your WIP on a branch so Pavel and I can take a look.

@eklaDFF
Copy link
Author

eklaDFF commented Jul 29, 2024

"Please look into the compiled bytecode to see what may have caused this behavior in JPF. It is possible that JPF completely misinterprets new bytecode attributes that were introduced in Java 17, as its class loader has been written for older versions of Java." ----->
How can I access the compiled bytecode in case of JPF ?

I created a regular class equivalent to record functionality and tested them. Everything was fine as all Tests passed.

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RegulaNonRecordClassTest  extends TestJPF {
    class Point {
        private final int x;
        private final int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int x() {
            return x;
        }

        public int y() {
            return y;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Point point = (Point) o;
            return x == point.x && y == point.y;
        }

        @Override
        public String toString() {
            return "Point[x=" + x + ", y=" + y + "]";
        }
    }

    @Test
    public void testFields() {
        Point point = new Point(3, 4);
        assertEquals(3, point.x());
        assertEquals(4, point.y());
    }

    @Test
    public void testEquality() {
        Point point1 = new Point(3, 4);
        Point point2 = new Point(3, 4);
        assertEquals(point1, point2);
    }

    @Test
    public void testToString() {
        Point point = new Point(3, 4);
        assertEquals("Point[x=3, y=4]", point.toString());
    }

}

Got this idea from different source (like ChatGPT) to try, things will be more clear.

"Also, share your WIP on a branch so Pavel and I can take a look." -----> https://github.com/eklaDFF/jpf-core/tree/NewFeatureRecordRoughBranch

@cyrille-artho
Copy link
Member

Use javap -v to look at the bytecode.

@eklaDFF
Copy link
Author

eklaDFF commented Jul 30, 2024

javap -v src/tests/java17/RecordFeatureTest.class
Error: class not found: src/tests/java17/RecordFeatureTest.class

I need to compile them first. But do not know how in this case.

ekla@Eklas-MacBook-Air jpf-core % javac /Users/ekla/GSOC/JPFjava17/jpf-core
error: invalid flag: /Users/ekla/GSOC/JPFjava17/jpf-core
Usage: javac <options> <source files>
use --help for a list of possible options
ekla@Eklas-MacBook-Air jpf-core % 

@cyrille-artho
Copy link
Member

You indicate the fully qualified class name, not the file name. Use -cp or -classpath for the location of the class file and javap -h for more help on options.

@eklaDFF
Copy link
Author

eklaDFF commented Jul 30, 2024

Thankyou @cyrille-artho

This one worked :
javap -v -cp build/tests/java17 RecordFeatureTest . Compiled codes are in build actually.

Here is the output for above command (I will take some time to study about Byte Codes. This is a great opportunity to learn about Byte Codes.) :

ekla@Eklas-MacBook-Air jpf-core % javap -v -cp build/tests/java17 RecordFeatureTest
Warning: File build/tests/java17/RecordFeatureTest.class does not contain class RecordFeatureTest
Classfile /Users/ekla/GSOC/JPFjava17/jpf-core/build/tests/java17/RecordFeatureTest.class
  Last modified 30-Jul-2024; size 1917 bytes
  SHA-256 checksum 235e1883c602b2d1db7b20d106dbd850c69ae262bffc553fb768dd2650017d3d
  Compiled from "RecordFeatureTest.java"
public class java17.RecordFeatureTest extends gov.nasa.jpf.util.test.TestJPF
  minor version: 0
  major version: 61
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #10                         // java17/RecordFeatureTest
  super_class: #2                         // gov/nasa/jpf/util/test/TestJPF
  interfaces: 0, fields: 0, methods: 6, attributes: 3
Constant pool:
   #1 = Methodref          #2.#3          // gov/nasa/jpf/util/test/TestJPF."<init>":()V
   #2 = Class              #4             // gov/nasa/jpf/util/test/TestJPF
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               gov/nasa/jpf/util/test/TestJPF
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Class              #8             // java/lang/String
   #8 = Utf8               java/lang/String
   #9 = Methodref          #10.#11        // java17/RecordFeatureTest.verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #10 = Class              #12            // java17/RecordFeatureTest
  #11 = NameAndType        #13:#14        // verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #12 = Utf8               java17/RecordFeatureTest
  #13 = Utf8               verifyNoPropertyViolation
  #14 = Utf8               ([Ljava/lang/String;)Z
  #15 = Class              #16            // java17/RecordFeatureTest$Point
  #16 = Utf8               java17/RecordFeatureTest$Point
  #17 = Methodref          #15.#18        // java17/RecordFeatureTest$Point."<init>":(II)V
  #18 = NameAndType        #5:#19         // "<init>":(II)V
  #19 = Utf8               (II)V
  #20 = String             #21            //
  #21 = Utf8
  #22 = Fieldref           #15.#23        // java17/RecordFeatureTest$Point.x:I
  #23 = NameAndType        #24:#25        // x:I
  #24 = Utf8               x
  #25 = Utf8               I
  #26 = Methodref          #10.#27        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;II)V
  #27 = NameAndType        #28:#29        // assertEquals:(Ljava/lang/String;II)V
  #28 = Utf8               assertEquals
  #29 = Utf8               (Ljava/lang/String;II)V
  #30 = Fieldref           #15.#31        // java17/RecordFeatureTest$Point.y:I
  #31 = NameAndType        #32:#25        // y:I
  #32 = Utf8               y
  #33 = Methodref          #15.#34        // java17/RecordFeatureTest$Point.x:()I
  #34 = NameAndType        #24:#35        // x:()I
  #35 = Utf8               ()I
  #36 = Methodref          #15.#37        // java17/RecordFeatureTest$Point.y:()I
  #37 = NameAndType        #32:#35        // y:()I
  #38 = Methodref          #10.#39        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #39 = NameAndType        #28:#40        // assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #40 = Utf8               (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #41 = Methodref          #10.#42        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #42 = NameAndType        #43:#40        // assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #43 = Utf8               assertNotEquals
  #44 = Methodref          #15.#45        // java17/RecordFeatureTest$Point.hashCode:()I
  #45 = NameAndType        #46:#35        // hashCode:()I
  #46 = Utf8               hashCode
  #47 = Methodref          #10.#48        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;II)V
  #48 = NameAndType        #43:#29        // assertNotEquals:(Ljava/lang/String;II)V
  #49 = String             #50            // Point[x=4, y=5]
  #50 = Utf8               Point[x=4, y=5]
  #51 = Methodref          #15.#52        // java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
  #52 = NameAndType        #53:#54        // toString:()Ljava/lang/String;
  #53 = Utf8               toString
  #54 = Utf8               ()Ljava/lang/String;
  #55 = Methodref          #10.#56        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #56 = NameAndType        #28:#57        // assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #57 = Utf8               (Ljava/lang/Object;Ljava/lang/Object;)V
  #58 = Utf8               Code
  #59 = Utf8               LineNumberTable
  #60 = Utf8               LocalVariableTable
  #61 = Utf8               this
  #62 = Utf8               Ljava17/RecordFeatureTest;
  #63 = Utf8               testRecordFieldsDirectly
  #64 = Utf8               point
  #65 = Utf8               Ljava17/RecordFeatureTest$Point;
  #66 = Utf8               StackMapTable
  #67 = Utf8               RuntimeVisibleAnnotations
  #68 = Utf8               Lorg/junit/Test;
  #69 = Utf8               testRecordFields
  #70 = Utf8               testRecordEquality
  #71 = Utf8               point1
  #72 = Utf8               point2
  #73 = Utf8               point3
  #74 = Utf8               testRecordHashCode
  #75 = Utf8               testRecordToString
  #76 = Utf8               SourceFile
  #77 = Utf8               RecordFeatureTest.java
  #78 = Utf8               NestMembers
  #79 = Utf8               InnerClasses
  #80 = Utf8               Point
{
  public java17.RecordFeatureTest();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method gov/nasa/jpf/util/test/TestJPF."<init>":()V
         4: return
      LineNumberTable:
        line 6: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest;

  public void testRecordFieldsDirectly();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: getfield      #22                 // Field java17/RecordFeatureTest$Point.x:I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: getfield      #30                 // Field java17/RecordFeatureTest$Point.y:I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 15: 0
        line 17: 11
        line 19: 21
        line 20: 31
        line 23: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordFields();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: invokevirtual #33                 // Method java17/RecordFeatureTest$Point.x:()I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: invokevirtual #36                 // Method java17/RecordFeatureTest$Point.y:()I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 27: 0
        line 29: 11
        line 31: 21
        line 32: 31
        line 35: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordEquality();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          55
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: new           #15                 // class java17/RecordFeatureTest$Point
        24: dup
        25: iconst_4
        26: iconst_5
        27: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        30: astore_2
        31: new           #15                 // class java17/RecordFeatureTest$Point
        34: dup
        35: iconst_3
        36: iconst_5
        37: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        40: astore_3
        41: ldc           #20                 // String
        43: aload_1
        44: aload_2
        45: invokestatic  #38                 // Method assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        48: ldc           #20                 // String
        50: aload_1
        51: aload_3
        52: invokestatic  #41                 // Method assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        55: return
      LineNumberTable:
        line 39: 0
        line 41: 11
        line 42: 21
        line 43: 31
        line 45: 41
        line 46: 48
        line 49: 55
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      34     1 point1   Ljava17/RecordFeatureTest$Point;
           31      24     2 point2   Ljava17/RecordFeatureTest$Point;
           41      14     3 point3   Ljava17/RecordFeatureTest$Point;
            0      56     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 55 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordHashCode();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          67
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: new           #15                 // class java17/RecordFeatureTest$Point
        24: dup
        25: iconst_4
        26: iconst_5
        27: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        30: astore_2
        31: new           #15                 // class java17/RecordFeatureTest$Point
        34: dup
        35: iconst_3
        36: iconst_5
        37: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        40: astore_3
        41: ldc           #20                 // String
        43: aload_1
        44: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        47: aload_2
        48: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        51: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        54: ldc           #20                 // String
        56: aload_1
        57: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        60: aload_3
        61: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        64: invokestatic  #47                 // Method assertNotEquals:(Ljava/lang/String;II)V
        67: return
      LineNumberTable:
        line 53: 0
        line 55: 11
        line 56: 21
        line 57: 31
        line 59: 41
        line 60: 54
        line 63: 67
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      46     1 point1   Ljava17/RecordFeatureTest$Point;
           31      36     2 point2   Ljava17/RecordFeatureTest$Point;
           41      26     3 point3   Ljava17/RecordFeatureTest$Point;
            0      68     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 251 /* same_frame_extended */
          offset_delta = 67
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordToString();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          30
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #49                 // String Point[x=4, y=5]
        23: aload_1
        24: invokevirtual #51                 // Method java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
        27: invokestatic  #55                 // Method assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        30: return
      LineNumberTable:
        line 67: 0
        line 69: 11
        line 71: 21
        line 74: 30
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21       9     1 point   Ljava17/RecordFeatureTest$Point;
            0      31     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 30 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test
}
SourceFile: "RecordFeatureTest.java"
NestMembers:
  java17/RecordFeatureTest$Point
InnerClasses:
  static final #80= #15 of #10;           // Point=class java17/RecordFeatureTest$Point of class java17/RecordFeatureTest
ekla@Eklas-MacBook-Air jpf-core % 

@cyrille-artho
Copy link
Member

In the stack trace above, which is the method that cannot be loaded? What method is the one causing the index out of bounds at at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)?

@cyrille-artho
Copy link
Member

Also, please look at class RecordFeatureTest$Point, which is the one holding the record. I think that's where JPF's class loader has problems.

@eklaDFF
Copy link
Author

eklaDFF commented Jul 31, 2024

Tried to understand the execution flow :

Start of Test
Screenshot 2024-07-31 at 12 56 30 PM
Screenshot 2024-07-31 at 12 58 45 PM
Screenshot 2024-07-31 at 1 00 46 PM
Screenshot 2024-07-31 at 1 02 43 PM
here jpf is not-null.
jpf.run() is called...
Screenshot 2024-07-31 at 1 08 49 PM
Screenshot 2024-07-31 at 1 10 36 PM
Screenshot 2024-07-31 at 1 11 34 PM
In DFSearch, no idea what's causing error...

Is this right direction to explore ?

@cyrille-artho
Copy link
Member

I don't think the problem is in the state space exploration. I think it's the fact that JPF encounters an unfamiliar data element in the constant pool, which it does not parse correctly. Look at the stack trace in your earlier comment: #484 (comment)
The constant pool of RecordFeatureTest$Point has 64 elements (IIRC, slot 0 is not used), so an array representing it has 65 elements, which matches the array size of the exception. The stack trace also shows that the problem occurs while loading the class.

@eklaDFF
Copy link
Author

eklaDFF commented Jul 31, 2024

Well, now where should I look.

May be when we are instantiating Point Object creation, causes this error ?

@cyrille-artho
Copy link
Member

Look at the stack trace and how the class file gets parsed. There is an element in the constant pool that does not get parsed correctly, which results in an array index that makes no sense (> 64).

@cyrille-artho
Copy link
Member

The constant pool of RecordFeatureTest$Point looks as follows:

final class java17.RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // java17/RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // java17/RecordFeatureTest$Point.x:I
   #8 = Class              #10            // java17/RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               java17/RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // java17/RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (Ljava17/RecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               LocalVariableTable
  #32 = Utf8               this
  #33 = Utf8               Ljava17/RecordFeatureTest$Point;
  #34 = Utf8               MethodParameters
  #35 = Utf8               ()Ljava/lang/String;
  #36 = Utf8               ()I
  #37 = Utf8               (Ljava/lang/Object;)Z
  #38 = Utf8               o
  #39 = Utf8               Ljava/lang/Object;
  #40 = Utf8               SourceFile
  #41 = Utf8               RecordFeatureTest.java
  #42 = Utf8               NestHost
  #43 = Class              #44            // java17/RecordFeatureTest
  #44 = Utf8               java17/RecordFeatureTest
  #45 = Utf8               Record
  #46 = Utf8               BootstrapMethods
  #47 = MethodHandle       6:#48          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #48 = Methodref          #49.#50        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = Class              #51            // java/lang/runtime/ObjectMethods
  #50 = NameAndType        #52:#53        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #51 = Utf8               java/lang/runtime/ObjectMethods
  #52 = Utf8               bootstrap
  #53 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #54 = String             #55            // x;y
  #55 = Utf8               x;y
  #56 = MethodHandle       1:#7           // REF_getField java17/RecordFeatureTest$Point.x:I
  #57 = MethodHandle       1:#13          // REF_getField java17/RecordFeatureTest$Point.y:I
  #58 = Utf8               InnerClasses
  #59 = Utf8               Point
  #60 = Class              #61            // java/lang/invoke/MethodHandles$Lookup
  #61 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #62 = Class              #63            // java/lang/invoke/MethodHandles
  #63 = Utf8               java/lang/invoke/MethodHandles
  #64 = Utf8               Lookup

@eklaDFF
Copy link
Author

eklaDFF commented Aug 3, 2024

Flow of Code :

Here is the method gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}

And this method has been used in gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131)
(Please notice the statement System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1] = " + cpArgs[1]);, as I have wrote them to debug things)

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;
      
      if (cpArgs.length > 1) {
        // For Lambdas
      	int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

      	int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
      	String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 
        
        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 
          
        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

When we run at this level, the output is like below :

====================================================== search started: 04/08/24, 4:30 am
int mrefIdx = 259, cpArgs[1]  = 258
int mrefIdx = 264, cpArgs[1]  = 263
int mrefIdx = 267, cpArgs[1]  = 266
int mrefIdx = 270, cpArgs[1]  = 269
int mrefIdx = 273, cpArgs[1]  = 272
int mrefIdx = 276, cpArgs[1]  = 275
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147
int mrefIdx = 157, cpArgs[1]  = 156
int mrefIdx = 163, cpArgs[1]  = 162
int mrefIdx = 166, cpArgs[1]  = 165
int mrefIdx = 169, cpArgs[1]  = 168
int mrefIdx = 63, cpArgs[1]  = 62
int mrefIdx = 66, cpArgs[1]  = 65
int mrefIdx = 69, cpArgs[1]  = 68
int mrefIdx = 57, cpArgs[1]  = 56
int mrefIdx = 14081, cpArgs[1]  = 54
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:105)
	at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
	at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:85)
	at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
	at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
	at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:53)
	at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:744)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
	at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
	at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
	at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
	at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
	at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
	at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
	at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
	at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
	at gov.nasa.jpf.search.Search.forward(Search.java:937)
	at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
	at gov.nasa.jpf.JPF.run(JPF.java:613)
	at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
	at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)

This strange output (from our printing statement) show that our issue is routed from ClassFile.mhMethodRefIndexAt (int methodHandleInfoIdx) and code for it is :

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
public final int u2(int dataIdx){
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
  }

Am I in right direction ?

@eklaDFF
Copy link
Author

eklaDFF commented Aug 3, 2024

And also please see the similarity between mhMethodRefIndexAt(int methodHandleInfoIdx) and methodClassNameAt(int methodRefInfoIdx) in ClassFile.java :

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}
public int mhMethodRefIndexAt(int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}
int[] cpPos;     // cpPos[i] holds data start index for cp_entry i (0 is unused)
Object[] cpValue; // cpValue[i] hold the String/Integer/Float/Double associated with corresponding cp_entries

@cyrille-artho
Copy link
Member

The method to parse the binary content is correct, but the index (54) is wrong.
In the debug output, please also add the name of the class that you are printing the data for. I think cf.clsName is initialized at this point (as the class is loaded). We want to ensure that we are looking at the contents of the constant pool of the right class when trying to figure out why there is a wrong index.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 4, 2024

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;
      
      if (cpArgs.length > 1) {
        // For Lambdas
      	int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1] + ", cf.className = " + cf.className);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');
        System.out.println("clsName = " + clsName);

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

      	int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
      	String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 
        
        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 
          
        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

Output :

running jpf with args:
int mrefIdx = 40, cpArgs[1]  = 138, cf.className = null
clsName = java.lang.annotation.Annotation
int mrefIdx = 144, cpArgs[1]  = 143, cf.className = null
clsName = java.lang.reflect.AnnotatedElement
int mrefIdx = 150, cpArgs[1]  = 149, cf.className = null
clsName = java.util.LinkedHashMap
int mrefIdx = 109, cpArgs[1]  = 108, cf.className = null
clsName = java.lang.CharSequence
int mrefIdx = 113, cpArgs[1]  = 112, cf.className = null
clsName = java.lang.CharSequence
int mrefIdx = 178, cpArgs[1]  = 177, cf.className = null
clsName = java.lang.Enum
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.


====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 04/08/24, 7:22 pm
int mrefIdx = 259, cpArgs[1]  = 258, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 264, cpArgs[1]  = 263, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 267, cpArgs[1]  = 266, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 270, cpArgs[1]  = 269, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 273, cpArgs[1]  = 272, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 276, cpArgs[1]  = 275, cf.className = null
clsName = java.util.Comparator
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147, cf.className = null
clsName = java.util.concurrent.ConcurrentMap
int mrefIdx = 157, cpArgs[1]  = 156, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 163, cpArgs[1]  = 162, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 166, cpArgs[1]  = 165, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 169, cpArgs[1]  = 168, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 63, cpArgs[1]  = 62, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 66, cpArgs[1]  = 65, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 69, cpArgs[1]  = 68, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 57, cpArgs[1]  = 56, cf.className = null
clsName = java.util.function.BiFunction
int mrefIdx = 14081, cpArgs[1]  = 54, cf.className = null
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

cpArgs[] is a parameter so if it cpArgs[1] produce 54 then should we look from where it coming ?

@cyrille-artho
Copy link
Member

Yes, and if you can find out where the function call was made, that will likely give us clues on the correct value. You can try the use the MethodTracker listener, something like the additional option +listener=gov.nasa.jpf.listener.MethodTracker

@eklaDFF
Copy link
Author

eklaDFF commented Aug 4, 2024

Above method is called from this (below) method. Both are actually overloaded methods in ClassFile.java

private void setBootstrapMethod (ClassFileReader reader, Object tag, int idx, 
                                   int refKind, String cls, String mth, String parameters, String descriptor, int[] cpArgs){
    int p = pos;
    reader.setBootstrapMethod( this, tag, idx, refKind, cls, mth, parameters, descriptor, cpArgs);
    pos = p;    
  }

And then above method is called from ClassFile.parseBootstrapMethodAttr (ClassFileReader reader, Object tag) (Please notice System.out.println("bmArgs[" + j + "] = " + bmArgs[j]);. I have wrote them to debug.)

public void parseBootstrapMethodAttr (ClassFileReader reader, Object tag){
    int nBootstrapMethods = readU2();
    
    setBootstrapMethodCount(reader, tag, nBootstrapMethods);
    
    for (int i=0; i<nBootstrapMethods; i++){
      int cpMhIdx = readU2();
      int nArgs = readU2();
      int[] bmArgs = new int[nArgs];
      for (int j=0; j<nArgs; j++){
        bmArgs[j] = readU2();
        System.out.println("bmArgs[" + j + "] = " + bmArgs[j]);
      }
      
      // kind of this method handle
      int refKind = mhRefTypeAt(cpMhIdx);
      
      // CONSTANT_Methodref_info structure
      int mrefIdx = mhMethodRefIndexAt(cpMhIdx);
      
      String clsName = methodClassNameAt(mrefIdx);
      String mthName = methodNameAt(mrefIdx);
      String parameters = methodDescriptorAt(mrefIdx);
      String descriptor= callSiteDescriptor(bsmIdxToIndyCpIdx.get(i));

      setBootstrapMethod(reader, tag, i, refKind, clsName, mthName, parameters, descriptor, bmArgs);
    }
    
    setBootstrapMethodsDone( reader, tag);
  }

Here is the output :

running jpf with args:
bmArgs[0] = 396
bmArgs[0] = 398
bmArgs[0] = 400
bmArgs[0] = 402
bmArgs[0] = 404
bmArgs[0] = 137
bmArgs[1] = 138
bmArgs[2] = 139
int mrefIdx = 40, cpArgs[1]  = 138, cf.className = null
clsName = java.lang.annotation.Annotation
bmArgs[0] = 141
bmArgs[1] = 143
bmArgs[2] = 146
int mrefIdx = 144, cpArgs[1]  = 143, cf.className = null
clsName = java.lang.reflect.AnnotatedElement
bmArgs[0] = 147
bmArgs[1] = 149
bmArgs[2] = 156
int mrefIdx = 150, cpArgs[1]  = 149, cf.className = null
clsName = java.util.LinkedHashMap
bmArgs[0] = 240
bmArgs[0] = 793
bmArgs[0] = 795
bmArgs[0] = 797
bmArgs[0] = 799
bmArgs[0] = 106
bmArgs[1] = 108
bmArgs[2] = 111
int mrefIdx = 109, cpArgs[1]  = 108, cf.className = null
clsName = java.lang.CharSequence
bmArgs[0] = 106
bmArgs[1] = 112
bmArgs[2] = 111
int mrefIdx = 113, cpArgs[1]  = 112, cf.className = null
clsName = java.lang.CharSequence
bmArgs[0] = 303
bmArgs[0] = 305
bmArgs[0] = 267
bmArgs[0] = 269
bmArgs[0] = 176
bmArgs[1] = 177
bmArgs[2] = 180
int mrefIdx = 178, cpArgs[1]  = 177, cf.className = null
clsName = java.lang.Enum
bmArgs[0] = 175
bmArgs[0] = 921
bmArgs[0] = 923
bmArgs[0] = 925
bmArgs[0] = 927
bmArgs[0] = 929
bmArgs[0] = 931
bmArgs[0] = 933
bmArgs[0] = 935
bmArgs[0] = 937
bmArgs[0] = 939
bmArgs[0] = 941
bmArgs[0] = 943
bmArgs[0] = 945
bmArgs[0] = 947
bmArgs[0] = 949
bmArgs[0] = 951
bmArgs[0] = 953
bmArgs[0] = 955
bmArgs[0] = 957
bmArgs[0] = 959
bmArgs[0] = 961
bmArgs[0] = 963
bmArgs[0] = 965
bmArgs[0] = 967
bmArgs[0] = 969
bmArgs[0] = 971
bmArgs[0] = 973
bmArgs[0] = 975
bmArgs[0] = 977
bmArgs[0] = 979
bmArgs[0] = 981
bmArgs[0] = 983
bmArgs[0] = 985
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.


====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 05/08/24, 3:41 am
bmArgs[0] = 257
bmArgs[1] = 258
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 259, cpArgs[1]  = 258, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 263
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 264, cpArgs[1]  = 263, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 266
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 267, cpArgs[1]  = 266, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 269
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 270, cpArgs[1]  = 269, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 272
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 273, cpArgs[1]  = 272, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 275
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 276, cpArgs[1]  = 275, cf.className = null
clsName = java.util.Comparator
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
bmArgs[0] = 146
bmArgs[1] = 147
bmArgs[2] = 146
int mrefIdx = 148, cpArgs[1]  = 147, cf.className = null
clsName = java.util.concurrent.ConcurrentMap
bmArgs[0] = 155
bmArgs[1] = 156
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 157, cpArgs[1]  = 156, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 162
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 163, cpArgs[1]  = 162, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 165
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 166, cpArgs[1]  = 165, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 168
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 169, cpArgs[1]  = 168, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 61
bmArgs[1] = 62
bmArgs[2] = 61
int mrefIdx = 63, cpArgs[1]  = 62, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 61
bmArgs[1] = 65
bmArgs[2] = 61
int mrefIdx = 66, cpArgs[1]  = 65, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 61
bmArgs[1] = 68
bmArgs[2] = 61
int mrefIdx = 69, cpArgs[1]  = 68, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 55
bmArgs[1] = 56
bmArgs[2] = 55
int mrefIdx = 57, cpArgs[1]  = 56, cf.className = null
clsName = java.util.function.BiFunction
bmArgs[0] = 8
bmArgs[1] = 54
bmArgs[2] = 56
bmArgs[3] = 57
int mrefIdx = 14081, cpArgs[1]  = 54, cf.className = null
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:315)

index 54 is generated from ClassFile.readU2() :

public final int readU2(){
    int idx = pos;
    pos += 2;
    return ((data[idx++]&0xff) << 8) | (data[idx]&0xff);
  }

@cyrille-artho
Copy link
Member

Please try to set up the MethodTracker listener, so we can see which methods call these bootstrap methods (BMs). We can now see what type the BMs have, but not where the call comes from; this makes it very hard to guess what the correct mrefIdx at the end should be, because we can't see yet where in the code that call is made.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 5, 2024

Yes, and if you can find out where the function call was made, that will likely give us clues on the correct value. You can try the use the MethodTracker listener, something like the additional option +listener=gov.nasa.jpf.listener.MethodTracker

Where do I have to write the listener ? Not working in command.

@cyrille-artho
Copy link
Member

The option is passed to the jpf command on the command line. You can also add the option listener=... to the .jpf config file instead.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 6, 2024

But the new output is very large. How can I show the result to you ? Around 40 MB.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 6, 2024

> Task :compileAnnotationsJava UP-TO-DATE
> Task :processAnnotationsResources NO-SOURCE
> Task :annotationsClasses UP-TO-DATE
> Task :copyLibs UP-TO-DATE
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :generateBuildInfo
> Task :generateVersion
> Task :copyResources
> Task :compileExamplesJava UP-TO-DATE
> Task :compileClassesJava UP-TO-DATE
> Task :processClassesResources NO-SOURCE
> Task :classesClasses UP-TO-DATE
> Task :compilePeersJava UP-TO-DATE
> Task :processPeersResources NO-SOURCE
> Task :peersClasses UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :compileModules UP-TO-DATE
> Task :compile UP-TO-DATE
> Task :createAnnotationsJar UP-TO-DATE
> Task :createClassloaderSpecificTestsJar UP-TO-DATE
> Task :createJpfClassesJar UP-TO-DATE
> Task :createJpfJar
> Task :createRunJpfJar UP-TO-DATE
> Task :createRunTestJar UP-TO-DATE
> Task :buildJars
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
  running jpf with args:
----------------------------------- search started
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.


====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 07/08/24, 3:10 am
0:                              java.lang.Boolean.[<clinit>]...
0:                                java.lang.Boolean.<clinit>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                    java.lang.Object.<init>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                java.lang.Boolean.<clinit>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                    java.lang.Object.<init>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                java.lang.Boolean.<clinit>()V
0:                                  native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                                  native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                                java.lang.Boolean.<clinit>()V
0:                              java.lang.Boolean.[<clinit>]
0:                            java.lang.Character.[<clinit>]
0:                              native java.lang.Character.<clinit>()V
0:                            java.lang.Character.[<clinit>]
0:                          java.lang.Short.[<clinit>]
0:                            java.lang.Short.<clinit>()V
0:                              native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                              native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                            java.lang.Short.<clinit>()V
0:                          java.lang.Short.[<clinit>]
0:                        java.lang.Integer.[<clinit>]
0:                          java.lang.Integer.<clinit>()V
0:                            native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                            native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                          java.lang.Integer.<clinit>()V
0:                        java.lang.Integer.[<clinit>]
0:                      java.lang.Long.[<clinit>]
0:                        java.lang.Long.<clinit>()V
0:                          native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                          native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                        java.lang.Long.<clinit>()V
0:                      java.lang.Long.[<clinit>]
0:                    java.lang.Float.[<clinit>]
0:                      java.lang.Float.<clinit>()V
0:                        native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                        native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                      java.lang.Float.<clinit>()V
0:                    java.lang.Float.[<clinit>]
0:                  java.lang.Double.[<clinit>]
0:                    java.lang.Double.<clinit>()V
0:                      native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                      native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                    java.lang.Double.<clinit>()V
0:                  java.lang.Double.[<clinit>]
0:                java.lang.Byte.[<clinit>]
0:                  java.lang.Byte.<clinit>()V
0:                    native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                    native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                  java.lang.Byte.<clinit>()V
0:                java.lang.Byte.[<clinit>]
0:              java.lang.String.[<clinit>]
0:                java.lang.String.<clinit>()V
0:                  native java.lang.Class.desiredAssertionStatus()Z
0:                  native java.lang.Class.desiredAssertionStatus()Z
0:                java.lang.String.<clinit>()V
0:                  java.lang.String$CaseInsensitiveComparator.<init>()V
0:                    java.lang.Object.<init>()V
0:                  java.lang.String$CaseInsensitiveComparator.<init>()V
0:                java.lang.String.<clinit>()V
0:              java.lang.String.[<clinit>]
0:            java.lang.Thread.[<clinit>]
0:              java.lang.Thread.<clinit>()V
0:            java.lang.Thread.[<clinit>]
0:          java.lang.Thread$State.[<clinit>]
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.$values()[Ljava/lang/Thread$State;
0:            java.lang.Thread$State.<clinit>()V
0:          java.lang.Thread$State.[<clinit>]
0:        java.lang.System.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            java.lang.System$1.<init>()V
0:              java.io.InputStream.<init>()V
0:                java.lang.Object.<init>()V
0:              java.io.InputStream.<init>()V
0:            java.lang.System$1.<init>()V
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.createSystemOut()Ljava/io/PrintStream;
0:            native java.lang.System.createSystemOut()Ljava/io/PrintStream;
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.createSystemErr()Ljava/io/PrintStream;
0:            native java.lang.System.createSystemErr()Ljava/io/PrintStream;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.[<clinit>]
0:              java.util.Properties.<clinit>()V
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
0:                jdk.internal.misc.Unsafe.[<clinit>]
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    jdk.internal.misc.Unsafe.<init>()V
0:                      java.lang.Object.<init>()V
0:                    jdk.internal.misc.Unsafe.<init>()V
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                jdk.internal.misc.Unsafe.[<clinit>]
0:              java.util.Properties.<clinit>()V
0:                jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:              java.util.Properties.<clinit>()V
0:            java.util.Properties.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.<init>()V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.Hashtable.<init>(Ljava/lang/Void;)V
0:                  java.util.Dictionary.<init>()V
0:                    java.lang.Object.<init>()V
0:                  java.util.Dictionary.<init>()V
0:                java.util.Hashtable.<init>(Ljava/lang/Void;)V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.concurrent.ConcurrentHashMap.[<clinit>]
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Runtime.[<clinit>]
0:                      java.lang.Runtime.<clinit>()V
0:                        java.lang.Runtime.<init>()V
0:                          java.lang.Object.<init>()V
0:                        java.lang.Runtime.<init>()V
0:                      java.lang.Runtime.<clinit>()V
0:                    java.lang.Runtime.[<clinit>]
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Runtime.getRuntime()Ljava/lang/Runtime;
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native java.lang.Runtime.availableProcessors()I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Integer.numberOfLeadingZeros(I)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                java.util.concurrent.ConcurrentHashMap.[<clinit>]
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.concurrent.ConcurrentHashMap.<init>(I)V
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                    java.util.AbstractMap.<init>()V
0:                      java.lang.Object.<init>()V
0:                    java.util.AbstractMap.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                    java.util.concurrent.ConcurrentHashMap.tableSizeFor(I)I
0:                      java.lang.Integer.numberOfLeadingZeros(I)I
0:                    java.util.concurrent.ConcurrentHashMap.tableSizeFor(I)I
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                java.util.concurrent.ConcurrentHashMap.<init>(I)V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                native jdk.internal.misc.Unsafe.storeFence()V
0:                native jdk.internal.misc.Unsafe.storeFence()V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:            java.util.Properties.<init>()V
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.getKeyValuePairs()[Ljava/lang/String;
0:            native java.lang.System.getKeyValuePairs()[Ljava/lang/String;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                  java.util.concurrent.ConcurrentHashMap.initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.equals(Ljava/lang/Object;)Z
0:                  native java.lang.String.equals(Ljava/lang/Object;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                      java.lang.Integer.numberOfLeadingZeros(I)I
0:                    java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$ForwardingNode.<init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$ForwardingNode.<init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                        java.lang.Integer.numberOfLeadingZeros(I)I
0:                      java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.sumCount()J
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.lang.System.createJavaLangAccess()Ljdk/internal/access/JavaLangAccess;
0:              java.lang.System$2.<init>()V
0:                java.lang.Object.<init>()V
0:              java.lang.System$2.<init>()V
0:            java.lang.System.createJavaLangAccess()Ljdk/internal/access/JavaLangAccess;
0:          java.lang.System.<clinit>()V
0:            jdk.internal.access.SharedSecrets.[<clinit>]
0:              jdk.internal.access.SharedSecrets.<clinit>()V
0:                jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:              jdk.internal.access.SharedSecrets.<clinit>()V
0:            jdk.internal.access.SharedSecrets.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            jdk.internal.access.SharedSecrets.setJavaLangAccess(Ljdk/internal/access/JavaLangAccess;)V
0:          java.lang.System.<clinit>()V
0:        java.lang.System.[<clinit>]
0:      java.lang.invoke.VarHandle.[<clinit>]
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native java.lang.Class.desiredAssertionStatus()Z
0:          native java.lang.Class.desiredAssertionStatus()Z
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          java.lang.invoke.VarHandle$1.<init>()V
0:            java.lang.Object.<init>()V
0:          java.lang.invoke.VarHandle$1.<init>()V
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          jdk.internal.util.Preconditions.outOfBoundsExceptionFormatter(Ljava/util/function/Function;)Ljava/util/function/BiFunction;
0:            jdk.internal.util.Preconditions$1.<init>(Ljava/util/function/Function;)V
0:              java.lang.Object.<init>()V
0:            jdk.internal.util.Preconditions$1.<init>(Ljava/util/function/Function;)V
0:          jdk.internal.util.Preconditions.outOfBoundsExceptionFormatter(Ljava/util/function/Function;)Ljava/util/function/BiFunction;
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          java.lang.invoke.MethodHandleStatics.[<clinit>]
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:                java.lang.System.getSecurityManager()Ljava/lang/SecurityManager;
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:                java.lang.System.getProperties()Ljava/util/Properties;
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:          java.lang.invoke.MethodHandleStatics.[<clinit>]
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:          native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native jdk.internal.misc.Unsafe.ensureClassInitialized(Ljava/lang/Class;)V
0:          native jdk.internal.misc.Unsafe.ensureClassInitialized(Ljava/lang/Class;)V
0:        java.lang.invoke.VarHandle.<clinit>()V
0:      java.lang.invoke.VarHandle.[<clinit>]
0:    gov.nasa.jpf.util.test.TestJPF.[<clinit>]
0:      gov.nasa.jpf.util.test.TestJPF.<clinit>()V
0:        native gov.nasa.jpf.util.test.TestJPF.isJPFRun()Z
0:        native gov.nasa.jpf.util.test.TestJPF.isJPFRun()Z
0:      gov.nasa.jpf.util.test.TestJPF.<clinit>()V
0:    gov.nasa.jpf.util.test.TestJPF.[<clinit>]
0:  gov.nasa.jpf.util.test.TestJPF.[runTestMethod]
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;
0:      native java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
0:      native java.lang.Class.getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:        java17.RecordFeatureTest.[<init>]
0:          java17.RecordFeatureTest.<init>()V
0:            native gov.nasa.jpf.util.test.TestJPF.<init>()V
0:            native gov.nasa.jpf.util.test.TestJPF.<init>()V
0:          java17.RecordFeatureTest.<init>()V
0:        java17.RecordFeatureTest.[<init>]
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
0:      native java.lang.Class.getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
0:      native java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
0:        java17.RecordFeatureTest.[testRecordFieldsDirectly]
0:          java17.RecordFeatureTest.testRecordFieldsDirectly()V
0:            native gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation([Ljava/lang/String;)Z
0:            native gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation([Ljava/lang/String;)Z
0:          java17.RecordFeatureTest.testRecordFieldsDirectly()V
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131)
	at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
	at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:112)
	at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
	at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
	at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:80)
	at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:770)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
	at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
	at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
	at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
	at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
	at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
	at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
	at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
	at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
	at gov.nasa.jpf.search.Search.forward(Search.java:937)
	at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
	at gov.nasa.jpf.JPF.run(JPF.java:613)
	at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
        at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

java.lang.AssertionError: JPF internal exception executing: :java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:164)
	at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:156)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:810)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
	at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)


> Task :test FAILED
java17.RecordFeatureTest > testRecordFieldsDirectly FAILED
    java.lang.AssertionError at RecordFeatureTest.java:15
Test Execution: FAILURE
Summary: 1 tests, 0 passed, 1 failed, 0 skipped
1 test completed, 1 failed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/ekla/GSOC/JPFjava17/jpf-core/build/reports/tests/test/index.html
BUILD FAILED in 2s
18 actionable tasks: 5 executed, 13 up-to-date

They are to cluttered to understand. How do they mean something valuable ?

@cyrille-artho
Copy link
Member

Only the last part is important. We see that the problem is triggered by java17.RecordFeatureTest.testRecordFieldsDirectly()V. (There is also the ExecTracker listener that would show at which instruction the problem occurs, but there are only two accesses in that small test, so it is clear enough in this case.)

Now, you can look into the bytecode of that test method to see what the instructions are, and which part of the record class is used. Then, we can deduce where the wrong index comes from.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 7, 2024

I only executed java17.RecordFeatureTest.testRecordFieldsDirectly() Test so only this thing showing in listener (may be), but of all the Tests cause same error.


We can see the ByteCode above (here is only related to this) :

public void testRecordFieldsDirectly();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: getfield      #22                 // Field java17/RecordFeatureTest$Point.x:I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: getfield      #30                 // Field java17/RecordFeatureTest$Point.y:I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 15: 0
        line 17: 11
        line 19: 21
        line 20: 31
        line 23: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

and constant pool

Constant pool:
   #1 = Methodref          #2.#3          // gov/nasa/jpf/util/test/TestJPF."<init>":()V
   #2 = Class              #4             // gov/nasa/jpf/util/test/TestJPF
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               gov/nasa/jpf/util/test/TestJPF
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Class              #8             // java/lang/String
   #8 = Utf8               java/lang/String
   #9 = Methodref          #10.#11        // java17/RecordFeatureTest.verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #10 = Class              #12            // java17/RecordFeatureTest
  #11 = NameAndType        #13:#14        // verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #12 = Utf8               java17/RecordFeatureTest
  #13 = Utf8               verifyNoPropertyViolation
  #14 = Utf8               ([Ljava/lang/String;)Z
  #15 = Class              #16            // java17/RecordFeatureTest$Point
  #16 = Utf8               java17/RecordFeatureTest$Point
  #17 = Methodref          #15.#18        // java17/RecordFeatureTest$Point."<init>":(II)V
  #18 = NameAndType        #5:#19         // "<init>":(II)V
  #19 = Utf8               (II)V
  #20 = String             #21            //
  #21 = Utf8
  #22 = Fieldref           #15.#23        // java17/RecordFeatureTest$Point.x:I
  #23 = NameAndType        #24:#25        // x:I
  #24 = Utf8               x
  #25 = Utf8               I
  #26 = Methodref          #10.#27        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;II)V
  #27 = NameAndType        #28:#29        // assertEquals:(Ljava/lang/String;II)V
  #28 = Utf8               assertEquals
  #29 = Utf8               (Ljava/lang/String;II)V
  #30 = Fieldref           #15.#31        // java17/RecordFeatureTest$Point.y:I
  #31 = NameAndType        #32:#25        // y:I
  #32 = Utf8               y
  #33 = Methodref          #15.#34        // java17/RecordFeatureTest$Point.x:()I
  #34 = NameAndType        #24:#35        // x:()I
  #35 = Utf8               ()I
  #36 = Methodref          #15.#37        // java17/RecordFeatureTest$Point.y:()I
  #37 = NameAndType        #32:#35        // y:()I
  #38 = Methodref          #10.#39        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #39 = NameAndType        #28:#40        // assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #40 = Utf8               (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #41 = Methodref          #10.#42        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #42 = NameAndType        #43:#40        // assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #43 = Utf8               assertNotEquals
  #44 = Methodref          #15.#45        // java17/RecordFeatureTest$Point.hashCode:()I
  #45 = NameAndType        #46:#35        // hashCode:()I
  #46 = Utf8               hashCode
  #47 = Methodref          #10.#48        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;II)V
  #48 = NameAndType        #43:#29        // assertNotEquals:(Ljava/lang/String;II)V
  #49 = String             #50            // Point[x=4, y=5]
  #50 = Utf8               Point[x=4, y=5]
  #51 = Methodref          #15.#52        // java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
  #52 = NameAndType        #53:#54        // toString:()Ljava/lang/String;
  #53 = Utf8               toString
  #54 = Utf8               ()Ljava/lang/String;
  #55 = Methodref          #10.#56        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #56 = NameAndType        #28:#57        // assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #57 = Utf8               (Ljava/lang/Object;Ljava/lang/Object;)V
  #58 = Utf8               Code
  #59 = Utf8               LineNumberTable
  #60 = Utf8               LocalVariableTable
  #61 = Utf8               this
  #62 = Utf8               Ljava17/RecordFeatureTest;
  #63 = Utf8               testRecordFieldsDirectly
  #64 = Utf8               point
  #65 = Utf8               Ljava17/RecordFeatureTest$Point;
  #66 = Utf8               StackMapTable
  #67 = Utf8               RuntimeVisibleAnnotations
  #68 = Utf8               Lorg/junit/Test;
  #69 = Utf8               testRecordFields
  #70 = Utf8               testRecordEquality
  #71 = Utf8               point1
  #72 = Utf8               point2
  #73 = Utf8               point3
  #74 = Utf8               testRecordHashCode
  #75 = Utf8               testRecordToString
  #76 = Utf8               SourceFile
  #77 = Utf8               RecordFeatureTest.java
  #78 = Utf8               NestMembers
  #79 = Utf8               InnerClasses
  #80 = Utf8               Point

@eklaDFF
Copy link
Author

eklaDFF commented Aug 7, 2024

From Bytecode, it seems like it's been treated like a regular class ?

(Should I delete some comments to make this issue short)

@cyrille-artho
Copy link
Member

We need the ExecTracker here to see at which instruction the failure occurs. It is somewhere inside class RecordFeatureTest$Point.
Let's keep all comments, as they are all on the same topic, unless there is something where we repeated ourselves.

@eklaDFF
Copy link
Author

eklaDFF commented Aug 9, 2024

As mentioned in our last meeting, index (in this case 54) is correct. Then we have look how 14081 (in this case) is produced. So here is last state from where we can move ...

Flow of Code :

Here is the method gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}

And this method has been used in gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131) (Please notice the statement System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1] = " + cpArgs[1]);, as I have wrote them to debug things)

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;
      
      if (cpArgs.length > 1) {
        // For Lambdas
      	int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

      	int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
      	String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 
        
        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 
          
        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

When we run at this level, the output is like below :

====================================================== search started: 04/08/24, 4:30 am
int mrefIdx = 259, cpArgs[1]  = 258
int mrefIdx = 264, cpArgs[1]  = 263
int mrefIdx = 267, cpArgs[1]  = 266
int mrefIdx = 270, cpArgs[1]  = 269
int mrefIdx = 273, cpArgs[1]  = 272
int mrefIdx = 276, cpArgs[1]  = 275
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147
int mrefIdx = 157, cpArgs[1]  = 156
int mrefIdx = 163, cpArgs[1]  = 162
int mrefIdx = 166, cpArgs[1]  = 165
int mrefIdx = 169, cpArgs[1]  = 168
int mrefIdx = 63, cpArgs[1]  = 62
int mrefIdx = 66, cpArgs[1]  = 65
int mrefIdx = 69, cpArgs[1]  = 68
int mrefIdx = 57, cpArgs[1]  = 56
int mrefIdx = 14081, cpArgs[1]  = 54
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
	at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:105)
	at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
	at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:85)
	at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
	at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
	at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
	at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:53)
	at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:744)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
	at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
	at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
	at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
	at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
	at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
	at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
	at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
	at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
	at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
	at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
	at gov.nasa.jpf.search.Search.forward(Search.java:937)
	at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
	at gov.nasa.jpf.JPF.run(JPF.java:613)
	at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
	at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)

This strange output (from our printing statement) show that our issue is routed from ClassFile.mhMethodRefIndexAt (int methodHandleInfoIdx) and code for it is :

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
public final int u2(int dataIdx){
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
  }

Am I in right direction ?

And also please see the similarity between mhMethodRefIndexAt(int methodHandleInfoIdx) and methodClassNameAt(int methodRefInfoIdx) in ClassFile.java :

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}
public int mhMethodRefIndexAt(int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}
int[] cpPos;     // cpPos[i] holds data start index for cp_entry i (0 is unused)
Object[] cpValue; // cpValue[i] hold the String/Integer/Float/Double associated with corresponding cp_entries

From above, 14081 is returned from u2(cpPos[methodHandleInfoIdx]+2)

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}

It seems like we should check what content cpPos[] holds from where it is being initialized ?


One more thing, I printed some value which helped me a bit...

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    System.out.println("MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=" + methodHandleInfoIdx + ") called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = " + u2(cpPos[methodHandleInfoIdx]+2));
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
  public String methodClassNameAt(int methodRefInfoIdx){
    System.out.println("MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=" + methodRefInfoIdx + ") called. cpPos[].length=" + cpPos.length);

    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
  }

Outputs below result (here is relevant part) :

MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=47) called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = 48
MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=48) called. cpPos[].length=65
MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=54) called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = 14081
MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=14081) called. cpPos[].length=65
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65

@cyrille-artho
Copy link
Member

The method verifyNoPropertyViolation executes the part of the method inside the curly braces inside the JPF engine. (Unit tests are as such run by the host JVM, so this extra method is needed to pass control to JPF.)
The internals of this are not so important, as it's only needed for running unit tests in JPF and does not concern JPF's handling of bootstrap methods.
It would be useful if you could look into how the data structures from the constant pool are parsed, so we have an idea of where things go wrong. This is not dependent on how JPF takes control of a code section during unit testing.
You might, instead of using JPF, look into how the data structure relates to different entries "on paper" (using the output of javap -v above); at some point, the correct values will deviate from the logged output that JPF produces.

@eklaDFF
Copy link
Author

eklaDFF commented Sep 11, 2024

I when we create a simple java program like below

public class RecordFeatureTest {
	record Point(int x, int y){}
}

The bytecode for above program differs from the one written in our JPF


Bytecode for above simple program

ekla@Eklas-MacBook-Air RoughFolder % javap -v RecordFeatureTest\$Point
Classfile /Users/ekla/RoughFolder/RecordFeatureTest$Point.class
  Last modified 05-Sep-2024; size 1283 bytes
  SHA-256 checksum fe9dd488dbe8d6323ce52851036bd03ca7ea11cd73d152a846082e7c238ad456
  Compiled from "RecordFeatureTest.java"
final class RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // RecordFeatureTest$Point.x:I
   #8 = Class              #10            // RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (LRecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(LRecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(LRecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (LRecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               MethodParameters
  #32 = Utf8               ()Ljava/lang/String;
  #33 = Utf8               ()I
  #34 = Utf8               (Ljava/lang/Object;)Z
  #35 = Utf8               SourceFile
  #36 = Utf8               RecordFeatureTest.java
  #37 = Utf8               NestHost
  #38 = Class              #39            // RecordFeatureTest
  #39 = Utf8               RecordFeatureTest
  #40 = Utf8               Record
  #41 = Utf8               BootstrapMethods
  #42 = MethodHandle       6:#43          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #43 = Methodref          #44.#45        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #44 = Class              #46            // java/lang/runtime/ObjectMethods
  #45 = NameAndType        #47:#48        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #46 = Utf8               java/lang/runtime/ObjectMethods
  #47 = Utf8               bootstrap
  #48 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = String             #50            // x;y
  #50 = Utf8               x;y
  #51 = MethodHandle       1:#7           // REF_getField RecordFeatureTest$Point.x:I
  #52 = MethodHandle       1:#13          // REF_getField RecordFeatureTest$Point.y:I
  #53 = Utf8               InnerClasses
  #54 = Utf8               Point
  #55 = Class              #56            // java/lang/invoke/MethodHandles$Lookup
  #56 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #57 = Class              #58            // java/lang/invoke/MethodHandles
  #58 = Utf8               java/lang/invoke/MethodHandles
  #59 = Utf8               Lookup
{
  RecordFeatureTest$Point(int, int);
    descriptor: (II)V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=3
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Record."<init>":()V
         4: aload_0
         5: iload_1
         6: putfield      #7                  // Field x:I
         9: aload_0
        10: iload_2
        11: putfield      #13                 // Field y:I
        14: return
      LineNumberTable:
        line 2: 0
    MethodParameters:
      Name                           Flags
      x
      y

  public final java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #16,  0             // InvokeDynamic #0:toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
         6: areturn
      LineNumberTable:
        line 2: 0

  public final int hashCode();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #20,  0             // InvokeDynamic #0:hashCode:(LRecordFeatureTest$Point;)I
         6: ireturn
      LineNumberTable:
        line 2: 0

  public final boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: aload_1
         2: invokedynamic #24,  0             // InvokeDynamic #0:equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
         7: ireturn
      LineNumberTable:
        line 2: 0

  public int x();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #7                  // Field x:I
         4: ireturn
      LineNumberTable:
        line 2: 0

  public int y();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #13                 // Field y:I
         4: ireturn
      LineNumberTable:
        line 2: 0
}
SourceFile: "RecordFeatureTest.java"
NestHost: class RecordFeatureTest
Record:
  int x;
    descriptor: I

  int y;
    descriptor: I

BootstrapMethods:
  0: #42 REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
    Method arguments:
      #8 RecordFeatureTest$Point
      #49 x;y
      #51 REF_getField RecordFeatureTest$Point.x:I
      #52 REF_getField RecordFeatureTest$Point.y:I
InnerClasses:
  static final #54= #8 of #38;            // Point=class RecordFeatureTest$Point of class RecordFeatureTest
  public static final #59= #55 of #57;    // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
ekla@Eklas-MacBook-Air RoughFolder % java -version
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+11)
OpenJDK 64-Bit Server VM (build 17.0.10+11, mixed mode, sharing)

ByteCode for JPF record

ekla@Eklas-MacBook-Air java17 % javap -v RecordFeatureTest\$Point
Warning: File ./RecordFeatureTest$Point.class does not contain class RecordFeatureTest$Point
Classfile /Users/ekla/GSOC/JPFjava17/jpf-core/build/tests/java17/RecordFeatureTest$Point.class
  Last modified 04-Sep-2024; size 1544 bytes
  SHA-256 checksum f5e6bcbb1967b31aebab060eef3f89fad6f1470a60e00c683d7e8e26b2c57611
  Compiled from "RecordFeatureTest.java"
final class java17.RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // java17/RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // java17/RecordFeatureTest$Point.x:I
   #8 = Class              #10            // java17/RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               java17/RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // java17/RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (Ljava17/RecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               LocalVariableTable
  #32 = Utf8               this
  #33 = Utf8               Ljava17/RecordFeatureTest$Point;
  #34 = Utf8               MethodParameters
  #35 = Utf8               ()Ljava/lang/String;
  #36 = Utf8               ()I
  #37 = Utf8               (Ljava/lang/Object;)Z
  #38 = Utf8               o
  #39 = Utf8               Ljava/lang/Object;
  #40 = Utf8               SourceFile
  #41 = Utf8               RecordFeatureTest.java
  #42 = Utf8               NestHost
  #43 = Class              #44            // java17/RecordFeatureTest
  #44 = Utf8               java17/RecordFeatureTest
  #45 = Utf8               Record
  #46 = Utf8               BootstrapMethods
  #47 = MethodHandle       6:#48          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #48 = Methodref          #49.#50        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = Class              #51            // java/lang/runtime/ObjectMethods
  #50 = NameAndType        #52:#53        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #51 = Utf8               java/lang/runtime/ObjectMethods
  #52 = Utf8               bootstrap
  #53 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #54 = String             #55            // x;y
  #55 = Utf8               x;y
  #56 = MethodHandle       1:#7           // REF_getField java17/RecordFeatureTest$Point.x:I
  #57 = MethodHandle       1:#13          // REF_getField java17/RecordFeatureTest$Point.y:I
  #58 = Utf8               InnerClasses
  #59 = Utf8               Point
  #60 = Class              #61            // java/lang/invoke/MethodHandles$Lookup
  #61 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #62 = Class              #63            // java/lang/invoke/MethodHandles
  #63 = Utf8               java/lang/invoke/MethodHandles
  #64 = Utf8               Lookup
{
  java17.RecordFeatureTest$Point(int, int);
    descriptor: (II)V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=3
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Record."<init>":()V
         4: aload_0
         5: iload_1
         6: putfield      #7                  // Field x:I
         9: aload_0
        10: iload_2
        11: putfield      #13                 // Field y:I
        14: return
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      15     0  this   Ljava17/RecordFeatureTest$Point;
            0      15     1     x   I
            0      15     2     y   I
    MethodParameters:
      Name                           Flags
      x
      y

  public final java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #16,  0             // InvokeDynamic #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
         6: areturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       7     0  this   Ljava17/RecordFeatureTest$Point;

  public final int hashCode();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #20,  0             // InvokeDynamic #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
         6: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       7     0  this   Ljava17/RecordFeatureTest$Point;

  public final boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: aload_1
         2: invokedynamic #24,  0             // InvokeDynamic #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
         7: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       8     0  this   Ljava17/RecordFeatureTest$Point;
            0       8     1     o   Ljava/lang/Object;

  public int x();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #7                  // Field x:I
         4: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest$Point;

  public int y();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #13                 // Field y:I
         4: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest$Point;
}
SourceFile: "RecordFeatureTest.java"
NestHost: class java17/RecordFeatureTest
Record:
  int x;
    descriptor: I

  int y;
    descriptor: I

BootstrapMethods:
  0: #47 REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
    Method arguments:
      #8 java17/RecordFeatureTest$Point
      #54 x;y
      #56 REF_getField java17/RecordFeatureTest$Point.x:I
      #57 REF_getField java17/RecordFeatureTest$Point.y:I
InnerClasses:
  static final #59= #8 of #43;            // Point=class java17/RecordFeatureTest$Point of class java17/RecordFeatureTest
  public static final #64= #60 of #62;    // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
ekla@Eklas-MacBook-Air java17 % java -version
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+11)
OpenJDK 64-Bit Server VM (build 17.0.10+11, mixed mode, sharing)

My Question is, both the programs is compiled under same compiler ? If yes, how can be different bytecode for same record class(subclass) ?

@eklaDFF
Copy link
Author

eklaDFF commented Sep 12, 2024

Should I send you more detailed explanation of the above comment . (Please check email regarding today's meeting?)

@cyrille-artho
Copy link
Member

Probably you are using a slightly different version of the compiler than what gradle uses. Your own Java environment does two things: 1. It runs Gradle. 2. It runs JPF when you run bin/jpf. The compilation of JPF itself is handled by Gradle, which downloads a Java compiler of its choice (adhering to given version restrictions in the configuration). It is important that these two Java environments match closely, so the resulting JPF application runs successfully in your JVM. However, small deviations are possible and often (as in this case) benign.

@eklaDFF
Copy link
Author

eklaDFF commented Sep 12, 2024

So, now I should go for debugging the bootstrap method along with a proper diagram comfortably?

@cyrille-artho
Copy link
Member

Yes, please do that; use the bytecode that Gradle produces (i.e., when you build JPF and run the tests normally).

@eklaDFF
Copy link
Author

eklaDFF commented Sep 13, 2024

In the diagram you suggested, it is difficult to show the behaviour of the methods like manipulation of the parameters within the method. Because sometimes it is more important to show the behaviour proceeding the flow of calls.

How do you do ?

@cyrille-artho
Copy link
Member

You want to focus on one aspect in the diagram, and I recommend you focus on the data dependencies. The control flow is simpler, and, from what we can see, JPF handles the instructions themselves correctly, but not the data.

@eklaDFF
Copy link
Author

eklaDFF commented Sep 18, 2024

For an example,

public String methodClassNameAt(int methodRefInfoIdx){

    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
  }

Here is the diagram,
example

Do this adding some value ?

@eklaDFF
Copy link
Author

eklaDFF commented Sep 18, 2024

more clear diagram for bootstrap method

example2 (1)

and at the moment of error,
example3
cpPos length 65, but accessing 14081th causes error.

@cyrille-artho
Copy link
Member

Thanks, so it is in the bootstrap method data where the index is off by one (if I read your diagram correctly).
Please check where this problem comes from. It's almost certainly because in the JVM, values are 32 bits by default. Large values (double, long) therefore need two slots because they are 64 bits in size.
It is likely that somewhere, the +1 size offset calculation is still missing in the code in JPF that deals with bootstrap method arguments.

@eklaDFF
Copy link
Author

eklaDFF commented Sep 21, 2024

public final int u2(int dataIdx){
    System.out.println("data[" + dataIdx + "] = " + data[dataIdx] + " data[" + dataIdx+1 + "] = " + data[dataIdx+1]);
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
  }

u2((872 + 2)) produce 14081.
data[880] produce 55
data[881] produce 1

data[880] = 55 (which is 0x37 in hexadecimal),
data[881] = 1 (which is 0x01 in hexadecimal).
Now, using the method u2(int dataIdx):

data[880] & 0xff = 55 & 0xff = 0x37 (hexadecimal).

(data[880] & 0xff) << 8 = 0x37 << 8 = 0x3700 (shifting 0x37 8 bits to the left).

data[881] & 0xff = 1 & 0xff = 0x01

The result is:
0x3700 | 0x01 = 0x3701

In decimal, 0x3701 equals:

(55 * 256) + 1 = 14080 + 1 = 14081
So with data[880] = 55 and data[881] = 1, the method returns 14081

@eklaDFF
Copy link
Author

eklaDFF commented Sep 21, 2024

Here is flow of code, might help you to understand the above diagram>

JVMClassInfo.java

public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
    .......................
    int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
    clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');
    .......................
}

in setBootstrapMethod(), cpArgs[1] is 54. This cpArgs[1] is passed to cf.mhMethodRefIndexAt(cpArgs[1])

ClassFile.java

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}

public final int u2(int dataIdx){
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
}

in mhMethodRefIndexAt(), cpPos[54] produce 878. And the 878+2 is passed to u2().

Here in u2(880), data[880] produce 55 and data[881] produce 1. And then u2(880) produce 14081

Later 14081 is returned back to setBootstrapMethod() and stored in local variable int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);. And then mrefIdx is passed into cf.methodClassNameAt(mrefIdx).replace('/', '.')

ClassFile.java

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}

14081 is greater than cpPos[] length, causes OutOfBound Error

@cyrille-artho
Copy link
Member

cyrille-artho commented Sep 26, 2024

Thanks. The issue is in setBootstrapMethod.
I see now that using cpArgs[1] is only correct when using java/lang/invoke/LambdaMetafactory.metafactory. In that case, the argument points to a method reference (mrefIdx).

The entire mechanism of using the bootstrap information is completely different for records, as there is a specialized method to handle the data for java/lang/runtime/ObjectMethods.bootstrap:
https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/lang/runtime/ObjectMethods.java

As a first step, let's avoid walking into using cpArgs[1] for cases where it is not appropriate.

Change if (cpArgs.length > 1) in setBootstrapMethod as follows:

  1. Instead of checking cpArgs.length, check that cls.equals("java/lang/invoke/LambdaMetafactory") and mth.equals("metafactory"). Now, the record case will no longer crash because of an incorrect array dereference, but it will not do anything.
  2. Add a new "else if" check to check if we are handling java/lang/runtime/ObjectMethods.bootstrap. For this case, we'll have to look into how to find the correct method reference. This "else if" will be just before "else { // For String Concatenation".
  3. For the third case (string concatenation), check what the values for cls and mth are with a debugger or print statement. Add assertions to ensure we are not (in the future) accidentally treating a different case as a string concatenation. Maybe cls cannot be checked (as it is likely dependent on the arguments for string concatenation), but mth likely starts with makeConcat, and there are a few variants, so an assertion of the type assert(mth.startsWith(...)) will work here.

@cyrille-artho
Copy link
Member

We can also refactor the code inside the outer if/else blocks into helper methods, so the cases for lamdba expr., records, and string concat. are separate.

@eklaDFF
Copy link
Author

eklaDFF commented Sep 26, 2024

.......
    if (cls.equals("java/lang/invoke/LambdaMetafactory") && (mth.equals("metafactory"))) {
.......

You were right, the OutOfBoundError solved.

Here is update after just above change only.
Screenshot 2024-09-26 at 5 06 44 PM

all the above 5 failed tests fails with output

java.lang.AssertionError: JPF found unexpected errors: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
	at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:164)
	at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:816)
	at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
        ...........
  • One more thing, one below Test from RecordFeatureTest PASSED.
@Test
    public void testRecordFieldsDirectly(){
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("",4,point.x);
            assertEquals("",5,point.y);

        }
    }

In the if (....) {.....}, are we filtering out lamda functionalities ? Please explain also about why does the above method PASSES .

@eklaDFF
Copy link
Author

eklaDFF commented Sep 26, 2024

Here is how the method looks,

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                    String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cls.equals("java/lang/invoke/LambdaMetafactory") && (mth.equals("metafactory"))) {
        // For Lambdas
        int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
                && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

        int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
        String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]);

        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                        : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      } else if (cls.equals("java/lang/runtime/ObjectMethods") && mth.equals("bootstrap")) {
        // -----
        System.out.println("We are in there : JVMClassInfo:147");
      } else {
        // For String Concatenation
        clsName = cls;
//        assert(mth.startsWith("makeConcat"));
        System.out.println("JVMClassInfo : In String Concat Block : [cls=" + cls + ", mth=" + mth + "]");
        if(!clsName.equals(JVMClassInfo.this.getName())) {
          enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

Should I send the output of above code ? assert(mth.startsWith("makeConcat")) causes error although mthstarts with "makeConcat". Alsocls` is printing well without causing any additional error.

@cyrille-artho
Copy link
Member

Good start. For the first "if" part, I would try to retain the check of the array size with assert (cpArgs.length > 1); just below the comment // for Lambdas. This makes it clear that we expect the array to be big enough.
In the last block, add a message to the assertion that prints the content of mth, so we can see what the method is in case of a failure. It looks like the assumption that all other cases are string concatenations was not quite right. The assertion verifies that and lets us see (if we have a message shown the content of mth) what the mismatch is.

After that, I would extract the bodies of the "if/then" part and the "else" part into a helper method ("extract method" refactoring) so that code is separate and setBootstrapMethod is again short enough to be easy to read.

@cyrille-artho
Copy link
Member

cyrille-artho commented Oct 3, 2024

In the refactoring, you will create three new private methods that are called from inside the different code blocks. The signature of these three new methods can be adapted from setBootstrapMethod. In this case, we do not need additional arguments, but some arguments can be dropped, as they are not used.

public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                    String parameters, String descriptor, int[] cpArgs)

is copied into

    private void lambdaMetaFactory(ClassFile cf, int refKind, String cls, String mth,
                                   int[] cpArgs)

(if there are additional paramters that are needed after all, add them back)
and

    private void objectMethodsBootstrap(ClassFile cf, int refKind, String cls, String mth,
                                   int[] cpArgs)

and finally

    private void stringConcatenation(ClassFile cf, int refKind, String cls, String mth,
                                   int[] cpArgs)

You may have to add additional parameters to some of these helper methods, or you can perhaps remove some in some cases but not others.

The goal is: You want to keep the exact same functionality (so you do not modify the body of the code, other than adding declarations of local variables or (in cases other than this one) return statements.
After this, we will focus on the failed assertion assert(mth.startsWith("makeConcat")); to see which case is not covered correctly.

@cyrille-artho
Copy link
Member

cyrille-artho commented Oct 3, 2024

Your assertion also shows that the first if statement (around line 101) is too strict: ... && mth.equals("metafactory"))) { should be ... && (mth.equals("metafactory") || mth.equals("altMetafactory")))) {

@eklaDFF
Copy link
Author

eklaDFF commented Oct 4, 2024

New modification in the JVMClassInfo.setBootstrapMethod(....) :

  1. adding assert(cpArgs.length > 1)
  2. added ... && (mth.equals("metafactory") || mth.equals("altMetafactory")))) {

And here is how it looks like :

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                    String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cls.equals("java/lang/invoke/LambdaMetafactory") && (mth.equals("metafactory") || mth.equals("altMetafactory"))) {
        assert(cpArgs.length>1);
        // For Lambdas
        int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
                && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

        int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
        String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]);

        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                        : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      } else if (cls.equals("java/lang/runtime/ObjectMethods") && mth.equals("bootstrap")) {
        // -----
        System.out.println("We are in there : JVMClassInfo:147");
      } else {
        // For String Concatenation
        clsName = cls;
        System.out.println("JVMClassInfo : In String Concat Block : [cls=" + cls + ", mth=" + mth + "]");
        assert(mth.startsWith("makeConcat"));
        if(!clsName.equals(JVMClassInfo.this.getName())) {
          enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

After above modification, output is :

  1. Only 3 Tests fails that is related to Record Features.
Screenshot 2024-10-04 at 12 50 39 PM

Here is an important part of Standard Output part of one of the testMethod from the Test report :

...
...
...
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JavaPathfinder core system v8.0 (rev c96b25858aa51eca62fe0087a06d486a867a9c28) - (C) 2005-2014 United States Government. All rights reserved.


====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 04/10/24, 12:41 pm
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
We are in there : JVMClassInfo:147

====================================================== error 1
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty
java.lang.ClassNotFoundException: class not found: I
	at java17.RecordFeatureTest$Point.hashCode(RecordFeatureTest.java:8)
	at java17.RecordFeatureTest.testRecordHashCode(RecordFeatureTest.java:59)
	at java.lang.reflect.Method.invoke(gov.nasa.jpf.vm.JPF_java_lang_reflect_Method)
	at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:648)


====================================================== snapshot #1
thread java.lang.Thread:{id:0,name:main,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0}
  call stack:
	at gov.nasa.jpf.util.test.TestJPF.runTestMethod(TestJPF.java:650)


====================================================== results
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.ClassNotFoundException: class not found:..."

====================================================== search finished: 04/10/24, 12:41 pm
  running jpf with args:
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
JVMClassInfo : In String Concat Block : [cls=java/lang/invoke/StringConcatFactory, mth=makeConcatWithConstants]
...
...
...

After the modification(described at the top of this comment), going to refactor the code as per your guide (your prev comment).

@cyrille-artho
Copy link
Member

Great! You can now remove the debug print statements and make a pull request.
The next step will be to move the blocks inside the outermost "then"/"else if"/"else" parts into separate functions to make the code easier to manage.

@eklaDFF
Copy link
Author

eklaDFF commented Oct 4, 2024

#499

@cyrille-artho
Copy link
Member

Thanks, I have merged it. This results in a few failing tests, but the failing tests are all new tests (for the record features).

@eklaDFF
Copy link
Author

eklaDFF commented Oct 4, 2024

Here refactored code for JVMClassInfo.setBootstrapMethod(....)

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cls.equals("java/lang/invoke/LambdaMetafactory") && (mth.equals("metafactory") || mth.equals("altMetafactory"))) {
        lambdaMetaFactory(cf,idx,cls,mth,cpArgs);
      } else if (cls.equals("java/lang/runtime/ObjectMethods") && mth.equals("bootstrap")) {
        objectMethodsBootstrap(cf,tag,idx,refKind,cls,mth,parameters,descriptor,cpArgs);
      } else {
        // For String Concatenation
        stringConcatenation(cf,idx,refKind,cls,mth,parameters,descriptor,cpArgs);
      }

    }
    private void lambdaMetaFactory(ClassFile cf, int idx, String cls, String mth, int[] cpArgs){
      String clsName;
      ClassInfo enclosingLambdaCls;

      assert (cpArgs.length > 1);
      // For Lambdas
      int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
      clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

      if (!clsName.equals(JVMClassInfo.this.getName())) {
        if (JVMClassInfo.resolvedClasses.containsKey(clsName))
          enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
        else
          enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
      } else {
        enclosingLambdaCls = JVMClassInfo.this;
        JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
      }

      // The following check should be up-to-date
      // with OpenJDK 11' implementation of
      // java.lang.invoke.LambdaMetafactory::altMetafactory()
      //
      // Check if it is serializable lambda expression. It is if:
      //   1. bootstrap method is "altMetafactory"
      //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
      // The check order cannot be reversed since other BSM may not
      // have forth argument in `cpArgs`
      boolean isSerializable = false;
      if (cls.equals("java/lang/invoke/LambdaMetafactory")
              && mth.equals("altMetafactory")) {
        int flags = cf.intAt(cpArgs[3]);
        int FLAG_SERIALIZABLE = 1 << 0;
        if ((flags & FLAG_SERIALIZABLE) != 0) {
          isSerializable = true;
        }
      }

      assert (enclosingLambdaCls != null);

      int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
      String mthName = cf.methodNameAt(mrefIdx);
      String signature = cf.methodDescriptorAt(mrefIdx);
      String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]);

      setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
              isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                      : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
    }
    private void objectMethodsBootstrap(ClassFile cf, Object tag, int idx, int refKind, String cls, String mth, String parameters, String descriptor, int[] cpArgs){
      //-----
    }
    private void stringConcatenation(ClassFile cf, int idx, int refKind, String cls, String mth, String parameters, String descriptor, int[] cpArgs){
      String clsName = cls;
      ClassInfo enclosingLambdaCls;
      assert(mth.startsWith("makeConcat"));
      if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
      } else {
        enclosingLambdaCls = JVMClassInfo.this;
      }

      assert (enclosingLambdaCls!=null);

      String bmArg = cf.getBmArgString(cpArgs[0]);

      setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
              BootstrapMethodInfo.BMType.STRING_CONCATENATION);
    }

@eklaDFF
Copy link
Author

eklaDFF commented Oct 4, 2024

Standard Output refers that hashCode(), equals() and toString()` is not found ?

@cyrille-artho
Copy link
Member

Was this output present before?
The refactoring should not change the behavior, so such debug or log output should also remain unchanged.
More often that not, it happens that you accidentally change the behavior when refactoring code. In that case, please try to find why there is a difference and adapt the code so it works exactly as before.
After that, make a PR, and we will try to look into the new case (records) step by step after that. That will be a good point at which Pavel can join the effort on this.

@eklaDFF
Copy link
Author

eklaDFF commented Oct 5, 2024

Yes the behaviour is still the same because the refactoring code produces the same result.

@eklaDFF
Copy link
Author

eklaDFF commented Oct 8, 2024

#500 Please Look into

@pparizek
Copy link
Contributor

I suggest that you try implementing the method objectMethodsBootstrap in JVMClassInfo.java, if that is really the one used to handle the case of records, and make sure that errors like "java.lang.ClassNotFoundException: class not found: I" do hot happen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants