183e539b7SErik Pilkington // RUN: %clang_cc1 -triple x86_64-apple-darwin9.0.0 -verify -std=c++11 %s 283e539b7SErik Pilkington // RUN: %clang_cc1 -triple x86_64-apple-darwin9.0.0 -xobjective-c++ -verify -std=c++11 %s 3fcc53eedSErik Pilkington 48ca6ab33SErik Pilkington #if !__has_extension(pragma_clang_attribute_external_declaration) 58ca6ab33SErik Pilkington #error 68ca6ab33SErik Pilkington #endif 78ca6ab33SErik Pilkington 8fcc53eedSErik Pilkington #define BEGIN_PRAGMA _Pragma("clang attribute push (__attribute__((availability(macos, introduced=1000))), apply_to=function)") 9fcc53eedSErik Pilkington #define END_PRAGMA _Pragma("clang attribute pop") 10fcc53eedSErik Pilkington 11fcc53eedSErik Pilkington extern "C" { 12fcc53eedSErik Pilkington BEGIN_PRAGMA 13fcc53eedSErik Pilkington int f(); // expected-note{{'f' has been marked as being introduced in macOS 1000 here}} 14fcc53eedSErik Pilkington END_PRAGMA 15fcc53eedSErik Pilkington } 16fcc53eedSErik Pilkington 17fcc53eedSErik Pilkington namespace my_ns { 18fcc53eedSErik Pilkington BEGIN_PRAGMA 19fcc53eedSErik Pilkington int g(); // expected-note{{'g' has been marked as being introduced in macOS 1000 here}} 20fcc53eedSErik Pilkington END_PRAGMA 21fcc53eedSErik Pilkington namespace nested { 22fcc53eedSErik Pilkington BEGIN_PRAGMA 23fcc53eedSErik Pilkington int h(); // expected-note{{'h' has been marked as being introduced in macOS 1000 here}} 24fcc53eedSErik Pilkington END_PRAGMA 25fcc53eedSErik Pilkington } 26fcc53eedSErik Pilkington } 27fcc53eedSErik Pilkington 28fcc53eedSErik Pilkington int a = f(); // expected-warning{{'f' is only available on macOS 1000 or newer}} expected-note{{annotate 'a'}} 29fcc53eedSErik Pilkington int b = my_ns::g(); // expected-warning{{'g' is only available on macOS 1000 or newer}} expected-note{{annotate 'b'}} 30fcc53eedSErik Pilkington int c = my_ns::nested::h(); // expected-warning{{'h' is only available on macOS 1000 or newer}} expected-note{{annotate 'c'}} 31fcc53eedSErik Pilkington 32fcc53eedSErik Pilkington struct InStruct { 33fcc53eedSErik Pilkington // FIXME: This asserts in Objective-C++! 34fcc53eedSErik Pilkington #ifndef __OBJC__ 35*037861b2SSerge Pavlov BEGIN_PRAGMA // expected-error {{this pragma cannot appear in struct declaration}} 36fcc53eedSErik Pilkington #endif 37fcc53eedSErik Pilkington }; 38