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

javac produces code that crashes with LambdaConversionException

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P4
    • 20
    • 18
    • tools
    • None
    • b19
    • generic
    • generic

    Description

      This bug was reported in compiler-dev list

      https://mail.openjdk.org/pipermail/compiler-dev/2022-August/020312.html

      File Bug.java

      import java.util.function.BiFunction;

      public class Bug {
        sealed interface Term {
          record Lit() implements Term {}
          record Lam(String x, Term a) implements Term {}
        }

        public static <X, T> void call(BiFunction<X, T, T> op, X x, T t) {
          op.apply(x, t);
        }

        public static void main(String[] args) {
          // this code works
          call(Term.Lam::new, "x", (Term) new Term.Lit());

          // this does not
          call(Term.Lam::new, "x", new Term.Lit());
          // java.lang.invoke.LambdaConversionException: Type mismatch for lambda argument 1:
          // class java.lang.Record is not convertible to interface Term
        }
      }

      $ java Bug
      Exception in thread "main" java.lang.BootstrapMethodError: bootstrap method initialization exception
      at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:188)
      at java.base/java.lang.invoke.CallSite.makeSite(CallSite.java:315)
      at java.base/java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:279)
      at java.base/java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:269)
      at Bug.main(Bug.java:18)
      Caused by: java.lang.invoke.LambdaConversionException: Type mismatch for lambda argument 1: class java.lang.Record is not convertible to interface Bug$Term
      at java.base/java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:298)
      at java.base/java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:340)
      at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:134)
      ... 4 more

      Attachments

        Issue Links

          Activity

            People

              sadayapalam Srikanth Adayapalam (Inactive)
              sundar Sundararajan Athijegannathan
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: