Environment
Swift version 5.1-dev (LLVM 082dec2e22, Swift 397965d3fc)
Target: x86_64-apple-darwin18.5.0
Additional Detail from JIRA
|
|
| Votes |
0 |
| Component/s |
Compiler |
| Labels |
Bug, AcceptsInvalid, TypeChecker |
| Assignee |
@slavapestov |
| Priority |
Medium |
md5: 68e52fe5d63fd695a13a186f306cb4bc
Issue Description:
The following unsound code is allowed to compile, which lets us turn a subclass instance into a superclass instance:
protocol P {
associatedtype X where X == Self
func foo() -> X
}
class C : P {
typealias X = C
func foo() -> X {
return C()
}
}
class D : C {}
func foo<T : P>(_ x: inout T) {
x = x.foo()
}
var d = D()
foo(&d)
print(type(of: d)) // C
When checking the constraint X == Self, we should treat Self as being the dynamic self and therefore reject the conformance.
Environment
Swift version 5.1-dev (LLVM 082dec2e22, Swift 397965d3fc)
Target: x86_64-apple-darwin18.5.0
Additional Detail from JIRA
md5: 68e52fe5d63fd695a13a186f306cb4bc
Issue Description:
The following unsound code is allowed to compile, which lets us turn a subclass instance into a superclass instance:
When checking the constraint
X == Self, we should treatSelfas being the dynamic self and therefore reject the conformance.