diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-11-25 14:43:17 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-11-25 14:43:17 -0800 |
commit | 84c096762b0cd24184bea1567a033f07909f5cff (patch) | |
tree | 2575ef38a22ea129814f5514edce4708aa8ad2ad /src/reflect | |
parent | d19954eb94afb27ca90b3bbcfb9eecec5e85428a (diff) | |
parent | 518635385ac1ba14aa230de3e431793331300546 (diff) | |
download | scala-84c096762b0cd24184bea1567a033f07909f5cff.tar.gz scala-84c096762b0cd24184bea1567a033f07909f5cff.tar.bz2 scala-84c096762b0cd24184bea1567a033f07909f5cff.zip |
Merge pull request #3178 from retronym/ticket/7872
SI-7872 Plug a variance exploit in refinement types
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/Variances.scala | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/Variances.scala b/src/reflect/scala/reflect/internal/Variances.scala index 5280467055..cd09e83cd3 100644 --- a/src/reflect/scala/reflect/internal/Variances.scala +++ b/src/reflect/scala/reflect/internal/Variances.scala @@ -162,6 +162,16 @@ trait Variances { traverseTreess(vparamss) case Template(_, _, _) => super.traverse(tree) + case CompoundTypeTree(templ) => + super.traverse(tree) + + // SI-7872 These two cases make sure we don't miss variance exploits + // in originals, e.g. in `foo[({type l[+a] = List[a]})#l]` + case tt @ TypeTree() if tt.original != null => + super.traverse(tt.original) + case tt : TypTree => + super.traverse(tt) + case _ => } } |