Skip to content

java.lang.ClassFormatError: Method foo in class CLibrary has illegal modifiers: 0x101 #9432

Closed
@michelou

Description

@michelou

Minimized code

trait CLibrary {
  @native
  def foo(x: Int): Unit
}

object I9432 {
  def main(args: Array[String]): Unit = {
    new CLibrary {
      override def foo(x: Int): Unit = println(x)
    }.foo(1)
  }
}

Output

$ java -version
openjdk version "11.0.8" 2020-07-14

$ C:\opt\dotty-0.26.0-RC1\bin\dotc.bat -deprecation -feature -d target\classes src\main\scala\I9432.scala

$ C:\opt\dotty-0.26.0-RC1\bin\dotr.bat -classpath target\classes I9432
Exception in thread "main" java.lang.ClassFormatError: Method foo in class CLibrary has illegal modifiers: 0x101
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
        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:522)
        at I9432.main(I9432.scala)

$ javap -cp target\classes CLibrary
Compiled from "I9432.scala"
public interface CLibrary {
  public static void foo$(CLibrary, int);
  public native default void foo(int);
}

Expectation

Modifiers native and default (since Java 8) are mutual exclusive (see above javap output).

Source file src\main\scala\I9432.scala should not compile.

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