Skip to content

Overriding package object class crashes with Ycheck:all #7736

Closed
@sir-wabbit

Description

@sir-wabbit

minimized code

package object A
class A
Stack trace
Exception in thread "main" java.lang.AssertionError: assertion failed: class defined twice module class A 2509 2513
	at dotty.DottyPredef$.assertFail(DottyPredef.scala:17)
	at dotty.tools.dotc.transform.TreeChecker.testDuplicate(TreeChecker.scala:54)
	at dotty.tools.dotc.transform.TreeChecker.transformSym(TreeChecker.scala:77)
	at dotty.tools.dotc.core.DenotTransformers$SymTransformer.transform(DenotTransformers.scala:70)
	at dotty.tools.dotc.transform.TreeChecker.transform(TreeChecker.scala:38)
	at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:945)
	at dotty.tools.dotc.core.Symbols$Symbol.recomputeDenot(Symbols.scala:486)
	at dotty.tools.dotc.core.Symbols$Symbol.computeDenot(Symbols.scala:481)
	at dotty.tools.dotc.core.Symbols$Symbol.denot(Symbols.scala:475)
	at dotty.tools.dotc.core.Symbols$.toDenot(Symbols.scala:847)
	at dotty.tools.dotc.core.SymDenotations$$anon$2.hasNext(SymDenotations.scala:1031)
	at scala.collection.IterableOnceOps.exists(IterableOnce.scala:581)
	at scala.collection.IterableOnceOps.exists$(IterableOnce.scala:578)
	at dotty.tools.dotc.core.SymDenotations$$anon$2.exists(SymDenotations.scala:1029)
	at dotty.tools.dotc.core.TypeOps.inInlineMethod(TypeOps.scala:458)
	at dotty.tools.dotc.core.Contexts$Context.inInlineMethod(Contexts.scala:75)
	at dotty.tools.dotc.transform.ReifyQuotes.checkPostCondition(ReifyQuotes.scala:79)
	at dotty.tools.dotc.transform.TreeChecker.dotty$tools$dotc$transform$TreeChecker$Checker$$_$typedUnadapted$$anonfun$1(TreeChecker.scala:318)
	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:305)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:318)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2290)
	at dotty.tools.dotc.typer.ReTyper.typedFunPart(ReTyper.scala:72)
	at dotty.tools.dotc.typer.Applications.realApply$1(Applications.scala:841)
	at dotty.tools.dotc.typer.Applications.typedApply(Applications.scala:969)
	at dotty.tools.dotc.typer.Typer.typedApply(Typer.scala:82)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2099)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2157)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2254)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2276)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:475)
	at dotty.tools.dotc.typer.Typer.typedBlockStats(Typer.scala:761)
	at dotty.tools.dotc.typer.Typer.typedBlock(Typer.scala:765)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$2$$anonfun$1(TreeChecker.scala:457)
	at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:168)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock$$anonfun$1(TreeChecker.scala:457)
	at dotty.tools.dotc.transform.TreeChecker$Checker.withBlock(TreeChecker.scala:196)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedBlock(TreeChecker.scala:457)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2107)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2157)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2290)
	at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1640)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$2$$anonfun$1(TreeChecker.scala:431)
	at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:168)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef$$anonfun$1(TreeChecker.scala:434)
	at dotty.tools.dotc.transform.TreeChecker$Checker.withDefinedSyms(TreeChecker.scala:168)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedDefDef(TreeChecker.scala:435)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2086)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2156)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1760)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedClassDef(TreeChecker.scala:415)
	at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:2089)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2156)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2232)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2276)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:475)
	at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1890)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2130)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2157)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:2254)
	at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:2276)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedStats(TreeChecker.scala:475)
	at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1890)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:2130)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:2157)
	at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:123)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typedUnadapted(TreeChecker.scala:301)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2193)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:2205)
	at dotty.tools.dotc.transform.TreeChecker$Checker.typed(TreeChecker.scala:286)
	at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:2290)
	at dotty.tools.dotc.transform.TreeChecker.check(TreeChecker.scala:121)
	at dotty.tools.dotc.transform.TreeChecker.run(TreeChecker.scala:94)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:315)
	at scala.collection.immutable.List.map(List.scala:219)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:316)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:161)
	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:171)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:179)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:65)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:186)
	at dotty.tools.dotc.Run.compileSources(Run.scala:123)
	at dotty.tools.dotc.Run.compile(Run.scala:106)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:36)
	at dotty.tools.dotc.Driver.process(Driver.scala:189)
	at dotty.tools.dotc.Driver.process(Driver.scala:158)
	at dotty.tools.dotc.Driver.process(Driver.scala:170)
	at dotty.tools.dotc.Driver.main(Driver.scala:197)
	at dotty.tools.dotc.Main.main(Main.scala)
Error message
sbt:dotty> dotc testing/Test.scala -Ycheck:all
[warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list
[info] Running (fork) dotty.tools.dotc.Main -classpath /Users/akonovalov/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.13.1.jar:/Users/akonovalov/Documents/projects/dotty-fork/library/../out/bootstrap/dotty-library-bootstrapped/scala-0.21/dotty-library_0.21-0.21.0-bin-SNAPSHOT.jar testing/Test.scala -Ycheck:all
checking testing/Test.scala after phase frontend
checking testing/Test.scala after phase inlinedPositions
checking testing/Test.scala after phase staging
checking testing/Test.scala after phase posttyper
checking testing/Test.scala after phase pickler
checking testing/Test.scala after phase reifyQuotes
checking testing/Test.scala after phase MegaPhase{firstTransform, checkReentrant, elimPackagePrefixes, cookComments, completeJavaEnums}
checking testing/Test.scala after phase MegaPhase{checkStatic, elimRepeated, expandSAMs, protectedAccessors, extmethods, cacheAliasImplicits, shortcutImplicits, byNameClosures, hoistSuperArgs, classOf, refchecks}
checking testing/Test.scala after phase MegaPhase{elimOpaque, tryCatchPatterns, patternMatcher, explicitOuter, explicitSelf, stringInterpolatorOpt, crossCast}
checking testing/Test.scala after phase MegaPhase{pruneErasedDefs, vcInlineMethods, seqLiterals, intercepted, getters, elimByName, collectNullableFields, elimOuterSelect, augmentScala2Traits, resolveSuper, functionXXLForwarders, genericTuples, arrayConstructors}
checking testing/Test.scala after phase erasure
checking testing/Test.scala after phase MegaPhase{elimErasedValueType, vcElideAllocations, arrayApply, elimPolyFunction, tailrec, mixin, lazyVals, memoize, nonLocalReturns, capturedVars}
checking testing/Test.scala after phase MegaPhase{constructors, functionalInterfaces, getClass, liftTry}
checking testing/Test.scala after phase MegaPhase{linkScala2Impls, lambdaLift, elimStaticThis}
checking testing/Test.scala after phase MegaPhase{flatten, renameLifted, transformWildcards, moveStatic, expandPrivate, restoreScopes, selectStatic, collectSuperCalls}
checking testing/Test.scala after phase genSJSIR
exception while typing super() of class class dotty.tools.dotc.ast.Trees$Apply # 1555
exception while typing {
  super()
  ()
} of class class dotty.tools.dotc.ast.Trees$Block # 1577
exception while typing def <init>(): Unit =
  {
    super()
    ()
  } of class class dotty.tools.dotc.ast.Trees$DefDef # 1578
exception while typing [cannot display due to assertion failed: class defined twice module class A 2509 2513, raw string = TypeDef(package$,Template(DefDef(<init>,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Unit)],Block(List(Apply(Select(Super(This(Ident(package$)),Ident()),<init>),List())),Literal(Constant(())))),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)], TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class io)),trait Serializable)]),ValDef(_,EmptyTree,EmptyTree),List(DefDef(writeReplace,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)],Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class ModuleSerializationProxy)]),<init>),List(Literal(Constant(TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$)))))))))] of class class dotty.tools.dotc.ast.Trees$TypeDef # 1613
exception while typing [cannot display due to assertion failed: class defined twice module class A 2509 2513, raw string = PackageDef(Ident(A),List(TypeDef(package$,Template(DefDef(<init>,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Unit)],Block(List(Apply(Select(Super(This(Ident(package$)),Ident()),<init>),List())),Literal(Constant(())))),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)], TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class io)),trait Serializable)]),ValDef(_,EmptyTree,EmptyTree),List(DefDef(writeReplace,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)],Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class ModuleSerializationProxy)]),<init>),List(Literal(Constant(TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$))))))))), ValDef(package,TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$)],Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$)]),<init>),List()))))] of class class dotty.tools.dotc.ast.Trees$PackageDef # 1614
exception while typing [cannot display due to assertion failed: class defined twice module class A 2509 2513, raw string = PackageDef(Ident(<empty>),List(TypeDef(A,Template(DefDef(<init>,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Unit)],Block(List(Apply(Select(Super(This(Ident(A)),Ident()),<init>),List())),Literal(Constant(())))),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)]),ValDef(_,EmptyTree,EmptyTree),List())), PackageDef(Ident(A),List(TypeDef(package$,Template(DefDef(<init>,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Unit)],Block(List(Apply(Select(Super(This(Ident(package$)),Ident()),<init>),List())),Literal(Constant(())))),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)], TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class io)),trait Serializable)]),ValDef(_,EmptyTree,EmptyTree),List(DefDef(writeReplace,List(),List(List()),TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class lang)),class Object)],Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class runtime)),class ModuleSerializationProxy)]),<init>),List(Literal(Constant(TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$))))))))), ValDef(package,TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$)],Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class A)),module class package$)]),<init>),List()))))))] of class class dotty.tools.dotc.ast.Trees$PackageDef # 1615
*** error while checking testing/Test.scala after phase genSJSIR ***
exception occurred while compiling testing/Test.scala

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions