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 #ifndef __OBJC__ 35 BEGIN_PRAGMA // expected-error {{this pragma cannot appear in struct declaration}} 36 #endif 37 }; 38