scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
232 stars 21 forks source link

Overriding `productPrefix` breaks case class hash code #13033

Open lrytz opened 2 weeks ago

lrytz commented 2 weeks ago
scala> abstract case class C1(a: Int)
     | class C2(a: Int) extends C1(a) { override def productPrefix = "C2" }
     | class C3(a: Int) extends C1(a) { override def productPrefix = "C3" }

scala> val s = collection.mutable.HashSet.empty[C1]

scala> s.addOne(new C2(1))

scala> val c3 = new C3(1)

scala> s.find(_ == c3)
val res1: Option[C1] = Some(C2(1))

scala> s.contains(c3)
val res2: Boolean = false
som-snytt commented 2 weeks ago

Alternatively, canEqual is broken and should include productPrefix.