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

Valhalla: Verifier error in method call with abstract value class arg

XMLWordPrintable

      A verifier error occurs when this program is compiled and run.
      A value class that extends an abstract value class results in a VerifierError when passed as an argument.

      If the superclass is not abstract, the program succeeds.

      Error Text:
      Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
      Exception Details:
        Location:
          AbstractValueClass.main([Ljava/lang/String;)V @6: invokevirtual
        Reason:
          Type 'AbstractValueClass$A' (current frame, stack[1]) is not assignable to 'AbstractValueClass$T'
        Current Frame:
          bci: @6
          flags: { }
          locals: { '[Ljava/lang/String;', 'AbstractValueClass$A' }
          stack: { 'AbstractValueClass$A', 'AbstractValueClass$A' }
        Bytecode:
          0000000: b800 074c 2b2b b600 0cb1


      The source is:

      public class AbstractValueClass {

          public static void main(String[] args) {
              A a = new A();
              a.doit(a);
          }
          public static abstract value class T {
              public abstract void doit(T t);
          }

          public static final value class A extends T {
              public void doit(T t) {
                  System.out.println(t);
              }
          }
          public static final value class B extends T {
              public void doit(T t) {
                  System.out.println(t);
              }
          }
      }

            hseigel Harold Seigel (Inactive)
            rriggs Roger Riggs
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: