zinc icon indicating copy to clipboard operation
zinc copied to clipboard

Stack overflow when writing analysis

Open tgodzik opened this issue 10 months ago • 2 comments

steps

Try to compile:

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)
    }
  }
}

under newest Scala 3.

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)
..

problem

Looks like an inifinite loop.

expectation

It should not fail to write analysis

notes

Raised in https://github.com/scala/scala3/issues/22026

Anyone has an idea what can be fixed here? I also checked on sbt 2 and the same issue happened

tgodzik avatar Jan 17 '25 12:01 tgodzik

I guess there's a loop somewhere we need to cut?

eed3si9n avatar Jan 17 '25 16:01 eed3si9n

Yeah, I would guess so. If it's not obvious we can take at it later, though I guess it depends on how much of a problem this becomes.

tgodzik avatar Jan 17 '25 16:01 tgodzik