10a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s
2dceb53180ae145915673913a9398ba4a00b05584Douglas Gregor
3dceb53180ae145915673913a9398ba4a00b05584Douglas Gregor#if !__has_feature(attribute_availability)
4dceb53180ae145915673913a9398ba4a00b05584Douglas Gregor#  error 'availability' attribute is not available
5dceb53180ae145915673913a9398ba4a00b05584Douglas Gregor#endif
6dceb53180ae145915673913a9398ba4a00b05584Douglas Gregor
70a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregorvoid f0() __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));
80a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor
90a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregorvoid f1() __attribute__((availability(macosx,deprecated=10.4,introduced=10.2,obsoleted=10.6)));
100a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor
110a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregorvoid f2() __attribute__((availability(ios,deprecated=10.4.7,introduced=10,obsoleted=10.6)));
120a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor
130a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregorvoid f3() __attribute__((availability(ios,deprecated=10.4.7,introduced=10,obsoleted=10.6,introduced=10.2))); // expected-error{{redundant 'introduced' availability change; only the last specified change will be used}}
140a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor
15b53e417ba487f4193ef3b0485b420e0fdae643a2Douglas Gregorvoid f4() __attribute__((availability(macosx,introduced=10.5), availability(ios,unavailable)));
16b53e417ba487f4193ef3b0485b420e0fdae643a2Douglas Gregor
17b53e417ba487f4193ef3b0485b420e0fdae643a2Douglas Gregorvoid f5() __attribute__((availability(macosx,introduced=10.5), availability(ios,unavailable, unavailable))); // expected-error{{redundant 'unavailable' availability change; only the last specified change will be used}}
18b53e417ba487f4193ef3b0485b420e0fdae643a2Douglas Gregor
192fe9b7fb07dff15dd15dd8755a9a9e6de0fe46fcRichard Trieuvoid f6() __attribute__((availability(macosx,unavailable,introduced=10.5))); // expected-warning{{'unavailable' availability overrides all other availability information}}
20b53e417ba487f4193ef3b0485b420e0fdae643a2Douglas Gregor
21006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian// rdar://10095131
22006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanianenum E{
2397f8461a2c553f68a258612d2322e4281c3f0915Andy Gibbs    gorf __attribute__((availability(macosx,introduced=8.5, message = 10.0))), // expected-error {{expected string literal for optional message in 'availability' attribute}}
24006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian    garf __attribute__((availability(macosx,introduced=8.5, message))), // expected-error {{expected '=' after 'message'}}
25006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian
26006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian    foo __attribute__((availability(macosx,introduced=8.5,deprecated=9.0, message="Use CTFontCopyPostScriptName()", deprecated=10.0))) // expected-error {{expected ')'}} \
27006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian                                                                                                                                       // expected-note {{to match this '('}}
28006e42f0c8b65b783d565ef10b938a9e82fc02e3Fariborz Jahanian};
29