Clang Project

clang_source_code/test/Preprocessor/has_attribute.cpp
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