Skip to content

Compiler crash when attempt to write async unfold signature with incorrect number of parameters #12640

Closed
@rssh

Description

@rssh

Compiler version

3.0.0

Minimized code

package x

trait CpsMonad[F[_]]:
  def pure[A](x:A): F[A]
  def flatMap[A,B](fa:F[A])(f: A=>F[B]): F[B]

abstract sealed class CpsStream[-F[_],+T]

case class Cons[F[_],T](head:T, tailFun: ()=>F[CpsStream[F,T]]) extends CpsStream[F,T]

case class Empty[F[_]]() extends CpsStream[F,Nothing]

def unfold[S,F[_]:CpsMonad,T](s0:S)(f:S => F[Option[(S,T)]]):F[CpsStream[F,T]] =
      summon[CpsMonad[F]].flatMap(f(s0)){
         case Some(s1,a) => Cons(a, () => unfold(s1,f))
         case None => summon[CpsMonad[F]].pure(Empty[F]())
      }

Output (click arrow to expand)

[info] welcome to sbt 1.5.2 (N/A Java 15.0.2)
[info] loading global plugins from /Users/rssh/.sbt/1.0/plugins
[info] loading project definition from /Users/rssh/tests/dotty/crash-asyncstream/project
[info] loading settings for project root from build.sbt ...
[info] set current project to incorrect-notfound (in build file:/Users/rssh/tests/dotty/crash-asyncstream/)
[info] Executing in batch mode. For better performance use sbt's shell
[info] compiling 1 Scala source to /Users/rssh/tests/dotty/crash-asyncstream/target/scala-3.0.0/classes ...
java.lang.StackOverflowError while compiling /Users/rssh/tests/dotty/crash-asyncstream/src/main/scala/x/X.scala
[error] ## Exception when compiling 1 sources to /Users/rssh/tests/dotty/crash-asyncstream/target/scala-3.0.0/classes
[error] java.lang.StackOverflowError
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5628)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5654)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:191)
[error] dotty.tools.dotc.typer.Inferencing$IsFullyDefinedAccumulator.apply(Inferencing.scala:168)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy22$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5640)
[error] dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5644)
[error] dotty.tools.dotc.typer.Inferencing
....

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions