1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin9.0.0 -verify -std=c++11 %s |
2 | // RUN: %clang_cc1 -triple x86_64-apple-darwin9.0.0 -xobjective-c++ -verify -std=c++11 %s |
3 | |
4 | #if !__has_extension(pragma_clang_attribute_external_declaration) |
5 | #error |
6 | #endif |
7 | |
8 | #define BEGIN_PRAGMA _Pragma("clang attribute push (__attribute__((availability(macos, introduced=1000))), apply_to=function)") |
9 | #define END_PRAGMA _Pragma("clang attribute pop") |
10 | |
11 | extern "C" { |
12 | BEGIN_PRAGMA |
13 | int f(); // expected-note{{'f' has been marked as being introduced in macOS 1000 here}} |
14 | END_PRAGMA |
15 | } |
16 | |
17 | namespace my_ns { |
18 | BEGIN_PRAGMA |
19 | int g(); // expected-note{{'g' has been marked as being introduced in macOS 1000 here}} |
20 | END_PRAGMA |
21 | namespace nested { |
22 | BEGIN_PRAGMA |
23 | int h(); // expected-note{{'h' has been marked as being introduced in macOS 1000 here}} |
24 | END_PRAGMA |
25 | } |
26 | } |
27 | |
28 | int a = f(); // expected-warning{{'f' is only available on macOS 1000 or newer}} expected-note{{annotate 'a'}} |
29 | int b = my_ns::g(); // expected-warning{{'g' is only available on macOS 1000 or newer}} expected-note{{annotate 'b'}} |
30 | int c = my_ns::nested::h(); // expected-warning{{'h' is only available on macOS 1000 or newer}} expected-note{{annotate 'c'}} |
31 | |
32 | struct InStruct { |
33 | // FIXME: This asserts in Objective-C++! |
34 | // FIXME: This is a horrible diagnostic! |
35 | #ifndef __OBJC__ |
36 | BEGIN_PRAGMA // expected-error {{expected member name or ';' after declaration specifiers}} |
37 | #endif |
38 | }; |
39 | |