|  | /// This test verifies several different patterns of iOS, and app extension, availability declarations & usages. | 
|  | // RUN: %clang_cc1 "-triple" "arm64-apple-ios26" -DNEW -fsyntax-only -verify %s | 
|  | // RUN: %clang_cc1 "-triple" "arm64-apple-ios18" -fsyntax-only -verify -fapplication-extension -DAPP_EXT %s | 
|  | // RUN: %clang_cc1 "-triple" "arm64-apple-ios18" -fsyntax-only -verify %s | 
|  |  | 
|  | __attribute__((availability(ios,strict,introduced=19))) | 
|  | void fNew1(); | 
|  | #ifndef NEW | 
|  | // expected-note@-2 {{here}} | 
|  | #endif | 
|  |  | 
|  | __attribute__((availability(ios,strict,introduced=19))) | 
|  | void fNew(); | 
|  |  | 
|  | __attribute__((availability(ios,strict,introduced=26))) | 
|  | void fNew() { } | 
|  | #ifndef NEW | 
|  | // expected-note@-2 {{here}} | 
|  | #endif | 
|  |  | 
|  | __attribute__((availability(ios,strict,deprecated=19))) | 
|  | void fDep(); | 
|  |  | 
|  | __attribute__((availability(ios,strict,deprecated=26))) | 
|  | void fDep() { } | 
|  | #ifdef NEW | 
|  | // expected-note@-2 {{here}} | 
|  | #endif | 
|  |  | 
|  | __attribute__((availability(ios,strict,obsoleted=19))) | 
|  | void fObs(); | 
|  |  | 
|  | __attribute__((availability(ios,strict,obsoleted=26))) | 
|  | void fObs() { } | 
|  | #ifdef NEW | 
|  | // expected-note@-2 {{here}} | 
|  | #endif | 
|  |  | 
|  | __attribute__((availability(ios_app_extension,strict,introduced=19))) | 
|  | void fAppExt(); | 
|  |  | 
|  | __attribute__((availability(ios_app_extension,strict,introduced=26))) | 
|  | void fAppExt() { } | 
|  | #ifdef APP_EXT | 
|  | // expected-note@-2 {{here}} | 
|  | #endif | 
|  |  | 
|  | void testVersionRemapping() { | 
|  | fNew1(); | 
|  | #ifndef NEW | 
|  | // expected-error@-2 {{'fNew1' is unavailable: introduced in iOS 26.0}} | 
|  | #endif | 
|  | fNew(); | 
|  | #ifndef NEW | 
|  | // expected-error@-2 {{'fNew' is unavailable: introduced in iOS 26}} | 
|  | #endif | 
|  | fDep(); | 
|  | #ifdef NEW | 
|  | // expected-warning@-2 {{'fDep' is deprecated: first deprecated in iOS 26}} | 
|  | #endif | 
|  | fObs(); | 
|  | #ifdef NEW | 
|  | // expected-error@-2 {{'fObs' is unavailable: obsoleted in iOS 26}} | 
|  | #endif | 
|  |  | 
|  | fAppExt(); | 
|  | #ifdef APP_EXT | 
|  | // expected-error@-2 {{'fAppExt' is unavailable: introduced in iOS (App Extension) 26}} | 
|  | #endif | 
|  | } | 
|  |  | 
|  | __attribute__((availability(ios,strict,introduced=18.5))) // expected-note {{here}} | 
|  | void fMatchErr(); | 
|  |  | 
|  | __attribute__((availability(ios,strict,introduced=26))) // expected-warning {{availability does not match previous declaration}} | 
|  | void fMatchErr() { } | 
|  |  | 
|  | __attribute__((availability(ios_app_extension,strict,introduced=19))) // expected-note {{here}} | 
|  | void fAppExtErr(); | 
|  |  | 
|  | __attribute__((availability(ios_app_extension,strict,introduced=26.1))) // expected-warning {{availability does not match previous declaration}} | 
|  | void fAppExtErr() { } | 
|  |  | 
|  | __attribute__((availability(ios,introduced=26))) | 
|  | void fNew2(); | 
|  | #ifndef NEW | 
|  | // expected-note@-2 {{'fNew2' has been marked as being introduced in iOS 26 here, but the deployment target is iOS 18}} | 
|  | #endif | 
|  | __attribute__((availability(ios,introduced=19))) | 
|  | void fNew3(); | 
|  |  | 
|  | __attribute__((availability(ios,introduced=27))) | 
|  | void evenNewer(); | 
|  | #ifdef NEW | 
|  | // expected-note@-2 {{'evenNewer' has been marked as being introduced in iOS 27 here, but the deployment target is iOS 26}} | 
|  | #endif | 
|  |  | 
|  | void testAvailabilityCheck() { | 
|  | if (__builtin_available(iOS 19, *)) { | 
|  | fNew2(); | 
|  | fNew3(); | 
|  | } | 
|  | if (__builtin_available(iOS 26, *)) { | 
|  | fNew2(); | 
|  | fNew3(); | 
|  | } | 
|  | fNew2(); | 
|  | #ifndef NEW | 
|  | // expected-warning@-2 {{'fNew2' is only available on iOS 26 or newer}} expected-note@-2 {{enclose}} | 
|  | #endif | 
|  | #ifdef NEW | 
|  | evenNewer(); // expected-warning {{'evenNewer' is only available on iOS 27 or newer}} expected-note {{enclose}} | 
|  | #endif | 
|  | } | 
|  |  | 
|  |  |