Dotty: AssertionError when decompiling tasty file

Created on 27 Jul 2020  路  4Comments  路  Source: lampepfl/dotty

Minimized code

package playground

import cats.Show

object Usernames {
  opaque type Username = String

  object Username {
    def apply(s: String): Username = s

    given Show[Username] {
      def show(u: Username) = u
    }
  }
}

Run using:

package playground

import cats.implicits.{given _}
import cats.Show
import Usernames._

object Main {

  def main(args: Array[String]): Unit = {
    val u: Username = Username("tim")
    println(u.show)
    println("Hello world!")
    println(msg)
  }

  def msg = "I was compiled by dotty :)"

}

Output

[info] loading settings for project root from build.sbt ...
[info] set current project to dotty-simple (in build file:/Users/tim/dev/dotty-issue/)
[info] running playground.Main
tim
Hello world!
I was compiled by dotty :)
[success] Total time: 1 s, completed 27 Jul 2020, 15:37:52

As expected. HOWEVER, I get the following when inspecting the tasty file generated:

dotc -decompile target/scala-0.26/classes/playground/Usernames.tasty
java.lang.AssertionError: assertion failed: module class given_Show_Username$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module cats),Show),List(TypeRef(ThisType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module playground),module class Usernames$)),type Username)))
        at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1740)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1745)
        at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2658)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1717)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1728)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1753)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:759)
        at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
        at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:602)
        at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
        at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
        at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3086)
        at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3081)
        at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3207)
        at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3365)
        at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3074)
        at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3066)
        at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3207)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:586)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:618)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:616)
        at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1067)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1058)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1081)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1251)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1113)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1251)
        at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:793)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1383)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:919)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:914)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:385)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:390)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1470)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1481)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1478)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1481)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1478)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1485)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1390)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
        at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
        at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
        at scala.collection.immutable.List.flatMap(List.scala:293)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
        at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:181)
        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:191)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:199)
        at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:206)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:148)
        at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
        at dotty.tools.dotc.Driver.process(Driver.scala:195)
        at dotty.tools.dotc.Driver.process(Driver.scala:164)
        at dotty.tools.dotc.Driver.process(Driver.scala:176)
        at dotty.tools.dotc.Driver.main(Driver.scala:203)
        at dotty.tools.dotc.decompiler.Main.main(Main.scala)
no sig for TypeRef(ThisType(TypeRef(ThisType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module playground),module class Usernames$)),module class Username$)),module class given_Show_Username$) because of ()
failure while taking result signature of (): playground.Usernames.Username.given_Show_Username$: playground.Usernames.Username.given_Show_Username$
cannot take signature of (): playground.Usernames.Username.given_Show_Username$
java.lang.AssertionError: assertion failed: module class given_Show_Username$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module cats),Show),List(TypeRef(ThisType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module playground),module class Usernames$)),type Username))) while compiling playground.Usernames
Exception in thread "main" java.lang.AssertionError: assertion failed: module class given_Show_Username$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module cats),Show),List(TypeRef(ThisType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module playground),module class Usernames$)),type Username)))
        at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1740)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1745)
        at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2658)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1717)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1728)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1753)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:759)
        at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
        at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:602)
        at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
        at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
        at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3086)
        at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3081)
        at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3207)
        at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3365)
        at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3074)
        at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3066)
        at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3207)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:586)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:618)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:616)
        at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1067)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1058)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1081)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1251)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1113)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1251)
        at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:793)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1383)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:919)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:914)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:385)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:390)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1470)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1481)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1478)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1481)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1478)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1509)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply$$anonfun$1(Trees.scala:1387)
        at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
        at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
        at scala.collection.immutable.List.foldLeft(List.scala:79)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1485)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1390)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1510)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
        at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
        at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
        at scala.collection.immutable.List.flatMap(List.scala:293)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
        at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:181)
        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:191)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:199)
        at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:206)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:148)
        at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
        at dotty.tools.dotc.Driver.process(Driver.scala:195)
        at dotty.tools.dotc.Driver.process(Driver.scala:164)
        at dotty.tools.dotc.Driver.process(Driver.scala:176)
        at dotty.tools.dotc.Driver.main(Driver.scala:203)
        at dotty.tools.dotc.decompiler.Main.main(Main.scala)

Expected

bug needs minimization

Most helpful comment

Here's a reproducer without the cats dependency.

It seems that the issue is only triggered if the typeclass is defined in a separate artifact, so I just built a simple library:

//src/dotty-issues/i9446/shower$ cat src/main/scala/shower/Show.scala
package shower

trait Show[T] {
  def show(x: T): String
}

//src/dotty-issues/i9446/shower$ cat build.sbt
scalaVersion := "0.28.0-bin-20200925-f4528ce-NIGHTLY"
name := "shower"
organization := "io.grigg"
version := "1.0"

//src/dotty-issues/i9446/shower$ sbt publishLocal

then referred to it in the testcase:

//src/dotty-issues/i9446/repro$ cat src/main/scala/Test.scala
import shower.Show

object Test {
  class T
  object T {
    given Show[T] {
      def show(x: T) = ""
    }
  }
}

//src/dotty-issues/i9446/repro$ cat build.sbt
scalaVersion := "0.28.0-bin-20200925-f4528ce-NIGHTLY"
name := "i9446"
version := "0.1.0"
libraryDependencies += ("io.grigg" %% "shower" % "1.0")

//src/dotty-issues/i9446/repro$ sbt compile

and watched it go boom:

/src/dotty-issues/i9446/repro$ dotc -version
Dotty compiler version 0.28.0-bin-SNAPSHOT-git-f4528ce -- Copyright 2002-2020, LAMP/EPFL

/src/dotty-issues/i9446/repro$ dotc -decompile target/scala-0.28/classes/Test.tasty


Output -- click to expand

java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T)))
    at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1763)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1768)
    at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2693)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1740)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1751)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1776)
    at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:778)
    at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
    at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:604)
    at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
    at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3120)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3115)
    at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3251)
    at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3413)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3108)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3100)
    at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3251)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:583)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:615)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:613)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1066)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1057)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1080)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1112)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:792)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1382)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:915)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:910)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:377)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:382)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1471)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1486)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1391)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
    at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
    at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
    at scala.collection.immutable.List.flatMap(List.scala:293)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
    at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
    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:195)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
    at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:152)
    at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
    at dotty.tools.dotc.Driver.process(Driver.scala:195)
    at dotty.tools.dotc.Driver.process(Driver.scala:164)
    at dotty.tools.dotc.Driver.process(Driver.scala:176)
    at dotty.tools.dotc.Driver.main(Driver.scala:203)
    at dotty.tools.dotc.decompiler.Main.main(Main.scala)
no sig for TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),module class Test$)),module class T$)),module class given_Show_T$) because of ()
failure while taking result signature of (): Test.T.given_Show_T$: Test.T.given_Show_T$
cannot take signature of (): Test.T.given_Show_T$
java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T))) while compiling Test
Exception in thread "main" java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T)))
    at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1763)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1768)
    at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2693)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1740)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1751)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1776)
    at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:778)
    at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
    at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:604)
    at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
    at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3120)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3115)
    at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3251)
    at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3413)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3108)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3100)
    at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3251)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:583)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:615)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:613)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1066)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1057)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1080)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1112)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:792)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1382)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:915)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:910)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:377)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:382)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1471)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1486)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1391)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
    at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
    at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
    at scala.collection.immutable.List.flatMap(List.scala:293)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
    at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
    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:195)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
    at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:152)
    at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
    at dotty.tools.dotc.Driver.process(Driver.scala:195)
    at dotty.tools.dotc.Driver.process(Driver.scala:164)
    at dotty.tools.dotc.Driver.process(Driver.scala:176)
    at dotty.tools.dotc.Driver.main(Driver.scala:203)
    at dotty.tools.dotc.decompiler.Main.main(Main.scala)

All 4 comments

Can we reproduce it without the cats dependency?

@nicolasstucki I haven't had much time to look into yet this but I did try defining my own Show typeclass and couldn't reproduce.

Here's a reproducer without the cats dependency.

It seems that the issue is only triggered if the typeclass is defined in a separate artifact, so I just built a simple library:

//src/dotty-issues/i9446/shower$ cat src/main/scala/shower/Show.scala
package shower

trait Show[T] {
  def show(x: T): String
}

//src/dotty-issues/i9446/shower$ cat build.sbt
scalaVersion := "0.28.0-bin-20200925-f4528ce-NIGHTLY"
name := "shower"
organization := "io.grigg"
version := "1.0"

//src/dotty-issues/i9446/shower$ sbt publishLocal

then referred to it in the testcase:

//src/dotty-issues/i9446/repro$ cat src/main/scala/Test.scala
import shower.Show

object Test {
  class T
  object T {
    given Show[T] {
      def show(x: T) = ""
    }
  }
}

//src/dotty-issues/i9446/repro$ cat build.sbt
scalaVersion := "0.28.0-bin-20200925-f4528ce-NIGHTLY"
name := "i9446"
version := "0.1.0"
libraryDependencies += ("io.grigg" %% "shower" % "1.0")

//src/dotty-issues/i9446/repro$ sbt compile

and watched it go boom:

/src/dotty-issues/i9446/repro$ dotc -version
Dotty compiler version 0.28.0-bin-SNAPSHOT-git-f4528ce -- Copyright 2002-2020, LAMP/EPFL

/src/dotty-issues/i9446/repro$ dotc -decompile target/scala-0.28/classes/Test.tasty


Output -- click to expand

java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T)))
    at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1763)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1768)
    at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2693)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1740)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1751)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1776)
    at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:778)
    at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
    at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:604)
    at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
    at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3120)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3115)
    at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3251)
    at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3413)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3108)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3100)
    at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3251)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:583)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:615)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:613)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1066)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1057)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1080)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1112)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:792)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1382)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:915)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:910)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:377)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:382)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1471)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1486)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1391)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
    at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
    at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
    at scala.collection.immutable.List.flatMap(List.scala:293)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
    at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
    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:195)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
    at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:152)
    at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
    at dotty.tools.dotc.Driver.process(Driver.scala:195)
    at dotty.tools.dotc.Driver.process(Driver.scala:164)
    at dotty.tools.dotc.Driver.process(Driver.scala:176)
    at dotty.tools.dotc.Driver.main(Driver.scala:203)
    at dotty.tools.dotc.decompiler.Main.main(Main.scala)
no sig for TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),module class Test$)),module class T$)),module class given_Show_T$) because of ()
failure while taking result signature of (): Test.T.given_Show_T$: Test.T.given_Show_T$
cannot take signature of (): Test.T.given_Show_T$
java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T))) while compiling Test
Exception in thread "main" java.lang.AssertionError: assertion failed: module class given_Show_T$ has non-class parent: AppliedType(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),module shower),Show),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),module class Test$)),class T)))
    at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.traverse$1(SymDenotations.scala:1763)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.computeBaseData(SymDenotations.scala:1768)
    at dotty.tools.dotc.core.SymDenotations$BaseDataImpl.apply(SymDenotations.scala:2693)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseData(SymDenotations.scala:1740)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.baseClassSet(SymDenotations.scala:1751)
    at dotty.tools.dotc.core.SymDenotations$ClassDenotation.derivesFrom(SymDenotations.scala:1776)
    at dotty.tools.dotc.core.SymDenotations$SymDenotation.isValueClass(SymDenotations.scala:778)
    at dotty.tools.dotc.transform.ValueClasses$.isDerivedValueClass(ValueClasses.scala:20)
    at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$sigName(TypeErasure.scala:604)
    at dotty.tools.dotc.core.TypeErasure$.sigName(TypeErasure.scala:161)
    at dotty.tools.dotc.core.Signature$.apply(Signature.scala:169)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature(Types.scala:3120)
    at dotty.tools.dotc.core.Types$MethodicType.resultSignature$(Types.scala:3115)
    at dotty.tools.dotc.core.Types$MethodOrPoly.resultSignature(Types.scala:3251)
    at dotty.tools.dotc.core.Types$MethodType.computeSignature(Types.scala:3413)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature(Types.scala:3108)
    at dotty.tools.dotc.core.Types$SignatureCachingType.signature$(Types.scala:3100)
    at dotty.tools.dotc.core.Types$MethodOrPoly.signature(Types.scala:3251)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.signature(Denotations.scala:583)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:615)
    at dotty.tools.dotc.core.Denotations$SingleDenotation.atSignature(Denotations.scala:613)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.dotty$tools$dotc$core$tasty$TreeUnpickler$TreeReader$$_$accessibleDenot$1(TreeUnpickler.scala:1066)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.completeSelect$1(TreeUnpickler.scala:1057)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readSimpleTerm$1(TreeUnpickler.scala:1080)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1112)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1250)
    at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$2$$anonfun$2$$anonfun$1(TreeUnpickler.scala:792)
    at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1382)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:915)
    at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:910)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:377)
    at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:382)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1471)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1482)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1479)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1510)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1385)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1387)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1486)
    at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1391)
    at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1511)
    at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:123)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:92)
    at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:83)
    at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
    at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:71)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
    at scala.collection.immutable.List.flatMap(List.scala:293)
    at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
    at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:185)
    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:195)
    at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:203)
    at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
    at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:63)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:152)
    at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:10)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
    at dotty.tools.dotc.Driver.process(Driver.scala:195)
    at dotty.tools.dotc.Driver.process(Driver.scala:164)
    at dotty.tools.dotc.Driver.process(Driver.scala:176)
    at dotty.tools.dotc.Driver.main(Driver.scala:203)
    at dotty.tools.dotc.decompiler.Main.main(Main.scala)

Thanks @griggt, nice reproduction! Sorry I haven't had time to look at it again

Was this page helpful?
0 / 5 - 0 ratings