mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Add upcoming feature ImplicitOpenExistentials for SE-0352
To maintain source compatibility, SE-0352 does not open existentials with "self-conforming" type, such as `any Error` or existentials based on `@objc` protocols. The proposal specified that this behavior would change in Swift 6. Implement that behavior change, which can be enabled prior to Swift 6 with the upcoming feature `ImplicitOpenExistentials` (as documented in SE-0362). Fixes #70873 / rdar://120902975.
This commit is contained in:
20
test/Constraints/opened_existentials_feature.swift
Normal file
20
test/Constraints/opened_existentials_feature.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
// RUN: %target-typecheck-verify-swift -enable-upcoming-feature ImplicitOpenExistentials
|
||||
// RUN: %target-typecheck-verify-swift -swift-version 6
|
||||
|
||||
#if _runtime(_ObjC)
|
||||
@objc
|
||||
protocol X {}
|
||||
|
||||
func foo<T: X>(_ val: T.Type) {}
|
||||
|
||||
func bar(_ val: X.Type) {
|
||||
// Only succeeds when we're allowed to open an @objc existential.
|
||||
foo(val)
|
||||
}
|
||||
#endif
|
||||
|
||||
func takeError<E: Error>(_ error: E) { }
|
||||
|
||||
func passError(error: any Error) {
|
||||
takeError(error) // okay
|
||||
}
|
||||
Reference in New Issue
Block a user