Closed
Description
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.