Skip to content

Using @targetName in AnyVal miscompiles to duplicate method in companion class #13216

Closed
@mpartel

Description

@mpartel

Compiler version

3.0.1

Minimized code

import scala.annotation.targetName

class C(s: String) extends AnyVal {
  def m(xs: Seq[Int]): Unit = {}
  @targetName("m_seq2")
  def m(xs: Seq[Seq[Int]]): Unit = {}
}

object Main {
  def main(args: Array[String]): Unit = new C("").m(Seq(123))
}

Output

java.lang.ClassFormatError: Duplicate method name "m_seq2" with signature "(Ljava.lang.String;Lscala.collection.immutable.Seq;)V" in class file C$
$ javap target/scala-3.0.1/classes/C\$.class 
...
  public final void m_seq2(java.lang.String, scala.collection.immutable.Seq<scala.collection.immutable.Seq<java.lang.Object>>);
  public final void m_seq2(java.lang.String, scala.collection.immutable.Seq<scala.collection.immutable.Seq<java.lang.Object>>);
...

Removing extends AnyVal fixes it.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions