Skip to content

overriding checks can be subverted with param list multiplicity and/or implicity #9848

Open
@scabug

Description

@scabug

I might have already noted these before, but I can't find the ticket. Maybe it was during code review on dotty?

scala> class C[A] { final def foo(x: A)(y: Int) = 0 }; class D extends C[Int] { def foo(x: Int, y: Int) = 1 }
defined class C
defined class D

scala> new D().foo(0)(0)
java.lang.VerifyError: class D overrides final method foo.(Ljava/lang/Object;I)I
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:64)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 37 elided

scala> class C[A] { final def foo(implicit x: A) = 0 }; class D extends C[Int] { def foo(x: Int) = 0 }
defined class C
defined class D

scala> new D().foo(0)
java.lang.VerifyError: class D overrides final method foo.(Ljava/lang/Object;)I
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:64)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 37 elided

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions