scala / scala3

The Scala 3 compiler, also known as Dotty.
https://dotty.epfl.ch
Apache License 2.0
5.78k stars 1.04k forks source link

Polymorphic function does not support FunctionXXL(throw ClassNotFoundException: scala.Function23) #8444

Open xuwei-k opened 4 years ago

xuwei-k commented 4 years ago

minimized code

dotty version: 0.23.0-bin-20200304-16c30fb-NIGHTLY

package example

object Main {
  def main(args: Array[String]): Unit = {
    val f = [A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23] => (a1 : A1, a2 : A2, a3 : A3, a4 : A4, a5 : A5, a6 : A6, a7 : A7, a8 : A8, a9 : A9, a10 : A10, a11 : A11, a12 : A12, a13 : A13, a14 : A14, a15 : A15, a16 : A16, a17 : A17, a18 : A18, a19 : A19, a20 : A20, a21 : A21, a22 : A22, a23 : A23) => "aaa"

    f(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
  }
}

sbt run

[error] java.lang.NoClassDefFoundError: scala/Function23
[error]     at java.lang.ClassLoader.defineClass1(Native Method)
[error]     at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
[error]     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[error]     at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
[error]     at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
[error]     at java.security.AccessController.doPrivileged(Native Method)
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:362)

expectation

support FunctionXXL or compile error. Don't throw runtime error.

nicolasstucki commented 3 years ago

Now we get a compilation failure

exception in thread "main" java.lang.AssertionError: assertion failed:  <none>
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
        at dotty.tools.dotc.transform.Erasure$Typer.typedSelect(Erasure.scala:721)
        at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2644)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2735)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:118)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2801)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2805)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2921)
        at dotty.tools.dotc.transform.Erasure$Typer.typedTypeApply(Erasure.scala:815)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2693)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2736)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:118)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2801)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2805)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2921)
        at dotty.tools.dotc.transform.Erasure$Typer.typedApply(Erasure.scala:837)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2674)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2736)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:118)
ckipp01 commented 1 year ago

It looks like this has actually regressed back to the original state where you don't get a compilation failure, but rather a runtime one:

Compiling project (Scala 3.3.1-RC1-bin-20230511-5c4e597-NIGHTLY, JVM)
Compiled project (Scala 3.3.1-RC1-bin-20230511-5c4e597-NIGHTLY, JVM)
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function23
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        at Main$.main(example.scala:54)
        at Main.main(example.scala)
Caused by: java.lang.ClassNotFoundException: scala.Function23
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 11 more
SethTisue commented 6 months ago

@smarter I'm unassigning you on the assumption you don't plan to return to this, but feel free to re-claim it, of course :-)