File tree Expand file tree Collapse file tree 2 files changed +24
-0
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -783,6 +783,19 @@ trait Checking {
783783 else if (called.is(Trait ) && ! caller.mixins.contains(called))
784784 ctx.error(i """ $called is already implemented by super ${caller.superClass},
785785 |its constructor cannot be called again """ , call.sourcePos)
786+
787+ if (caller.is(Module )) {
788+ val objRef = caller.sourceModule.termRef
789+ val traverser = new TreeTraverser {
790+ def traverse (tree : Tree )(implicit ctx : Context ) = tree match {
791+ case tree : RefTree if tree.isTerm && tree.tpe <:< objRef =>
792+ ctx.error(" super constructor cannot be passed a self reference" , tree.sourcePos)
793+ case _ =>
794+ traverseChildren(tree)
795+ }
796+ }
797+ traverser.traverse(call)
798+ }
786799 }
787800
788801 /** Check that `tpt` does not define a higher-kinded type */
Original file line number Diff line number Diff line change 1+ class A (val a : A )(val b : a.T ) {
2+ type T
3+ }
4+
5+ object a0 extends A (a0)(0 ) { // error
6+ type T = Int
7+ }
8+
9+ object Test extends App {
10+ new A (a0)(1 )
11+ }
You can’t perform that action at this time.
0 commit comments