Closed
Description
Compiler version
3.3.0
Minimized code
def foo(
foo1: Long,
foo2: Long,
foo3: Long,
...
foo200: Long
) = foo1 + foo2
@main
def run =
println(foo(1,2,3,...,200))
Full code: https://scastie.scala-lang.org/9KnRtaQuRaeFc6WaP6ggBQ
Output
In runtime:
Exception in thread "main" java.lang.ClassFormatError: Too many arguments in method signature in class file Test$
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
at Test$package$.run(Test.scala:207)
at run.main(Test.scala:205)
Expectation
Compilation error generated by backend. When over 254 parameters are provided, the following error is reported:
[error] Platform restriction: a parameter list's length cannot exceed 254.
[error] def bar(
However, per JVM spec, it counts Long / Double parameter as 2 "slots" in the arguments list, so they should be counted twice in this limit: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3
CC: reporter, @prolativ