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 {
783
783
else if (called.is(Trait ) && ! caller.mixins.contains(called))
784
784
ctx.error(i """ $called is already implemented by super ${caller.superClass},
785
785
|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
+ }
786
799
}
787
800
788
801
/** 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