summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala5
-rw-r--r--test/files/neg/bug798.check6
-rw-r--r--test/files/neg/bug798.scala3
3 files changed, 8 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 142f737283..661238a387 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -335,7 +335,10 @@ trait Namers requires Analyzer {
if (settings.debug.value) log("defining " + sym);
val tp = typeSig(tree)
sym.setInfo(tp)
- //if (sym.isAliasType || sym.isAbstractType) typer.checkNonCyclic(sym)
+ if ((sym.isAliasType || sym.isAbstractType) && !(sym hasFlag PARAM) &&
+ !typer.checkNonCyclic(tree.pos, tp))
+ sym.setInfo(ErrorType) // this early test is there to avoid infinite baseTypes when
+ // adding setters and getters --> bug798
if (settings.debug.value) log("defined " + sym);
validate(sym)
}
diff --git a/test/files/neg/bug798.check b/test/files/neg/bug798.check
index 6fd80bcba5..82286a7dfe 100644
--- a/test/files/neg/bug798.check
+++ b/test/files/neg/bug798.check
@@ -1,4 +1,4 @@
-bug798.scala:5 error: cyclic aliasing or subtyping involving type Bracks
- type Bracks <: Bracks
- ^
+bug798.scala:2 error: cyclic aliasing or subtyping involving type Bracks
+trait Test[Bracks <: Bracks] {
+ ^
one error found
diff --git a/test/files/neg/bug798.scala b/test/files/neg/bug798.scala
index 9d95ae2ddb..a2bf66d19b 100644
--- a/test/files/neg/bug798.scala
+++ b/test/files/neg/bug798.scala
@@ -1,8 +1,7 @@
package test;
-trait Test {
+trait Test[Bracks <: Bracks] {
def f(list : Any) = null;
class C[T]
- type Bracks <: Bracks
val bracks : Bracks;
val singletons = f(bracks);