@@ -144,26 +144,85 @@ extension X: P {}
144
144
// Test platform inheritance for iOS unavailability.
145
145
// rdar://68597591
146
146
147
+ func takesAnything< T> ( _ t: T ) { }
148
+
149
+ @available ( macCatalyst, unavailable)
150
+ struct UnavailableOnMacCatalyst { } // expected-note * {{'UnavailableOnMacCatalyst' has been explicitly marked unavailable here}}
151
+
147
152
@available ( iOS, unavailable)
148
- public struct UnavailableOniOS { } // expected-note 2 {{'UnavailableOniOS' has been explicitly marked unavailable here}}
153
+ struct UnavailableOniOS { } // expected-note * {{'UnavailableOniOS' has been explicitly marked unavailable here}}
149
154
150
155
@available ( iOS, unavailable)
151
- func unavailableOniOS( _ p: UnavailableOniOS ) { } // ok
156
+ @available ( macCatalyst, introduced: 13.0 )
157
+ struct AvailableOnMacCatalystButUnavailableOniOS { }
158
+
159
+ extension UnavailableOnMacCatalyst { } // expected-error {{'UnavailableOnMacCatalyst' is unavailable in Mac Catalyst}}
160
+ extension UnavailableOniOS { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
161
+ extension AvailableOnMacCatalystButUnavailableOniOS { } // ok
162
+
163
+ @available ( macCatalyst, unavailable)
164
+ extension UnavailableOnMacCatalyst {
165
+ func extensionMethod( ) {
166
+ takesAnything ( UnavailableOniOS ( ) ) // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
167
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
168
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
169
+ }
152
170
153
- func functionUsingAnUnavailableType( _ p: UnavailableOniOS ) { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
171
+ @available ( iOS, unavailable)
172
+ func extensionMethodUnavailableOniOS( ) {
173
+ takesAnything ( UnavailableOniOS ( ) )
174
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
175
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
176
+ }
177
+
178
+ @available ( iOS, introduced: 15 )
179
+ func extensionMethodIntroducedOniOS( ) {
180
+ takesAnything ( UnavailableOniOS ( ) ) // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
181
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
182
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
183
+ }
154
184
155
- public extension UnavailableOniOS { } // expected-error {{'UnavailableOniOS' is unavailable in iOS} }
185
+ }
156
186
157
187
@available ( iOS, unavailable)
158
- public extension UnavailableOniOS { // ok
159
- func someMethod( _ p: UnavailableOniOS ) { }
188
+ extension UnavailableOniOS {
189
+ func extensionMethod( ) {
190
+ takesAnything ( UnavailableOniOS ( ) )
191
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
192
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
193
+ }
194
+
195
+ @available ( macCatalyst, unavailable)
196
+ func extensionMethodUnavailableOnMacCatalyst( ) {
197
+ takesAnything ( UnavailableOniOS ( ) )
198
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
199
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
200
+ }
201
+
202
+ @available ( macCatalyst, introduced: 13.0 )
203
+ func extensionMethodMacCatalystIntroduced( ) {
204
+ takesAnything ( UnavailableOniOS ( ) )
205
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
206
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
207
+ }
160
208
}
161
209
162
210
@available ( iOS, unavailable)
163
211
@available ( macCatalyst, introduced: 13.0 )
164
- public struct AvailableOnMacCatalyst { }
212
+ extension AvailableOnMacCatalystButUnavailableOniOS {
213
+ func extensionMethod( ) {
214
+ takesAnything ( UnavailableOniOS ( ) ) // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
215
+ takesAnything ( UnavailableOnMacCatalyst ( ) ) // expected-error {{'UnavailableOnMacCatalyst' is unavailable in Mac Catalyst}}
216
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
217
+ }
165
218
166
- public extension AvailableOnMacCatalyst { } // ok
219
+ @available ( macCatalyst, unavailable)
220
+ func extensionMethodUnavailableOnMacCatalyst( ) {
221
+ takesAnything ( UnavailableOniOS ( ) ) // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
222
+ takesAnything ( UnavailableOnMacCatalyst ( ) )
223
+ takesAnything ( AvailableOnMacCatalystButUnavailableOniOS ( ) )
224
+ }
225
+ }
167
226
168
227
@available ( iOS, introduced: 14.0 )
169
228
@available ( macCatalyst, introduced: 14.5 )
0 commit comments