4
4
5
5
public protocol Horse { }
6
6
func takesHorse< T : Horse > ( _: T ) { }
7
+ func takesHorseExistential( _: Horse ) { }
7
8
8
9
extension Horse {
9
10
func giddyUp( ) { }
@@ -17,10 +18,11 @@ public struct HasUnavailableConformance1 {}
17
18
18
19
@available ( * , unavailable)
19
20
extension HasUnavailableConformance1 : Horse { }
20
- // expected-note@-1 6 {{conformance of 'HasUnavailableConformance1' to 'Horse' has been explicitly marked unavailable here}}
21
+ // expected-note@-1 7 {{conformance of 'HasUnavailableConformance1' to 'Horse' has been explicitly marked unavailable here}}
21
22
22
23
func passUnavailableConformance1( x: HasUnavailableConformance1 ) {
23
24
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance1' to 'Horse' is unavailable}}
25
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance1' to 'Horse' is unavailable}}
24
26
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance1' to 'Horse' is unavailable}}
25
27
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance1' to 'Horse' is unavailable}}
26
28
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance1' to 'Horse' is unavailable}}
@@ -30,6 +32,7 @@ func passUnavailableConformance1(x: HasUnavailableConformance1) {
30
32
@available ( * , unavailable)
31
33
func passUnavailableConformance1a( x: HasUnavailableConformance1 ) {
32
34
takesHorse ( x)
35
+ takesHorseExistential ( x)
33
36
x. giddyUp ( )
34
37
_ = x. isGalloping
35
38
_ = x [ keyPath: \. isGalloping]
@@ -41,10 +44,11 @@ public struct HasUnavailableConformance2 {}
41
44
42
45
@available ( macOS, unavailable)
43
46
extension HasUnavailableConformance2 : Horse { }
44
- // expected-note@-1 5 {{conformance of 'HasUnavailableConformance2' to 'Horse' has been explicitly marked unavailable here}}
47
+ // expected-note@-1 6 {{conformance of 'HasUnavailableConformance2' to 'Horse' has been explicitly marked unavailable here}}
45
48
46
49
func passUnavailableConformance2( x: HasUnavailableConformance2 ) {
47
50
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance2' to 'Horse' is unavailable in macOS}}
51
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance2' to 'Horse' is unavailable in macOS}}
48
52
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance2' to 'Horse' is unavailable in macOS}}
49
53
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance2' to 'Horse' is unavailable in macOS}}
50
54
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance2' to 'Horse' is unavailable in macOS}}
@@ -55,6 +59,7 @@ func passUnavailableConformance2(x: HasUnavailableConformance2) {
55
59
func passUnavailableConformance2a( x: HasUnavailableConformance2 ) {
56
60
// This is allowed
57
61
takesHorse ( x)
62
+ takesHorseExistential ( x)
58
63
x. giddyUp ( )
59
64
_ = x. isGalloping
60
65
_ = x [ keyPath: \. isGalloping]
@@ -65,10 +70,11 @@ public struct HasUnavailableConformance3 {}
65
70
66
71
@available ( swift 12 )
67
72
extension HasUnavailableConformance3 : Horse { }
68
- // expected-note@-1 10 {{conformance of 'HasUnavailableConformance3' to 'Horse' was introduced in Swift 12}}
73
+ // expected-note@-1 12 {{conformance of 'HasUnavailableConformance3' to 'Horse' was introduced in Swift 12}}
69
74
70
75
func passUnavailableConformance3( x: HasUnavailableConformance3 ) {
71
76
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
77
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
72
78
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
73
79
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
74
80
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
@@ -78,6 +84,7 @@ func passUnavailableConformance3(x: HasUnavailableConformance3) {
78
84
@available ( swift 12 )
79
85
func passUnavailableConformance3a( x: HasUnavailableConformance3 ) {
80
86
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
87
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
81
88
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
82
89
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
83
90
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance3' to 'Horse' is unavailable}}
@@ -89,10 +96,11 @@ public struct HasUnavailableConformance4 {}
89
96
90
97
@available ( macOS, obsoleted: 10.1 )
91
98
extension HasUnavailableConformance4 : Horse { }
92
- // expected-note@-1 10 {{conformance of 'HasUnavailableConformance4' to 'Horse' was obsoleted in macOS 10.1}}
99
+ // expected-note@-1 12 {{conformance of 'HasUnavailableConformance4' to 'Horse' was obsoleted in macOS 10.1}}
93
100
94
101
func passUnavailableConformance4( x: HasUnavailableConformance4 ) {
95
102
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
103
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
96
104
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
97
105
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable}}
98
106
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable}}
@@ -102,6 +110,7 @@ func passUnavailableConformance4(x: HasUnavailableConformance4) {
102
110
@available ( macOS, obsoleted: 10.1 )
103
111
func passUnavailableConformance4a( x: HasUnavailableConformance4 ) {
104
112
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
113
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
105
114
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable in macOS}}
106
115
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable}}
107
116
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance4' to 'Horse' is unavailable}}
@@ -113,10 +122,11 @@ public struct HasUnavailableConformance5 {}
113
122
114
123
@available ( swift, obsoleted: 4 )
115
124
extension HasUnavailableConformance5 : Horse { }
116
- // expected-note@-1 10 {{conformance of 'HasUnavailableConformance5' to 'Horse' was obsoleted in Swift 4}}
125
+ // expected-note@-1 12 {{conformance of 'HasUnavailableConformance5' to 'Horse' was obsoleted in Swift 4}}
117
126
118
127
func passUnavailableConformance5( x: HasUnavailableConformance5 ) {
119
128
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
129
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
120
130
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
121
131
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
122
132
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
@@ -126,6 +136,7 @@ func passUnavailableConformance5(x: HasUnavailableConformance5) {
126
136
@available ( swift, obsoleted: 4 )
127
137
func passUnavailableConformance5a( x: HasUnavailableConformance5 ) {
128
138
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
139
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
129
140
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
130
141
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
131
142
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance5' to 'Horse' is unavailable}}
@@ -137,10 +148,11 @@ public struct HasUnavailableConformance6 {}
137
148
138
149
@available ( * , unavailable, message: " This conformance is bad " )
139
150
extension HasUnavailableConformance6 : Horse { }
140
- // expected-note@-1 5 {{conformance of 'HasUnavailableConformance6' to 'Horse' has been explicitly marked unavailable here}}
151
+ // expected-note@-1 6 {{conformance of 'HasUnavailableConformance6' to 'Horse' has been explicitly marked unavailable here}}
141
152
142
153
func passUnavailableConformance6( x: HasUnavailableConformance6 ) {
143
154
takesHorse ( x) // expected-error {{conformance of 'HasUnavailableConformance6' to 'Horse' is unavailable: This conformance is bad}}
155
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasUnavailableConformance6' to 'Horse' is unavailable: This conformance is bad}}
144
156
x. giddyUp ( ) // expected-error {{conformance of 'HasUnavailableConformance6' to 'Horse' is unavailable: This conformance is bad}}
145
157
_ = x. isGalloping // expected-error {{conformance of 'HasUnavailableConformance6' to 'Horse' is unavailable: This conformance is bad}}
146
158
_ = x [ keyPath: \. isGalloping] // expected-error {{conformance of 'HasUnavailableConformance6' to 'Horse' is unavailable: This conformance is bad}}
@@ -155,6 +167,7 @@ extension HasDeprecatedConformance1 : Horse {}
155
167
156
168
func passDeprecatedConformance1( x: HasDeprecatedConformance1 ) {
157
169
takesHorse ( x) // expected-warning {{conformance of 'HasDeprecatedConformance1' to 'Horse' is deprecated}}
170
+ takesHorseExistential ( x) // expected-warning {{conformance of 'HasDeprecatedConformance1' to 'Horse' is deprecated}}
158
171
x. giddyUp ( ) // expected-warning {{conformance of 'HasDeprecatedConformance1' to 'Horse' is deprecated}}
159
172
_ = x. isGalloping // expected-warning {{conformance of 'HasDeprecatedConformance1' to 'Horse' is deprecated}}
160
173
_ = x [ keyPath: \. isGalloping] // expected-warning {{conformance of 'HasDeprecatedConformance1' to 'Horse' is deprecated}}
@@ -164,6 +177,7 @@ func passDeprecatedConformance1(x: HasDeprecatedConformance1) {
164
177
@available ( * , deprecated)
165
178
func passDeprecatedConformance1a( x: HasDeprecatedConformance1 ) {
166
179
takesHorse ( x)
180
+ takesHorseExistential ( x)
167
181
x. giddyUp ( )
168
182
_ = x. isGalloping
169
183
_ = x [ keyPath: \. isGalloping]
@@ -178,6 +192,7 @@ extension HasDeprecatedConformance2 : Horse {}
178
192
179
193
func passDeprecatedConformance2( x: HasDeprecatedConformance2 ) {
180
194
takesHorse ( x) // expected-warning {{conformance of 'HasDeprecatedConformance2' to 'Horse' is deprecated: This conformance is deprecated}}
195
+ takesHorseExistential ( x) // expected-warning {{conformance of 'HasDeprecatedConformance2' to 'Horse' is deprecated: This conformance is deprecated}}
181
196
x. giddyUp ( ) // expected-warning {{conformance of 'HasDeprecatedConformance2' to 'Horse' is deprecated: This conformance is deprecated}}
182
197
_ = x. isGalloping // expected-warning {{conformance of 'HasDeprecatedConformance2' to 'Horse' is deprecated: This conformance is deprecated}}
183
198
_ = x [ keyPath: \. isGalloping] // expected-warning {{conformance of 'HasDeprecatedConformance2' to 'Horse' is deprecated: This conformance is deprecated}}
@@ -187,6 +202,7 @@ func passDeprecatedConformance2(x: HasDeprecatedConformance2) {
187
202
@available ( * , deprecated)
188
203
func passDeprecatedConformance2a( x: HasDeprecatedConformance2 ) {
189
204
takesHorse ( x)
205
+ takesHorseExistential ( x)
190
206
x. giddyUp ( )
191
207
_ = x. isGalloping
192
208
_ = x [ keyPath: \. isGalloping]
@@ -201,6 +217,7 @@ extension HasDeprecatedConformance3 : Horse {}
201
217
202
218
func passDeprecatedConformance3( x: HasDeprecatedConformance3 ) {
203
219
takesHorse ( x) // expected-warning {{conformance of 'HasDeprecatedConformance3' to 'Horse' was deprecated in macOS 10.8}}
220
+ takesHorseExistential ( x) // expected-warning {{conformance of 'HasDeprecatedConformance3' to 'Horse' was deprecated in macOS 10.8}}
204
221
x. giddyUp ( ) // expected-warning {{conformance of 'HasDeprecatedConformance3' to 'Horse' was deprecated in macOS 10.8}}
205
222
_ = x. isGalloping // expected-warning {{conformance of 'HasDeprecatedConformance3' to 'Horse' was deprecated in macOS 10.8}}
206
223
_ = x [ keyPath: \. isGalloping] // expected-warning {{conformance of 'HasDeprecatedConformance3' to 'Horse' was deprecated in macOS 10.8}}
@@ -213,6 +230,7 @@ func passDeprecatedConformance3a(x: HasDeprecatedConformance3) {
213
230
// This branch is dead with our minimum deployment target, so don't emit
214
231
// deprecation diagnostics in it.
215
232
takesHorse ( x)
233
+ takesHorseExistential ( x)
216
234
x. giddyUp ( )
217
235
_ = x. isGalloping
218
236
_ = x [ keyPath: \. isGalloping]
@@ -231,10 +249,13 @@ extension HasAvailableConformance1 : Horse {}
231
249
// in test/Sema/conformance_availability_warn.swift for the same example
232
250
// but without this flag.
233
251
234
- func passAvailableConformance1( x: HasAvailableConformance1 ) { // expected-note 5 {{add @available attribute to enclosing global function}}
252
+ func passAvailableConformance1( x: HasAvailableConformance1 ) { // expected-note 6 {{add @available attribute to enclosing global function}}
235
253
takesHorse ( x) // expected-error {{conformance of 'HasAvailableConformance1' to 'Horse' is only available in macOS 100 or newer}}
236
254
// expected-note@-1 {{add 'if #available' version check}}
237
255
256
+ takesHorseExistential ( x) // expected-error {{conformance of 'HasAvailableConformance1' to 'Horse' is only available in macOS 100 or newer}}
257
+ // expected-note@-1 {{add 'if #available' version check}}
258
+
238
259
x. giddyUp ( ) // expected-error {{conformance of 'HasAvailableConformance1' to 'Horse' is only available in macOS 100 or newer}}
239
260
// expected-note@-1 {{add 'if #available' version check}}
240
261
@@ -251,6 +272,7 @@ func passAvailableConformance1(x: HasAvailableConformance1) { // expected-note 5
251
272
@available ( macOS 100 , * )
252
273
func passAvailableConformance1a( x: HasAvailableConformance1 ) {
253
274
takesHorse ( x)
275
+ takesHorseExistential ( x)
254
276
x. giddyUp ( )
255
277
_ = x. isGalloping
256
278
_ = x [ keyPath: \. isGalloping]
0 commit comments