1 // RUN: %clang_cc1 -triple i386-unknown-unknown -fms-compatibility -std=c++11 -E %s -o - | FileCheck %s
2 
3 // CHECK: has_cxx11_carries_dep
4 #if __has_cpp_attribute(carries_dependency)
5   int has_cxx11_carries_dep();
6 #endif
7 
8 // CHECK: has_clang_fallthrough_1
9 #if __has_cpp_attribute(clang::fallthrough)
10   int has_clang_fallthrough_1();
11 #endif
12 
13 // CHECK: does_not_have_selectany
14 #if !__has_cpp_attribute(selectany)
15   int does_not_have_selectany();
16 #endif
17 
18 // The attribute name can be bracketed with double underscores.
19 // CHECK: has_clang_fallthrough_2
20 #if __has_cpp_attribute(clang::__fallthrough__)
21   int has_clang_fallthrough_2();
22 #endif
23 
24 // The scope cannot be bracketed with double underscores unless it is
25 // for gnu or clang.
26 // CHECK: does_not_have___gsl___suppress
27 #if !__has_cpp_attribute(__gsl__::suppress)
28   int does_not_have___gsl___suppress();
29 #endif
30 
31 // We do somewhat support the __clang__ vendor namespace, but it is a
32 // predefined macro and thus we encourage users to use _Clang instead.
33 // Because of this, we do not support __has_cpp_attribute for that
34 // vendor namespace.
35 // CHECK: does_not_have___clang___fallthrough
36 #if !__has_cpp_attribute(__clang__::fallthrough)
37   int does_not_have___clang___fallthrough();
38 #endif
39 
40 // CHECK: does_have_Clang_fallthrough
41 #if __has_cpp_attribute(_Clang::fallthrough)
42   int does_have_Clang_fallthrough();
43 #endif
44 
45 // CHECK: has_gnu_const
46 #if __has_cpp_attribute(__gnu__::__const__)
47   int has_gnu_const();
48 #endif
49 
50 // Test that C++11, target-specific attributes behave properly.
51 
52 // CHECK: does_not_have_mips16
53 #if !__has_cpp_attribute(gnu::mips16)
54   int does_not_have_mips16();
55 #endif
56 
57 // Test that the version numbers of attributes listed in SD-6 are supported
58 // correctly.
59 
60 // CHECK: has_cxx11_carries_dep_vers
61 #if __has_cpp_attribute(carries_dependency) == 200809
62   int has_cxx11_carries_dep_vers();
63 #endif
64 
65 // CHECK: has_cxx11_noreturn_vers
66 #if __has_cpp_attribute(noreturn) == 200809
67   int has_cxx11_noreturn_vers();
68 #endif
69 
70 // CHECK: has_cxx14_deprecated_vers
71 #if __has_cpp_attribute(deprecated) == 201309
72   int has_cxx14_deprecated_vers();
73 #endif
74 
75 // CHECK: has_cxx1z_nodiscard
76 #if __has_cpp_attribute(nodiscard) == 201603
77   int has_cxx1z_nodiscard();
78 #endif
79 
80 // CHECK: has_cxx1z_fallthrough
81 #if __has_cpp_attribute(fallthrough) == 201603
82   int has_cxx1z_fallthrough();
83 #endif
84 
85 // CHECK: has_declspec_uuid
86 #if __has_declspec_attribute(uuid)
87   int has_declspec_uuid();
88 #endif
89 
90 // CHECK: has_declspec_uuid2
91 #if __has_declspec_attribute(__uuid__)
92   int has_declspec_uuid2();
93 #endif
94 
95 // CHECK: does_not_have_declspec_fallthrough
96 #if !__has_declspec_attribute(fallthrough)
97   int does_not_have_declspec_fallthrough();
98 #endif
99