Skip to content

-Ycheck:erasure crashes when an alias of an applied type is instantiated #20184

Closed
@EugeneFlesselle

Description

@EugeneFlesselle

Compiler version

3.5.0-RC1

Minimized code

def Test =
  object Inner:
    case class Rgb()

  type Id[X] = X
  type TRgb = Id[Inner.Rgb]

  val ok = new Inner.Rgb()
  val crash = new TRgb()

(the placement within def Test is relevant)

Output for scalac -Ycheck:erasure

  exception while retyping scala.asInstanceOf[Inner] of class TypeApply # -1
  An unhandled exception was thrown in the compiler.
  Please file a crash report here:
  https://github.com/scala/scala3/issues/new/choose
  For non-enriched exceptions, compile with -Yno-enrich-error-messages.

     while compiling: tests/playground/example.scala
        during phase: Ycheck
                mode: Mode(ImplicitsEnabled)
     library version: version 2.13.12
    compiler version: version 3.5.0-RC1-bin-SNAPSHOT-nonbootstrapped-git-54d67e0
            settings: -Ycheck List(erasure) -classpath /Users/eugeneflesselle/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar:/Users/eugeneflesselle/Documents/dotty/library/../out/bootstrap/scala3-library-bootstrapped/scala-3.5.0-RC1-bin-SNAPSHOT-nonbootstrapped/scala3-library_3-3.5.0-RC1-bin-SNAPSHOT.jar -d /
*** error while checking tests/playground/example.scala after phase erasure ***
Exception in thread "main" java.lang.AssertionError: assertion failed: non member selection of method asInstanceOf in class Object from scala.type in scala.asInstanceOf
        at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
        at dotty.tools.dotc.transform.FirstTransform.checkPostCondition(FirstTransform.scala:62)
        at dotty.tools.dotc.transform.TreeChecker$.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:444)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.immutable.List.foreach(List.scala:333)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:444)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3413)
        at dotty.tools.dotc.typer.Applications.typedTypeApply(Applications.scala:1186)
        at dotty.tools.dotc.typer.Applications.typedTypeApply$(Applications.scala:367)
        at dotty.tools.dotc.typer.Typer.typedTypeApply(Typer.scala:120)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3157)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.ProtoTypes$FunProto.$anonfun$7(ProtoTypes.scala:496)
        at dotty.tools.dotc.typer.ProtoTypes$FunProto.cacheTypedArg(ProtoTypes.scala:419)
        at dotty.tools.dotc.typer.ProtoTypes$FunProto.typedArg(ProtoTypes.scala:497)
        at dotty.tools.dotc.typer.Applications$ApplyToUntyped.typedArg(Applications.scala:929)
        at dotty.tools.dotc.typer.Applications$ApplyToUntyped.typedArg(Applications.scala:929)
        at dotty.tools.dotc.typer.Applications$Application.addTyped$1(Applications.scala:621)
        at dotty.tools.dotc.typer.Applications$Application.matchArgs(Applications.scala:685)
        at dotty.tools.dotc.typer.Applications$Application.init(Applications.scala:507)
        at dotty.tools.dotc.typer.Applications$TypedApply.<init>(Applications.scala:811)
        at dotty.tools.dotc.typer.Applications$ApplyToUntyped.<init>(Applications.scala:928)
        at dotty.tools.dotc.typer.Applications.ApplyTo(Applications.scala:1159)
        at dotty.tools.dotc.typer.Applications.ApplyTo$(Applications.scala:367)
        at dotty.tools.dotc.typer.Typer.ApplyTo(Typer.scala:120)
        at dotty.tools.dotc.typer.Applications.simpleApply$1(Applications.scala:1001)
        at dotty.tools.dotc.typer.Applications.realApply$1$$anonfun$2(Applications.scala:1084)
        at dotty.tools.dotc.typer.Typer.tryEither(Typer.scala:3437)
        at dotty.tools.dotc.typer.Applications.realApply$1(Applications.scala:1095)
        at dotty.tools.dotc.typer.Applications.typedApply(Applications.scala:1133)
        at dotty.tools.dotc.typer.Applications.typedApply$(Applications.scala:367)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedApply(TreeChecker.scala:544)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3137)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedTyped(TreeChecker.scala:564)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3142)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3413)
        at dotty.tools.dotc.typer.Typer.typedValDef(Typer.scala:2564)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedValDef(TreeChecker.scala:625)
        at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:3116)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3220)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:3324)
        at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:3370)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:694)
        at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:1215)
        at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1219)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1$$anonfun$1(TreeChecker.scala:676)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:277)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:676)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:305)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:676)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3145)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.typedLabeled(Typer.scala:2012)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedLabeled$$anonfun$1(TreeChecker.scala:699)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:277)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedLabeled(TreeChecker.scala:699)
        at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:3130)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3220)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:3351)
        at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:3370)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:694)
        at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:1215)
        at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:1219)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1$$anonfun$1(TreeChecker.scala:676)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:277)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:676)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:305)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:676)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3145)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3413)
        at dotty.tools.dotc.typer.Typer.$anonfun$63(Typer.scala:2627)
        at dotty.tools.dotc.inlines.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:256)
        at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:2627)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:651)
        at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:277)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:654)
        at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:3119)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3220)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:3324)
        at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:3370)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:694)
        at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2814)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:621)
        at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$1(Typer.scala:3125)
        at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:3129)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3220)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:3324)
        at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:3370)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:694)
        at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:2947)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedPackageDef(TreeChecker.scala:720)
        at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3171)
        at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3221)
        at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:174)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:427)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3298)
        at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3302)
        at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:410)
        at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:3413)
        at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:130)
        at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:110)
        at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:380)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.immutable.List.foreach(List.scala:333)
        at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:386)
        at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:319)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
        at dotty.tools.dotc.Run.runPhases$1(Run.scala:341)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:351)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:361)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:361)
        at dotty.tools.dotc.Run.compileSources(Run.scala:262)
        at dotty.tools.dotc.Run.compile(Run.scala:247)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
        at dotty.tools.dotc.Driver.process(Driver.scala:199)
        at dotty.tools.dotc.Driver.process(Driver.scala:167)
        at dotty.tools.dotc.Driver.process(Driver.scala:179)
        at dotty.tools.dotc.Driver.main(Driver.scala:209)
        at dotty.tools.dotc.Main.main(Main.scala)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions