summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/bug1210.check7
-rwxr-xr-xtest/files/neg/bug1210.scala28
-rwxr-xr-xtest/files/pos/bug1210a.scala9
3 files changed, 44 insertions, 0 deletions
diff --git a/test/files/neg/bug1210.check b/test/files/neg/bug1210.check
new file mode 100644
index 0000000000..4db920556f
--- /dev/null
+++ b/test/files/neg/bug1210.check
@@ -0,0 +1,7 @@
+bug1210.scala:13: error: illegal cyclic reference involving type Settings
+ val v: List[selfType] = f[selfType]((x: selfType) => x.v)
+ ^
+bug1210.scala:24: error: illegal cyclic reference involving type Settings
+ f[selfType](_.g)
+ ^
+two errors found
diff --git a/test/files/neg/bug1210.scala b/test/files/neg/bug1210.scala
new file mode 100755
index 0000000000..eb163a956e
--- /dev/null
+++ b/test/files/neg/bug1210.scala
@@ -0,0 +1,28 @@
+object Test
+{
+ def f[T](recurse: T => List[T]): List[T] =
+ {
+ Nil
+ }
+
+ abstract class M
+ { self =>
+ type Settings
+ type selfType = M {type Settings = self.Settings}
+
+ val v: List[selfType] = f[selfType]((x: selfType) => x.v)
+ }
+
+ abstract class M2
+ { self =>
+ type Settings
+ type selfType = M2 {type Settings = self.Settings}
+
+ def g: List[selfType] = Nil
+
+ {
+ f[selfType](_.g)
+ }
+ }
+}
+
diff --git a/test/files/pos/bug1210a.scala b/test/files/pos/bug1210a.scala
new file mode 100755
index 0000000000..a349a26753
--- /dev/null
+++ b/test/files/pos/bug1210a.scala
@@ -0,0 +1,9 @@
+object Test {
+ def id[T](f: T => T): T = error("bla")
+
+ abstract class M[Settings] {
+ type selfType = M[Settings]
+
+ val v: selfType = id[M.this.selfType](x => x.v)
+ }
+}