File tree Expand file tree Collapse file tree 2 files changed +22
-2
lines changed
compiler/src/dotty/tools/dotc/typer Expand file tree Collapse file tree 2 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -587,8 +587,13 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
587587 lhsCore.tpe match {
588588 case ref : TermRef =>
589589 val lhsVal = lhsCore.denot.suchThat(! _.is(Method ))
590- if (canAssign(lhsVal.symbol))
591- assignType(cpy.Assign (tree)(lhs1, typed(tree.rhs, lhsVal.info)))
590+ if (canAssign(lhsVal.symbol)) {
591+ // lhsBounds: (T .. Any) as seen from lhs prefix, where T is the type of lhsVal.symbol
592+ // This ensures we do the as-seen-from on T with variance -1. Test case neg/i2928.scala
593+ val lhsBounds =
594+ TypeBounds .lower(lhsVal.symbol.info).asSeenFrom(ref.prefix, lhsVal.symbol.owner)
595+ assignType(cpy.Assign (tree)(lhs1, typed(tree.rhs, lhsBounds.loBound)))
596+ }
592597 else {
593598 val pre = ref.prefix
594599 val setterName = ref.name.setterName
Original file line number Diff line number Diff line change 1+ class Box [T22 ](var v : T22 )
2+
3+ object Test {
4+ def main (args : Array [String ]): Unit = {
5+ val s = new Box [String ](" " )
6+ val i = new Box [Int ](3 )
7+
8+ var box : Box [_] = s
9+ val sv = box.v
10+ box = i
11+ box.v = sv // error
12+
13+ val c : Int = i.v
14+ }
15+ }
You can’t perform that action at this time.
0 commit comments