diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-18 10:42:42 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-18 10:42:42 -0800 |
commit | 3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd (patch) | |
tree | ebd14c790ab05e41a60401c48614133a78ed1a21 | |
parent | ee2fcdf3615282afd25352484679ada72003ef5c (diff) | |
parent | f6c11c05ad6e87a3b697a6093ac59a37a8ac0870 (diff) | |
download | scala-3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd.tar.gz scala-3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd.tar.bz2 scala-3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd.zip |
Merge pull request #3537 from Blaisorblade/issue/6566
SI-6566, unsoundness with alias variance: document fix
-rw-r--r-- | src/reflect/scala/reflect/internal/Variances.scala | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/Variances.scala b/src/reflect/scala/reflect/internal/Variances.scala index a7cac5254c..659bfb5d01 100644 --- a/src/reflect/scala/reflect/internal/Variances.scala +++ b/src/reflect/scala/reflect/internal/Variances.scala @@ -65,10 +65,11 @@ trait Variances { * The search proceeds from `base` to the owner of `tvar`. * Initially the state is covariant, but it might change along the search. * - * An alias which does not override anything is treated as Bivariant; + * A local alias type is treated as Bivariant; * this is OK because we always expand aliases for variance checking. - * However if it does override a type in a base class, we must assume Invariant - * because there may be references to the type parameter that are not checked. + * However, for an alias which might be externally visible, we must assume Invariant, + * because there may be references to the type parameter that are not checked, + * leading to unsoundness (see SI-6566). */ def relativeVariance(tvar: Symbol): Variance = { def nextVariance(sym: Symbol, v: Variance): Variance = ( |