Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8368810

Incorrect Initialization of @Multifield annotated field.

XMLWordPrintable

      Consider the following test

      // javac --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED -cp . multifield_initialization.java
      // java -Xbootclasspath/a:. --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED -cp . multifield_initialization

      import jdk.internal.vm.annotation.MultiField;
      import jdk.internal.misc.Unsafe;

      class multifield_initialization {
          @MultiField(value=4)
          public float field = 2.0f;

          public static void main(String [] args) {
              Unsafe U = Unsafe.getUnsafe();
              multifield_initialization obj = new multifield_initialization();

              System.out.println("field0 = " + U.getFloat(obj, 12));
              System.out.println("field1 = " + U.getFloat(obj, 16));
              System.out.println("field2 = " + U.getFloat(obj, 20));
              System.out.println("field3 = " + U.getFloat(obj, 24));

          }
      }

      All 4 multifields should be initialized by a constant 2.0f, while the result is incorrect.

      PROMPT>java -Xbootclasspath/a:. --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED -cp . multifield_initialization
      field0 = 0.0
      field1 = 2.0
      field2 = 0.0
      field3 = 0.0

            jbhateja Jatin Bhateja
            jbhateja Jatin Bhateja
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: