diff --git a/compiler/src/dotty/tools/dotc/core/TypeErrors.scala b/compiler/src/dotty/tools/dotc/core/TypeErrors.scala index 3d10901120cc..59e4714949c4 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeErrors.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeErrors.scala @@ -40,16 +40,22 @@ class MissingType(pre: Type, name: Name) extends TypeError { } } -class RecursionOverflow(val op: String, details: => String, previous: Throwable, val weight: Int) extends TypeError { +class RecursionOverflow(val op: String, details: => String, val previous: Throwable, val weight: Int) extends TypeError { def explanation: String = s"$op $details" private def recursions: List[RecursionOverflow] = { - val nested = previous match { - case previous: RecursionOverflow => previous.recursions - case _ => Nil + import scala.collection.mutable.ListBuffer + val result = ListBuffer.empty[RecursionOverflow] + @annotation.tailrec def loop(throwable: Throwable): List[RecursionOverflow] = throwable match { + case ro: RecursionOverflow => + if (result.contains(ro)) println("caught the issue") + result += ro + loop(ro.previous) + case _ => result.toList + } - this :: nested + loop(this) } def opsString(rs: List[RecursionOverflow])(implicit ctx: Context): String = { diff --git a/tests/pending/neg/i4371b.scala b/tests/neg/i4371b.scala similarity index 100% rename from tests/pending/neg/i4371b.scala rename to tests/neg/i4371b.scala