Closed
Description
Minimized code
// compile with -Ycheck-init
object Outer {
def foo = {
trait Mixin
class E extends Mixin
object SomeObject {
val A = E()
}
}
}
Output (click arrow to expand)
exception occurred while compiling sandbox/lazy/mixinobject.scala
java.lang.Exception: unexpected type: <noprefix> while compiling sandbox/lazy/mixinobject.scala
Exception in thread "main" java.lang.Exception: unexpected type: <noprefix>
at dotty.tools.dotc.transform.init.Summarization$.op$proxy2$1(Summarization.scala:243)
at dotty.tools.dotc.transform.init.Summarization$.analyze(Summarization.scala:248)
at dotty.tools.dotc.transform.init.Summarization$.$anonfun$9(Summarization.scala:312)
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.transform.init.Summarization$.op$proxy4$1(Summarization.scala:315)
at dotty.tools.dotc.transform.init.Summarization$.analyzeConstructor(Summarization.scala:324)
at dotty.tools.dotc.transform.init.Summary$ClassSummary.op$proxy1$1(Summary.scala:38)
at dotty.tools.dotc.transform.init.Summary$ClassSummary.summaryOf(Summary.scala:46)
at dotty.tools.dotc.transform.init.Summary$ClassSummary.effectsOf(Summary.scala:48)
at dotty.tools.dotc.transform.init.Potentials$Warm.op$proxy3$1(Potentials.scala:77)
at dotty.tools.dotc.transform.init.Potentials$Warm.effectsOf(Potentials.scala:79)
at dotty.tools.dotc.transform.init.Checking$.op$proxy1$1(Checking.scala:241)
at dotty.tools.dotc.transform.init.Checking$.check(Checking.scala:262)
at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn$$anonfun$3$$anonfun$2(Checking.scala:146)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.Set$Set1.foreach(Set.scala:168)
at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn$$anonfun$1(Checking.scala:147)
at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.transform.init.Util$.traceOp(Util.scala:18)
at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn(Checking.scala:148)
at dotty.tools.dotc.transform.init.Checking$.checkClassBodyStat$1$$anonfun$1(Checking.scala:71)
at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at dotty.tools.dotc.transform.init.Util$.traceOp(Util.scala:18)
at dotty.tools.dotc.transform.init.Checking$.checkClassBodyStat$2(Checking.scala:80)
at dotty.tools.dotc.transform.init.Checking$.checkClassBody$$anonfun$3(Checking.scala:140)
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:333)
at dotty.tools.dotc.transform.init.Checking$.checkClassBody(Checking.scala:140)
at dotty.tools.dotc.transform.init.Checker.transformTypeDef(Checker.scala:58)
at dotty.tools.dotc.transform.MegaPhase.goTypeDef(MegaPhase.scala:988)
at dotty.tools.dotc.transform.MegaPhase.goTypeDef(MegaPhase.scala:989)
at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:298)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
at dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:248)
at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:251)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:361)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:255)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:381)
at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:384)
at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:447)
at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:459)
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:180)
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:190)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:198)
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:205)
at dotty.tools.dotc.Run.compileSources(Run.scala:142)
at dotty.tools.dotc.Run.compile(Run.scala:124)
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)
When A
is defined in an object and Mixin
is a parent to E
then the reference to Mixin
has no prefix, it would seem that Mixin
should have a prefix because there is no crash when it is changed to an abstract class