Skip to content

Final def in trait leads to java.lang.VerifyError: class L overrides final method c.(I)I #5094

Closed
@smarter

Description

@smarter

Same bug as scala/bug#11136:

trait IO {
  def c(x: Int): Int = ???
}
trait SO extends IO {
  override final def c(x: Int): Int = ???
}
trait SOIO extends IO {
  override def c(x: Int): Int = ???
}
trait SOSO extends SOIO with SO
abstract class AS extends SO
class L extends AS with SOSO
object Test {
  def main(args: Array[String]): Unit = {
    new L
  }
}
Exception in thread "main" java.lang.VerifyError: class L overrides final method c.(I)I
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at Test$.main(i11136.scala:16)
        at Test.main(i11136.scala)

Decompilation output:

% cfr AS
public abstract class AS
implements SO {
    public AS() {
    }

    @Override
    public final int c(int x) {
        return SO.super.c(x);
    }
}
% cfr L
public class L
extends AS
implements SOIO,
SOSO {
    public L() {
    }

    @Override
    public int c(int x) {
        return SOIO.super.c(x);
    }
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions