summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-02-18 10:42:42 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-02-18 10:42:42 -0800
commit3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd (patch)
treeebd14c790ab05e41a60401c48614133a78ed1a21 /src
parentee2fcdf3615282afd25352484679ada72003ef5c (diff)
parentf6c11c05ad6e87a3b697a6093ac59a37a8ac0870 (diff)
downloadscala-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
Diffstat (limited to 'src')
-rw-r--r--src/reflect/scala/reflect/internal/Variances.scala7
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 = (