xref: /minix3/external/bsd/llvm/dist/clang/test/Sema/attr-availability.c (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fsyntax-only -fblocks -verify %s
2*f4a2713aSLionel Sambuc 
3*f4a2713aSLionel Sambuc 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}}
4*f4a2713aSLionel Sambuc 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}}
5*f4a2713aSLionel Sambuc void f2() __attribute__((availability(ios,introduced=2.1,deprecated=2.1)));
6*f4a2713aSLionel Sambuc 
7*f4a2713aSLionel Sambuc void f3() __attribute__((availability(otheros,introduced=2.2))); // expected-warning{{unknown platform 'otheros' in availability macro}}
8*f4a2713aSLionel Sambuc 
9*f4a2713aSLionel Sambuc // rdar://10095131
10*f4a2713aSLionel Sambuc extern void
11*f4a2713aSLionel Sambuc ATSFontGetName(const char *oName) __attribute__((availability(macosx,introduced=8.0,deprecated=9.0, message="use CTFontCopyFullName"))); // expected-note {{'ATSFontGetName' declared here}}
12*f4a2713aSLionel Sambuc 
13*f4a2713aSLionel Sambuc extern void
14*f4a2713aSLionel Sambuc ATSFontGetPostScriptName(int flags) __attribute__((availability(macosx,introduced=8.0,obsoleted=9.0, message="use ATSFontGetFullPostScriptName"))); // expected-note {{function has been explicitly marked unavailable here}}
15*f4a2713aSLionel Sambuc 
16*f4a2713aSLionel Sambuc void test_10095131() {
17*f4a2713aSLionel Sambuc   ATSFontGetName("Hello"); // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in OS X 9.0 - use CTFontCopyFullName}}
18*f4a2713aSLionel Sambuc   ATSFontGetPostScriptName(100); // expected-error {{'ATSFontGetPostScriptName' is unavailable: obsoleted in OS X 9.0 - use ATSFontGetFullPostScriptName}}
19*f4a2713aSLionel Sambuc }
20*f4a2713aSLionel Sambuc 
21*f4a2713aSLionel Sambuc // rdar://10711037
22*f4a2713aSLionel Sambuc __attribute__((availability(macos, unavailable))) // expected-warning {{attribute 'availability' is ignored}}
23*f4a2713aSLionel Sambuc enum {
24*f4a2713aSLionel Sambuc     NSDataWritingFileProtectionWriteOnly = 0x30000000,
25*f4a2713aSLionel Sambuc     NSDataWritingFileProtectionCompleteUntilUserAuthentication = 0x40000000,
26*f4a2713aSLionel Sambuc };
27*f4a2713aSLionel Sambuc 
28*f4a2713aSLionel Sambuc void f4(int) __attribute__((availability(ios,deprecated=3.0)));
29*f4a2713aSLionel Sambuc 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}}
30*f4a2713aSLionel Sambuc 
31*f4a2713aSLionel Sambuc void f5(int) __attribute__((availability(ios,deprecated=3.0),
32*f4a2713aSLionel Sambuc                             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}}
33*f4a2713aSLionel Sambuc 
34*f4a2713aSLionel Sambuc void f6(int) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{previous attribute is here}}
35*f4a2713aSLionel Sambuc void f6(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warning {{availability does not match previous declaration}}
36*f4a2713aSLionel Sambuc 
37*f4a2713aSLionel Sambuc void f7(int) __attribute__((availability(ios,introduced=2.0)));
38*f4a2713aSLionel Sambuc void f7(int) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{previous attribute is here}}
39*f4a2713aSLionel Sambuc void f7(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warning {{availability does not match previous declaration}}
40*f4a2713aSLionel Sambuc 
41*f4a2713aSLionel Sambuc 
42*f4a2713aSLionel Sambuc // <rdar://problem/11886458>
43*f4a2713aSLionel Sambuc #if !__has_feature(attribute_availability_with_message)
44*f4a2713aSLionel Sambuc # error "Missing __has_feature"
45*f4a2713aSLionel Sambuc #endif
46*f4a2713aSLionel Sambuc 
47*f4a2713aSLionel Sambuc extern int x __attribute__((availability(macosx,introduced=10.5)));
48*f4a2713aSLionel Sambuc extern int x;
49*f4a2713aSLionel Sambuc 
50*f4a2713aSLionel Sambuc void f8() {
51*f4a2713aSLionel Sambuc   int (^b)(int);
52*f4a2713aSLionel Sambuc   b = ^ (int i) __attribute__((availability(macosx,introduced=10.2))) { return 1; }; // expected-warning {{'availability' attribute ignored}}
53*f4a2713aSLionel Sambuc }
54*f4a2713aSLionel Sambuc 
55*f4a2713aSLionel Sambuc extern int x2 __attribute__((availability(macosx,introduced=10.2))); // expected-note {{previous attribute is here}}
56*f4a2713aSLionel Sambuc extern int x2 __attribute__((availability(macosx,introduced=10.5))); // expected-warning {{availability does not match previous declaration}}
57