| 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 | |