Skip to content

ClassCastException in compiler with by-name implicit params #2637

@alexnixon

Description

@alexnixon
object Hello {
  def main(args: Array[String]): Unit = {
    sealed trait Wat[T]

    implicit def intWat: Wat[Int] = ???
    implicit def listWat[T](implicit tWat: Wat[T]): Wat[List[T]] = new Wat{}

    def stuff[T](implicit implicitWat: => Wat[List[T]]): Unit = ???
  }
}

Crashes the compiler (0.1.2-RC1) with:

java.lang.ClassCastException: dotty.tools.dotc.core.Types$HKTypeLambda cannot be cast to dotty.tools.dotc.core.Types$PolyType
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:189)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$4(Trees.scala:1185)
        at scala.collection.immutable.List.loop$1(List.scala:176)
        at scala.collection.immutable.List.mapConserve(List.scala:200)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1185)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:59)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform$$anonfun$13(PostTyper.scala:220)
        at dotty.tools.dotc.transform.SuperAccessors.wrapTemplate(SuperAccessors.scala:413)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:220)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1168)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:55)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:245)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$4(Trees.scala:1185)
        at scala.collection.immutable.List.loop$1(List.scala:176)
        at scala.collection.immutable.List.mapConserve(List.scala:200)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1185)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1183)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1118)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:63)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:281)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1166)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:55)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform$$anonfun$12(PostTyper.scala:225)
        at dotty.tools.dotc.transform.SuperAccessors.wrapDefDef(SuperAccessors.scala:428)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:225)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform$$anonfun$4(Trees.scala:1185)
        at scala.collection.immutable.List.loop$1(List.scala:176)
        at scala.collection.immutable.List.mapConserve(List.scala:200)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1185)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transformStats(Trees.scala:1183)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1118)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:63)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:281)
        at dotty.tools.dotc.ast.Trees$Instance$TreeMap.transform(Trees.scala:1166)
        at dotty.tools.dotc.transform.MacroTransform$Transformer.transform(MacroTransform.scala:55)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform$$anonfun$12(PostTyper.scala:225)
        at dotty.tools.dotc.transform.SuperAccessors.wrapDefDef(SuperAccessors.scala:428)
        at dotty.tools.dotc.transform.PostTyper$PostTyperTransformer.transform(PostTyper.scala:225)
     [...]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions