summaryrefslogtreecommitdiff
path: root/test/files/neg/t7872b.check
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-11-22 16:28:51 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-11-23 09:36:16 +0100
commit518635385ac1ba14aa230de3e431793331300546 (patch)
tree0f59b8af02591bddf711ecc485623432313510f0 /test/files/neg/t7872b.check
parentc243435f113615b2f7407fbd683c93ec16c73749 (diff)
downloadscala-518635385ac1ba14aa230de3e431793331300546.tar.gz
scala-518635385ac1ba14aa230de3e431793331300546.tar.bz2
scala-518635385ac1ba14aa230de3e431793331300546.zip
SI-7872 Plug a variance exploit in refinement types
Refinement types are collapsed to a TypeTree with an original during type checking; this was enough to evade variance validation in refchecks. This commit: - validates the original of `TypeTree`s in refchecks - changes VarianceValidator to recurse into: - the originals of `TypeTree`s - `TypTree` (to cover, e.g. `CompoundTypeTree` / `SelectFromTypeTree`) It also finds an unreported variance violation in an existing test case, variances.scala. This looks to be legitimate.
Diffstat (limited to 'test/files/neg/t7872b.check')
-rw-r--r--test/files/neg/t7872b.check7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/files/neg/t7872b.check b/test/files/neg/t7872b.check
new file mode 100644
index 0000000000..0dc4e76301
--- /dev/null
+++ b/test/files/neg/t7872b.check
@@ -0,0 +1,7 @@
+t7872b.scala:8: error: contravariant type a occurs in covariant position in type [-a]List[a] of type l
+ def oops1 = down[({type l[-a] = List[a]})#l](List('whatever: Object)).head + "oops"
+ ^
+t7872b.scala:19: error: covariant type a occurs in contravariant position in type [+a]coinv.Stringer[a] of type l
+ def oops2 = up[({type l[+a] = Stringer[a]})#l]("printed: " + _)
+ ^
+two errors found