Open
Description
Compiler version
3.5.2
Minimized code
trait TypeBound {
type Min
type Max >: Min
}
object TypeBound {
type Pinpoint = TypeBound { type Max = Min }
}
object HasPoly1 {
trait Poly1[B <: TypeBound] {
type Refined[Sub <: B]
def refine[Sub <: B](sub: Sub): Refined[Sub]
}
object Poly1 {
type Concrete = Poly1[? <: TypeBound.Pinpoint] // can only refine using a concrete type, not a type bound
case class Example1() extends Poly1[TypeBound.Pinpoint] {
case class Refined[Sub <: TypeBound.Pinpoint](sub: Sub) {
final val fn: sub.Max => Seq[sub.Max] = { v =>
Seq(v)
}
}
def refine[Sub <: TypeBound.Pinpoint](sub: Sub): Refined[Sub] = Refined[Sub](sub)
}
}
}
Output
Cause: java.lang.StackOverflowError
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:377)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.toProjection$1(ProtobufWriters.scala:393)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:449)
at sbt.internal.inc.binary.converters.ProtobufWriters.toTypeAlias$1(ProtobufWriters.scala:553)
at sbt.internal.inc.binary.converters.ProtobufWriters.toClassDefinition(ProtobufWriters.scala:580)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$1(ProtobufWriters.scala:377)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:377)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$3(ProtobufWriters.scala:379)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:379)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.toProjection$1(ProtobufWriters.scala:393)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:449)
at sbt.internal.inc.binary.converters.ProtobufWriters.toTypeAlias$1(ProtobufWriters.scala:553)
at sbt.internal.inc.binary.converters.ProtobufWriters.toClassDefinition(ProtobufWriters.scala:580)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$1(ProtobufWriters.scala:377)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:377)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$3(ProtobufWriters.scala:379)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:379)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.toProjection$1(ProtobufWriters.scala:393)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:449)
at sbt.internal.inc.binary.converters.ProtobufWriters.toTypeAlias$1(ProtobufWriters.scala:553)
at sbt.internal.inc.binary.converters.ProtobufWriters.toClassDefinition(ProtobufWriters.scala:580)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$1(ProtobufWriters.scala:377)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:377)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$3(ProtobufWriters.scala:379)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:379)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.toProjection$1(ProtobufWriters.scala:393)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:449)
at sbt.internal.inc.binary.converters.ProtobufWriters.toTypeAlias$1(ProtobufWriters.scala:553)
at sbt.internal.inc.binary.converters.ProtobufWriters.toClassDefinition(ProtobufWriters.scala:580)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$1(ProtobufWriters.scala:377)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:377)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$3(ProtobufWriters.scala:379)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
at sbt.internal.inc.binary.converters.ProtobufWriters.toStructure(ProtobufWriters.scala:379)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:444)
at sbt.internal.inc.binary.converters.ProtobufWriters.toProjection$1(ProtobufWriters.scala:393)
at sbt.internal.inc.binary.converters.ProtobufWriters.toType(ProtobufWriters.scala:449)
at sbt.internal.inc.binary.converters.ProtobufWriters.toTypeAlias$1(ProtobufWriters.scala:553)
at sbt.internal.inc.binary.converters.ProtobufWriters.toClassDefinition(ProtobufWriters.scala:580)
at sbt.internal.inc.binary.converters.ProtobufWriters.$anonfun$toStructure$1(ProtobufWriters.scala:377)
...
on scastie it will time out:
https://scastie.scala-lang.org/tribbloid/XNl7bfiyRpyqNzbhZOnI8w/2
Expectation
Simple program, should compile in 3 seconds. Maybe a hidden bug in Protobuf