Skip to content

Failure Ychecking path depended outer after explicitOuter #10253

Closed
@nicolasstucki

Description

@nicolasstucki

Minimized code

def foo(qc: QC): Unit =
  object treeMap extends qc.reflect.TreeMap

trait QC:
  val reflect: Reflection
  trait Reflection:
    trait TreeMap:
      def transformTree: Unit = ???

Output (click arrow to expand)

 sbt:scala3> run Foo.scala -Ycheck:all
      [warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list
      [info] running (fork) dotty.tools.dotc.Main -classpath ~/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.3/scala-library-2.13.3.jar:dotty/library/../out/bootstrap/scala3-library-bootstrapped/scala-3.0.0-M2/scala3-library_3.0.0-M2-3.0.0-M2-bin-SNAPSHOT.jar Foo.scala -Ycheck:all
      checking Foo.scala after phase typer
      checking Foo.scala after phase inlinedPositions
      checking Foo.scala after phase posttyper
      checking Foo.scala after phase staging
      checking Foo.scala after phase pickler
      checking Foo.scala after phase reifyQuotes
      checking Foo.scala after phase MegaPhase{firstTransform, checkReentrant, elimPackagePrefixes, cookComments, checkStatic, betaReduce}
      checking Foo.scala after phase MegaPhase{elimRepeated, expandSAMs, protectedAccessors, extmethods, cacheAliasImplicits, byNameClosures, hoistSuperArgs, refchecks}
      checking Foo.scala after phase MegaPhase{elimOpaque, tryCatchPatterns, patternMatcher, explicitOuter, explicitSelf, stringInterpolatorOpt}
      exception while typing final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection = qc.reflect of class class dotty.tools.dotc.ast.Trees$DefDef # -1
      exception while typing final module class treeMap$() extends Object(), qc.reflect.TreeMap {
        final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection = qc.reflect
      } of class class dotty.tools.dotc.ast.Trees$TypeDef # -1
      exception while typing {
        final lazy module val treeMap: treeMap$ = new treeMap$()
        final module class treeMap$() extends Object(), qc.reflect.TreeMap {
          final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection = qc.reflect
        }
        ()
      } of class class dotty.tools.dotc.ast.Trees$Block # -1
      exception while typing def foo(qc: QC): Unit =
        {
          final lazy module val treeMap: treeMap$ = new treeMap$()
          final module class treeMap$() extends Object(), qc.reflect.TreeMap {
            final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection = qc.reflect
          }
          ()
        } of class class dotty.tools.dotc.ast.Trees$DefDef # -1
      exception while typing @scala.annotation.internal.SourceFile(
        "Foo.scala"
      ) final module class Macro$package$() extends Object() {
        private def writeReplace(): AnyRef =
          new scala.runtime.ModuleSerializationProxy(classOf[Macro$package.type])
        def foo(qc: QC): Unit =
          {
            final lazy module val treeMap: treeMap$ = new treeMap$()
            final module class treeMap$() extends Object(), qc.reflect.TreeMap {
              final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection = qc.reflect
            }
            ()
          }
      } of class class dotty.tools.dotc.ast.Trees$TypeDef # -1
      exception while typing package <empty> {
        @scala.annotation.internal.SourceFile(
          "Foo.scala"
        ) trait QC() extends Object {
          val reflect: QC.this.Reflection
          trait Reflection() extends Object {
            trait TreeMap() extends Object {
              def transformTree: Unit = ???
              final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection
            }
            final def QC$Reflection$$$outer: QC
          }
        }
        final lazy module val Macro$package: Macro$package$ = new Macro$package$()
        @scala.annotation.internal.SourceFile(
          "Foo.scala"
        ) final module class Macro$package$() extends Object() {
          private def writeReplace(): AnyRef =
            new scala.runtime.ModuleSerializationProxy(classOf[Macro$package.type])
          def foo(qc: QC): Unit =
            {
              final lazy module val treeMap: treeMap$ = new treeMap$()
              final module class treeMap$() extends Object(), qc.reflect.TreeMap {
                final def QC$Reflection$TreeMap$$$outer: QC.this.Reflection =
                  qc.reflect
              }
              ()
            }
        }
      } of class class dotty.tools.dotc.ast.Trees$PackageDef # -1
      *** error while checking Foo.scala after phase stringInterpolatorOpt ***
      exception occurred while compiling Foo.scala
      java.lang.AssertionError: assertion failed: Found:    (qc.reflect : qc.Reflection)
      Required: QC.this.Reflection
      found: ??
      expected: trait Reflection in trait QC with trait Reflection, flags = <trait> <noinits> <touched>, underlying = QC.this.Reflection, Object {...}
      tree = qc.reflect while compiling Foo.scala
      Exception in thread "main" java.lang.AssertionError: assertion failed: Found:    (qc.reflect : qc.Reflection)
      Required: QC.this.Reflection
      found: ??
      expected: trait Reflection in trait QC with trait Reflection, flags = <trait> <noinits> <touched>, underlying = QC.this.Reflection, Object {...}
      tree = qc.reflect
              at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
              at dotty.tools.dotc.transform.TreeChecker$Checker.adapt(TreeChecker.scala:560)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2710)
              at dotty.tools.dotc.typer.Typer.$anonfun$31(Typer.scala:1976)
              at dotty.tools.dotc.typer.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:217)
              at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1976)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$2$$anonfun$1(TreeChecker.scala:477)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:480)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:481)
              at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2438)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2521)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2617)
              at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2666)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521)
              at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2121)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:453)
              at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$2(Typer.scala:2449)
              at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2453)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2521)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2617)
              at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2666)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521)
              at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:890)
              at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:894)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$2$$anonfun$1(TreeChecker.scala:503)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:503)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:227)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:503)
              at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2469)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2522)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2710)
              at dotty.tools.dotc.typer.Typer.$anonfun$31(Typer.scala:1976)
              at dotty.tools.dotc.typer.PrepareInlineable$.dropInlineIfError(PrepareInlineable.scala:217)
              at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1976)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$2$$anonfun$1(TreeChecker.scala:477)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:480)
              at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:199)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:481)
              at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2438)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2521)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2617)
              at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2666)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521)
              at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:2121)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:453)
              at dotty.tools.dotc.typer.Typer.typedTypeOrClassDef$2(Typer.scala:2449)
              at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2453)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2521)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2617)
              at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2666)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:521)
              at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:2246)
              at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2493)
              at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2522)
              at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:122)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:333)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2591)
              at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2595)
              at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:317)
              at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2710)
              at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:151)
              at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:120)
              at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
              at scala.collection.immutable.List.map(List.scala:246)
              at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
              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:67)
              at dotty.tools.dotc.Run.compileUnits(Run.scala:210)
              at dotty.tools.dotc.Run.compileSources(Run.scala:147)
              at dotty.tools.dotc.Run.compile(Run.scala:129)
              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.Main.main(Main.scala)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions