Skip to content

assertion failed: orphan parameter reference #7888

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Atry opened this issue Jan 2, 2020 · 5 comments · Fixed by #13663
Closed

assertion failed: orphan parameter reference #7888

Atry opened this issue Jan 2, 2020 · 5 comments · Fixed by #13663

Comments

@Atry
Copy link
Contributor

Atry commented Jan 2, 2020

minimized code

def usingSeq[B](f: [A] => Seq[A] => B): B = {
  f(Nil)
}
def crash() = {
  usingSeq { [A] => (a: Seq[A]) =>
    a
  }
}
Stack trace
java.lang.AssertionError: assertion failed: orphan parameter reference: TypeParamRef(A)
	at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:268)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:143)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleNewType$$anonfun$11$$anonfun$1(TreePickler.scala:160)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleNewType$$anonfun$1(TreePickler.scala:160)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:47)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:160)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:143)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:547)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTpt(TreePickler.scala:294)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$2(TreePickler.scala:309)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:47)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:313)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:509)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:332)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:332)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$25(TreePickler.scala:535)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:47)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:536)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$2(TreePickler.scala:308)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:47)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:313)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:511)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:332)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:332)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$27(TreePickler.scala:545)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:47)
	at dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:545)
	at dotty.tools.dotc.core.tasty.TreePickler.pickle$$anonfun$1(TreePickler.scala:702)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:702)
	at dotty.tools.dotc.transform.Pickler.run$$anonfun$10$$anonfun$8(Pickler.scala:63)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.transform.Pickler.run$$anonfun$2(Pickler.scala:87)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:305)
	at dotty.tools.dotc.transform.Pickler.run(Pickler.scala:87)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
	at scala.collection.immutable.List.map(List.scala:219)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
	at dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:91)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:161)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
	at dotty.tools.dotc.Run.runPhases$5(Run.scala:171)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:179)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:65)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:186)
	at dotty.tools.dotc.Run.compileSources(Run.scala:123)
	at dotty.tools.dotc.Run.compile(Run.scala:106)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
	at dotty.tools.dotc.Driver.process(Driver.scala:189)
	at dotty.tools.dotc.Main.process(Main.scala)
	at xsbt.CachedCompilerImpl.run(CachedCompilerImpl.java:69)
	at xsbt.CompilerInterface.run(CompilerInterface.java:41)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:248)
	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:122)
	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:95)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:91)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:186)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3$adapted(MixedAnalyzingCompiler.scala:77)
	at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:215)
	at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:77)
	at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:146)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:343)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:343)
	at sbt.internal.inc.Incremental$.doCompile(Incremental.scala:120)
	at sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:100)
	at sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:180)
	at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:98)
	at sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:102)
	at sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:155)
	at sbt.internal.inc.Incremental$.compile(Incremental.scala:92)
	at sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:75)
	at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:348)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:301)
	at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:168)
	at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:248)
	at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:74)
	at sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1761)
	at sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1734)
	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
	at sbt.std.Transform$$anon$4.work(Transform.scala:67)
	at sbt.Execute.$anonfun$submit$2(Execute.scala:281)
	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:19)
	at sbt.Execute.work(Execute.scala:290)
	at sbt.Execute.$anonfun$submit$1(Execute.scala:281)
	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
@odersky
Copy link
Contributor

odersky commented Jan 6, 2020

The orphan parameter is the [A] in the polymorphic closure.

@rskfocus
Copy link

rskfocus commented Jan 4, 2021

I have a similar issue:

trait T[A <: AnyKind]
given ts[A <: AnyKind]: T[A] = new T[A] {}

trait M[F[_[_], _]]
trait E[+R, +A]
type C[+R] = [a] =>> E[R, a]

def s[F[_[_], _], R, A](x: F[C[R | M[F]], A])(using t: T[F]) = ???

type A = M[AE]

sealed trait AE[F[_], A]

object A:
  case class K[R, A](f: E[R, A]) extends AE[C[R], B[R, A]]
  trait B[R, A]
  def k[R, A: T](f: E[R, A]): E[R | A, B[R | A, A]] = s(K(f))

Output (click arrow to expand)

error when pickling type R
error when pickling type R | M[AE]
error when pickling type A.B[R | M[AE], A]
error when pickling tree A.B[R | M[AE], A]
error when pickling tree s[AE, R, A.B[R | M[AE], A]]
error when pickling tree s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))
error when pickling tree s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE])
error when pickling tree def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
  implicit evidence$1: T[A]
): E[R | A, A.B[R | A, A]] = 
  s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE])
error when pickling tree () extends Object() { this: A.type =>
  private def writeReplace(): AnyRef = 
    new scala.runtime.ModuleSerializationProxy(classOf[t$package.A.type])
  case class K[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A]) extends 
    Object
  (), AE[C[K.this.R], A.B[K.this.R, K.this.A]], _root_.scala.Product, _root_.
    scala
  .Serializable {
    override def hashCode(): Int = scala.runtime.ScalaRunTime._hashCode(this)
    override def equals(x$0: Any): Boolean = 
      this.eq(x$0.$asInstanceOf$[Object]).||(
        x$0 match 
          {
            case x$0 @ _:A.K[R, A] @unchecked => 
              this.f.==(x$0.f).&&(x$0.canEqual(this))
            case _ => false
          }
      )
    override def toString(): String = scala.runtime.ScalaRunTime._toString(this)
    override def canEqual(that: Any): Boolean = 
      that.isInstanceOf[A.K[R, A] @unchecked]
    override def productArity: Int = 1
    override def productPrefix: String = "K"
    override def productElement(n: Int): Any = 
      n match 
        {
          case 0 => this._1
          case _ => throw new IndexOutOfBoundsException(n.toString())
        }
    override def productElementName(n: Int): String = 
      n match 
        {
          case 0 => "f"
          case _ => throw new IndexOutOfBoundsException(n.toString())
        }
    R
    A
    val f: E[R, A]
    def copy[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
    def copy$default$1[R, A]: E[R, A] = 
      K.this.f:(K.this.f : E[R, A]) @uncheckedVariance
    def _1: E[R, A] = this.f
  }
  final lazy module val K: A.K$ = new A.K$()
  final module class K$() extends AnyRef(), scala.deriving.Mirror.Product { 
    this: A.K.type =>
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[A.K.type])
    def apply[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
    def unapply[R, A](x$1: A.K[R, A]): A.K[R, A] = x$1
    override def toString: String = "K"
    type MirroredMonoType = A.K[? <: AnyKind, ? <: AnyKind]
    def fromProduct(x$0: Product): A.K.MirroredMonoType = 
      new A.K[Any, Any](x$0.productElement(0).$asInstanceOf$[E[Any, Any]])
  }
  trait B[R >: Nothing <: Any, A >: Nothing <: Any]() extends Object {
    R
    A
  }
  def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
    implicit evidence$1: T[A]
  ): E[R | A, A.B[R | A, A]] = 
    s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE])
}
error when pickling tree final module class A$() extends Object() { this: A.type =>
  private def writeReplace(): AnyRef = 
    new scala.runtime.ModuleSerializationProxy(classOf[t$package.A.type])
  case class K[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A]) extends 
    Object
  (), AE[C[K.this.R], A.B[K.this.R, K.this.A]], _root_.scala.Product, _root_.
    scala
  .Serializable {
    override def hashCode(): Int = scala.runtime.ScalaRunTime._hashCode(this)
    override def equals(x$0: Any): Boolean = 
      this.eq(x$0.$asInstanceOf$[Object]).||(
        x$0 match 
          {
            case x$0 @ _:A.K[R, A] @unchecked => 
              this.f.==(x$0.f).&&(x$0.canEqual(this))
            case _ => false
          }
      )
    override def toString(): String = scala.runtime.ScalaRunTime._toString(this)
    override def canEqual(that: Any): Boolean = 
      that.isInstanceOf[A.K[R, A] @unchecked]
    override def productArity: Int = 1
    override def productPrefix: String = "K"
    override def productElement(n: Int): Any = 
      n match 
        {
          case 0 => this._1
          case _ => throw new IndexOutOfBoundsException(n.toString())
        }
    override def productElementName(n: Int): String = 
      n match 
        {
          case 0 => "f"
          case _ => throw new IndexOutOfBoundsException(n.toString())
        }
    R
    A
    val f: E[R, A]
    def copy[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
    def copy$default$1[R, A]: E[R, A] = 
      K.this.f:(K.this.f : E[R, A]) @uncheckedVariance
    def _1: E[R, A] = this.f
  }
  final lazy module val K: A.K$ = new A.K$()
  final module class K$() extends AnyRef(), scala.deriving.Mirror.Product { 
    this: A.K.type =>
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[A.K.type])
    def apply[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
    def unapply[R, A](x$1: A.K[R, A]): A.K[R, A] = x$1
    override def toString: String = "K"
    type MirroredMonoType = A.K[? <: AnyKind, ? <: AnyKind]
    def fromProduct(x$0: Product): A.K.MirroredMonoType = 
      new A.K[Any, Any](x$0.productElement(0).$asInstanceOf$[E[Any, Any]])
  }
  trait B[R >: Nothing <: Any, A >: Nothing <: Any]() extends Object {
    R
    A
  }
  def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
    implicit evidence$1: T[A]
  ): E[R | A, A.B[R | A, A]] = 
    s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE])
}
error when pickling tree () extends Object() { this: t$package.type =>
  private def writeReplace(): AnyRef = 
    new scala.runtime.ModuleSerializationProxy(classOf[t$package.type])
  final given def ts[A >: Nothing <: AnyKind]: T[A] = 
    {
      final class $anon() extends Object(), T[A] {}
      new $anon():T[A]
    }
  type C[+R >: Nothing <: Any] = [a >: Nothing <: Any] =>> E[R, a]
  def s[
    F[_$4[_$5 >: Nothing <: Any] >: Nothing <: Any, _$6 >: Nothing <: Any]
       >: Nothing <: Any
  , R >: Nothing <: Any, A >: Nothing <: Any](x: F[C[R | M[F]], A])(using 
    t: T[F]
  ): Nothing = ???
  type A = M[AE]
  final lazy module val A: A$ = new A$()
  final module class A$() extends Object() { this: A.type =>
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[t$package.A.type])
    case class K[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A]) extends 
      Object
    (), AE[C[K.this.R], A.B[K.this.R, K.this.A]], _root_.scala.Product, _root_.
      scala
    .Serializable {
      override def hashCode(): Int = scala.runtime.ScalaRunTime._hashCode(this)
      override def equals(x$0: Any): Boolean = 
        this.eq(x$0.$asInstanceOf$[Object]).||(
          x$0 match 
            {
              case x$0 @ _:A.K[R, A] @unchecked => 
                this.f.==(x$0.f).&&(x$0.canEqual(this))
              case _ => false
            }
        )
      override def toString(): String = 
        scala.runtime.ScalaRunTime._toString(this)
      override def canEqual(that: Any): Boolean = 
        that.isInstanceOf[A.K[R, A] @unchecked]
      override def productArity: Int = 1
      override def productPrefix: String = "K"
      override def productElement(n: Int): Any = 
        n match 
          {
            case 0 => this._1
            case _ => throw new IndexOutOfBoundsException(n.toString())
          }
      override def productElementName(n: Int): String = 
        n match 
          {
            case 0 => "f"
            case _ => throw new IndexOutOfBoundsException(n.toString())
          }
      R
      A
      val f: E[R, A]
      def copy[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
      def copy$default$1[R, A]: E[R, A] = 
        K.this.f:(K.this.f : E[R, A]) @uncheckedVariance
      def _1: E[R, A] = this.f
    }
    final lazy module val K: A.K$ = new A.K$()
    final module class K$() extends AnyRef(), scala.deriving.Mirror.Product { 
      this: A.K.type =>
      private def writeReplace(): AnyRef = 
        new scala.runtime.ModuleSerializationProxy(classOf[A.K.type])
      def apply[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
      def unapply[R, A](x$1: A.K[R, A]): A.K[R, A] = x$1
      override def toString: String = "K"
      type MirroredMonoType = A.K[? <: AnyKind, ? <: AnyKind]
      def fromProduct(x$0: Product): A.K.MirroredMonoType = 
        new A.K[Any, Any](x$0.productElement(0).$asInstanceOf$[E[Any, Any]])
    }
    trait B[R >: Nothing <: Any, A >: Nothing <: Any]() extends Object {
      R
      A
    }
    def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
      implicit evidence$1: T[A]
    ): E[R | A, A.B[R | A, A]] = 
      s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE]
        )
  }
}
error when pickling tree @scala.annotation.internal.SourceFile("src/main/scala/t.scala") final module 
  class
 t$package$() extends Object() { this: t$package.type =>
  private def writeReplace(): AnyRef = 
    new scala.runtime.ModuleSerializationProxy(classOf[t$package.type])
  final given def ts[A >: Nothing <: AnyKind]: T[A] = 
    {
      final class $anon() extends Object(), T[A] {}
      new $anon():T[A]
    }
  type C[+R >: Nothing <: Any] = [a >: Nothing <: Any] =>> E[R, a]
  def s[
    F[_$4[_$5 >: Nothing <: Any] >: Nothing <: Any, _$6 >: Nothing <: Any]
       >: Nothing <: Any
  , R >: Nothing <: Any, A >: Nothing <: Any](x: F[C[R | M[F]], A])(using 
    t: T[F]
  ): Nothing = ???
  type A = M[AE]
  final lazy module val A: A$ = new A$()
  final module class A$() extends Object() { this: A.type =>
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[t$package.A.type])
    case class K[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A]) extends 
      Object
    (), AE[C[K.this.R], A.B[K.this.R, K.this.A]], _root_.scala.Product, _root_.
      scala
    .Serializable {
      override def hashCode(): Int = scala.runtime.ScalaRunTime._hashCode(this)
      override def equals(x$0: Any): Boolean = 
        this.eq(x$0.$asInstanceOf$[Object]).||(
          x$0 match 
            {
              case x$0 @ _:A.K[R, A] @unchecked => 
                this.f.==(x$0.f).&&(x$0.canEqual(this))
              case _ => false
            }
        )
      override def toString(): String = 
        scala.runtime.ScalaRunTime._toString(this)
      override def canEqual(that: Any): Boolean = 
        that.isInstanceOf[A.K[R, A] @unchecked]
      override def productArity: Int = 1
      override def productPrefix: String = "K"
      override def productElement(n: Int): Any = 
        n match 
          {
            case 0 => this._1
            case _ => throw new IndexOutOfBoundsException(n.toString())
          }
      override def productElementName(n: Int): String = 
        n match 
          {
            case 0 => "f"
            case _ => throw new IndexOutOfBoundsException(n.toString())
          }
      R
      A
      val f: E[R, A]
      def copy[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
      def copy$default$1[R, A]: E[R, A] = 
        K.this.f:(K.this.f : E[R, A]) @uncheckedVariance
      def _1: E[R, A] = this.f
    }
    final lazy module val K: A.K$ = new A.K$()
    final module class K$() extends AnyRef(), scala.deriving.Mirror.Product { 
      this: A.K.type =>
      private def writeReplace(): AnyRef = 
        new scala.runtime.ModuleSerializationProxy(classOf[A.K.type])
      def apply[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
      def unapply[R, A](x$1: A.K[R, A]): A.K[R, A] = x$1
      override def toString: String = "K"
      type MirroredMonoType = A.K[? <: AnyKind, ? <: AnyKind]
      def fromProduct(x$0: Product): A.K.MirroredMonoType = 
        new A.K[Any, Any](x$0.productElement(0).$asInstanceOf$[E[Any, Any]])
    }
    trait B[R >: Nothing <: Any, A >: Nothing <: Any]() extends Object {
      R
      A
    }
    def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
      implicit evidence$1: T[A]
    ): E[R | A, A.B[R | A, A]] = 
      s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(t$package.ts[AE]
        )
  }
}
error when pickling tree package <empty> {
  final lazy module val t$package: t$package$ = new t$package$()
  @scala.annotation.internal.SourceFile("src/main/scala/t.scala") final module 
    class
   t$package$() extends Object() { this: t$package.type =>
    private def writeReplace(): AnyRef = 
      new scala.runtime.ModuleSerializationProxy(classOf[t$package.type])
    final given def ts[A >: Nothing <: AnyKind]: T[A] = 
      {
        final class $anon() extends Object(), T[A] {}
        new $anon():T[A]
      }
    type C[+R >: Nothing <: Any] = [a >: Nothing <: Any] =>> E[R, a]
    def s[
      F[_$4[_$5 >: Nothing <: Any] >: Nothing <: Any, _$6 >: Nothing <: Any]
         >: Nothing <: Any
    , R >: Nothing <: Any, A >: Nothing <: Any](x: F[C[R | M[F]], A])(using 
      t: T[F]
    ): Nothing = ???
    type A = M[AE]
    final lazy module val A: A$ = new A$()
    final module class A$() extends Object() { this: A.type =>
      private def writeReplace(): AnyRef = 
        new scala.runtime.ModuleSerializationProxy(classOf[t$package.A.type])
      case class K[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A]) extends
         
      Object(), AE[C[K.this.R], A.B[K.this.R, K.this.A]], _root_.scala.Product, 
        _root_
      .scala.Serializable
       {
        override def hashCode(): Int = 
          scala.runtime.ScalaRunTime._hashCode(this)
        override def equals(x$0: Any): Boolean = 
          this.eq(x$0.$asInstanceOf$[Object]).||(
            x$0 match 
              {
                case x$0 @ _:A.K[R, A] @unchecked => 
                  this.f.==(x$0.f).&&(x$0.canEqual(this))
                case _ => false
              }
          )
        override def toString(): String = 
          scala.runtime.ScalaRunTime._toString(this)
        override def canEqual(that: Any): Boolean = 
          that.isInstanceOf[A.K[R, A] @unchecked]
        override def productArity: Int = 1
        override def productPrefix: String = "K"
        override def productElement(n: Int): Any = 
          n match 
            {
              case 0 => this._1
              case _ => throw new IndexOutOfBoundsException(n.toString())
            }
        override def productElementName(n: Int): String = 
          n match 
            {
              case 0 => "f"
              case _ => throw new IndexOutOfBoundsException(n.toString())
            }
        R
        A
        val f: E[R, A]
        def copy[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
        def copy$default$1[R, A]: E[R, A] = 
          K.this.f:(K.this.f : E[R, A]) @uncheckedVariance
        def _1: E[R, A] = this.f
      }
      final lazy module val K: A.K$ = new A.K$()
      final module class K$() extends AnyRef(), scala.deriving.Mirror.Product { 
        this: A.K.type =>
        private def writeReplace(): AnyRef = 
          new scala.runtime.ModuleSerializationProxy(classOf[A.K.type])
        def apply[R, A](f: E[R, A]): A.K[R, A] = new A.K[R, A](f)
        def unapply[R, A](x$1: A.K[R, A]): A.K[R, A] = x$1
        override def toString: String = "K"
        type MirroredMonoType = A.K[? <: AnyKind, ? <: AnyKind]
        def fromProduct(x$0: Product): A.K.MirroredMonoType = 
          new A.K[Any, Any](x$0.productElement(0).$asInstanceOf$[E[Any, Any]])
      }
      trait B[R >: Nothing <: Any, A >: Nothing <: Any]() extends Object {
        R
        A
      }
      def k[R >: Nothing <: Any, A >: Nothing <: Any](f: E[R, A])(
        implicit evidence$1: T[A]
      ): E[R | A, A.B[R | A, A]] = 
        s[AE, R, A.B[R | M[AE], A]](A.K.apply[(R | M[AE]), A](f))(
          t$package.ts[AE]
        )
    }
  }
}
[info] exception occurred while compiling /home/<redacted>/src/main/scala/t.scala
java.lang.AssertionError: assertion failed: orphan parameter reference: TypeParamRef(R) while compiling /home/<redacted>/src/main/scala/t.scala
[error] ## Exception when compiling 8 sources to /home/<redacted>/target/scala-3.0.0-M3/classes
[error] java.lang.AssertionError: assertion failed: orphan parameter reference: TypeParamRef(R)
[error] scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:300)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:171)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType$$anonfun$8(TreePickler.scala:278)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:278)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:171)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType$$anonfun$11$$anonfun$1(TreePickler.scala:192)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType$$anonfun$2(TreePickler.scala:192)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleNewType(TreePickler.scala:192)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleType(TreePickler.scala:171)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:606)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTpt(TreePickler.scala:327)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$39$$anonfun$1(TreePickler.scala:445)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$4(TreePickler.scala:445)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:446)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$3(TreePickler.scala:437)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:439)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$3(TreePickler.scala:437)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:439)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTreeUnlessEmpty(TreePickler.scala:330)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$1(TreePickler.scala:345)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:347)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:562)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:371)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:371)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$26(TreePickler.scala:588)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:589)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$1(TreePickler.scala:342)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:347)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:564)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:371)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:371)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$26(TreePickler.scala:588)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:589)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef$$anonfun$1(TreePickler.scala:342)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleDef(TreePickler.scala:347)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:564)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats$$anonfun$2(TreePickler.scala:371)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleStats(TreePickler.scala:371)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree$$anonfun$29(TreePickler.scala:604)
[error] dotty.tools.dotc.core.tasty.TreePickler.withLength(TreePickler.scala:69)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickleTree(TreePickler.scala:604)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickle$$anonfun$1(TreePickler.scala:774)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.core.tasty.TreePickler.pickle(TreePickler.scala:774)
[error] dotty.tools.dotc.transform.Pickler.run$$anonfun$3$$anonfun$2(Pickler.scala:69)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.transform.Pickler.run$$anonfun$1(Pickler.scala:106)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:333)
[error] dotty.tools.dotc.transform.Pickler.run(Pickler.scala:106)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
[error] scala.collection.immutable.List.map(List.scala:246)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
[error] dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:111)
[error] dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
[error] dotty.tools.dotc.Run.runPhases$5(Run.scala:195)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
[error] scala.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:210)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:146)
[error] dotty.tools.dotc.Run.compile(Run.scala:130)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
[error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88)
[error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:92)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:186)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:241)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:176)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:157)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:157)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:204)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:573)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:573)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:173)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:171)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:458)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:261)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:413)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:498)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:400)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:165)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:573)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:491)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2177)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2134)
[error] sbt.internal.io.Retry$.apply(Retry.scala:40)
[error] sbt.internal.io.Retry$.apply(Retry.scala:23)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:31)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2130)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] sbt.Execute.work(Execute.scala:291)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] java.base/java.lang.Thread.run(Thread.java:834)
[error]            
[error] stack trace is suppressed; run last Compile / compileIncremental for the full output
[error] (Compile / compileIncremental) java.lang.AssertionError: assertion failed: orphan parameter reference: TypeParamRef(R)

@IndiscriminateCoding
Copy link

I've also often got this error.
Adding type annotation helps, but it quickly becomes annoying.
Any chances it would be fixed at some point? RC1? 3.0?

@bplommer
Copy link
Contributor

bplommer commented Jan 25, 2021

Another example:

import scala.compiletime.ops.int._
import scala.compiletime.ops.boolean._

sealed trait Tree
case object Leaf extends Tree
final case class Branch[N <: Int & Singleton, L <: Tree, R <: Tree](n: N, l: L, r: R)(
  using (L LeftOf N) =:= true) extends Tree

type LeftOf[T <: Tree, N <: Int] <: Boolean = T match {
  case Leaf.type => true
  case Branch[n, _, r] => n < N && (r LeftOf N)
}

val tree = Branch(1, Branch(0, Leaf, Leaf), Leaf)

@IndiscriminateCoding
Copy link

Still reproducible in 3.0.1-RC1

odersky added a commit to dotty-staging/dotty that referenced this issue Oct 3, 2021
olsdavis pushed a commit to olsdavis/dotty that referenced this issue Apr 4, 2022
@Kordyjan Kordyjan added this to the 3.1.1 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants