10b57cec5SDimitry Andric//===--- Features.def - Features and Extensions database --------*- C++ -*-===// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// This file defines features exposed via __has_feature and extensions exposed 100b57cec5SDimitry Andric// via __has_extension. Users of this file must either define the FEATURE or 110b57cec5SDimitry Andric// EXTENSION macros (or both) to make use of this information. Note that these 120b57cec5SDimitry Andric// macros expect the following declarations to be available for the Predicate: 130b57cec5SDimitry Andric// 140b57cec5SDimitry Andric// const LangOptions &LangOpts; 150b57cec5SDimitry Andric// const Preprocessor &PP; 160b57cec5SDimitry Andric// 170b57cec5SDimitry Andric// The Predicate field dictates the conditions under which the feature or 180b57cec5SDimitry Andric// extension will be made available. 190b57cec5SDimitry Andric// 200b57cec5SDimitry Andric// FEATURE(...) should be used to advertise support for standard language 210b57cec5SDimitry Andric// features, whereas EXTENSION(...) should be used for clang extensions. Note 220b57cec5SDimitry Andric// that many of the identifiers in this file don't follow this rule for backward 230b57cec5SDimitry Andric// compatibility reasons. 240b57cec5SDimitry Andric// 250b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 260b57cec5SDimitry Andric 270b57cec5SDimitry Andric#if !defined(FEATURE) && !defined(EXTENSION) 280b57cec5SDimitry Andric# error Define either the FEATURE or EXTENSION macro to handle features 290b57cec5SDimitry Andric#endif 300b57cec5SDimitry Andric 310b57cec5SDimitry Andric#ifndef FEATURE 320b57cec5SDimitry Andric#define FEATURE(Name, Predicate) 330b57cec5SDimitry Andric#endif 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric#ifndef EXTENSION 360b57cec5SDimitry Andric#define EXTENSION(Name, Predicate) 370b57cec5SDimitry Andric#endif 380b57cec5SDimitry Andric 395ffd83dbSDimitry AndricFEATURE(speculative_load_hardening, LangOpts.SpeculativeLoadHardening) 400b57cec5SDimitry AndricFEATURE(address_sanitizer, 410b57cec5SDimitry Andric LangOpts.Sanitize.hasOneOf(SanitizerKind::Address | 420b57cec5SDimitry Andric SanitizerKind::KernelAddress)) 43a7dea167SDimitry AndricFEATURE(leak_sanitizer, 44a7dea167SDimitry Andric LangOpts.Sanitize.has(SanitizerKind::Leak)) 450b57cec5SDimitry AndricFEATURE(hwaddress_sanitizer, 460b57cec5SDimitry Andric LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress | 470b57cec5SDimitry Andric SanitizerKind::KernelHWAddress)) 4881ad6265SDimitry AndricFEATURE(memtag_stack, 4981ad6265SDimitry Andric LangOpts.Sanitize.has(SanitizerKind::MemtagStack)) 5081ad6265SDimitry AndricFEATURE(memtag_heap, 5181ad6265SDimitry Andric LangOpts.Sanitize.has(SanitizerKind::MemtagHeap)) 5281ad6265SDimitry AndricFEATURE(memtag_globals, 5381ad6265SDimitry Andric LangOpts.Sanitize.has(SanitizerKind::MemtagGlobals)) 540b57cec5SDimitry AndricFEATURE(xray_instrument, LangOpts.XRayInstrument) 550b57cec5SDimitry AndricFEATURE(undefined_behavior_sanitizer, 560b57cec5SDimitry Andric LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined)) 57fe6060f1SDimitry AndricFEATURE(coverage_sanitizer, LangOpts.SanitizeCoverage) 580b57cec5SDimitry AndricFEATURE(assume_nonnull, true) 590b57cec5SDimitry AndricFEATURE(attribute_analyzer_noreturn, true) 600b57cec5SDimitry AndricFEATURE(attribute_availability, true) 610b57cec5SDimitry AndricFEATURE(attribute_availability_with_message, true) 620b57cec5SDimitry AndricFEATURE(attribute_availability_app_extension, true) 630b57cec5SDimitry AndricFEATURE(attribute_availability_with_version_underscores, true) 640b57cec5SDimitry AndricFEATURE(attribute_availability_tvos, true) 650b57cec5SDimitry AndricFEATURE(attribute_availability_watchos, true) 6681ad6265SDimitry AndricFEATURE(attribute_availability_driverkit, true) 670b57cec5SDimitry AndricFEATURE(attribute_availability_with_strict, true) 680b57cec5SDimitry AndricFEATURE(attribute_availability_with_replacement, true) 690b57cec5SDimitry AndricFEATURE(attribute_availability_in_templates, true) 700b57cec5SDimitry AndricFEATURE(attribute_availability_swift, true) 710b57cec5SDimitry AndricFEATURE(attribute_cf_returns_not_retained, true) 720b57cec5SDimitry AndricFEATURE(attribute_cf_returns_retained, true) 730b57cec5SDimitry AndricFEATURE(attribute_cf_returns_on_parameters, true) 740b57cec5SDimitry AndricFEATURE(attribute_deprecated_with_message, true) 750b57cec5SDimitry AndricFEATURE(attribute_deprecated_with_replacement, true) 760b57cec5SDimitry AndricFEATURE(attribute_ext_vector_type, true) 770b57cec5SDimitry AndricFEATURE(attribute_ns_returns_not_retained, true) 780b57cec5SDimitry AndricFEATURE(attribute_ns_returns_retained, true) 790b57cec5SDimitry AndricFEATURE(attribute_ns_consumes_self, true) 800b57cec5SDimitry AndricFEATURE(attribute_ns_consumed, true) 810b57cec5SDimitry AndricFEATURE(attribute_cf_consumed, true) 820b57cec5SDimitry AndricFEATURE(attribute_objc_ivar_unused, true) 830b57cec5SDimitry AndricFEATURE(attribute_objc_method_family, true) 840b57cec5SDimitry AndricFEATURE(attribute_overloadable, true) 850b57cec5SDimitry AndricFEATURE(attribute_unavailable_with_message, true) 860b57cec5SDimitry AndricFEATURE(attribute_unused_on_fields, true) 870b57cec5SDimitry AndricFEATURE(attribute_diagnose_if_objc, true) 880b57cec5SDimitry AndricFEATURE(blocks, LangOpts.Blocks) 890b57cec5SDimitry AndricFEATURE(c_thread_safety_attributes, true) 900b57cec5SDimitry AndricFEATURE(cxx_exceptions, LangOpts.CXXExceptions) 910b57cec5SDimitry AndricFEATURE(cxx_rtti, LangOpts.RTTI &&LangOpts.RTTIData) 925f757f3fSDimitry AndricEXTENSION(define_target_os_macros, 935f757f3fSDimitry Andric PP.getPreprocessorOpts().DefineTargetOSMacros) 940b57cec5SDimitry AndricFEATURE(enumerator_attributes, true) 950b57cec5SDimitry AndricFEATURE(nullability, true) 960b57cec5SDimitry AndricFEATURE(nullability_on_arrays, true) 97e8d8bef9SDimitry AndricFEATURE(nullability_nullable_result, true) 980b57cec5SDimitry AndricFEATURE(memory_sanitizer, 990b57cec5SDimitry Andric LangOpts.Sanitize.hasOneOf(SanitizerKind::Memory | 1000b57cec5SDimitry Andric SanitizerKind::KernelMemory)) 1010b57cec5SDimitry AndricFEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread)) 1020b57cec5SDimitry AndricFEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow)) 1030b57cec5SDimitry AndricFEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo)) 104fe6060f1SDimitry AndricFEATURE(swiftasynccc, 105fe6060f1SDimitry Andric PP.getTargetInfo().checkCallingConvention(CC_SwiftAsync) == 106fe6060f1SDimitry Andric clang::TargetInfo::CCCR_OK) 1075f757f3fSDimitry AndricFEATURE(pragma_stdc_cx_limited_range, true) 1080b57cec5SDimitry Andric// Objective-C features 1090b57cec5SDimitry AndricFEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE? 1100b57cec5SDimitry AndricFEATURE(objc_arc, LangOpts.ObjCAutoRefCount) 1110b57cec5SDimitry AndricFEATURE(objc_arc_fields, true) 1120b57cec5SDimitry AndricFEATURE(objc_arc_weak, LangOpts.ObjCWeak) 1130b57cec5SDimitry AndricFEATURE(objc_default_synthesize_properties, LangOpts.ObjC) 1140b57cec5SDimitry AndricFEATURE(objc_fixed_enum, LangOpts.ObjC) 1150b57cec5SDimitry AndricFEATURE(objc_instancetype, LangOpts.ObjC) 1160b57cec5SDimitry AndricFEATURE(objc_kindof, LangOpts.ObjC) 1170b57cec5SDimitry AndricFEATURE(objc_modules, LangOpts.ObjC && LangOpts.Modules) 1180b57cec5SDimitry AndricFEATURE(objc_nonfragile_abi, LangOpts.ObjCRuntime.isNonFragile()) 1190b57cec5SDimitry AndricFEATURE(objc_property_explicit_atomic, true) 1200b57cec5SDimitry AndricFEATURE(objc_protocol_qualifier_mangling, true) 1210b57cec5SDimitry AndricFEATURE(objc_weak_class, LangOpts.ObjCRuntime.hasWeakClassImport()) 1220b57cec5SDimitry AndricFEATURE(ownership_holds, true) 1230b57cec5SDimitry AndricFEATURE(ownership_returns, true) 1240b57cec5SDimitry AndricFEATURE(ownership_takes, true) 1250b57cec5SDimitry AndricFEATURE(objc_bool, true) 1260b57cec5SDimitry AndricFEATURE(objc_subscripting, LangOpts.ObjCRuntime.isNonFragile()) 1270b57cec5SDimitry AndricFEATURE(objc_array_literals, LangOpts.ObjC) 1280b57cec5SDimitry AndricFEATURE(objc_dictionary_literals, LangOpts.ObjC) 1290b57cec5SDimitry AndricFEATURE(objc_boxed_expressions, LangOpts.ObjC) 1300b57cec5SDimitry AndricFEATURE(objc_boxed_nsvalue_expressions, LangOpts.ObjC) 1310b57cec5SDimitry AndricFEATURE(arc_cf_code_audited, true) 1320b57cec5SDimitry AndricFEATURE(objc_bridge_id, true) 1330b57cec5SDimitry AndricFEATURE(objc_bridge_id_on_typedefs, true) 1340b57cec5SDimitry AndricFEATURE(objc_generics, LangOpts.ObjC) 1350b57cec5SDimitry AndricFEATURE(objc_generics_variance, LangOpts.ObjC) 1360b57cec5SDimitry AndricFEATURE(objc_class_property, LangOpts.ObjC) 1370b57cec5SDimitry AndricFEATURE(objc_c_static_assert, LangOpts.C11) 1380b57cec5SDimitry AndricFEATURE(objc_cxx_static_assert, LangOpts.CPlusPlus11) 1390b57cec5SDimitry AndricEXTENSION(objc_c_static_assert, true) 1400b57cec5SDimitry Andric// C11 features 1410b57cec5SDimitry AndricFEATURE(c_alignas, LangOpts.C11) 1420b57cec5SDimitry AndricFEATURE(c_alignof, LangOpts.C11) 1430b57cec5SDimitry AndricFEATURE(c_atomic, LangOpts.C11) 1440b57cec5SDimitry AndricFEATURE(c_generic_selections, LangOpts.C11) 1450b57cec5SDimitry AndricFEATURE(c_static_assert, LangOpts.C11) 1460b57cec5SDimitry AndricFEATURE(c_thread_local, LangOpts.C11 &&PP.getTargetInfo().isTLSSupported()) 1470b57cec5SDimitry Andric// C++11 features 1480b57cec5SDimitry AndricFEATURE(cxx_access_control_sfinae, LangOpts.CPlusPlus11) 1490b57cec5SDimitry AndricFEATURE(cxx_alias_templates, LangOpts.CPlusPlus11) 1500b57cec5SDimitry AndricFEATURE(cxx_alignas, LangOpts.CPlusPlus11) 1510b57cec5SDimitry AndricFEATURE(cxx_alignof, LangOpts.CPlusPlus11) 1520b57cec5SDimitry AndricFEATURE(cxx_atomic, LangOpts.CPlusPlus11) 1530b57cec5SDimitry AndricFEATURE(cxx_attributes, LangOpts.CPlusPlus11) 1540b57cec5SDimitry AndricFEATURE(cxx_auto_type, LangOpts.CPlusPlus11) 1550b57cec5SDimitry AndricFEATURE(cxx_constexpr, LangOpts.CPlusPlus11) 1560b57cec5SDimitry AndricFEATURE(cxx_constexpr_string_builtins, LangOpts.CPlusPlus11) 1570b57cec5SDimitry AndricFEATURE(cxx_decltype, LangOpts.CPlusPlus11) 1580b57cec5SDimitry AndricFEATURE(cxx_decltype_incomplete_return_types, LangOpts.CPlusPlus11) 1590b57cec5SDimitry AndricFEATURE(cxx_default_function_template_args, LangOpts.CPlusPlus11) 1600b57cec5SDimitry AndricFEATURE(cxx_defaulted_functions, LangOpts.CPlusPlus11) 1610b57cec5SDimitry AndricFEATURE(cxx_delegating_constructors, LangOpts.CPlusPlus11) 1620b57cec5SDimitry AndricFEATURE(cxx_deleted_functions, LangOpts.CPlusPlus11) 1630b57cec5SDimitry AndricFEATURE(cxx_explicit_conversions, LangOpts.CPlusPlus11) 1640b57cec5SDimitry AndricFEATURE(cxx_generalized_initializers, LangOpts.CPlusPlus11) 1650b57cec5SDimitry AndricFEATURE(cxx_implicit_moves, LangOpts.CPlusPlus11) 1660b57cec5SDimitry AndricFEATURE(cxx_inheriting_constructors, LangOpts.CPlusPlus11) 1670b57cec5SDimitry AndricFEATURE(cxx_inline_namespaces, LangOpts.CPlusPlus11) 1680b57cec5SDimitry AndricFEATURE(cxx_lambdas, LangOpts.CPlusPlus11) 1690b57cec5SDimitry AndricFEATURE(cxx_local_type_template_args, LangOpts.CPlusPlus11) 1700b57cec5SDimitry AndricFEATURE(cxx_nonstatic_member_init, LangOpts.CPlusPlus11) 1710b57cec5SDimitry AndricFEATURE(cxx_noexcept, LangOpts.CPlusPlus11) 1720b57cec5SDimitry AndricFEATURE(cxx_nullptr, LangOpts.CPlusPlus11) 1730b57cec5SDimitry AndricFEATURE(cxx_override_control, LangOpts.CPlusPlus11) 1740b57cec5SDimitry AndricFEATURE(cxx_range_for, LangOpts.CPlusPlus11) 1750b57cec5SDimitry AndricFEATURE(cxx_raw_string_literals, LangOpts.CPlusPlus11) 1760b57cec5SDimitry AndricFEATURE(cxx_reference_qualified_functions, LangOpts.CPlusPlus11) 1770b57cec5SDimitry AndricFEATURE(cxx_rvalue_references, LangOpts.CPlusPlus11) 1780b57cec5SDimitry AndricFEATURE(cxx_strong_enums, LangOpts.CPlusPlus11) 1790b57cec5SDimitry AndricFEATURE(cxx_static_assert, LangOpts.CPlusPlus11) 1800b57cec5SDimitry AndricFEATURE(cxx_thread_local, 1810b57cec5SDimitry Andric LangOpts.CPlusPlus11 &&PP.getTargetInfo().isTLSSupported()) 1820b57cec5SDimitry AndricFEATURE(cxx_trailing_return, LangOpts.CPlusPlus11) 1830b57cec5SDimitry AndricFEATURE(cxx_unicode_literals, LangOpts.CPlusPlus11) 1840b57cec5SDimitry AndricFEATURE(cxx_unrestricted_unions, LangOpts.CPlusPlus11) 1850b57cec5SDimitry AndricFEATURE(cxx_user_literals, LangOpts.CPlusPlus11) 1860b57cec5SDimitry AndricFEATURE(cxx_variadic_templates, LangOpts.CPlusPlus11) 1870b57cec5SDimitry Andric// C++14 features 1880b57cec5SDimitry AndricFEATURE(cxx_aggregate_nsdmi, LangOpts.CPlusPlus14) 1890b57cec5SDimitry AndricFEATURE(cxx_binary_literals, LangOpts.CPlusPlus14) 1900b57cec5SDimitry AndricFEATURE(cxx_contextual_conversions, LangOpts.CPlusPlus14) 1910b57cec5SDimitry AndricFEATURE(cxx_decltype_auto, LangOpts.CPlusPlus14) 1920b57cec5SDimitry AndricFEATURE(cxx_generic_lambdas, LangOpts.CPlusPlus14) 1930b57cec5SDimitry AndricFEATURE(cxx_init_captures, LangOpts.CPlusPlus14) 1940b57cec5SDimitry AndricFEATURE(cxx_relaxed_constexpr, LangOpts.CPlusPlus14) 1950b57cec5SDimitry AndricFEATURE(cxx_return_type_deduction, LangOpts.CPlusPlus14) 1960b57cec5SDimitry AndricFEATURE(cxx_variable_templates, LangOpts.CPlusPlus14) 1970b57cec5SDimitry Andric// NOTE: For features covered by SD-6, it is preferable to provide *only* 1980b57cec5SDimitry Andric// the SD-6 macro and not a __has_feature check. 1990b57cec5SDimitry Andric 2000b57cec5SDimitry Andric// C++ TSes 2010b57cec5SDimitry Andric// FEATURE(cxx_runtime_arrays, LangOpts.CPlusPlusTSArrays) 2020b57cec5SDimitry Andric// FEATURE(cxx_concepts, LangOpts.CPlusPlusTSConcepts) 2030b57cec5SDimitry Andric// FIXME: Should this be __has_feature or __has_extension? 2040b57cec5SDimitry Andric// FEATURE(raw_invocation_type, LangOpts.CPlusPlus) 2050b57cec5SDimitry Andric// Type traits 2060b57cec5SDimitry Andric// N.B. Additional type traits should not be added to the following list. 207a7dea167SDimitry Andric// Instead, they should be detected by has_builtin. 2080b57cec5SDimitry AndricFEATURE(has_nothrow_assign, LangOpts.CPlusPlus) 2090b57cec5SDimitry AndricFEATURE(has_nothrow_copy, LangOpts.CPlusPlus) 2100b57cec5SDimitry AndricFEATURE(has_nothrow_constructor, LangOpts.CPlusPlus) 2110b57cec5SDimitry AndricFEATURE(has_trivial_assign, LangOpts.CPlusPlus) 2120b57cec5SDimitry AndricFEATURE(has_trivial_copy, LangOpts.CPlusPlus) 2130b57cec5SDimitry AndricFEATURE(has_trivial_constructor, LangOpts.CPlusPlus) 2140b57cec5SDimitry AndricFEATURE(has_trivial_destructor, LangOpts.CPlusPlus) 2150b57cec5SDimitry AndricFEATURE(has_virtual_destructor, LangOpts.CPlusPlus) 2160b57cec5SDimitry AndricFEATURE(is_abstract, LangOpts.CPlusPlus) 2170b57cec5SDimitry AndricFEATURE(is_base_of, LangOpts.CPlusPlus) 2180b57cec5SDimitry AndricFEATURE(is_class, LangOpts.CPlusPlus) 2190b57cec5SDimitry AndricFEATURE(is_constructible, LangOpts.CPlusPlus) 2200b57cec5SDimitry AndricFEATURE(is_convertible_to, LangOpts.CPlusPlus) 2210b57cec5SDimitry AndricFEATURE(is_empty, LangOpts.CPlusPlus) 2220b57cec5SDimitry AndricFEATURE(is_enum, LangOpts.CPlusPlus) 2230b57cec5SDimitry AndricFEATURE(is_final, LangOpts.CPlusPlus) 2240b57cec5SDimitry AndricFEATURE(is_literal, LangOpts.CPlusPlus) 2250b57cec5SDimitry AndricFEATURE(is_standard_layout, LangOpts.CPlusPlus) 2260b57cec5SDimitry AndricFEATURE(is_pod, LangOpts.CPlusPlus) 2270b57cec5SDimitry AndricFEATURE(is_polymorphic, LangOpts.CPlusPlus) 2280b57cec5SDimitry AndricFEATURE(is_sealed, LangOpts.CPlusPlus &&LangOpts.MicrosoftExt) 2290b57cec5SDimitry AndricFEATURE(is_trivial, LangOpts.CPlusPlus) 2300b57cec5SDimitry AndricFEATURE(is_trivially_assignable, LangOpts.CPlusPlus) 2310b57cec5SDimitry AndricFEATURE(is_trivially_constructible, LangOpts.CPlusPlus) 2320b57cec5SDimitry AndricFEATURE(is_trivially_copyable, LangOpts.CPlusPlus) 2330b57cec5SDimitry AndricFEATURE(is_union, LangOpts.CPlusPlus) 234bdd1243dSDimitry AndricFEATURE(kcfi, LangOpts.Sanitize.has(SanitizerKind::KCFI)) 2350b57cec5SDimitry AndricFEATURE(modules, LangOpts.Modules) 2360b57cec5SDimitry AndricFEATURE(safe_stack, LangOpts.Sanitize.has(SanitizerKind::SafeStack)) 2370b57cec5SDimitry AndricFEATURE(shadow_call_stack, 2380b57cec5SDimitry Andric LangOpts.Sanitize.has(SanitizerKind::ShadowCallStack)) 2390b57cec5SDimitry AndricFEATURE(tls, PP.getTargetInfo().isTLSSupported()) 2400b57cec5SDimitry AndricFEATURE(underlying_type, LangOpts.CPlusPlus) 241fcaf7f86SDimitry AndricFEATURE(experimental_library, LangOpts.ExperimentalLibrary) 2420b57cec5SDimitry Andric 2430b57cec5SDimitry Andric// C11 features supported by other languages as extensions. 2440b57cec5SDimitry AndricEXTENSION(c_alignas, true) 2450b57cec5SDimitry AndricEXTENSION(c_alignof, true) 2460b57cec5SDimitry AndricEXTENSION(c_atomic, true) 2470b57cec5SDimitry AndricEXTENSION(c_generic_selections, true) 24806c3fb27SDimitry AndricEXTENSION(c_generic_selection_with_controlling_type, true) 2490b57cec5SDimitry AndricEXTENSION(c_static_assert, true) 2500b57cec5SDimitry AndricEXTENSION(c_thread_local, PP.getTargetInfo().isTLSSupported()) 2515f757f3fSDimitry Andric// C23 features supported by other languages as extensions 25206c3fb27SDimitry AndricEXTENSION(c_attributes, true) 2530b57cec5SDimitry Andric// C++11 features supported by other languages as extensions. 2540b57cec5SDimitry AndricEXTENSION(cxx_atomic, LangOpts.CPlusPlus) 25506c3fb27SDimitry AndricEXTENSION(cxx_default_function_template_args, LangOpts.CPlusPlus) 25606c3fb27SDimitry AndricEXTENSION(cxx_defaulted_functions, LangOpts.CPlusPlus) 2570b57cec5SDimitry AndricEXTENSION(cxx_deleted_functions, LangOpts.CPlusPlus) 2580b57cec5SDimitry AndricEXTENSION(cxx_explicit_conversions, LangOpts.CPlusPlus) 2590b57cec5SDimitry AndricEXTENSION(cxx_inline_namespaces, LangOpts.CPlusPlus) 2600b57cec5SDimitry AndricEXTENSION(cxx_local_type_template_args, LangOpts.CPlusPlus) 2610b57cec5SDimitry AndricEXTENSION(cxx_nonstatic_member_init, LangOpts.CPlusPlus) 2620b57cec5SDimitry AndricEXTENSION(cxx_override_control, LangOpts.CPlusPlus) 2630b57cec5SDimitry AndricEXTENSION(cxx_range_for, LangOpts.CPlusPlus) 2640b57cec5SDimitry AndricEXTENSION(cxx_reference_qualified_functions, LangOpts.CPlusPlus) 2650b57cec5SDimitry AndricEXTENSION(cxx_rvalue_references, LangOpts.CPlusPlus) 2660b57cec5SDimitry AndricEXTENSION(cxx_variadic_templates, LangOpts.CPlusPlus) 2670b57cec5SDimitry AndricEXTENSION(cxx_fixed_enum, true) 2680b57cec5SDimitry Andric// C++14 features supported by other languages as extensions. 2690b57cec5SDimitry AndricEXTENSION(cxx_binary_literals, true) 2700b57cec5SDimitry AndricEXTENSION(cxx_init_captures, LangOpts.CPlusPlus11) 2710b57cec5SDimitry AndricEXTENSION(cxx_variable_templates, LangOpts.CPlusPlus) 2727a6dacacSDimitry Andric//C++20 2737a6dacacSDimitry AndricEXTENSION(cxx_generalized_nttp, LangOpts.CPlusPlus20) 2747a6dacacSDimitry Andric//C++23 2757a6dacacSDimitry AndricEXTENSION(cxx_explicit_this_parameter, LangOpts.CPlusPlus23) 2760b57cec5SDimitry Andric// Miscellaneous language extensions 2770b57cec5SDimitry AndricEXTENSION(overloadable_unmarked, true) 2780b57cec5SDimitry AndricEXTENSION(pragma_clang_attribute_namespaces, true) 2790b57cec5SDimitry AndricEXTENSION(pragma_clang_attribute_external_declaration, true) 280fe6060f1SDimitry AndricEXTENSION(statement_attributes_with_gnu_syntax, true) 2810b57cec5SDimitry AndricEXTENSION(gnu_asm, LangOpts.GNUAsm) 2825ffd83dbSDimitry AndricEXTENSION(gnu_asm_goto_with_outputs, LangOpts.GNUAsm) 28306c3fb27SDimitry AndricEXTENSION(gnu_asm_goto_with_outputs_full, LangOpts.GNUAsm) 2845ffd83dbSDimitry AndricEXTENSION(matrix_types, LangOpts.MatrixTypes) 285fe6060f1SDimitry AndricEXTENSION(matrix_types_scalar_division, true) 286fe6060f1SDimitry AndricEXTENSION(cxx_attributes_on_using_declarations, LangOpts.CPlusPlus11) 2875f757f3fSDimitry AndricEXTENSION(datasizeof, LangOpts.CPlusPlus) 2880b57cec5SDimitry Andric 289e8d8bef9SDimitry AndricFEATURE(cxx_abi_relative_vtable, LangOpts.CPlusPlus && LangOpts.RelativeCXXABIVTables) 290e8d8bef9SDimitry Andric 29181ad6265SDimitry Andric// CUDA/HIP Features 29281ad6265SDimitry AndricFEATURE(cuda_noinline_keyword, LangOpts.CUDA) 2935f757f3fSDimitry AndricEXTENSION(cuda_implicit_host_device_templates, LangOpts.CUDA && LangOpts.OffloadImplicitHostDeviceTemplates) 29481ad6265SDimitry Andric 2950b57cec5SDimitry Andric#undef EXTENSION 2960b57cec5SDimitry Andric#undef FEATURE 297