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/t7872.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/t7872.check')
-rw-r--r-- | test/files/neg/t7872.check | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/test/files/neg/t7872.check b/test/files/neg/t7872.check new file mode 100644 index 0000000000..57d9772abc --- /dev/null +++ b/test/files/neg/t7872.check @@ -0,0 +1,10 @@ +t7872.scala:6: error: contravariant type a occurs in covariant position in type [-a]Cov[a] of type l + type x = {type l[-a] = Cov[a]} + ^ +t7872.scala:8: error: covariant type a occurs in contravariant position in type [+a]Inv[a] of type l + foo[({type l[+a] = Inv[a]})#l] + ^ +t7872.scala:5: error: contravariant type a occurs in covariant position in type [-a]Cov[a] of type l + type l[-a] = Cov[a] + ^ +three errors found |