diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-11-22 16:28:51 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-11-23 09:36:16 +0100 |
commit | 518635385ac1ba14aa230de3e431793331300546 (patch) | |
tree | 0f59b8af02591bddf711ecc485623432313510f0 /test/files/neg/variances.check | |
parent | c243435f113615b2f7407fbd683c93ec16c73749 (diff) | |
download | scala-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.check | 5 |
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 |