@@ -144,26 +144,85 @@ extension X: P {}
144144// Test platform inheritance for iOS unavailability.
145145// rdar://68597591
146146
147+ func takesAnything< T> ( _ t: T ) { }
148+
149+ @available ( macCatalyst, unavailable)
150+ struct UnavailableOnMacCatalyst { } // expected-note * {{'UnavailableOnMacCatalyst' has been explicitly marked unavailable here}}
151+
147152@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}}
149154
150155@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+ }
152170
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+ }
154184
155- public extension UnavailableOniOS { } // expected-error {{'UnavailableOniOS' is unavailable in iOS} }
185+ }
156186
157187@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+ }
160208}
161209
162210@available ( iOS, unavailable)
163211@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+ }
165218
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+ }
167226
168227@available ( iOS, introduced: 14.0 )
169228@available ( macCatalyst, introduced: 14.5 )
0 commit comments