Closed
Description
In this example
object infpaths {
object a {
trait T { t =>
type M <: t.b.M
type T <: a.T
val b: t.T
}
val x: a.T = ???
}
val m1: a.x.M = ???
val m2: a.x.b.M = m1
val m3: a.x.b.b.M = m2
}
we run into an infinite recursion:
[info] error occurred during: TypeBounds(TypeRef(ThisType(module class scala),Nothing), TypeRef(TermRef(ThisType(module class infpaths$),a),T)): TypeBounds(TypeRef(ThisType(module class scala),Nothing), TypeRef(TermRef(ThisType(module class infpaths$),a),T)) member M
[info] exception occured while typechecking tests/pos/infpaths.scala
[error] Exception in thread "main" java.lang.StackOverflowError
[error] at java.lang.String.getChars(String.java:826)
[error] at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:416)
[error] at java.lang.StringBuilder.append(StringBuilder.java:132)
[error] at scala.collection.mutable.StringBuilder.<init>(StringBuilder.scala:47)
[error] at scala.collection.mutable.StringBuilder.<init>(StringBuilder.scala:52)
[error] at scala.runtime.ScalaRunTime$._toString(ScalaRunTime.scala:166)
[error] at dotty.tools.dotc.core.Types$TermRef.toString(Types.scala:1124)
[error] at java.lang.String.valueOf(String.java:2854)
[error] at scala.collection.mutable.StringBuilder.append(StringBuilder.scala:198)
[error] at scala.collection.TraversableOnce$$anonfun$addString$1.apply(TraversableOnce.scala:345)
[error] at scala.collection.Iterator$class.foreach(Iterator.scala:743)
[error] at scala.collection.AbstractIterator.foreach(Iterator.scala:1174)
[error] at scala.collection.TraversableOnce$class.addString(TraversableOnce.scala:343)
[error] at scala.collection.AbstractIterator.addString(Iterator.scala:1174)
[error] at scala.collection.TraversableOnce$class.mkString(TraversableOnce.scala:309)
...
Note that scalac correctly rejects this example:
<console>:12: error: cyclic aliasing or subtyping involving type M
type M <: t.b.M
^
I suspect that there might not only be a problem with printing, but also with cycle detection...
Metadata
Metadata
Assignees
Labels
No labels