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