Commits

Doug Gregor committed 3cb58e833a1
Restrict non-final class protocol conformance when Self is part of the requirement signature. When a non-final class satisfies a method requirement that returns Self, it must do so with a method that also returns (dynamic) Self. This ensures conformance will be inheritable, closing off an awful type-safety hole <rdar://problem/16880016>. Other non-contravariant uses of Self in the signatures of requirements cause the protocol to be unusable by non-final classes. I had to leave a tiny little gaping hole for the ~> operator, whose removal is covered by <rdar://problem/17828741>. We can possibly put this on firm footing with clever handling of generic witnesses, but it's not important right now. Swift SVN r20626