scala/scala — pull request #3525 by adriaanm (2014-02-13 20:33:59+00:00)
Title: SI-8177 specializeSym must use memberInfo on high side

When determining whether member `symLo` of `tpLo`
has a stronger type than member `symHi` of `tpHi`,
should we use memberType or memberInfo?

Well, memberType transforms (using `asSeenFrom`) `sym.tpe`,
whereas memberInfo performs the same transform on `sym.info`.
For term symbols, this ends up being the same thing (`sym.tpe == sym.info`).
For type symbols, however, the `.info` of an abstract type member
is defined by its bounds, whereas its `.tpe` is a `TypeRef` to that type symbol,
so that `sym.tpe <:< sym.info`, but not the other way around.

Thus, for the strongest (correct) result,
we should use `memberType` on the low side.

On the high side, we should use the result appropriate
for the right side of the `<:<` above (`memberInfo`).