summaryrefslogtreecommitdiff
path: root/test/files/neg/variances.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/variances.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/variances.check')
-rw-r--r--test/files/neg/variances.check5
1 files changed, 4 insertions, 1 deletions
diff --git a/test/files/neg/variances.check b/test/files/neg/variances.check
index 7d965e94dc..cb1a60a632 100644
--- a/test/files/neg/variances.check
+++ b/test/files/neg/variances.check
@@ -1,6 +1,9 @@
variances.scala:4: error: covariant type A occurs in contravariant position in type test.Vector[A] of value x
def append(x: Vector[A]): Vector[A]
^
+variances.scala:75: error: covariant type A occurs in contravariant position in type => A => A of value m
+ val m: A => A
+ ^
variances.scala:18: error: covariant type A occurs in contravariant position in type A of value a
private def setA3(a : A) = this.a = a
^
@@ -19,4 +22,4 @@ variances.scala:89: error: covariant type T occurs in invariant position in type
variances.scala:90: error: covariant type T occurs in contravariant position in type => test.TestAlias.B[C.this.A] of method foo
def foo: B[A]
^
-7 errors found
+8 errors found