Skip to content

Incorrect LambdaMetaFactory call for SAM type with parent requiring bridge #13142

@lrytz

Description

@lrytz

From scala/scala3#24573 (comment)

trait F1[-T, +R] {
  def apply(t: T): R
}

trait SF[-T] extends F1[T, Unit] { def apply(t: T): Unit }

object T {
  def f: SF[String] = (x: String) => println(x)
  def main(): Unit = f("hai")
}

crashes at run-time with

Exception in thread "main" java.lang.BootstrapMethodError: bootstrap method initialization exception
	at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:187)
	at java.base/java.lang.invoke.CallSite.makeSite(CallSite.java:310)
	at java.base/java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:250)
	at java.base/java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:240)
	at T$.f(T.scala:8)
	at T$.main(T.scala:9)
	at T.main(T.scala)
Caused by: java.lang.invoke.LambdaConversionException: Type mismatch for lambda expected return: void is not convertible to class java.lang.Object
	at java.base/java.lang.invoke.AbstractValidatingLambdaMetafactory.checkDescriptor(AbstractValidatingLambdaMetafactory.java:333)
	at java.base/java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:312)
	at java.base/java.lang.invoke.LambdaMetafactory.altMetafactory(LambdaMetafactory.java:545)
	at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:143)
	... 6 more

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions