summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Typers.scala10
-rw-r--r--test/files/neg/bug3913.check4
-rw-r--r--test/files/neg/bug3913.scala8
3 files changed, 17 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
index 647e5e422d..3f4ff066d2 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala
@@ -1632,11 +1632,11 @@ trait Typers { self: Analyzer =>
// an object cannot be allowed to pass a reference to itself to a superconstructor
// because of initialization issues; bug #473
- for {
- arg <- superArgs
- val sym = arg.symbol
- if sym != null && sym.isModule && (sym.info.baseClasses contains clazz)
- } error(rhs.pos, "super constructor cannot be passed a self reference unless parameter is declared by-name")
+ for (arg <- superArgs ; tree <- arg) {
+ val sym = tree.symbol
+ if (sym != null && sym.isModule && (sym.info.baseClasses contains clazz))
+ error(rhs.pos, "super constructor cannot be passed a self reference unless parameter is declared by-name")
+ }
if (superConstr.symbol.isPrimaryConstructor) {
val superClazz = superConstr.symbol.owner
diff --git a/test/files/neg/bug3913.check b/test/files/neg/bug3913.check
new file mode 100644
index 0000000000..0ab8708bc8
--- /dev/null
+++ b/test/files/neg/bug3913.check
@@ -0,0 +1,4 @@
+bug3913.scala:2: error: super constructor cannot be passed a self reference unless parameter is declared by-name
+object LimboStage extends Stage( Set( LimboStage ))
+ ^
+one error found
diff --git a/test/files/neg/bug3913.scala b/test/files/neg/bug3913.scala
new file mode 100644
index 0000000000..e0917ff3e3
--- /dev/null
+++ b/test/files/neg/bug3913.scala
@@ -0,0 +1,8 @@
+class Stage( val transits: Set[ Stage ])
+object LimboStage extends Stage( Set( LimboStage ))
+
+object Test {
+ def main( args: Array[ String ]) {
+ val x = LimboStage
+ }
+}