Skip to content

Param type not taken into account in platform's method param list length limit  #18458

Closed
@szymon-rd

Description

@szymon-rd

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions