scala / bug

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

Infinite recursion between bridge methods for `@specialized` and manually specialized declarations of a method. #12947

Open noresttherein opened 4 months ago

noresttherein commented 4 months ago

Reproduction steps

Scala version: 2.13.12 infinite recursion in @specialized methods is nothing new, but, everything I saw so far involved multiple definitions of a method, and a call to super. This one is on new level for me.

trait I[@specialized(Int) T] {
    def hehe :T
}
trait IInt extends I[Int] {
    def hehe :Int
    def hihi = hehe
}
class Spec[@specialized(Int) T] extends I[T] {
    override def hehe :T = ???
}
class IntSpec extends Spec[Int] with IInt

(new IntSpec).hehe

Problem

Exception in thread "main" java.lang.StackOverflowError
    at IInt.hehe$mcI$sp(Playground.scala:23)
    at IInt.hehe$mcI$sp$(Playground.scala:23)
    at IntSpec.hehe$mcI$sp(Playground.scala:29)
    at Spec$mcI$sp.hehe(Playground.scala:27)
    at IInt.hehe$mcI$sp(Playground.scala:23)
    at IInt.hehe$mcI$sp$(Playground.scala:23)
    at IntSpec.hehe$mcI$sp(Playground.scala:29)
    at Spec$mcI$sp.hehe(Playground.scala:27)
    at IInt.hehe$mcI$sp(Playground.scala:23)
    at IInt.hehe$mcI$sp$(Playground.scala:23)
    at IntSpec.hehe$mcI$sp(Playground.scala:29)

Thankfully, the error goes away with removing the declaration in IInt, which doesn't really help, when I.hehe is already specialized.

Is it fixable?