Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Swift version 5.1-dev (LLVM 082dec2e22, Swift 397965d3fc) Target: x86_64-apple-darwin18.5.0
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.
X == Self
Self
The text was updated successfully, but these errors were encountered:
cc @slavapestov, @DougGregor
Sorry, something went wrong.
Ouch!
I think the only safe thing to do here is to not allow a class to conform to P at all.
Or only final classes, or something.
final
#41545
slavapestov
No branches or pull requests
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 treatSelf
as being the dynamic self and therefore reject the conformance.The text was updated successfully, but these errors were encountered: