mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
ModuleInterface: Print existential any in swiftinterfaces since any is required for protocols with associated types in 5.7.
Resolves rdar://92976269
This commit is contained in:
@@ -144,6 +144,7 @@ PrintOptions PrintOptions::printSwiftInterfaceFile(ModuleDecl *ModuleToPrint,
|
|||||||
PrintOptions::FunctionRepresentationMode::Full;
|
PrintOptions::FunctionRepresentationMode::Full;
|
||||||
result.AlwaysTryPrintParameterLabels = true;
|
result.AlwaysTryPrintParameterLabels = true;
|
||||||
result.PrintSPIs = printSPIs;
|
result.PrintSPIs = printSPIs;
|
||||||
|
result.PrintExplicitAny = true;
|
||||||
|
|
||||||
// We should print __consuming, __owned, etc for the module interface file.
|
// We should print __consuming, __owned, etc for the module interface file.
|
||||||
result.SkipUnderscoredKeywords = false;
|
result.SkipUnderscoredKeywords = false;
|
||||||
|
|||||||
37
test/ModuleInterface/existential-any.swift
Normal file
37
test/ModuleInterface/existential-any.swift
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s -module-name main
|
||||||
|
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -module-name main
|
||||||
|
// RUN: %FileCheck %s < %t.swiftinterface
|
||||||
|
|
||||||
|
// CHECK: public protocol P
|
||||||
|
public protocol P { }
|
||||||
|
|
||||||
|
// CHECK: public protocol Q
|
||||||
|
public protocol Q {
|
||||||
|
// CHECK: associatedtype A : main.P
|
||||||
|
associatedtype A: P
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: public func takesAndReturnsP(_ x: any main.P) -> any main.P
|
||||||
|
public func takesAndReturnsP(_ x: P) -> P {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: public func takesAndReturnsOptionalP(_ x: (any main.P)?) -> (any main.P)?
|
||||||
|
public func takesAndReturnsOptionalP(_ x: P?) -> P? {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: public func takesAndReturnsQ(_ x: any main.Q) -> any main.Q
|
||||||
|
public func takesAndReturnsQ(_ x: any Q) -> any Q {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: public struct S
|
||||||
|
public struct S {
|
||||||
|
// CHECK: public var p: any main.P
|
||||||
|
public var p: P
|
||||||
|
// CHECK: public var maybeP: (any main.P)?
|
||||||
|
public var maybeP: P?
|
||||||
|
// CHECK: public var q: any main.Q
|
||||||
|
public var q: any Q
|
||||||
|
}
|
||||||
@@ -89,7 +89,7 @@ public class OldSchool2: MP {
|
|||||||
// CHECK: public struct UsesRP {
|
// CHECK: public struct UsesRP {
|
||||||
public struct UsesRP {
|
public struct UsesRP {
|
||||||
// CHECK: #if compiler(>=5.3) && $RethrowsProtocol
|
// CHECK: #if compiler(>=5.3) && $RethrowsProtocol
|
||||||
// CHECK-NEXT: public var value: FeatureTest.RP? {
|
// CHECK-NEXT: public var value: (any FeatureTest.RP)? {
|
||||||
// CHECK-NOT: #if compiler(>=5.3) && $RethrowsProtocol
|
// CHECK-NOT: #if compiler(>=5.3) && $RethrowsProtocol
|
||||||
// CHECK: get
|
// CHECK: get
|
||||||
public var value: RP? {
|
public var value: RP? {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public func usesType(_ x: Type) {}
|
|||||||
// CHECK: public func genericProtocol<T>(_ x: T) where T : MyModule.`Protocol`
|
// CHECK: public func genericProtocol<T>(_ x: T) where T : MyModule.`Protocol`
|
||||||
public func genericProtocol<T: Protocol>(_ x: T) {}
|
public func genericProtocol<T: Protocol>(_ x: T) {}
|
||||||
|
|
||||||
// CHECK: public func existentialProtocol(_ x: MyModule.`Protocol`)
|
// CHECK: public func existentialProtocol(_ x: any MyModule.`Protocol`)
|
||||||
public func existentialProtocol(_ x: Protocol) {}
|
public func existentialProtocol(_ x: Protocol) {}
|
||||||
|
|
||||||
// CHECK: public struct Parent {
|
// CHECK: public struct Parent {
|
||||||
|
|||||||
Reference in New Issue
Block a user