| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fsyntax-only -fblocks -verify %s |
| // RUN: %clang_cc1 -D WARN_PARTIAL -Wpartial-availability -triple x86_64-apple-darwin9 -fsyntax-only -fblocks -verify %s |
| // |
| |
| void f0() __attribute__((availability(macosx,introduced=10.4,deprecated=10.2))); // expected-warning{{feature cannot be deprecated in OS X version 10.2 before it was introduced in version 10.4; attribute ignored}} |
| void f1() __attribute__((availability(ios,obsoleted=2.1,deprecated=3.0))); // expected-warning{{feature cannot be obsoleted in iOS version 2.1 before it was deprecated in version 3.0; attribute ignored}} |
| void f2() __attribute__((availability(ios,introduced=2.1,deprecated=2.1))); |
| |
| void f3() __attribute__((availability(otheros,introduced=2.2))); // expected-warning{{unknown platform 'otheros' in availability macro}} |
| |
| // rdar://10095131 |
| extern void |
| ATSFontGetName(const char *oName) __attribute__((availability(macosx,introduced=8.0,deprecated=9.0, message="use CTFontCopyFullName"))); // expected-note {{'ATSFontGetName' has been explicitly marked deprecated here}} |
| |
| extern void |
| ATSFontGetPostScriptName(int flags) __attribute__((availability(macosx,introduced=8.0,obsoleted=9.0, message="use ATSFontGetFullPostScriptName"))); // expected-note {{'ATSFontGetPostScriptName' has been explicitly marked unavailable here}} |
| |
| #if defined(WARN_PARTIAL) |
| // expected-note@+3 {{has been explicitly marked partial here}} |
| #endif |
| extern void |
| PartiallyAvailable() __attribute__((availability(macosx,introduced=10.8))); |
| |
| enum __attribute__((availability(macosx,introduced=10.8))) PartialEnum { |
| kPartialEnumConstant, |
| }; |
| |
| void test_10095131() { |
| ATSFontGetName("Hello"); // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in OS X 9.0 - use CTFontCopyFullName}} |
| ATSFontGetPostScriptName(100); // expected-error {{'ATSFontGetPostScriptName' is unavailable: obsoleted in OS X 9.0 - use ATSFontGetFullPostScriptName}} |
| |
| #if defined(WARN_PARTIAL) |
| // expected-warning@+2 {{is partial: introduced in OS X 10.8}} expected-note@+2 {{explicitly redeclare 'PartiallyAvailable' to silence this warning}} |
| #endif |
| PartiallyAvailable(); |
| } |
| |
| extern void PartiallyAvailable() ; |
| void with_redeclaration() { |
| PartiallyAvailable(); // Don't warn. |
| |
| // enums should never warn. |
| enum PartialEnum p = kPartialEnumConstant; |
| } |
| |
| // rdar://10711037 |
| __attribute__((availability(macos, unavailable))) // expected-warning {{attribute 'availability' is ignored}} |
| enum { |
| NSDataWritingFileProtectionWriteOnly = 0x30000000, |
| NSDataWritingFileProtectionCompleteUntilUserAuthentication = 0x40000000, |
| }; |
| |
| void f4(int) __attribute__((availability(ios,deprecated=3.0))); |
| void f4(int) __attribute__((availability(ios,introduced=4.0))); // expected-warning {{feature cannot be deprecated in iOS version 3.0 before it was introduced in version 4.0; attribute ignored}} |
| |
| void f5(int) __attribute__((availability(ios,deprecated=3.0), |
| availability(ios,introduced=4.0))); // expected-warning {{feature cannot be deprecated in iOS version 3.0 before it was introduced in version 4.0; attribute ignored}} |
| |
| void f6(int) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{previous attribute is here}} |
| void f6(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warning {{availability does not match previous declaration}} |
| |
| void f7(int) __attribute__((availability(ios,introduced=2.0))); |
| void f7(int) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{previous attribute is here}} |
| void f7(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warning {{availability does not match previous declaration}} |
| |
| |
| // <rdar://problem/11886458> |
| #if !__has_feature(attribute_availability_with_message) |
| # error "Missing __has_feature" |
| #endif |
| |
| extern int x __attribute__((availability(macosx,introduced=10.5))); |
| extern int x; |
| |
| void f8() { |
| int (^b)(int); |
| b = ^ (int i) __attribute__((availability(macosx,introduced=10.2))) { return 1; }; // expected-warning {{'availability' attribute ignored}} |
| } |
| |
| extern int x2 __attribute__((availability(macosx,introduced=10.2))); // expected-note {{previous attribute is here}} |
| extern int x2 __attribute__((availability(macosx,introduced=10.5))); // expected-warning {{availability does not match previous declaration}} |