]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/Basic/Features.def
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / include / clang / Basic / Features.def
1 //===--- Features.def - Features and Extensions database --------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines features exposed via __has_feature and extensions exposed
11 // via __has_extension. Users of this file must either define the FEATURE or
12 // EXTENSION macros (or both) to make use of this information. Note that these
13 // macros expect the following declarations to be available for the Predicate:
14 //
15 //   const LangOptions &LangOpts;
16 //   const Preprocessor &PP;
17 //
18 // The Predicate field dictates the conditions under which the feature or
19 // extension will be made available.
20 //
21 // FEATURE(...) should be used to advertise support for standard language
22 // features, whereas EXTENSION(...) should be used for clang extensions. Note
23 // that many of the identifiers in this file don't follow this rule for backward
24 // compatibility reasons.
25 //
26 //===----------------------------------------------------------------------===//
27
28 #if !defined(FEATURE) && !defined(EXTENSION)
29 #  error Define either the FEATURE or EXTENSION macro to handle features
30 #endif
31
32 #ifndef FEATURE
33 #define FEATURE(Name, Predicate)
34 #endif
35
36 #ifndef EXTENSION
37 #define EXTENSION(Name, Predicate)
38 #endif
39
40 FEATURE(address_sanitizer,
41         LangOpts.Sanitize.hasOneOf(SanitizerKind::Address |
42                                    SanitizerKind::KernelAddress))
43 FEATURE(hwaddress_sanitizer,
44         LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress |
45                                    SanitizerKind::KernelHWAddress))
46 FEATURE(xray_instrument, LangOpts.XRayInstrument)
47 FEATURE(undefined_behavior_sanitizer,
48         LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined))
49 FEATURE(assume_nonnull, true)
50 FEATURE(attribute_analyzer_noreturn, true)
51 FEATURE(attribute_availability, true)
52 FEATURE(attribute_availability_with_message, true)
53 FEATURE(attribute_availability_app_extension, true)
54 FEATURE(attribute_availability_with_version_underscores, true)
55 FEATURE(attribute_availability_tvos, true)
56 FEATURE(attribute_availability_watchos, true)
57 FEATURE(attribute_availability_with_strict, true)
58 FEATURE(attribute_availability_with_replacement, true)
59 FEATURE(attribute_availability_in_templates, true)
60 FEATURE(attribute_availability_swift, true)
61 FEATURE(attribute_cf_returns_not_retained, true)
62 FEATURE(attribute_cf_returns_retained, true)
63 FEATURE(attribute_cf_returns_on_parameters, true)
64 FEATURE(attribute_deprecated_with_message, true)
65 FEATURE(attribute_deprecated_with_replacement, true)
66 FEATURE(attribute_ext_vector_type, true)
67 FEATURE(attribute_ns_returns_not_retained, true)
68 FEATURE(attribute_ns_returns_retained, true)
69 FEATURE(attribute_ns_consumes_self, true)
70 FEATURE(attribute_ns_consumed, true)
71 FEATURE(attribute_cf_consumed, true)
72 FEATURE(attribute_objc_ivar_unused, true)
73 FEATURE(attribute_objc_method_family, true)
74 FEATURE(attribute_overloadable, true)
75 FEATURE(attribute_unavailable_with_message, true)
76 FEATURE(attribute_unused_on_fields, true)
77 FEATURE(attribute_diagnose_if_objc, true)
78 FEATURE(blocks, LangOpts.Blocks)
79 FEATURE(c_thread_safety_attributes, true)
80 FEATURE(cxx_exceptions, LangOpts.CXXExceptions)
81 FEATURE(cxx_rtti, LangOpts.RTTI &&LangOpts.RTTIData)
82 FEATURE(enumerator_attributes, true)
83 FEATURE(nullability, true)
84 FEATURE(nullability_on_arrays, true)
85 FEATURE(memory_sanitizer,
86         LangOpts.Sanitize.hasOneOf(SanitizerKind::Memory |
87                                    SanitizerKind::KernelMemory))
88 FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
89 FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
90 FEATURE(efficiency_sanitizer,
91         LangOpts.Sanitize.hasOneOf(SanitizerKind::Efficiency))
92 FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
93 // Objective-C features
94 FEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
95 FEATURE(objc_arc, LangOpts.ObjCAutoRefCount)
96 FEATURE(objc_arc_fields, true)
97 FEATURE(objc_arc_weak, LangOpts.ObjCWeak)
98 FEATURE(objc_default_synthesize_properties, LangOpts.ObjC)
99 FEATURE(objc_fixed_enum, LangOpts.ObjC)
100 FEATURE(objc_instancetype, LangOpts.ObjC)
101 FEATURE(objc_kindof, LangOpts.ObjC)
102 FEATURE(objc_modules, LangOpts.ObjC && LangOpts.Modules)
103 FEATURE(objc_nonfragile_abi, LangOpts.ObjCRuntime.isNonFragile())
104 FEATURE(objc_property_explicit_atomic, true)
105 FEATURE(objc_protocol_qualifier_mangling, true)
106 FEATURE(objc_weak_class, LangOpts.ObjCRuntime.hasWeakClassImport())
107 FEATURE(ownership_holds, true)
108 FEATURE(ownership_returns, true)
109 FEATURE(ownership_takes, true)
110 FEATURE(objc_bool, true)
111 FEATURE(objc_subscripting, LangOpts.ObjCRuntime.isNonFragile())
112 FEATURE(objc_array_literals, LangOpts.ObjC)
113 FEATURE(objc_dictionary_literals, LangOpts.ObjC)
114 FEATURE(objc_boxed_expressions, LangOpts.ObjC)
115 FEATURE(objc_boxed_nsvalue_expressions, LangOpts.ObjC)
116 FEATURE(arc_cf_code_audited, true)
117 FEATURE(objc_bridge_id, true)
118 FEATURE(objc_bridge_id_on_typedefs, true)
119 FEATURE(objc_generics, LangOpts.ObjC)
120 FEATURE(objc_generics_variance, LangOpts.ObjC)
121 FEATURE(objc_class_property, LangOpts.ObjC)
122 // C11 features
123 FEATURE(c_alignas, LangOpts.C11)
124 FEATURE(c_alignof, LangOpts.C11)
125 FEATURE(c_atomic, LangOpts.C11)
126 FEATURE(c_generic_selections, LangOpts.C11)
127 FEATURE(c_static_assert, LangOpts.C11)
128 FEATURE(c_thread_local, LangOpts.C11 &&PP.getTargetInfo().isTLSSupported())
129 // C++11 features
130 FEATURE(cxx_access_control_sfinae, LangOpts.CPlusPlus11)
131 FEATURE(cxx_alias_templates, LangOpts.CPlusPlus11)
132 FEATURE(cxx_alignas, LangOpts.CPlusPlus11)
133 FEATURE(cxx_alignof, LangOpts.CPlusPlus11)
134 FEATURE(cxx_atomic, LangOpts.CPlusPlus11)
135 FEATURE(cxx_attributes, LangOpts.CPlusPlus11)
136 FEATURE(cxx_auto_type, LangOpts.CPlusPlus11)
137 FEATURE(cxx_constexpr, LangOpts.CPlusPlus11)
138 FEATURE(cxx_constexpr_string_builtins, LangOpts.CPlusPlus11)
139 FEATURE(cxx_decltype, LangOpts.CPlusPlus11)
140 FEATURE(cxx_decltype_incomplete_return_types, LangOpts.CPlusPlus11)
141 FEATURE(cxx_default_function_template_args, LangOpts.CPlusPlus11)
142 FEATURE(cxx_defaulted_functions, LangOpts.CPlusPlus11)
143 FEATURE(cxx_delegating_constructors, LangOpts.CPlusPlus11)
144 FEATURE(cxx_deleted_functions, LangOpts.CPlusPlus11)
145 FEATURE(cxx_explicit_conversions, LangOpts.CPlusPlus11)
146 FEATURE(cxx_generalized_initializers, LangOpts.CPlusPlus11)
147 FEATURE(cxx_implicit_moves, LangOpts.CPlusPlus11)
148 FEATURE(cxx_inheriting_constructors, LangOpts.CPlusPlus11)
149 FEATURE(cxx_inline_namespaces, LangOpts.CPlusPlus11)
150 FEATURE(cxx_lambdas, LangOpts.CPlusPlus11)
151 FEATURE(cxx_local_type_template_args, LangOpts.CPlusPlus11)
152 FEATURE(cxx_nonstatic_member_init, LangOpts.CPlusPlus11)
153 FEATURE(cxx_noexcept, LangOpts.CPlusPlus11)
154 FEATURE(cxx_nullptr, LangOpts.CPlusPlus11)
155 FEATURE(cxx_override_control, LangOpts.CPlusPlus11)
156 FEATURE(cxx_range_for, LangOpts.CPlusPlus11)
157 FEATURE(cxx_raw_string_literals, LangOpts.CPlusPlus11)
158 FEATURE(cxx_reference_qualified_functions, LangOpts.CPlusPlus11)
159 FEATURE(cxx_rvalue_references, LangOpts.CPlusPlus11)
160 FEATURE(cxx_strong_enums, LangOpts.CPlusPlus11)
161 FEATURE(cxx_static_assert, LangOpts.CPlusPlus11)
162 FEATURE(cxx_thread_local,
163         LangOpts.CPlusPlus11 &&PP.getTargetInfo().isTLSSupported())
164 FEATURE(cxx_trailing_return, LangOpts.CPlusPlus11)
165 FEATURE(cxx_unicode_literals, LangOpts.CPlusPlus11)
166 FEATURE(cxx_unrestricted_unions, LangOpts.CPlusPlus11)
167 FEATURE(cxx_user_literals, LangOpts.CPlusPlus11)
168 FEATURE(cxx_variadic_templates, LangOpts.CPlusPlus11)
169 // C++14 features
170 FEATURE(cxx_aggregate_nsdmi, LangOpts.CPlusPlus14)
171 FEATURE(cxx_binary_literals, LangOpts.CPlusPlus14)
172 FEATURE(cxx_contextual_conversions, LangOpts.CPlusPlus14)
173 FEATURE(cxx_decltype_auto, LangOpts.CPlusPlus14)
174 FEATURE(cxx_generic_lambdas, LangOpts.CPlusPlus14)
175 FEATURE(cxx_init_captures, LangOpts.CPlusPlus14)
176 FEATURE(cxx_relaxed_constexpr, LangOpts.CPlusPlus14)
177 FEATURE(cxx_return_type_deduction, LangOpts.CPlusPlus14)
178 FEATURE(cxx_variable_templates, LangOpts.CPlusPlus14)
179 // NOTE: For features covered by SD-6, it is preferable to provide *only*
180 // the SD-6 macro and not a __has_feature check.
181
182 // C++ TSes
183 // FEATURE(cxx_runtime_arrays, LangOpts.CPlusPlusTSArrays)
184 // FEATURE(cxx_concepts, LangOpts.CPlusPlusTSConcepts)
185 // FIXME: Should this be __has_feature or __has_extension?
186 // FEATURE(raw_invocation_type, LangOpts.CPlusPlus)
187 // Type traits
188 // N.B. Additional type traits should not be added to the following list.
189 // Instead, they should be detected by has_extension.
190 FEATURE(has_nothrow_assign, LangOpts.CPlusPlus)
191 FEATURE(has_nothrow_copy, LangOpts.CPlusPlus)
192 FEATURE(has_nothrow_constructor, LangOpts.CPlusPlus)
193 FEATURE(has_trivial_assign, LangOpts.CPlusPlus)
194 FEATURE(has_trivial_copy, LangOpts.CPlusPlus)
195 FEATURE(has_trivial_constructor, LangOpts.CPlusPlus)
196 FEATURE(has_trivial_destructor, LangOpts.CPlusPlus)
197 FEATURE(has_virtual_destructor, LangOpts.CPlusPlus)
198 FEATURE(is_abstract, LangOpts.CPlusPlus)
199 FEATURE(is_base_of, LangOpts.CPlusPlus)
200 FEATURE(is_class, LangOpts.CPlusPlus)
201 FEATURE(is_constructible, LangOpts.CPlusPlus)
202 FEATURE(is_convertible_to, LangOpts.CPlusPlus)
203 FEATURE(is_empty, LangOpts.CPlusPlus)
204 FEATURE(is_enum, LangOpts.CPlusPlus)
205 FEATURE(is_final, LangOpts.CPlusPlus)
206 FEATURE(is_literal, LangOpts.CPlusPlus)
207 FEATURE(is_standard_layout, LangOpts.CPlusPlus)
208 FEATURE(is_pod, LangOpts.CPlusPlus)
209 FEATURE(is_polymorphic, LangOpts.CPlusPlus)
210 FEATURE(is_sealed, LangOpts.CPlusPlus &&LangOpts.MicrosoftExt)
211 FEATURE(is_trivial, LangOpts.CPlusPlus)
212 FEATURE(is_trivially_assignable, LangOpts.CPlusPlus)
213 FEATURE(is_trivially_constructible, LangOpts.CPlusPlus)
214 FEATURE(is_trivially_copyable, LangOpts.CPlusPlus)
215 FEATURE(is_union, LangOpts.CPlusPlus)
216 FEATURE(modules, LangOpts.Modules)
217 FEATURE(safe_stack, LangOpts.Sanitize.has(SanitizerKind::SafeStack))
218 FEATURE(shadow_call_stack,
219         LangOpts.Sanitize.has(SanitizerKind::ShadowCallStack))
220 FEATURE(tls, PP.getTargetInfo().isTLSSupported())
221 FEATURE(underlying_type, LangOpts.CPlusPlus)
222
223 // C11 features supported by other languages as extensions.
224 EXTENSION(c_alignas, true)
225 EXTENSION(c_alignof, true)
226 EXTENSION(c_atomic, true)
227 EXTENSION(c_generic_selections, true)
228 EXTENSION(c_static_assert, true)
229 EXTENSION(c_thread_local, PP.getTargetInfo().isTLSSupported())
230 // C++11 features supported by other languages as extensions.
231 EXTENSION(cxx_atomic, LangOpts.CPlusPlus)
232 EXTENSION(cxx_deleted_functions, LangOpts.CPlusPlus)
233 EXTENSION(cxx_explicit_conversions, LangOpts.CPlusPlus)
234 EXTENSION(cxx_inline_namespaces, LangOpts.CPlusPlus)
235 EXTENSION(cxx_local_type_template_args, LangOpts.CPlusPlus)
236 EXTENSION(cxx_nonstatic_member_init, LangOpts.CPlusPlus)
237 EXTENSION(cxx_override_control, LangOpts.CPlusPlus)
238 EXTENSION(cxx_range_for, LangOpts.CPlusPlus)
239 EXTENSION(cxx_reference_qualified_functions, LangOpts.CPlusPlus)
240 EXTENSION(cxx_rvalue_references, LangOpts.CPlusPlus)
241 EXTENSION(cxx_variadic_templates, LangOpts.CPlusPlus)
242 EXTENSION(cxx_fixed_enum, true)
243 // C++14 features supported by other languages as extensions.
244 EXTENSION(cxx_binary_literals, true)
245 EXTENSION(cxx_init_captures, LangOpts.CPlusPlus11)
246 EXTENSION(cxx_variable_templates, LangOpts.CPlusPlus)
247 // Miscellaneous language extensions
248 EXTENSION(overloadable_unmarked, true)
249 EXTENSION(pragma_clang_attribute_namespaces, true)
250
251 #undef EXTENSION
252 #undef FEATURE