// RUN: %clang_cc1 -triple i386-unknown-unknown -fms-compatibility -std=c++11 -E %s -o - | FileCheck %s // CHECK: has_cxx11_carries_dep #if __has_cpp_attribute(carries_dependency) int has_cxx11_carries_dep(); #endif // CHECK: has_clang_fallthrough_1 #if __has_cpp_attribute(clang::fallthrough) int has_clang_fallthrough_1(); #endif // CHECK: does_not_have_selectany #if !__has_cpp_attribute(selectany) int does_not_have_selectany(); #endif // The attribute name can be bracketed with double underscores. // CHECK: has_clang_fallthrough_2 #if __has_cpp_attribute(clang::__fallthrough__) int has_clang_fallthrough_2(); #endif // The scope cannot be bracketed with double underscores. // CHECK: does_not_have___clang___fallthrough #if !__has_cpp_attribute(__clang__::fallthrough) int does_not_have___clang___fallthrough(); #endif // Test that C++11, target-specific attributes behave properly. // CHECK: does_not_have_mips16 #if !__has_cpp_attribute(gnu::mips16) int does_not_have_mips16(); #endif // Test that the version numbers of attributes listed in SD-6 are supported // correctly. // CHECK: has_cxx11_carries_dep_vers #if __has_cpp_attribute(carries_dependency) == 200809 int has_cxx11_carries_dep_vers(); #endif // CHECK: has_cxx11_noreturn_vers #if __has_cpp_attribute(noreturn) == 200809 int has_cxx11_noreturn_vers(); #endif // CHECK: has_cxx14_deprecated_vers #if __has_cpp_attribute(deprecated) == 201309 int has_cxx14_deprecated_vers(); #endif // CHECK: has_cxx1z_nodiscard #if __has_cpp_attribute(nodiscard) == 201603 int has_cxx1z_nodiscard(); #endif // CHECK: has_cxx1z_fallthrough #if __has_cpp_attribute(fallthrough) == 201603 int has_cxx1z_fallthrough(); #endif // CHECK: has_declspec_uuid #if __has_declspec_attribute(uuid) int has_declspec_uuid(); #endif // CHECK: has_declspec_uuid2 #if __has_declspec_attribute(__uuid__) int has_declspec_uuid2(); #endif // CHECK: does_not_have_declspec_fallthrough #if !__has_declspec_attribute(fallthrough) int does_not_have_declspec_fallthrough(); #endif