summaryrefslogtreecommitdiff
path: root/test/files/neg/t8869.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-10-01 08:51:36 +1000
committerJason Zaugg <jzaugg@gmail.com>2014-10-01 09:00:04 +1000
commit84d46719a9ab3caa7ff46af4630d75f8c407c3d2 (patch)
tree467b70c4c27fed537fa7b2a014cb16b520aba609 /test/files/neg/t8869.scala
parenta52db7f1639c6d48eaa64ae609385a60467fd566 (diff)
downloadscala-84d46719a9ab3caa7ff46af4630d75f8c407c3d2.tar.gz
scala-84d46719a9ab3caa7ff46af4630d75f8c407c3d2.tar.bz2
scala-84d46719a9ab3caa7ff46af4630d75f8c407c3d2.zip
SI-8869 Prevent ill-kindedness in type lambdas
When type checking an type application, the arguments are allowed to be of kinds other than *. This leniency is controlled by the `ContextMode` bit `TypeConstructorAllowed`. (More fine grained checking of matching arity a bounds of type constructors is deferred until the refchecks phase to avoid cycles during typechecking.) However, this bit is propagated to child contexts, which means that we fail to report this error in the lexical context marked here: T[({type x = Option}#x)] `-------------' This commit resets this bit to false in any child context relates to a different tree from its parent.
Diffstat (limited to 'test/files/neg/t8869.scala')
-rw-r--r--test/files/neg/t8869.scala10
1 files changed, 10 insertions, 0 deletions
diff --git a/test/files/neg/t8869.scala b/test/files/neg/t8869.scala
new file mode 100644
index 0000000000..0c7f0c9451
--- /dev/null
+++ b/test/files/neg/t8869.scala
@@ -0,0 +1,10 @@
+class TC[T[_]] {
+ def identity[A](a: T[A]): T[A] = a
+}
+object Test {
+ def value: TC[({type l1[x] = Option})#l1] = ??? // error not reported!
+
+ type l2[x] = Option // error correctly reported
+ def value1: TC[l2] = ???
+}
+