diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-10-01 08:51:36 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-10-01 09:00:04 +1000 |
commit | 84d46719a9ab3caa7ff46af4630d75f8c407c3d2 (patch) | |
tree | 467b70c4c27fed537fa7b2a014cb16b520aba609 /test/files/neg/t8869.check | |
parent | a52db7f1639c6d48eaa64ae609385a60467fd566 (diff) | |
download | scala-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.check')
-rw-r--r-- | test/files/neg/t8869.check | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/test/files/neg/t8869.check b/test/files/neg/t8869.check new file mode 100644 index 0000000000..40b8570f9f --- /dev/null +++ b/test/files/neg/t8869.check @@ -0,0 +1,7 @@ +t8869.scala:5: error: class Option takes type parameters + def value: TC[({type l1[x] = Option})#l1] = ??? // error not reported! + ^ +t8869.scala:7: error: class Option takes type parameters + type l2[x] = Option // error correctly reported + ^ +two errors found |