[PowerPC] Collect some CallLowering arguments into a struct. [NFC]
[llvm-project.git] / clang / docs / LanguageExtensions.rst
blobf1df9dd93f93d9d7950664a6bb56f3a9133ed09e
1 =========================
2 Clang Language Extensions
3 =========================
5 .. contents::
6    :local:
7    :depth: 1
9 .. toctree::
10    :hidden:
12    ObjectiveCLiterals
13    BlockLanguageSpec
14    Block-ABI-Apple
15    AutomaticReferenceCounting
17 Introduction
18 ============
20 This document describes the language extensions provided by Clang.  In addition
21 to the language extensions listed here, Clang aims to support a broad range of
22 GCC extensions.  Please see the `GCC manual
23 <https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
24 these extensions.
26 .. _langext-feature_check:
28 Feature Checking Macros
29 =======================
31 Language extensions can be very useful, but only if you know you can depend on
32 them.  In order to allow fine-grain features checks, we support three builtin
33 function-like macros.  This allows you to directly test for a feature in your
34 code without having to resort to something like autoconf or fragile "compiler
35 version checks".
37 ``__has_builtin``
38 -----------------
40 This function-like macro takes a single identifier argument that is the name of
41 a builtin function, a builtin pseudo-function (taking one or more type
42 arguments), or a builtin template.
43 It evaluates to 1 if the builtin is supported or 0 if not.
44 It can be used like this:
46 .. code-block:: c++
48   #ifndef __has_builtin         // Optional of course.
49     #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
50   #endif
52   ...
53   #if __has_builtin(__builtin_trap)
54     __builtin_trap();
55   #else
56     abort();
57   #endif
58   ...
60 .. note::
62   Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
63   pseudo-functions.
65   ``__has_builtin`` should not be used to detect support for a builtin macro;
66   use ``#ifdef`` instead.
68 .. _langext-__has_feature-__has_extension:
70 ``__has_feature`` and ``__has_extension``
71 -----------------------------------------
73 These function-like macros take a single identifier argument that is the name
74 of a feature.  ``__has_feature`` evaluates to 1 if the feature is both
75 supported by Clang and standardized in the current language standard or 0 if
76 not (but see :ref:`below <langext-has-feature-back-compat>`), while
77 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
78 current language (either as a language extension or a standard language
79 feature) or 0 if not.  They can be used like this:
81 .. code-block:: c++
83   #ifndef __has_feature         // Optional of course.
84     #define __has_feature(x) 0  // Compatibility with non-clang compilers.
85   #endif
86   #ifndef __has_extension
87     #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
88   #endif
90   ...
91   #if __has_feature(cxx_rvalue_references)
92   // This code will only be compiled with the -std=c++11 and -std=gnu++11
93   // options, because rvalue references are only standardized in C++11.
94   #endif
96   #if __has_extension(cxx_rvalue_references)
97   // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
98   // and -std=gnu++98 options, because rvalue references are supported as a
99   // language extension in C++98.
100   #endif
102 .. _langext-has-feature-back-compat:
104 For backward compatibility, ``__has_feature`` can also be used to test
105 for support for non-standardized features, i.e. features not prefixed ``c_``,
106 ``cxx_`` or ``objc_``.
108 Another use of ``__has_feature`` is to check for compiler features not related
109 to the language standard, such as e.g. :doc:`AddressSanitizer
110 <AddressSanitizer>`.
112 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
113 to ``__has_feature``.
115 The feature tag is described along with the language feature below.
117 The feature name or extension name can also be specified with a preceding and
118 following ``__`` (double underscore) to avoid interference from a macro with
119 the same name.  For instance, ``__cxx_rvalue_references__`` can be used instead
120 of ``cxx_rvalue_references``.
122 ``__has_cpp_attribute``
123 -----------------------
125 This function-like macro is available in C++2a by default, and is provided as an
126 extension in earlier language standards. It takes a single argument that is the
127 name of a double-square-bracket-style attribute. The argument can either be a
128 single identifier or a scoped identifier. If the attribute is supported, a
129 nonzero value is returned. If the attribute is a standards-based attribute, this
130 macro returns a nonzero value based on the year and month in which the attribute
131 was voted into the working draft. See `WG21 SD-6
132 <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
133 for the list of values returned for standards-based attributes. If the attribute
134 is not supported by the current compliation target, this macro evaluates to 0.
135 It can be used like this:
137 .. code-block:: c++
139   #ifndef __has_cpp_attribute         // For backwards compatibility
140     #define __has_cpp_attribute(x) 0
141   #endif
143   ...
144   #if __has_cpp_attribute(clang::fallthrough)
145   #define FALLTHROUGH [[clang::fallthrough]]
146   #else
147   #define FALLTHROUGH
148   #endif
149   ...
151 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
152 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
153 of these namespaces can be specified with a preceding and following ``__``
154 (double underscore) to avoid interference from a macro with the same name. For
155 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
157 ``__has_c_attribute``
158 ---------------------
160 This function-like macro takes a single argument that is the name of an
161 attribute exposed with the double square-bracket syntax in C mode. The argument
162 can either be a single identifier or a scoped identifier. If the attribute is
163 supported, a nonzero value is returned. If the attribute is not supported by the
164 current compilation target, this macro evaluates to 0. It can be used like this:
166 .. code-block:: c
168   #ifndef __has_c_attribute         // Optional of course.
169     #define __has_c_attribute(x) 0  // Compatibility with non-clang compilers.
170   #endif
172   ...
173   #if __has_c_attribute(fallthrough)
174     #define FALLTHROUGH [[fallthrough]]
175   #else
176     #define FALLTHROUGH
177   #endif
178   ...
180 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
181 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
182 of these namespaces can be specified with a preceding and following ``__``
183 (double underscore) to avoid interference from a macro with the same name. For
184 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
186 ``__has_attribute``
187 -------------------
189 This function-like macro takes a single identifier argument that is the name of
190 a GNU-style attribute.  It evaluates to 1 if the attribute is supported by the
191 current compilation target, or 0 if not.  It can be used like this:
193 .. code-block:: c++
195   #ifndef __has_attribute         // Optional of course.
196     #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
197   #endif
199   ...
200   #if __has_attribute(always_inline)
201   #define ALWAYS_INLINE __attribute__((always_inline))
202   #else
203   #define ALWAYS_INLINE
204   #endif
205   ...
207 The attribute name can also be specified with a preceding and following ``__``
208 (double underscore) to avoid interference from a macro with the same name.  For
209 instance, ``__always_inline__`` can be used instead of ``always_inline``.
212 ``__has_declspec_attribute``
213 ----------------------------
215 This function-like macro takes a single identifier argument that is the name of
216 an attribute implemented as a Microsoft-style ``__declspec`` attribute.  It
217 evaluates to 1 if the attribute is supported by the current compilation target,
218 or 0 if not.  It can be used like this:
220 .. code-block:: c++
222   #ifndef __has_declspec_attribute         // Optional of course.
223     #define __has_declspec_attribute(x) 0  // Compatibility with non-clang compilers.
224   #endif
226   ...
227   #if __has_declspec_attribute(dllexport)
228   #define DLLEXPORT __declspec(dllexport)
229   #else
230   #define DLLEXPORT
231   #endif
232   ...
234 The attribute name can also be specified with a preceding and following ``__``
235 (double underscore) to avoid interference from a macro with the same name.  For
236 instance, ``__dllexport__`` can be used instead of ``dllexport``.
238 ``__is_identifier``
239 -------------------
241 This function-like macro takes a single identifier argument that might be either
242 a reserved word or a regular identifier. It evaluates to 1 if the argument is just
243 a regular identifier and not a reserved word, in the sense that it can then be
244 used as the name of a user-defined function or variable. Otherwise it evaluates
245 to 0.  It can be used like this:
247 .. code-block:: c++
249   ...
250   #ifdef __is_identifier          // Compatibility with non-clang compilers.
251     #if __is_identifier(__wchar_t)
252       typedef wchar_t __wchar_t;
253     #endif
254   #endif
256   __wchar_t WideCharacter;
257   ...
259 Include File Checking Macros
260 ============================
262 Not all developments systems have the same include files.  The
263 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
264 you to check for the existence of an include file before doing a possibly
265 failing ``#include`` directive.  Include file checking macros must be used
266 as expressions in ``#if`` or ``#elif`` preprocessing directives.
268 .. _langext-__has_include:
270 ``__has_include``
271 -----------------
273 This function-like macro takes a single file name string argument that is the
274 name of an include file.  It evaluates to 1 if the file can be found using the
275 include paths, or 0 otherwise:
277 .. code-block:: c++
279   // Note the two possible file name string formats.
280   #if __has_include("myinclude.h") && __has_include(<stdint.h>)
281   # include "myinclude.h"
282   #endif
284 To test for this feature, use ``#if defined(__has_include)``:
286 .. code-block:: c++
288   // To avoid problem with non-clang compilers not having this macro.
289   #if defined(__has_include)
290   #if __has_include("myinclude.h")
291   # include "myinclude.h"
292   #endif
293   #endif
295 .. _langext-__has_include_next:
297 ``__has_include_next``
298 ----------------------
300 This function-like macro takes a single file name string argument that is the
301 name of an include file.  It is like ``__has_include`` except that it looks for
302 the second instance of the given file found in the include paths.  It evaluates
303 to 1 if the second instance of the file can be found using the include paths,
304 or 0 otherwise:
306 .. code-block:: c++
308   // Note the two possible file name string formats.
309   #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
310   # include_next "myinclude.h"
311   #endif
313   // To avoid problem with non-clang compilers not having this macro.
314   #if defined(__has_include_next)
315   #if __has_include_next("myinclude.h")
316   # include_next "myinclude.h"
317   #endif
318   #endif
320 Note that ``__has_include_next``, like the GNU extension ``#include_next``
321 directive, is intended for use in headers only, and will issue a warning if
322 used in the top-level compilation file.  A warning will also be issued if an
323 absolute path is used in the file argument.
325 ``__has_warning``
326 -----------------
328 This function-like macro takes a string literal that represents a command line
329 option for a warning and returns true if that is a valid warning option.
331 .. code-block:: c++
333   #if __has_warning("-Wformat")
334   ...
335   #endif
337 .. _languageextensions-builtin-macros:
339 Builtin Macros
340 ==============
342 ``__BASE_FILE__``
343   Defined to a string that contains the name of the main input file passed to
344   Clang.
346 ``__FILE_NAME__``
347   Clang-specific extension that functions similar to ``__FILE__`` but only
348   renders the last path component (the filename) instead of an invocation
349   dependent full path to that file.
351 ``__COUNTER__``
352   Defined to an integer value that starts at zero and is incremented each time
353   the ``__COUNTER__`` macro is expanded.
355 ``__INCLUDE_LEVEL__``
356   Defined to an integral value that is the include depth of the file currently
357   being translated.  For the main file, this value is zero.
359 ``__TIMESTAMP__``
360   Defined to the date and time of the last modification of the current source
361   file.
363 ``__clang__``
364   Defined when compiling with Clang
366 ``__clang_major__``
367   Defined to the major marketing version number of Clang (e.g., the 2 in
368   2.0.1).  Note that marketing version numbers should not be used to check for
369   language features, as different vendors use different numbering schemes.
370   Instead, use the :ref:`langext-feature_check`.
372 ``__clang_minor__``
373   Defined to the minor version number of Clang (e.g., the 0 in 2.0.1).  Note
374   that marketing version numbers should not be used to check for language
375   features, as different vendors use different numbering schemes.  Instead, use
376   the :ref:`langext-feature_check`.
378 ``__clang_patchlevel__``
379   Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
381 ``__clang_version__``
382   Defined to a string that captures the Clang marketing version, including the
383   Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
385 .. _langext-vectors:
387 Vectors and Extended Vectors
388 ============================
390 Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
392 OpenCL vector types are created using the ``ext_vector_type`` attribute.  It
393 supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL.  An example
396 .. code-block:: c++
398   typedef float float4 __attribute__((ext_vector_type(4)));
399   typedef float float2 __attribute__((ext_vector_type(2)));
401   float4 foo(float2 a, float2 b) {
402     float4 c;
403     c.xz = a;
404     c.yw = b;
405     return c;
406   }
408 Query for this feature with ``__has_attribute(ext_vector_type)``.
410 Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
411 and functions.  For example:
413 .. code-block:: c++
415   vector float foo(vector int a) {
416     vector int b;
417     b = vec_add(a, a) + a;
418     return (vector float)b;
419   }
421 NEON vector types are created using ``neon_vector_type`` and
422 ``neon_polyvector_type`` attributes.  For example:
424 .. code-block:: c++
426   typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
427   typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
429   int8x8_t foo(int8x8_t a) {
430     int8x8_t v;
431     v = a;
432     return v;
433   }
435 Vector Literals
436 ---------------
438 Vector literals can be used to create vectors from a set of scalars, or
439 vectors.  Either parentheses or braces form can be used.  In the parentheses
440 form the number of literal values specified must be one, i.e. referring to a
441 scalar value, or must match the size of the vector type being created.  If a
442 single scalar literal value is specified, the scalar literal value will be
443 replicated to all the components of the vector type.  In the brackets form any
444 number of literals can be specified.  For example:
446 .. code-block:: c++
448   typedef int v4si __attribute__((__vector_size__(16)));
449   typedef float float4 __attribute__((ext_vector_type(4)));
450   typedef float float2 __attribute__((ext_vector_type(2)));
452   v4si vsi = (v4si){1, 2, 3, 4};
453   float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
454   vector int vi1 = (vector int)(1);    // vi1 will be (1, 1, 1, 1).
455   vector int vi2 = (vector int){1};    // vi2 will be (1, 0, 0, 0).
456   vector int vi3 = (vector int)(1, 2); // error
457   vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
458   vector int vi5 = (vector int)(1, 2, 3, 4);
459   float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
461 Vector Operations
462 -----------------
464 The table below shows the support for each operation by vector extension.  A
465 dash indicates that an operation is not accepted according to a corresponding
466 specification.
468 ============================== ======= ======= ============= =======
469          Operator              OpenCL  AltiVec     GCC        NEON
470 ============================== ======= ======= ============= =======
471 []                               yes     yes       yes         --
472 unary operators +, --            yes     yes       yes         --
473 ++, -- --                        yes     yes       yes         --
474 +,--,*,/,%                       yes     yes       yes         --
475 bitwise operators &,|,^,~        yes     yes       yes         --
476 >>,<<                            yes     yes       yes         --
477 !, &&, ||                        yes     --        yes [#]_    --
478 ==, !=, >, <, >=, <=             yes     yes       yes         --
479 =                                yes     yes       yes         yes
480 :? [#]_                          yes     --        yes         --
481 sizeof                           yes     yes       yes         yes
482 C-style cast                     yes     yes       yes         no
483 reinterpret_cast                 yes     no        yes         no
484 static_cast                      yes     no        yes         no
485 const_cast                       no      no        no          no
486 ============================== ======= ======= ============= =======
488 See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
490 .. [#] unary operator ! is not implemented, however && and || are.
491 .. [#] While OpenCL and GCC vectors both implement the comparison operator(?:) as a
492   'select', they operate somewhat differently. OpenCL selects based on signedness of
493   the condition operands, but GCC vectors use normal bool conversions (that is, != 0).
495 Half-Precision Floating Point
496 =============================
498 Clang supports two half-precision (16-bit) floating point types: ``__fp16`` and
499 ``_Float16``.  These types are supported in all language modes.
501 ``__fp16`` is supported on every target, as it is purely a storage format; see below.
502 ``_Float16`` is currently only supported on the following targets, with further
503 targets pending ABI standardization:
505 * 32-bit ARM
506 * 64-bit ARM (AArch64)
507 * SPIR
509 ``_Float16`` will be supported on more targets as they define ABIs for it.
511 ``__fp16`` is a storage and interchange format only.  This means that values of
512 ``__fp16`` are immediately promoted to (at least) ``float`` when used in arithmetic
513 operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``.
514 The behavior of ``__fp16`` is specified by the ARM C Language Extensions (`ACLE <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053d/IHI0053D_acle_2_1.pdf>`_).
515 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM
516 alternative format.
518 ``_Float16`` is an extended floating-point type.  This means that, just like arithmetic on
519 ``float`` or ``double``, arithmetic on ``_Float16`` operands is formally performed in the
520 ``_Float16`` type, so that e.g. the result of adding two ``_Float16`` values has type
521 ``_Float16``.  The behavior of ``_Float16`` is specified by ISO/IEC TS 18661-3:2015
522 ("Floating-point extensions for C").  As with ``__fp16``, Clang uses the ``binary16``
523 format from IEEE 754-2008 for ``_Float16``.
525 ``_Float16`` arithmetic will be performed using native half-precision support
526 when available on the target (e.g. on ARMv8.2a); otherwise it will be performed
527 at a higher precision (currently always ``float``) and then truncated down to
528 ``_Float16``.  Note that C and C++ allow intermediate floating-point operands
529 of an expression to be computed with greater precision than is expressible in
530 their type, so Clang may avoid intermediate truncations in certain cases; this may
531 lead to results that are inconsistent with native arithmetic.
533 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
534 as it has been defined by the C standards committee and has behavior that is
535 more familiar to most programmers.
537 Because ``__fp16`` operands are always immediately promoted to ``float``, the
538 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
539 arithmetic conversions is ``float``.
541 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
542 ``3.14f16``.
544 Because default argument promotion only applies to the standard floating-point
545 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
546 or untyped arguments.  As a consequence, some caution must be taken when using
547 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
548 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
549 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
550 ``double`` before using it with an ``%f`` or similar specifier.
552 Messages on ``deprecated`` and ``unavailable`` Attributes
553 =========================================================
555 An optional string message can be added to the ``deprecated`` and
556 ``unavailable`` attributes.  For example:
558 .. code-block:: c++
560   void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
562 If the deprecated or unavailable declaration is used, the message will be
563 incorporated into the appropriate diagnostic:
565 .. code-block:: none
567   harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
568         [-Wdeprecated-declarations]
569     explode();
570     ^
572 Query for this feature with
573 ``__has_extension(attribute_deprecated_with_message)`` and
574 ``__has_extension(attribute_unavailable_with_message)``.
576 Attributes on Enumerators
577 =========================
579 Clang allows attributes to be written on individual enumerators.  This allows
580 enumerators to be deprecated, made unavailable, etc.  The attribute must appear
581 after the enumerator name and before any initializer, like so:
583 .. code-block:: c++
585   enum OperationMode {
586     OM_Invalid,
587     OM_Normal,
588     OM_Terrified __attribute__((deprecated)),
589     OM_AbortOnError __attribute__((deprecated)) = 4
590   };
592 Attributes on the ``enum`` declaration do not apply to individual enumerators.
594 Query for this feature with ``__has_extension(enumerator_attributes)``.
596 'User-Specified' System Frameworks
597 ==================================
599 Clang provides a mechanism by which frameworks can be built in such a way that
600 they will always be treated as being "system frameworks", even if they are not
601 present in a system framework directory.  This can be useful to system
602 framework developers who want to be able to test building other applications
603 with development builds of their framework, including the manner in which the
604 compiler changes warning behavior for system headers.
606 Framework developers can opt-in to this mechanism by creating a
607 "``.system_framework``" file at the top-level of their framework.  That is, the
608 framework should have contents like:
610 .. code-block:: none
612   .../TestFramework.framework
613   .../TestFramework.framework/.system_framework
614   .../TestFramework.framework/Headers
615   .../TestFramework.framework/Headers/TestFramework.h
616   ...
618 Clang will treat the presence of this file as an indicator that the framework
619 should be treated as a system framework, regardless of how it was found in the
620 framework search path.  For consistency, we recommend that such files never be
621 included in installed versions of the framework.
623 Checks for Standard Language Features
624 =====================================
626 The ``__has_feature`` macro can be used to query if certain standard language
627 features are enabled.  The ``__has_extension`` macro can be used to query if
628 language features are available as an extension when compiling for a standard
629 which does not provide them.  The features which can be tested are listed here.
631 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
632 These are macros with names of the form ``__cpp_<feature_name>``, and are
633 intended to be a portable way to query the supported features of the compiler.
634 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
635 information on the version of SD-6 supported by each Clang release, and the
636 macros provided by that revision of the recommendations.
638 C++98
639 -----
641 The features listed below are part of the C++98 standard.  These features are
642 enabled by default when compiling C++ code.
644 C++ exceptions
645 ^^^^^^^^^^^^^^
647 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
648 enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
649 exceptions.
651 C++ RTTI
652 ^^^^^^^^
654 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
655 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
657 C++11
658 -----
660 The features listed below are part of the C++11 standard.  As a result, all
661 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
662 when compiling C++ code.
664 C++11 SFINAE includes access control
665 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
667 Use ``__has_feature(cxx_access_control_sfinae)`` or
668 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
669 access-control errors (e.g., calling a private constructor) are considered to
670 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
671 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
673 C++11 alias templates
674 ^^^^^^^^^^^^^^^^^^^^^
676 Use ``__has_feature(cxx_alias_templates)`` or
677 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
678 alias declarations and alias templates is enabled.
680 C++11 alignment specifiers
681 ^^^^^^^^^^^^^^^^^^^^^^^^^^
683 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
684 determine if support for alignment specifiers using ``alignas`` is enabled.
686 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
687 determine if support for the ``alignof`` keyword is enabled.
689 C++11 attributes
690 ^^^^^^^^^^^^^^^^
692 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
693 determine if support for attribute parsing with C++11's square bracket notation
694 is enabled.
696 C++11 generalized constant expressions
697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
699 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
700 constant expressions (e.g., ``constexpr``) is enabled.
702 C++11 ``decltype()``
703 ^^^^^^^^^^^^^^^^^^^^
705 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
706 determine if support for the ``decltype()`` specifier is enabled.  C++11's
707 ``decltype`` does not require type-completeness of a function call expression.
708 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
709 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
710 support for this feature is enabled.
712 C++11 default template arguments in function templates
713 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
715 Use ``__has_feature(cxx_default_function_template_args)`` or
716 ``__has_extension(cxx_default_function_template_args)`` to determine if support
717 for default template arguments in function templates is enabled.
719 C++11 ``default``\ ed functions
720 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
722 Use ``__has_feature(cxx_defaulted_functions)`` or
723 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
724 defaulted function definitions (with ``= default``) is enabled.
726 C++11 delegating constructors
727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
729 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
730 delegating constructors is enabled.
732 C++11 ``deleted`` functions
733 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
735 Use ``__has_feature(cxx_deleted_functions)`` or
736 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
737 function definitions (with ``= delete``) is enabled.
739 C++11 explicit conversion functions
740 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
742 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
743 ``explicit`` conversion functions is enabled.
745 C++11 generalized initializers
746 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
748 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
749 generalized initializers (using braced lists and ``std::initializer_list``) is
750 enabled.
752 C++11 implicit move constructors/assignment operators
753 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
755 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
756 generate move constructors and move assignment operators where needed.
758 C++11 inheriting constructors
759 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
761 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
762 inheriting constructors is enabled.
764 C++11 inline namespaces
765 ^^^^^^^^^^^^^^^^^^^^^^^
767 Use ``__has_feature(cxx_inline_namespaces)`` or
768 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
769 namespaces is enabled.
771 C++11 lambdas
772 ^^^^^^^^^^^^^
774 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
775 determine if support for lambdas is enabled.
777 C++11 local and unnamed types as template arguments
778 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
780 Use ``__has_feature(cxx_local_type_template_args)`` or
781 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
782 local and unnamed types as template arguments is enabled.
784 C++11 noexcept
785 ^^^^^^^^^^^^^^
787 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
788 determine if support for noexcept exception specifications is enabled.
790 C++11 in-class non-static data member initialization
791 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
793 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
794 initialization of non-static data members is enabled.
796 C++11 ``nullptr``
797 ^^^^^^^^^^^^^^^^^
799 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
800 determine if support for ``nullptr`` is enabled.
802 C++11 ``override control``
803 ^^^^^^^^^^^^^^^^^^^^^^^^^^
805 Use ``__has_feature(cxx_override_control)`` or
806 ``__has_extension(cxx_override_control)`` to determine if support for the
807 override control keywords is enabled.
809 C++11 reference-qualified functions
810 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
812 Use ``__has_feature(cxx_reference_qualified_functions)`` or
813 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
814 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
815 applied to ``*this``) is enabled.
817 C++11 range-based ``for`` loop
818 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
820 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
821 determine if support for the range-based for loop is enabled.
823 C++11 raw string literals
824 ^^^^^^^^^^^^^^^^^^^^^^^^^
826 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
827 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
829 C++11 rvalue references
830 ^^^^^^^^^^^^^^^^^^^^^^^
832 Use ``__has_feature(cxx_rvalue_references)`` or
833 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
834 references is enabled.
836 C++11 ``static_assert()``
837 ^^^^^^^^^^^^^^^^^^^^^^^^^
839 Use ``__has_feature(cxx_static_assert)`` or
840 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
841 assertions using ``static_assert`` is enabled.
843 C++11 ``thread_local``
844 ^^^^^^^^^^^^^^^^^^^^^^
846 Use ``__has_feature(cxx_thread_local)`` to determine if support for
847 ``thread_local`` variables is enabled.
849 C++11 type inference
850 ^^^^^^^^^^^^^^^^^^^^
852 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
853 determine C++11 type inference is supported using the ``auto`` specifier.  If
854 this is disabled, ``auto`` will instead be a storage class specifier, as in C
855 or C++98.
857 C++11 strongly typed enumerations
858 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
860 Use ``__has_feature(cxx_strong_enums)`` or
861 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
862 typed, scoped enumerations is enabled.
864 C++11 trailing return type
865 ^^^^^^^^^^^^^^^^^^^^^^^^^^
867 Use ``__has_feature(cxx_trailing_return)`` or
868 ``__has_extension(cxx_trailing_return)`` to determine if support for the
869 alternate function declaration syntax with trailing return type is enabled.
871 C++11 Unicode string literals
872 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
874 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
875 string literals is enabled.
877 C++11 unrestricted unions
878 ^^^^^^^^^^^^^^^^^^^^^^^^^
880 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
881 unrestricted unions is enabled.
883 C++11 user-defined literals
884 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
886 Use ``__has_feature(cxx_user_literals)`` to determine if support for
887 user-defined literals is enabled.
889 C++11 variadic templates
890 ^^^^^^^^^^^^^^^^^^^^^^^^
892 Use ``__has_feature(cxx_variadic_templates)`` or
893 ``__has_extension(cxx_variadic_templates)`` to determine if support for
894 variadic templates is enabled.
896 C++14
897 -----
899 The features listed below are part of the C++14 standard.  As a result, all
900 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
901 when compiling C++ code.
903 C++14 binary literals
904 ^^^^^^^^^^^^^^^^^^^^^
906 Use ``__has_feature(cxx_binary_literals)`` or
907 ``__has_extension(cxx_binary_literals)`` to determine whether
908 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
909 feature as an extension in all language modes.
911 C++14 contextual conversions
912 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
914 Use ``__has_feature(cxx_contextual_conversions)`` or
915 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
916 are used when performing an implicit conversion for an array bound in a
917 *new-expression*, the operand of a *delete-expression*, an integral constant
918 expression, or a condition in a ``switch`` statement.
920 C++14 decltype(auto)
921 ^^^^^^^^^^^^^^^^^^^^
923 Use ``__has_feature(cxx_decltype_auto)`` or
924 ``__has_extension(cxx_decltype_auto)`` to determine if support
925 for the ``decltype(auto)`` placeholder type is enabled.
927 C++14 default initializers for aggregates
928 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
930 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
931 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
932 for default initializers in aggregate members is enabled.
934 C++14 digit separators
935 ^^^^^^^^^^^^^^^^^^^^^^
937 Use ``__cpp_digit_separators`` to determine if support for digit separators
938 using single quotes (for instance, ``10'000``) is enabled. At this time, there
939 is no corresponding ``__has_feature`` name
941 C++14 generalized lambda capture
942 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
944 Use ``__has_feature(cxx_init_captures)`` or
945 ``__has_extension(cxx_init_captures)`` to determine if support for
946 lambda captures with explicit initializers is enabled
947 (for instance, ``[n(0)] { return ++n; }``).
949 C++14 generic lambdas
950 ^^^^^^^^^^^^^^^^^^^^^
952 Use ``__has_feature(cxx_generic_lambdas)`` or
953 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
954 (polymorphic) lambdas is enabled
955 (for instance, ``[] (auto x) { return x + 1; }``).
957 C++14 relaxed constexpr
958 ^^^^^^^^^^^^^^^^^^^^^^^
960 Use ``__has_feature(cxx_relaxed_constexpr)`` or
961 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
962 declarations, local variable modification, and control flow constructs
963 are permitted in ``constexpr`` functions.
965 C++14 return type deduction
966 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
968 Use ``__has_feature(cxx_return_type_deduction)`` or
969 ``__has_extension(cxx_return_type_deduction)`` to determine if support
970 for return type deduction for functions (using ``auto`` as a return type)
971 is enabled.
973 C++14 runtime-sized arrays
974 ^^^^^^^^^^^^^^^^^^^^^^^^^^
976 Use ``__has_feature(cxx_runtime_array)`` or
977 ``__has_extension(cxx_runtime_array)`` to determine if support
978 for arrays of runtime bound (a restricted form of variable-length arrays)
979 is enabled.
980 Clang's implementation of this feature is incomplete.
982 C++14 variable templates
983 ^^^^^^^^^^^^^^^^^^^^^^^^
985 Use ``__has_feature(cxx_variable_templates)`` or
986 ``__has_extension(cxx_variable_templates)`` to determine if support for
987 templated variable declarations is enabled.
992 The features listed below are part of the C11 standard.  As a result, all these
993 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
994 compiling C code.  Additionally, because these features are all
995 backward-compatible, they are available as extensions in all language modes.
997 C11 alignment specifiers
998 ^^^^^^^^^^^^^^^^^^^^^^^^
1000 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1001 if support for alignment specifiers using ``_Alignas`` is enabled.
1003 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1004 if support for the ``_Alignof`` keyword is enabled.
1006 C11 atomic operations
1007 ^^^^^^^^^^^^^^^^^^^^^
1009 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1010 if support for atomic types using ``_Atomic`` is enabled.  Clang also provides
1011 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
1012 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1013 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1014 is available.
1016 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1017 will otherwise use its own. When using its own, implementations of the atomic
1018 operations are provided as macros. In the cases where C11 also requires a real
1019 function, this header provides only the declaration of that function (along
1020 with a shadowing macro implementation), and you must link to a library which
1021 provides a definition of the function if you use it instead of the macro.
1023 C11 generic selections
1024 ^^^^^^^^^^^^^^^^^^^^^^
1026 Use ``__has_feature(c_generic_selections)`` or
1027 ``__has_extension(c_generic_selections)`` to determine if support for generic
1028 selections is enabled.
1030 As an extension, the C11 generic selection expression is available in all
1031 languages supported by Clang.  The syntax is the same as that given in the C11
1032 standard.
1034 In C, type compatibility is decided according to the rules given in the
1035 appropriate standard, but in C++, which lacks the type compatibility rules used
1036 in C, types are considered compatible only if they are equivalent.
1038 C11 ``_Static_assert()``
1039 ^^^^^^^^^^^^^^^^^^^^^^^^
1041 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1042 to determine if support for compile-time assertions using ``_Static_assert`` is
1043 enabled.
1045 C11 ``_Thread_local``
1046 ^^^^^^^^^^^^^^^^^^^^^
1048 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1049 to determine if support for ``_Thread_local`` variables is enabled.
1051 Modules
1052 -------
1054 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1055 For example, compiling code with ``-fmodules`` enables the use of Modules.
1057 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1059 Type Trait Primitives
1060 =====================
1062 Type trait primitives are special builtin constant expressions that can be used
1063 by the standard C++ library to facilitate or simplify the implementation of
1064 user-facing type traits in the <type_traits> header.
1066 They are not intended to be used directly by user code because they are
1067 implementation-defined and subject to change -- as such they're tied closely to
1068 the supported set of system headers, currently:
1070 * LLVM's own libc++
1071 * GNU libstdc++
1072 * The Microsoft standard C++ library
1074 Clang supports the `GNU C++ type traits
1075 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1076 `Microsoft Visual C++ type traits
1077 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1078 as well as nearly all of the
1079 `Embarcadero C++ type traits
1080 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
1082 The following type trait primitives are supported by Clang. Those traits marked
1083 (C++) provide implementations for type traits specified by the C++ standard;
1084 ``__X(...)`` has the same semantics and constraints as the corresponding
1085 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
1087 * ``__array_rank(type)`` (Embarcadero):
1088   Returns the number of levels of array in the type ``type``:
1089   ``0`` if ``type`` is not an array type, and
1090   ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1091 * ``__array_extent(type, dim)`` (Embarcadero):
1092   The ``dim``'th array bound in the type ``type``, or ``0`` if
1093   ``dim >= __array_rank(type)``.
1094 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1095   Deprecated, use ``__is_nothrow_assignable`` instead.
1096 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
1097   Deprecated, use ``__is_nothrow_assignable`` instead.
1098 * ``__has_nothrow_copy`` (GNU, Microsoft):
1099   Deprecated, use ``__is_nothrow_constructible`` instead.
1100 * ``__has_nothrow_constructor`` (GNU, Microsoft):
1101   Deprecated, use ``__is_nothrow_constructible`` instead.
1102 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1103   Deprecated, use ``__is_trivially_assignable`` instead.
1104 * ``__has_trivial_move_assign`` (GNU, Microsoft):
1105   Deprecated, use ``__is_trivially_assignable`` instead.
1106 * ``__has_trivial_copy`` (GNU, Microsoft):
1107   Deprecated, use ``__is_trivially_constructible`` instead.
1108 * ``__has_trivial_constructor`` (GNU, Microsoft):
1109   Deprecated, use ``__is_trivially_constructible`` instead.
1110 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
1111   Deprecated, use ``__is_trivially_constructible`` instead.
1112 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1113   Deprecated, use ``__is_trivially_destructible`` instead.
1114 * ``__has_unique_object_representations`` (C++, GNU)
1115 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1116 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1117 * ``__is_aggregate`` (C++, GNU, Microsoft)
1118 * ``__is_arithmetic`` (C++, Embarcadero)
1119 * ``__is_array`` (C++, Embarcadero)
1120 * ``__is_assignable`` (C++, MSVC 2015)
1121 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1122 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1123 * ``__is_complete_type(type)`` (Embarcadero):
1124   Return ``true`` if ``type`` is a complete type.
1125   Warning: this trait is dangerous because it can return different values at
1126   different points in the same program.
1127 * ``__is_compound`` (C++, Embarcadero)
1128 * ``__is_const`` (C++, Embarcadero)
1129 * ``__is_constructible`` (C++, MSVC 2013)
1130 * ``__is_convertible`` (C++, Embarcadero)
1131 * ``__is_convertible_to`` (Microsoft):
1132   Synonym for ``__is_convertible``.
1133 * ``__is_destructible`` (C++, MSVC 2013):
1134   Only available in ``-fms-extensions`` mode.
1135 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1136 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1137 * ``__is_final`` (C++, GNU, Microsoft)
1138 * ``__is_floating_point`` (C++, Embarcadero)
1139 * ``__is_function`` (C++, Embarcadero)
1140 * ``__is_fundamental`` (C++, Embarcadero)
1141 * ``__is_integral`` (C++, Embarcadero)
1142 * ``__is_interface_class`` (Microsoft):
1143   Returns ``false``, even for types defined with ``__interface``.
1144 * ``__is_literal`` (Clang):
1145   Synonym for ``__is_literal_type``.
1146 * ``__is_literal_type`` (C++, GNU, Microsoft):
1147   Note, the corresponding standard trait was deprecated in C++17
1148   and removed in C++20.
1149 * ``__is_lvalue_reference`` (C++, Embarcadero)
1150 * ``__is_member_object_pointer`` (C++, Embarcadero)
1151 * ``__is_member_function_pointer`` (C++, Embarcadero)
1152 * ``__is_member_pointer`` (C++, Embarcadero)
1153 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
1154 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
1155 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
1156   Only available in ``-fms-extensions`` mode.
1157 * ``__is_object`` (C++, Embarcadero)
1158 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1159   Note, the corresponding standard trait was deprecated in C++20.
1160 * ``__is_pointer`` (C++, Embarcadero)
1161 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1162 * ``__is_reference`` (C++, Embarcadero)
1163 * ``__is_rvalue_reference`` (C++, Embarcadero)
1164 * ``__is_same`` (C++, Embarcadero)
1165 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
1166 * ``__is_scalar`` (C++, Embarcadero)
1167 * ``__is_sealed`` (Microsoft):
1168   Synonym for ``__is_final``.
1169 * ``__is_signed`` (C++, Embarcadero):
1170   Returns false for enumeration types, and returns true for floating-point types. Note, before Clang 10, returned true for enumeration types if the underlying type was signed, and returned false for floating-point types.
1171 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1172 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1173 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1174 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1175 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1176 * ``__is_trivially_destructible`` (C++, MSVC 2013)
1177 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1178 * ``__is_unsigned`` (C++, Embarcadero)
1179   Note that this currently returns true for enumeration types if the underlying
1180   type is unsigned, in violation of the requirements for ``std::is_unsigned``.
1181   This behavior is likely to change in a future version of Clang.
1182 * ``__is_void`` (C++, Embarcadero)
1183 * ``__is_volatile`` (C++, Embarcadero)
1184 * ``__reference_binds_to_temporary(T, U)`` (Clang):  Determines whether a
1185   reference of type ``T`` bound to an expression of type ``U`` would bind to a
1186   materialized temporary object. If ``T`` is not a reference type the result
1187   is false. Note this trait will also return false when the initialization of
1188   ``T`` from ``U`` is ill-formed.
1189 * ``__underlying_type`` (C++, GNU, Microsoft)
1191 In addition, the following expression traits are supported:
1193 * ``__is_lvalue_expr(e)`` (Embarcadero):
1194   Returns true if ``e`` is an lvalue expression.
1195   Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1196 * ``__is_rvalue_expr(e)`` (Embarcadero):
1197   Returns true if ``e`` is a prvalue expression.
1198   Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1200 There are multiple ways to detect support for a type trait ``__X`` in the
1201 compiler, depending on the oldest version of Clang you wish to support.
1203 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1204 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1205 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1206   the following traits:
1208   * ``__has_nothrow_assign``
1209   * ``__has_nothrow_copy``
1210   * ``__has_nothrow_constructor``
1211   * ``__has_trivial_assign``
1212   * ``__has_trivial_copy``
1213   * ``__has_trivial_constructor``
1214   * ``__has_trivial_destructor``
1215   * ``__has_virtual_destructor``
1216   * ``__is_abstract``
1217   * ``__is_base_of``
1218   * ``__is_class``
1219   * ``__is_constructible``
1220   * ``__is_convertible_to``
1221   * ``__is_empty``
1222   * ``__is_enum``
1223   * ``__is_final``
1224   * ``__is_literal``
1225   * ``__is_standard_layout``
1226   * ``__is_pod``
1227   * ``__is_polymorphic``
1228   * ``__is_sealed``
1229   * ``__is_trivial``
1230   * ``__is_trivially_assignable``
1231   * ``__is_trivially_constructible``
1232   * ``__is_trivially_copyable``
1233   * ``__is_union``
1234   * ``__underlying_type``
1236 A simplistic usage example as might be seen in standard C++ headers follows:
1238 .. code-block:: c++
1240   #if __has_builtin(__is_convertible_to)
1241   template<typename From, typename To>
1242   struct is_convertible_to {
1243     static const bool value = __is_convertible_to(From, To);
1244   };
1245   #else
1246   // Emulate type trait for compatibility with other compilers.
1247   #endif
1249 Blocks
1250 ======
1252 The syntax and high level language feature description is in
1253 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1254 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1256 Query for this feature with ``__has_extension(blocks)``.
1258 Objective-C Features
1259 ====================
1261 Related result types
1262 --------------------
1264 According to Cocoa conventions, Objective-C methods with certain names
1265 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1266 the receiving class's type.  Such methods are said to have a "related result
1267 type", meaning that a message send to one of these methods will have the same
1268 static type as an instance of the receiver class.  For example, given the
1269 following classes:
1271 .. code-block:: objc
1273   @interface NSObject
1274   + (id)alloc;
1275   - (id)init;
1276   @end
1278   @interface NSArray : NSObject
1279   @end
1281 and this common initialization pattern
1283 .. code-block:: objc
1285   NSArray *array = [[NSArray alloc] init];
1287 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1288 ``alloc`` implicitly has a related result type.  Similarly, the type of the
1289 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1290 related result type and its receiver is known to have the type ``NSArray *``.
1291 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1292 would have had type ``id``, as declared in the method signature.
1294 A method with a related result type can be declared by using the type
1295 ``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
1296 that is only permitted in the result type of an Objective-C method, e.g.
1298 .. code-block:: objc
1300   @interface A
1301   + (instancetype)constructAnA;
1302   @end
1304 The related result type can also be inferred for some methods.  To determine
1305 whether a method has an inferred related result type, the first word in the
1306 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1307 and the method will have a related result type if its return type is compatible
1308 with the type of its class and if:
1310 * the first word is "``alloc``" or "``new``", and the method is a class method,
1311   or
1313 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1314   and the method is an instance method.
1316 If a method with a related result type is overridden by a subclass method, the
1317 subclass method must also return a type that is compatible with the subclass
1318 type.  For example:
1320 .. code-block:: objc
1322   @interface NSString : NSObject
1323   - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1324   @end
1326 Related result types only affect the type of a message send or property access
1327 via the given method.  In all other respects, a method with a related result
1328 type is treated the same way as method that returns ``id``.
1330 Use ``__has_feature(objc_instancetype)`` to determine whether the
1331 ``instancetype`` contextual keyword is available.
1333 Automatic reference counting
1334 ----------------------------
1336 Clang provides support for :doc:`automated reference counting
1337 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1338 for manual ``retain``/``release``/``autorelease`` message sends.  There are three
1339 feature macros associated with automatic reference counting:
1340 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1341 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1342 automated reference counting also includes support for ``__weak`` pointers to
1343 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1344 are allowed to have fields that are pointers to Objective-C objects managed by
1345 automatic reference counting.
1347 .. _objc-weak:
1349 Weak references
1350 ---------------
1352 Clang supports ARC-style weak and unsafe references in Objective-C even
1353 outside of ARC mode.  Weak references must be explicitly enabled with
1354 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1355 to test whether they are enabled.  Unsafe references are enabled
1356 unconditionally.  ARC-style weak and unsafe references cannot be used
1357 when Objective-C garbage collection is enabled.
1359 Except as noted below, the language rules for the ``__weak`` and
1360 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1361 ``unsafe_unretained`` property attributes) are just as laid out
1362 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1363 In particular, note that some classes do not support forming weak
1364 references to their instances, and note that special care must be
1365 taken when storing weak references in memory where initialization
1366 and deinitialization are outside the responsibility of the compiler
1367 (such as in ``malloc``-ed memory).
1369 Loading from a ``__weak`` variable always implicitly retains the
1370 loaded value.  In non-ARC modes, this retain is normally balanced
1371 by an implicit autorelease.  This autorelease can be suppressed
1372 by performing the load in the receiver position of a ``-retain``
1373 message send (e.g. ``[weakReference retain]``); note that this performs
1374 only a single retain (the retain done when primitively loading from
1375 the weak reference).
1377 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1378 default behavior of variables and therefore is not needed.  However,
1379 it does have an effect on the semantics of block captures: normally,
1380 copying a block which captures an Objective-C object or block pointer
1381 causes the captured pointer to be retained or copied, respectively,
1382 but that behavior is suppressed when the captured variable is qualified
1383 with ``__unsafe_unretained``.
1385 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1386 all non-ARC modes and was silently ignored outside of GC modes.  It now
1387 means the ARC-style qualifier in all non-GC modes and is no longer
1388 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1389 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1390 in all non-GC Objective-C modes.
1392 .. _objc-fixed-enum:
1394 Enumerations with a fixed underlying type
1395 -----------------------------------------
1397 Clang provides support for C++11 enumerations with a fixed underlying type
1398 within Objective-C.  For example, one can write an enumeration type as:
1400 .. code-block:: c++
1402   typedef enum : unsigned char { Red, Green, Blue } Color;
1404 This specifies that the underlying type, which is used to store the enumeration
1405 value, is ``unsigned char``.
1407 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1408 underlying types is available in Objective-C.
1410 Interoperability with C++11 lambdas
1411 -----------------------------------
1413 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1414 permitting a lambda to be implicitly converted to a block pointer with the
1415 corresponding signature.  For example, consider an API such as ``NSArray``'s
1416 array-sorting method:
1418 .. code-block:: objc
1420   - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1422 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1423 (^)(id, id)``, and parameters of this type are generally provided with block
1424 literals as arguments.  However, one can also use a C++11 lambda so long as it
1425 provides the same signature (in this case, accepting two parameters of type
1426 ``id`` and returning an ``NSComparisonResult``):
1428 .. code-block:: objc
1430   NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1431                      @"String 02"];
1432   const NSStringCompareOptions comparisonOptions
1433     = NSCaseInsensitiveSearch | NSNumericSearch |
1434       NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1435   NSLocale *currentLocale = [NSLocale currentLocale];
1436   NSArray *sorted
1437     = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1438                NSRange string1Range = NSMakeRange(0, [s1 length]);
1439                return [s1 compare:s2 options:comparisonOptions
1440                range:string1Range locale:currentLocale];
1441        }];
1442   NSLog(@"sorted: %@", sorted);
1444 This code relies on an implicit conversion from the type of the lambda
1445 expression (an unnamed, local class type called the *closure type*) to the
1446 corresponding block pointer type.  The conversion itself is expressed by a
1447 conversion operator in that closure type that produces a block pointer with the
1448 same signature as the lambda itself, e.g.,
1450 .. code-block:: objc
1452   operator NSComparisonResult (^)(id, id)() const;
1454 This conversion function returns a new block that simply forwards the two
1455 parameters to the lambda object (which it captures by copy), then returns the
1456 result.  The returned block is first copied (with ``Block_copy``) and then
1457 autoreleased.  As an optimization, if a lambda expression is immediately
1458 converted to a block pointer (as in the first example, above), then the block
1459 is not copied and autoreleased: rather, it is given the same lifetime as a
1460 block literal written at that point in the program, which avoids the overhead
1461 of copying a block to the heap in the common case.
1463 The conversion from a lambda to a block pointer is only available in
1464 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1465 management (autorelease).
1467 Object Literals and Subscripting
1468 --------------------------------
1470 Clang provides support for :doc:`Object Literals and Subscripting
1471 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1472 programming patterns, makes programs more concise, and improves the safety of
1473 container creation.  There are several feature macros associated with object
1474 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1475 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1476 tests the availability of dictionary literals;
1477 ``__has_feature(objc_subscripting)`` tests the availability of object
1478 subscripting.
1480 Objective-C Autosynthesis of Properties
1481 ---------------------------------------
1483 Clang provides support for autosynthesis of declared properties.  Using this
1484 feature, clang provides default synthesis of those properties not declared
1485 @dynamic and not having user provided backing getter and setter methods.
1486 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1487 of this feature in version of clang being used.
1489 .. _langext-objc-retain-release:
1491 Objective-C retaining behavior attributes
1492 -----------------------------------------
1494 In Objective-C, functions and methods are generally assumed to follow the
1495 `Cocoa Memory Management
1496 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1497 conventions for ownership of object arguments and
1498 return values. However, there are exceptions, and so Clang provides attributes
1499 to allow these exceptions to be documented. This are used by ARC and the
1500 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
1501 better described using the ``objc_method_family`` attribute instead.
1503 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1504 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1505 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1506 that return Objective-C or CoreFoundation objects. They are commonly placed at
1507 the end of a function prototype or method declaration:
1509 .. code-block:: objc
1511   id foo() __attribute__((ns_returns_retained));
1513   - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1515 The ``*_returns_retained`` attributes specify that the returned object has a +1
1516 retain count.  The ``*_returns_not_retained`` attributes specify that the return
1517 object has a +0 retain count, even if the normal convention for its selector
1518 would be +1.  ``ns_returns_autoreleased`` specifies that the returned object is
1519 +0, but is guaranteed to live at least as long as the next flush of an
1520 autorelease pool.
1522 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1523 an parameter declaration; they specify that the argument is expected to have a
1524 +1 retain count, which will be balanced in some way by the function or method.
1525 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1526 method; it specifies that the method expects its ``self`` parameter to have a
1527 +1 retain count, which it will balance in some way.
1529 .. code-block:: objc
1531   void foo(__attribute__((ns_consumed)) NSString *string);
1533   - (void) bar __attribute__((ns_consumes_self));
1534   - (void) baz:(id) __attribute__((ns_consumed)) x;
1536 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
1537 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
1539 Query for these features with ``__has_attribute(ns_consumed)``,
1540 ``__has_attribute(ns_returns_retained)``, etc.
1542 Objective-C @available
1543 ----------------------
1545 It is possible to use the newest SDK but still build a program that can run on
1546 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
1547 ``-miphoneos-version-min=``.
1549 Before LLVM 5.0, when calling a function that exists only in the OS that's
1550 newer than the target OS (as determined by the minimum deployment version),
1551 programmers had to carefully check if the function exists at runtime, using
1552 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
1553 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
1554 Objective-C methods.  If such a check was missed, the program would compile
1555 fine, run fine on newer systems, but crash on older systems.
1557 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
1558 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
1559 with the new ``@available()`` keyword to assist with this issue.
1560 When a method that's introduced in the OS newer than the target OS is called, a
1561 -Wunguarded-availability warning is emitted if that call is not guarded:
1563 .. code-block:: objc
1565   void my_fun(NSSomeClass* var) {
1566     // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
1567     // built with -mmacosx-version-min=10.11, then this unconditional call
1568     // will emit a -Wunguarded-availability warning:
1569     [var fancyNewMethod];
1570   }
1572 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
1573 ``if(@available())``:
1575 .. code-block:: objc
1577   void my_fun(NSSomeClass* var) {
1578     if (@available(macOS 10.12, *)) {
1579       [var fancyNewMethod];
1580     } else {
1581       // Put fallback behavior for old macOS versions (and for non-mac
1582       // platforms) here.
1583     }
1584   }
1586 The ``*`` is required and means that platforms not explicitly listed will take
1587 the true branch, and the compiler will emit ``-Wunguarded-availability``
1588 warnings for unlisted platforms based on those platform's deployment target.
1589 More than one platform can be listed in ``@available()``:
1591 .. code-block:: objc
1593   void my_fun(NSSomeClass* var) {
1594     if (@available(macOS 10.12, iOS 10, *)) {
1595       [var fancyNewMethod];
1596     }
1597   }
1599 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
1600 on 10.12, then add an `availability attribute
1601 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
1602 which will also suppress the warning and require that calls to my_fun() are
1603 checked:
1605 .. code-block:: objc
1607   API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
1608     [var fancyNewMethod];  // Now ok.
1609   }
1611 ``@available()`` is only available in Objective-C code.  To use the feature
1612 in C and C++ code, use the ``__builtin_available()`` spelling instead.
1614 If existing code uses null checks or ``-respondsToSelector:``, it should
1615 be changed to use ``@available()`` (or ``__builtin_available``) instead.
1617 ``-Wunguarded-availability`` is disabled by default, but
1618 ``-Wunguarded-availability-new``, which only emits this warning for APIs
1619 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
1620 tvOS >= 11, is enabled by default.
1622 .. _langext-overloading:
1624 Objective-C++ ABI: protocol-qualifier mangling of parameters
1625 ------------------------------------------------------------
1627 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
1628 type is a qualified-``id`` (e.g., ``id<Foo>``).  This mangling allows such
1629 parameters to be differentiated from those with the regular unqualified ``id``
1630 type.
1632 This was a non-backward compatible mangling change to the ABI.  This change
1633 allows proper overloading, and also prevents mangling conflicts with template
1634 parameters of protocol-qualified type.
1636 Query the presence of this new mangling with
1637 ``__has_feature(objc_protocol_qualifier_mangling)``.
1639 Initializer lists for complex numbers in C
1640 ==========================================
1642 clang supports an extension which allows the following in C:
1644 .. code-block:: c++
1646   #include <math.h>
1647   #include <complex.h>
1648   complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1650 This construct is useful because there is no way to separately initialize the
1651 real and imaginary parts of a complex variable in standard C, given that clang
1652 does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
1653 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
1654 in static initializers.)
1656 Note that this extension does not allow eliding the braces; the meaning of the
1657 following two lines is different:
1659 .. code-block:: c++
1661   complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
1662   complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
1664 This extension also works in C++ mode, as far as that goes, but does not apply
1665 to the C++ ``std::complex``.  (In C++11, list initialization allows the same
1666 syntax to be used with ``std::complex`` with the same meaning.)
1668 Builtin Functions
1669 =================
1671 Clang supports a number of builtin library functions with the same syntax as
1672 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
1673 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
1674 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc.  In addition to
1675 the GCC builtins, Clang supports a number of builtins that GCC does not, which
1676 are listed here.
1678 Please note that Clang does not and will not support all of the GCC builtins
1679 for vector operations.  Instead of using builtins, you should use the functions
1680 defined in target-specific header files like ``<xmmintrin.h>``, which define
1681 portable wrappers for these.  Many of the Clang versions of these functions are
1682 implemented directly in terms of :ref:`extended vector support
1683 <langext-vectors>` instead of builtins, in order to reduce the number of
1684 builtins that we need to implement.
1686 ``__builtin_assume``
1687 ------------------------------
1689 ``__builtin_assume`` is used to provide the optimizer with a boolean
1690 invariant that is defined to be true.
1692 **Syntax**:
1694 .. code-block:: c++
1696   __builtin_assume(bool)
1698 **Example of Use**:
1700 .. code-block:: c++
1702   int foo(int x) {
1703     __builtin_assume(x != 0);
1705     // The optimizer may short-circuit this check using the invariant.
1706     if (x == 0)
1707       return do_something();
1709     return do_something_else();
1710   }
1712 **Description**:
1714 The boolean argument to this function is defined to be true. The optimizer may
1715 analyze the form of the expression provided as the argument and deduce from
1716 that information used to optimize the program. If the condition is violated
1717 during execution, the behavior is undefined. The argument itself is never
1718 evaluated, so any side effects of the expression will be discarded.
1720 Query for this feature with ``__has_builtin(__builtin_assume)``.
1722 ``__builtin_readcyclecounter``
1723 ------------------------------
1725 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
1726 a similar low-latency, high-accuracy clock) on those targets that support it.
1728 **Syntax**:
1730 .. code-block:: c++
1732   __builtin_readcyclecounter()
1734 **Example of Use**:
1736 .. code-block:: c++
1738   unsigned long long t0 = __builtin_readcyclecounter();
1739   do_something();
1740   unsigned long long t1 = __builtin_readcyclecounter();
1741   unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
1743 **Description**:
1745 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
1746 which may be either global or process/thread-specific depending on the target.
1747 As the backing counters often overflow quickly (on the order of seconds) this
1748 should only be used for timing small intervals.  When not supported by the
1749 target, the return value is always zero.  This builtin takes no arguments and
1750 produces an unsigned long long result.
1752 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
1753 that even if present, its use may depend on run-time privilege or other OS
1754 controlled state.
1756 .. _langext-__builtin_shufflevector:
1758 ``__builtin_shufflevector``
1759 ---------------------------
1761 ``__builtin_shufflevector`` is used to express generic vector
1762 permutation/shuffle/swizzle operations.  This builtin is also very important
1763 for the implementation of various target-specific header files like
1764 ``<xmmintrin.h>``.
1766 **Syntax**:
1768 .. code-block:: c++
1770   __builtin_shufflevector(vec1, vec2, index1, index2, ...)
1772 **Examples**:
1774 .. code-block:: c++
1776   // identity operation - return 4-element vector v1.
1777   __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
1779   // "Splat" element 0 of V1 into a 4-element result.
1780   __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
1782   // Reverse 4-element vector V1.
1783   __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
1785   // Concatenate every other element of 4-element vectors V1 and V2.
1786   __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
1788   // Concatenate every other element of 8-element vectors V1 and V2.
1789   __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
1791   // Shuffle v1 with some elements being undefined
1792   __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
1794 **Description**:
1796 The first two arguments to ``__builtin_shufflevector`` are vectors that have
1797 the same element type.  The remaining arguments are a list of integers that
1798 specify the elements indices of the first two vectors that should be extracted
1799 and returned in a new vector.  These element indices are numbered sequentially
1800 starting with the first vector, continuing into the second vector.  Thus, if
1801 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
1802 ``vec2``. An index of -1 can be used to indicate that the corresponding element
1803 in the returned vector is a don't care and can be optimized by the backend.
1805 The result of ``__builtin_shufflevector`` is a vector with the same element
1806 type as ``vec1``/``vec2`` but that has an element count equal to the number of
1807 indices specified.
1809 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
1811 .. _langext-__builtin_convertvector:
1813 ``__builtin_convertvector``
1814 ---------------------------
1816 ``__builtin_convertvector`` is used to express generic vector
1817 type-conversion operations. The input vector and the output vector
1818 type must have the same number of elements.
1820 **Syntax**:
1822 .. code-block:: c++
1824   __builtin_convertvector(src_vec, dst_vec_type)
1826 **Examples**:
1828 .. code-block:: c++
1830   typedef double vector4double __attribute__((__vector_size__(32)));
1831   typedef float  vector4float  __attribute__((__vector_size__(16)));
1832   typedef short  vector4short  __attribute__((__vector_size__(8)));
1833   vector4float vf; vector4short vs;
1835   // convert from a vector of 4 floats to a vector of 4 doubles.
1836   __builtin_convertvector(vf, vector4double)
1837   // equivalent to:
1838   (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
1840   // convert from a vector of 4 shorts to a vector of 4 floats.
1841   __builtin_convertvector(vs, vector4float)
1842   // equivalent to:
1843   (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
1845 **Description**:
1847 The first argument to ``__builtin_convertvector`` is a vector, and the second
1848 argument is a vector type with the same number of elements as the first
1849 argument.
1851 The result of ``__builtin_convertvector`` is a vector with the same element
1852 type as the second argument, with a value defined in terms of the action of a
1853 C-style cast applied to each element of the first argument.
1855 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
1857 ``__builtin_bitreverse``
1858 ------------------------
1860 * ``__builtin_bitreverse8``
1861 * ``__builtin_bitreverse16``
1862 * ``__builtin_bitreverse32``
1863 * ``__builtin_bitreverse64``
1865 **Syntax**:
1867 .. code-block:: c++
1869      __builtin_bitreverse32(x)
1871 **Examples**:
1873 .. code-block:: c++
1875       uint8_t rev_x = __builtin_bitreverse8(x);
1876       uint16_t rev_x = __builtin_bitreverse16(x);
1877       uint32_t rev_y = __builtin_bitreverse32(y);
1878       uint64_t rev_z = __builtin_bitreverse64(z);
1880 **Description**:
1882 The '``__builtin_bitreverse``' family of builtins is used to reverse
1883 the bitpattern of an integer value; for example ``0b10110110`` becomes
1884 ``0b01101101``.
1886 ``__builtin_rotateleft``
1887 ------------------------
1889 * ``__builtin_rotateleft8``
1890 * ``__builtin_rotateleft16``
1891 * ``__builtin_rotateleft32``
1892 * ``__builtin_rotateleft64``
1894 **Syntax**:
1896 .. code-block:: c++
1898      __builtin_rotateleft32(x, y)
1900 **Examples**:
1902 .. code-block:: c++
1904       uint8_t rot_x = __builtin_rotateleft8(x, y);
1905       uint16_t rot_x = __builtin_rotateleft16(x, y);
1906       uint32_t rot_x = __builtin_rotateleft32(x, y);
1907       uint64_t rot_x = __builtin_rotateleft64(x, y);
1909 **Description**:
1911 The '``__builtin_rotateleft``' family of builtins is used to rotate
1912 the bits in the first argument by the amount in the second argument.
1913 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
1914 The shift value is treated as an unsigned amount modulo the size of
1915 the arguments. Both arguments and the result have the bitwidth specified
1916 by the name of the builtin.
1918 ``__builtin_rotateright``
1919 -------------------------
1921 * ``__builtin_rotateright8``
1922 * ``__builtin_rotateright16``
1923 * ``__builtin_rotateright32``
1924 * ``__builtin_rotateright64``
1926 **Syntax**:
1928 .. code-block:: c++
1930      __builtin_rotateright32(x, y)
1932 **Examples**:
1934 .. code-block:: c++
1936       uint8_t rot_x = __builtin_rotateright8(x, y);
1937       uint16_t rot_x = __builtin_rotateright16(x, y);
1938       uint32_t rot_x = __builtin_rotateright32(x, y);
1939       uint64_t rot_x = __builtin_rotateright64(x, y);
1941 **Description**:
1943 The '``__builtin_rotateright``' family of builtins is used to rotate
1944 the bits in the first argument by the amount in the second argument.
1945 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
1946 The shift value is treated as an unsigned amount modulo the size of
1947 the arguments. Both arguments and the result have the bitwidth specified
1948 by the name of the builtin.
1950 ``__builtin_unreachable``
1951 -------------------------
1953 ``__builtin_unreachable`` is used to indicate that a specific point in the
1954 program cannot be reached, even if the compiler might otherwise think it can.
1955 This is useful to improve optimization and eliminates certain warnings.  For
1956 example, without the ``__builtin_unreachable`` in the example below, the
1957 compiler assumes that the inline asm can fall through and prints a "function
1958 declared '``noreturn``' should not return" warning.
1960 **Syntax**:
1962 .. code-block:: c++
1964     __builtin_unreachable()
1966 **Example of use**:
1968 .. code-block:: c++
1970   void myabort(void) __attribute__((noreturn));
1971   void myabort(void) {
1972     asm("int3");
1973     __builtin_unreachable();
1974   }
1976 **Description**:
1978 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
1979 Since it has undefined behavior, it is a statement that it is never reached and
1980 the optimizer can take advantage of this to produce better code.  This builtin
1981 takes no arguments and produces a void result.
1983 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
1985 ``__builtin_unpredictable``
1986 ---------------------------
1988 ``__builtin_unpredictable`` is used to indicate that a branch condition is
1989 unpredictable by hardware mechanisms such as branch prediction logic.
1991 **Syntax**:
1993 .. code-block:: c++
1995     __builtin_unpredictable(long long)
1997 **Example of use**:
1999 .. code-block:: c++
2001   if (__builtin_unpredictable(x > 0)) {
2002      foo();
2003   }
2005 **Description**:
2007 The ``__builtin_unpredictable()`` builtin is expected to be used with control
2008 flow conditions such as in ``if`` and ``switch`` statements.
2010 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
2012 ``__sync_swap``
2013 ---------------
2015 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
2017 **Syntax**:
2019 .. code-block:: c++
2021   type __sync_swap(type *ptr, type value, ...)
2023 **Example of Use**:
2025 .. code-block:: c++
2027   int old_value = __sync_swap(&value, new_value);
2029 **Description**:
2031 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
2032 atomic intrinsics to allow code to atomically swap the current value with the
2033 new value.  More importantly, it helps developers write more efficient and
2034 correct code by avoiding expensive loops around
2035 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
2036 implementation details of ``__sync_lock_test_and_set()``.  The
2037 ``__sync_swap()`` builtin is a full barrier.
2039 ``__builtin_addressof``
2040 -----------------------
2042 ``__builtin_addressof`` performs the functionality of the built-in ``&``
2043 operator, ignoring any ``operator&`` overload.  This is useful in constant
2044 expressions in C++11, where there is no other way to take the address of an
2045 object that overloads ``operator&``.
2047 **Example of use**:
2049 .. code-block:: c++
2051   template<typename T> constexpr T *addressof(T &value) {
2052     return __builtin_addressof(value);
2053   }
2055 ``__builtin_operator_new`` and ``__builtin_operator_delete``
2056 ------------------------------------------------------------
2058 ``__builtin_operator_new`` allocates memory just like a non-placement non-class
2059 *new-expression*. This is exactly like directly calling the normal
2060 non-placement ``::operator new``, except that it allows certain optimizations
2061 that the C++ standard does not permit for a direct function call to
2062 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
2063 merging allocations).
2065 Likewise, ``__builtin_operator_delete`` deallocates memory just like a
2066 non-class *delete-expression*, and is exactly like directly calling the normal
2067 ``::operator delete``, except that it permits optimizations. Only the unsized
2068 form of ``__builtin_operator_delete`` is currently available.
2070 These builtins are intended for use in the implementation of ``std::allocator``
2071 and other similar allocation libraries, and are only available in C++.
2073 ``__builtin_preserve_access_index``
2074 -----------------------------------
2076 ``__builtin_preserve_access_index`` specifies a code section where
2077 array subscript access and structure/union member access are relocatable
2078 under bpf compile-once run-everywhere framework. Debuginfo (typically
2079 with ``-g``) is needed, otherwise, the compiler will exit with an error.
2080 The return type for the intrinsic is the same as the type of the
2081 argument.
2083 **Syntax**:
2085 .. code-block:: c
2087   type __builtin_preserve_access_index(type arg)
2089 **Example of Use**:
2091 .. code-block:: c
2093   struct t {
2094     int i;
2095     int j;
2096     union {
2097       int a;
2098       int b;
2099     } c[4];
2100   };
2101   struct t *v = ...;
2102   int *pb =__builtin_preserve_access_index(&v->c[3].b);
2103   __builtin_preserve_access_index(v->j);
2105 Multiprecision Arithmetic Builtins
2106 ----------------------------------
2108 Clang provides a set of builtins which expose multiprecision arithmetic in a
2109 manner amenable to C. They all have the following form:
2111 .. code-block:: c
2113   unsigned x = ..., y = ..., carryin = ..., carryout;
2114   unsigned sum = __builtin_addc(x, y, carryin, &carryout);
2116 Thus one can form a multiprecision addition chain in the following manner:
2118 .. code-block:: c
2120   unsigned *x, *y, *z, carryin=0, carryout;
2121   z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
2122   carryin = carryout;
2123   z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
2124   carryin = carryout;
2125   z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
2126   carryin = carryout;
2127   z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
2129 The complete list of builtins are:
2131 .. code-block:: c
2133   unsigned char      __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
2134   unsigned short     __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
2135   unsigned           __builtin_addc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
2136   unsigned long      __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
2137   unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
2138   unsigned char      __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
2139   unsigned short     __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
2140   unsigned           __builtin_subc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
2141   unsigned long      __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
2142   unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
2144 Checked Arithmetic Builtins
2145 ---------------------------
2147 Clang provides a set of builtins that implement checked arithmetic for security
2148 critical applications in a manner that is fast and easily expressable in C. As
2149 an example of their usage:
2151 .. code-block:: c
2153   errorcode_t security_critical_application(...) {
2154     unsigned x, y, result;
2155     ...
2156     if (__builtin_mul_overflow(x, y, &result))
2157       return kErrorCodeHackers;
2158     ...
2159     use_multiply(result);
2160     ...
2161   }
2163 Clang provides the following checked arithmetic builtins:
2165 .. code-block:: c
2167   bool __builtin_add_overflow   (type1 x, type2 y, type3 *sum);
2168   bool __builtin_sub_overflow   (type1 x, type2 y, type3 *diff);
2169   bool __builtin_mul_overflow   (type1 x, type2 y, type3 *prod);
2170   bool __builtin_uadd_overflow  (unsigned x, unsigned y, unsigned *sum);
2171   bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
2172   bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
2173   bool __builtin_usub_overflow  (unsigned x, unsigned y, unsigned *diff);
2174   bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
2175   bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
2176   bool __builtin_umul_overflow  (unsigned x, unsigned y, unsigned *prod);
2177   bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
2178   bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
2179   bool __builtin_sadd_overflow  (int x, int y, int *sum);
2180   bool __builtin_saddl_overflow (long x, long y, long *sum);
2181   bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
2182   bool __builtin_ssub_overflow  (int x, int y, int *diff);
2183   bool __builtin_ssubl_overflow (long x, long y, long *diff);
2184   bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
2185   bool __builtin_smul_overflow  (int x, int y, int *prod);
2186   bool __builtin_smull_overflow (long x, long y, long *prod);
2187   bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
2189 Each builtin performs the specified mathematical operation on the
2190 first two arguments and stores the result in the third argument.  If
2191 possible, the result will be equal to mathematically-correct result
2192 and the builtin will return 0.  Otherwise, the builtin will return
2193 1 and the result will be equal to the unique value that is equivalent
2194 to the mathematically-correct result modulo two raised to the *k*
2195 power, where *k* is the number of bits in the result type.  The
2196 behavior of these builtins is well-defined for all argument values.
2198 The first three builtins work generically for operands of any integer type,
2199 including boolean types.  The operands need not have the same type as each
2200 other, or as the result.  The other builtins may implicitly promote or
2201 convert their operands before performing the operation.
2203 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
2205 Floating point builtins
2206 ---------------------------------------
2208 ``__builtin_canonicalize``
2209 --------------------------
2211 .. code-block:: c
2213    double __builtin_canonicalize(double);
2214    float __builtin_canonicalizef(float);
2215    long double__builtin_canonicalizel(long double);
2217 Returns the platform specific canonical encoding of a floating point
2218 number. This canonicalization is useful for implementing certain
2219 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
2220 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
2221 more information on the semantics.
2223 String builtins
2224 ---------------
2226 Clang provides constant expression evaluation support for builtins forms of
2227 the following functions from the C standard library ``<string.h>`` header:
2229 * ``memchr``
2230 * ``memcmp``
2231 * ``strchr``
2232 * ``strcmp``
2233 * ``strlen``
2234 * ``strncmp``
2235 * ``wcschr``
2236 * ``wcscmp``
2237 * ``wcslen``
2238 * ``wcsncmp``
2239 * ``wmemchr``
2240 * ``wmemcmp``
2242 In each case, the builtin form has the name of the C library function prefixed
2243 by ``__builtin_``. Example:
2245 .. code-block:: c
2247   void *p = __builtin_memchr("foobar", 'b', 5);
2249 In addition to the above, one further builtin is provided:
2251 .. code-block:: c
2253   char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
2255 ``__builtin_char_memchr(a, b, c)`` is identical to
2256 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
2257 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
2258 is disallowed in general).
2260 Support for constant expression evaluation for the above builtins be detected
2261 with ``__has_feature(cxx_constexpr_string_builtins)``.
2263 Atomic Min/Max builtins with memory ordering
2264 --------------------------------------------
2266 There are two atomic builtins with min/max in-memory comparison and swap.
2267 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
2269 * ``__atomic_fetch_min``
2270 * ``__atomic_fetch_max``
2272 The builtins work with signed and unsigned integers and require to specify memory ordering.
2273 The return value is the original value that was stored in memory before comparison.
2275 Example:
2277 .. code-block:: c
2279   unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
2281 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
2282 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
2283 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
2285 In terms or aquire-release ordering barriers these two operations are always
2286 considered as operations with *load-store* semantics, even when the original value
2287 is not actually modified after comparison.
2289 .. _langext-__c11_atomic:
2291 __c11_atomic builtins
2292 ---------------------
2294 Clang provides a set of builtins which are intended to be used to implement
2295 C11's ``<stdatomic.h>`` header.  These builtins provide the semantics of the
2296 ``_explicit`` form of the corresponding C11 operation, and are named with a
2297 ``__c11_`` prefix.  The supported operations, and the differences from
2298 the corresponding C11 operations, are:
2300 * ``__c11_atomic_init``
2301 * ``__c11_atomic_thread_fence``
2302 * ``__c11_atomic_signal_fence``
2303 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
2304   ``_Atomic(...)`` object, instead of its address)
2305 * ``__c11_atomic_store``
2306 * ``__c11_atomic_load``
2307 * ``__c11_atomic_exchange``
2308 * ``__c11_atomic_compare_exchange_strong``
2309 * ``__c11_atomic_compare_exchange_weak``
2310 * ``__c11_atomic_fetch_add``
2311 * ``__c11_atomic_fetch_sub``
2312 * ``__c11_atomic_fetch_and``
2313 * ``__c11_atomic_fetch_or``
2314 * ``__c11_atomic_fetch_xor``
2315 * ``__c11_atomic_fetch_max``
2316 * ``__c11_atomic_fetch_min``
2318 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
2319 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
2320 provided, with values corresponding to the enumerators of C11's
2321 ``memory_order`` enumeration.
2323 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
2324 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
2325 atomic builtins are an explicit form of the corresponding OpenCL 2.0
2326 builtin function, and are named with a ``__opencl_`` prefix. The macros
2327 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
2328 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
2329 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
2330 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
2332 Low-level ARM exclusive memory builtins
2333 ---------------------------------------
2335 Clang provides overloaded builtins giving direct access to the three key ARM
2336 instructions for implementing atomic operations.
2338 .. code-block:: c
2340   T __builtin_arm_ldrex(const volatile T *addr);
2341   T __builtin_arm_ldaex(const volatile T *addr);
2342   int __builtin_arm_strex(T val, volatile T *addr);
2343   int __builtin_arm_stlex(T val, volatile T *addr);
2344   void __builtin_arm_clrex(void);
2346 The types ``T`` currently supported are:
2348 * Integer types with width at most 64 bits (or 128 bits on AArch64).
2349 * Floating-point types
2350 * Pointer types.
2352 Note that the compiler does not guarantee it will not insert stores which clear
2353 the exclusive monitor in between an ``ldrex`` type operation and its paired
2354 ``strex``. In practice this is only usually a risk when the extra store is on
2355 the same cache line as the variable being modified and Clang will only insert
2356 stack stores on its own, so it is best not to use these operations on variables
2357 with automatic storage duration.
2359 Also, loads and stores may be implicit in code written between the ``ldrex`` and
2360 ``strex``. Clang will not necessarily mitigate the effects of these either, so
2361 care should be exercised.
2363 For these reasons the higher level atomic primitives should be preferred where
2364 possible.
2366 Non-temporal load/store builtins
2367 --------------------------------
2369 Clang provides overloaded builtins allowing generation of non-temporal memory
2370 accesses.
2372 .. code-block:: c
2374   T __builtin_nontemporal_load(T *addr);
2375   void __builtin_nontemporal_store(T value, T *addr);
2377 The types ``T`` currently supported are:
2379 * Integer types.
2380 * Floating-point types.
2381 * Vector types.
2383 Note that the compiler does not guarantee that non-temporal loads or stores
2384 will be used.
2386 C++ Coroutines support builtins
2387 --------------------------------
2389 .. warning::
2390   This is a work in progress. Compatibility across Clang/LLVM releases is not
2391   guaranteed.
2393 Clang provides experimental builtins to support C++ Coroutines as defined by
2394 https://wg21.link/P0057. The following four are intended to be used by the
2395 standard library to implement `std::experimental::coroutine_handle` type.
2397 **Syntax**:
2399 .. code-block:: c
2401   void  __builtin_coro_resume(void *addr);
2402   void  __builtin_coro_destroy(void *addr);
2403   bool  __builtin_coro_done(void *addr);
2404   void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
2406 **Example of use**:
2408 .. code-block:: c++
2410   template <> struct coroutine_handle<void> {
2411     void resume() const { __builtin_coro_resume(ptr); }
2412     void destroy() const { __builtin_coro_destroy(ptr); }
2413     bool done() const { return __builtin_coro_done(ptr); }
2414     // ...
2415   protected:
2416     void *ptr;
2417   };
2419   template <typename Promise> struct coroutine_handle : coroutine_handle<> {
2420     // ...
2421     Promise &promise() const {
2422       return *reinterpret_cast<Promise *>(
2423         __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
2424     }
2425     static coroutine_handle from_promise(Promise &promise) {
2426       coroutine_handle p;
2427       p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
2428                                                       /*from-promise=*/true);
2429       return p;
2430     }
2431   };
2434 Other coroutine builtins are either for internal clang use or for use during
2435 development of the coroutine feature. See `Coroutines in LLVM
2436 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
2437 more information on their semantics. Note that builtins matching the intrinsics
2438 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
2439 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
2440 an appropriate value during the emission.
2442 **Syntax**:
2444 .. code-block:: c
2446   size_t __builtin_coro_size()
2447   void  *__builtin_coro_frame()
2448   void  *__builtin_coro_free(void *coro_frame)
2450   void  *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
2451   bool   __builtin_coro_alloc()
2452   void  *__builtin_coro_begin(void *memory)
2453   void   __builtin_coro_end(void *coro_frame, bool unwind)
2454   char   __builtin_coro_suspend(bool final)
2455   bool   __builtin_coro_param(void *original, void *copy)
2457 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
2458 automatically will insert one if the first argument to `llvm.coro.suspend` is
2459 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
2460 as the first argument to the intrinsic.
2462 Source location builtins
2463 ------------------------
2465 Clang provides experimental builtins to support C++ standard library implementation
2466 of ``std::experimental::source_location`` as specified in  http://wg21.link/N4600.
2467 With the exception of ``__builtin_COLUMN``, these builtins are also implemented by
2468 GCC.
2470 **Syntax**:
2472 .. code-block:: c
2474   const char *__builtin_FILE();
2475   const char *__builtin_FUNCTION();
2476   unsigned    __builtin_LINE();
2477   unsigned    __builtin_COLUMN(); // Clang only
2479 **Example of use**:
2481 .. code-block:: c++
2483   void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
2484                  const char* file = __builtin_FILE(),
2485                  const char* function = __builtin_FUNCTION()) {
2486     if (pred) return;
2487     printf("%s:%d assertion failed in function %s\n", file, line, function);
2488     std::abort();
2489   }
2491   struct MyAggregateType {
2492     int x;
2493     int line = __builtin_LINE(); // captures line where aggregate initialization occurs
2494   };
2495   static_assert(MyAggregateType{42}.line == __LINE__);
2497   struct MyClassType {
2498     int line = __builtin_LINE(); // captures line of the constructor used during initialization
2499     constexpr MyClassType(int) { assert(line == __LINE__); }
2500   };
2502 **Description**:
2504 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return
2505 the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and
2506 ``__FILE__`` respectively. These builtins are constant expressions.
2508 When the builtins appear as part of a default function argument the invocation
2509 point is the location of the caller. When the builtins appear as part of a
2510 default member initializer, the invocation point is the location of the
2511 constructor or aggregate initialization used to create the object. Otherwise
2512 the invocation point is the same as the location of the builtin.
2514 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
2515 empty string is returned.
2517 Alignment builtins
2518 ------------------
2519 Clang provides builtins to support checking and adjusting alignment of
2520 pointers and integers.
2521 These builtins can be used to avoid relying on implementation-defined behavior
2522 of arithmetic on integers derived from pointers.
2523 Additionally, these builtins retain type information and, unlike bitwise
2524 arithmentic, they can perform semantic checking on the alignment value.
2526 **Syntax**:
2528 .. code-block:: c
2530   Type __builtin_align_up(Type value, size_t alignment);
2531   Type __builtin_align_down(Type value, size_t alignment);
2532   bool __builtin_is_aligned(Type value, size_t alignment);
2535 **Example of use**:
2537 .. code-block:: c++
2539   char* global_alloc_buffer;
2540   void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
2541     char* result = __builtin_align_up(global_alloc_buffer, alignment);
2542     // result now contains the value of global_alloc_buffer rounded up to the
2543     // next multiple of alignment.
2544     global_alloc_buffer = result + alloc_size;
2545     return result;
2546   }
2548   void* get_start_of_page(void* ptr) {
2549     return __builtin_align_down(ptr, PAGE_SIZE);
2550   }
2552   void example(char* buffer) {
2553      if (__builtin_is_aligned(buffer, 64)) {
2554        do_fast_aligned_copy(buffer);
2555      } else {
2556        do_unaligned_copy(buffer);
2557      }
2558   }
2560   // In addition to pointers, the builtins can also be used on integer types
2561   // and are evaluatable inside constant expressions.
2562   static_assert(__builtin_align_up(123, 64) == 128, "");
2563   static_assert(__builtin_align_down(123u, 64) == 64u, "");
2564   static_assert(!__builtin_is_aligned(123, 64), "");
2567 **Description**:
2569 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
2570 first argument aligned up/down to the next multiple of the second argument.
2571 If the value is already sufficiently aligned, it is returned unchanged.
2572 The builtin ``__builtin_is_aligned`` returns whether the first argument is
2573 aligned to a multiple of the second argument.
2574 All of these builtins expect the alignment to be expressed as a number of bytes.
2576 These builtins can be used for all integer types as well as (non-function)
2577 pointer types. For pointer types, these builtins operate in terms of the integer
2578 address of the pointer and return a new pointer of the same type (including
2579 qualifiers such as ``const``) with an adjusted address.
2580 When aligning pointers up or down, the resulting value must be within the same
2581 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
2582 This means that arbitrary integer values stored in pointer-type variables must
2583 not be passed to these builtins. For those use cases, the builtins can still be
2584 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
2586 If Clang can determine that the alignment is not a power of two at compile time,
2587 it will result in a compilation failure. If the alignment argument is not a
2588 power of two at run time, the behavior of these builtins is undefined.
2590 Non-standard C++11 Attributes
2591 =============================
2593 Clang's non-standard C++11 attributes live in the ``clang`` attribute
2594 namespace.
2596 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
2597 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
2598 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
2599 (see the list of `GCC function attributes
2600 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
2601 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
2602 `GCC type attributes
2603 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
2604 implementation, these attributes must appertain to the *declarator-id* in a
2605 declaration, which means they must go either at the start of the declaration or
2606 immediately after the name being declared.
2608 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
2609 also applies the GNU ``noreturn`` attribute to ``f``.
2611 .. code-block:: c++
2613   [[gnu::unused]] int a, f [[gnu::noreturn]] ();
2615 Target-Specific Extensions
2616 ==========================
2618 Clang supports some language features conditionally on some targets.
2620 ARM/AArch64 Language Extensions
2621 -------------------------------
2623 Memory Barrier Intrinsics
2624 ^^^^^^^^^^^^^^^^^^^^^^^^^
2625 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
2626 in the `ARM C Language Extensions Release 2.0
2627 <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
2628 Note that these intrinsics are implemented as motion barriers that block
2629 reordering of memory accesses and side effect instructions. Other instructions
2630 like simple arithmetic may be reordered around the intrinsic. If you expect to
2631 have no reordering at all, use inline assembly instead.
2633 X86/X86-64 Language Extensions
2634 ------------------------------
2636 The X86 backend has these language extensions:
2638 Memory references to specified segments
2639 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2641 Annotating a pointer with address space #256 causes it to be code generated
2642 relative to the X86 GS segment register, address space #257 causes it to be
2643 relative to the X86 FS segment, and address space #258 causes it to be
2644 relative to the X86 SS segment.  Note that this is a very very low-level
2645 feature that should only be used if you know what you're doing (for example in
2646 an OS kernel).
2648 Here is an example:
2650 .. code-block:: c++
2652   #define GS_RELATIVE __attribute__((address_space(256)))
2653   int foo(int GS_RELATIVE *P) {
2654     return *P;
2655   }
2657 Which compiles to (on X86-32):
2659 .. code-block:: gas
2661   _foo:
2662           movl    4(%esp), %eax
2663           movl    %gs:(%eax), %eax
2664           ret
2666 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
2667 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
2668 indicate their support.
2670 PowerPC Language Extensions
2671 ------------------------------
2673 Set the Floating Point Rounding Mode
2674 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2675 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
2676 the floating point rounding mode. This function will use the least significant
2677 two bits of integer argument to set the floating point rounding mode.
2679 .. code-block:: c++
2681   double __builtin_setrnd(int mode);
2683 The effective values for mode are:
2685     - 0 - round to nearest
2686     - 1 - round to zero
2687     - 2 - round to +infinity
2688     - 3 - round to -infinity
2690 Note that the mode argument will modulo 4, so if the integer argument is greater
2691 than 3, it will only use the least significant two bits of the mode.
2692 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
2694 PowerPC cache builtins
2695 ^^^^^^^^^^^^^^^^^^^^^^
2697 The PowerPC architecture specifies instructions implementing cache operations.
2698 Clang provides builtins that give direct programmer access to these cache
2699 instructions.
2701 Currently the following builtins are implemented in clang:
2703 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
2704 to main memory and flushes the copy from the data cache.
2706 **Syntax**:
2708 .. code-block:: c
2710   void __dcbf(const void* addr); /* Data Cache Block Flush */
2712 **Example of Use**:
2714 .. code-block:: c
2716   int a = 1;
2717   __builtin_dcbf (&a);
2719 Extensions for Static Analysis
2720 ==============================
2722 Clang supports additional attributes that are useful for documenting program
2723 invariants and rules for static analysis tools, such as the `Clang Static
2724 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
2725 in the analyzer's `list of source-level annotations
2726 <https://clang-analyzer.llvm.org/annotations.html>`_.
2729 Extensions for Dynamic Analysis
2730 ===============================
2732 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
2733 with :doc:`AddressSanitizer`.
2735 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
2736 with :doc:`ThreadSanitizer`.
2738 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
2739 with :doc:`MemorySanitizer`.
2741 Use ``__has_feature(safe_stack)`` to check if the code is being built
2742 with :doc:`SafeStack`.
2745 Extensions for selectively disabling optimization
2746 =================================================
2748 Clang provides a mechanism for selectively disabling optimizations in functions
2749 and methods.
2751 To disable optimizations in a single function definition, the GNU-style or C++11
2752 non-standard attribute ``optnone`` can be used.
2754 .. code-block:: c++
2756   // The following functions will not be optimized.
2757   // GNU-style attribute
2758   __attribute__((optnone)) int foo() {
2759     // ... code
2760   }
2761   // C++11 attribute
2762   [[clang::optnone]] int bar() {
2763     // ... code
2764   }
2766 To facilitate disabling optimization for a range of function definitions, a
2767 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
2768 followed by ``off`` or ``on``.
2770 All function definitions in the region between an ``off`` and the following
2771 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
2772 conflict with explicit attributes already present on the function (e.g. the
2773 ones that control inlining).
2775 .. code-block:: c++
2777   #pragma clang optimize off
2778   // This function will be decorated with optnone.
2779   int foo() {
2780     // ... code
2781   }
2783   // optnone conflicts with always_inline, so bar() will not be decorated.
2784   __attribute__((always_inline)) int bar() {
2785     // ... code
2786   }
2787   #pragma clang optimize on
2789 If no ``on`` is found to close an ``off`` region, the end of the region is the
2790 end of the compilation unit.
2792 Note that a stray ``#pragma clang optimize on`` does not selectively enable
2793 additional optimizations when compiling at low optimization levels. This feature
2794 can only be used to selectively disable optimizations.
2796 The pragma has an effect on functions only at the point of their definition; for
2797 function templates, this means that the state of the pragma at the point of an
2798 instantiation is not necessarily relevant. Consider the following example:
2800 .. code-block:: c++
2802   template<typename T> T twice(T t) {
2803     return 2 * t;
2804   }
2806   #pragma clang optimize off
2807   template<typename T> T thrice(T t) {
2808     return 3 * t;
2809   }
2811   int container(int a, int b) {
2812     return twice(a) + thrice(b);
2813   }
2814   #pragma clang optimize on
2816 In this example, the definition of the template function ``twice`` is outside
2817 the pragma region, whereas the definition of ``thrice`` is inside the region.
2818 The ``container`` function is also in the region and will not be optimized, but
2819 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
2820 these two instantiations, ``twice`` will be optimized (because its definition
2821 was outside the region) and ``thrice`` will not be optimized.
2823 Extensions for loop hint optimizations
2824 ======================================
2826 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
2827 subsequent for, while, do-while, or c++11 range-based for loop. The directive
2828 provides options for vectorization, interleaving, predication, unrolling and
2829 distribution. Loop hints can be specified before any loop and will be ignored if
2830 the optimization is not safe to apply.
2832 There are loop hints that control transformations (e.g. vectorization, loop
2833 unrolling) and there are loop hints that set transformation options (e.g.
2834 ``vectorize_width``, ``unroll_count``).  Pragmas setting transformation options
2835 imply the transformation is enabled, as if it was enabled via the corresponding
2836 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
2837 disabled  (e.g. ``vectorize(disable)``), that takes precedence over
2838 transformations option pragmas implying that transformation.
2840 Vectorization, Interleaving, and Predication
2841 --------------------------------------------
2843 A vectorized loop performs multiple iterations of the original loop
2844 in parallel using vector instructions. The instruction set of the target
2845 processor determines which vector instructions are available and their vector
2846 widths. This restricts the types of loops that can be vectorized. The vectorizer
2847 automatically determines if the loop is safe and profitable to vectorize. A
2848 vector instruction cost model is used to select the vector width.
2850 Interleaving multiple loop iterations allows modern processors to further
2851 improve instruction-level parallelism (ILP) using advanced hardware features,
2852 such as multiple execution units and out-of-order execution. The vectorizer uses
2853 a cost model that depends on the register pressure and generated code size to
2854 select the interleaving count.
2856 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
2857 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
2858 manually enable vectorization or interleaving.
2860 .. code-block:: c++
2862   #pragma clang loop vectorize(enable)
2863   #pragma clang loop interleave(enable)
2864   for(...) {
2865     ...
2866   }
2868 The vector width is specified by ``vectorize_width(_value_)`` and the interleave
2869 count is specified by ``interleave_count(_value_)``, where
2870 _value_ is a positive integer. This is useful for specifying the optimal
2871 width/count of the set of target architectures supported by your application.
2873 .. code-block:: c++
2875   #pragma clang loop vectorize_width(2)
2876   #pragma clang loop interleave_count(2)
2877   for(...) {
2878     ...
2879   }
2881 Specifying a width/count of 1 disables the optimization, and is equivalent to
2882 ``vectorize(disable)`` or ``interleave(disable)``.
2884 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
2886 .. code-block:: c++
2888   #pragma clang loop vectorize(enable)
2889   #pragma clang loop vectorize_predicate(enable)
2890   for(...) {
2891     ...
2892   }
2894 This predicates (masks) all instructions in the loop, which allows the scalar
2895 remainder loop (the tail) to be folded into the main vectorized loop. This
2896 might be more efficient when vector predication is efficiently supported by the
2897 target platform.
2899 Loop Unrolling
2900 --------------
2902 Unrolling a loop reduces the loop control overhead and exposes more
2903 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
2904 eliminates the loop and replaces it with an enumerated sequence of loop
2905 iterations. Full unrolling is only possible if the loop trip count is known at
2906 compile time. Partial unrolling replicates the loop body within the loop and
2907 reduces the trip count.
2909 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
2910 loop if the trip count is known at compile time. If the fully unrolled code size
2911 is greater than an internal limit the loop will be partially unrolled up to this
2912 limit. If the trip count is not known at compile time the loop will be partially
2913 unrolled with a heuristically chosen unroll factor.
2915 .. code-block:: c++
2917   #pragma clang loop unroll(enable)
2918   for(...) {
2919     ...
2920   }
2922 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
2923 loop if the trip count is known at compile time identically to
2924 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
2925 if the loop count is not known at compile time.
2927 .. code-block:: c++
2929   #pragma clang loop unroll(full)
2930   for(...) {
2931     ...
2932   }
2934 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
2935 _value_ is a positive integer. If this value is greater than the trip count the
2936 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
2937 to the same code size limit as with ``unroll(enable)``.
2939 .. code-block:: c++
2941   #pragma clang loop unroll_count(8)
2942   for(...) {
2943     ...
2944   }
2946 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
2948 Loop Distribution
2949 -----------------
2951 Loop Distribution allows splitting a loop into multiple loops.  This is
2952 beneficial for example when the entire loop cannot be vectorized but some of the
2953 resulting loops can.
2955 If ``distribute(enable))`` is specified and the loop has memory dependencies
2956 that inhibit vectorization, the compiler will attempt to isolate the offending
2957 operations into a new loop.  This optimization is not enabled by default, only
2958 loops marked with the pragma are considered.
2960 .. code-block:: c++
2962   #pragma clang loop distribute(enable)
2963   for (i = 0; i < N; ++i) {
2964     S1: A[i + 1] = A[i] + B[i];
2965     S2: C[i] = D[i] * E[i];
2966   }
2968 This loop will be split into two loops between statements S1 and S2.  The
2969 second loop containing S2 will be vectorized.
2971 Loop Distribution is currently not enabled by default in the optimizer because
2972 it can hurt performance in some cases.  For example, instruction-level
2973 parallelism could be reduced by sequentializing the execution of the
2974 statements S1 and S2 above.
2976 If Loop Distribution is turned on globally with
2977 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
2978 be used the disable it on a per-loop basis.
2980 Additional Information
2981 ----------------------
2983 For convenience multiple loop hints can be specified on a single line.
2985 .. code-block:: c++
2987   #pragma clang loop vectorize_width(4) interleave_count(8)
2988   for(...) {
2989     ...
2990   }
2992 If an optimization cannot be applied any hints that apply to it will be ignored.
2993 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
2994 proven safe to vectorize. To identify and diagnose optimization issues use
2995 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
2996 user guide for details.
2998 Extensions to specify floating-point flags
2999 ====================================================
3001 The ``#pragma clang fp`` pragma allows floating-point options to be specified
3002 for a section of the source code. This pragma can only appear at file scope or
3003 at the start of a compound statement (excluding comments). When using within a
3004 compound statement, the pragma is active within the scope of the compound
3005 statement.
3007 Currently, only FP contraction can be controlled with the pragma. ``#pragma
3008 clang fp contract`` specifies whether the compiler should contract a multiply
3009 and an addition (or subtraction) into a fused FMA operation when supported by
3010 the target.
3012 The pragma can take three values: ``on``, ``fast`` and ``off``.  The ``on``
3013 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
3014 fusion as specified the language standard.  The ``fast`` option allows fusiong
3015 in cases when the language standard does not make this possible (e.g. across
3016 statements in C)
3018 .. code-block:: c++
3020   for(...) {
3021     #pragma clang fp contract(fast)
3022     a = b[i] * c[i];
3023     d[i] += a;
3024   }
3027 The pragma can also be used with ``off`` which turns FP contraction off for a
3028 section of the code. This can be useful when fast contraction is otherwise
3029 enabled for the translation unit with the ``-ffp-contract=fast`` flag.
3031 Specifying an attribute for multiple declarations (#pragma clang attribute)
3032 ===========================================================================
3034 The ``#pragma clang attribute`` directive can be used to apply an attribute to
3035 multiple declarations. The ``#pragma clang attribute push`` variation of the
3036 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
3037 can be added to. The ``#pragma clang attribute (...)`` variation adds an
3038 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
3039 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
3040 shorthand for when you want to add one attribute to a new scope. Multiple push
3041 directives can be nested inside each other.
3043 The attributes that are used in the ``#pragma clang attribute`` directives
3044 can be written using the GNU-style syntax:
3046 .. code-block:: c++
3048   #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
3050   void function(); // The function now has the annotate("custom") attribute
3052   #pragma clang attribute pop
3054 The attributes can also be written using the C++11 style syntax:
3056 .. code-block:: c++
3058   #pragma clang attribute push ([[noreturn]], apply_to = function)
3060   void function(); // The function now has the [[noreturn]] attribute
3062   #pragma clang attribute pop
3064 The ``__declspec`` style syntax is also supported:
3066 .. code-block:: c++
3068   #pragma clang attribute push (__declspec(dllexport), apply_to = function)
3070   void function(); // The function now has the __declspec(dllexport) attribute
3072   #pragma clang attribute pop
3074 A single push directive accepts only one attribute regardless of the syntax
3075 used.
3077 Because multiple push directives can be nested, if you're writing a macro that
3078 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
3079 required) to add a namespace to your push/pop directives. A pop directive with a
3080 namespace will pop the innermost push that has that same namespace. This will
3081 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
3082 that an ``pop`` without a namespace will pop the innermost ``push`` without a
3083 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
3084 same namespace. For instance:
3086 .. code-block:: c++
3088    #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
3089    #define ASSUME_NORETURN_END   _Pragma("clang attribute AssumeNoreturn.pop")
3091    #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
3092    #define ASSUME_UNAVAILABLE_END   _Pragma("clang attribute Unavailable.pop")
3095    ASSUME_NORETURN_BEGIN
3096    ASSUME_UNAVAILABLE_BEGIN
3097    void function(); // function has [[noreturn]] and __attribute__((unavailable))
3098    ASSUME_NORETURN_END
3099    void other_function(); // function has __attribute__((unavailable))
3100    ASSUME_UNAVAILABLE_END
3102 Without the namespaces on the macros, ``other_function`` will be annotated with
3103 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
3104 a contrived example, but its very possible for this kind of situation to appear
3105 in real code if the pragmas are spread out across a large file. You can test if
3106 your version of clang supports namespaces on ``#pragma clang attribute`` with
3107 ``__has_extension(pragma_clang_attribute_namespaces)``.
3109 Subject Match Rules
3110 -------------------
3112 The set of declarations that receive a single attribute from the attribute stack
3113 depends on the subject match rules that were specified in the pragma. Subject
3114 match rules are specified after the attribute. The compiler expects an
3115 identifier that corresponds to the subject set specifier. The ``apply_to``
3116 specifier is currently the only supported subject set specifier. It allows you
3117 to specify match rules that form a subset of the attribute's allowed subject
3118 set, i.e. the compiler doesn't require all of the attribute's subjects. For
3119 example, an attribute like ``[[nodiscard]]`` whose subject set includes
3120 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
3121 least one of these rules after ``apply_to``:
3123 .. code-block:: c++
3125   #pragma clang attribute push([[nodiscard]], apply_to = enum)
3127   enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
3129   struct Record1 { }; // The struct will *not* receive [[nodiscard]]
3131   #pragma clang attribute pop
3133   #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
3135   enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
3137   struct Record2 { }; // The struct *will* receive [[nodiscard]]
3139   #pragma clang attribute pop
3141   // This is an error, since [[nodiscard]] can't be applied to namespaces:
3142   #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
3144   #pragma clang attribute pop
3146 Multiple match rules can be specified using the ``any`` match rule, as shown
3147 in the example above. The ``any`` rule applies attributes to all declarations
3148 that are matched by at least one of the rules in the ``any``. It doesn't nest
3149 and can't be used inside the other match rules. Redundant match rules or rules
3150 that conflict with one another should not be used inside of ``any``.
3152 Clang supports the following match rules:
3154 - ``function``: Can be used to apply attributes to functions. This includes C++
3155   member functions, static functions, operators, and constructors/destructors.
3157 - ``function(is_member)``: Can be used to apply attributes to C++ member
3158   functions. This includes members like static functions, operators, and
3159   constructors/destructors.
3161 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
3162   member functions, and variables/fields whose type is a function pointer. It
3163   does not apply attributes to Objective-C methods or blocks.
3165 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
3166   and C++11 type aliases.
3168 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
3169   ``union`` declarations.
3171 - ``record(unless(is_union))``: Can be used to apply attributes only to
3172   ``struct`` and ``class`` declarations.
3174 - ``enum``: Can be be used to apply attributes to enumeration declarations.
3176 - ``enum_constant``: Can be used to apply attributes to enumerators.
3178 - ``variable``: Can be used to apply attributes to variables, including
3179   local variables, parameters, global variables, and static member variables.
3180   It does not apply attributes to instance member variables or Objective-C
3181   ivars.
3183 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
3184   variables only.
3186 - ``variable(is_global)``: Can be used to apply attributes to global variables
3187   only.
3189 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
3190   only.
3192 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
3193   the variables that are not parameters.
3195 - ``field``: Can be used to apply attributes to non-static member variables
3196   in a record. This includes Objective-C ivars.
3198 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
3200 - ``objc_interface``: Can be used to apply attributes to ``@interface``
3201   declarations.
3203 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
3204   declarations.
3206 - ``objc_category``: Can be used to apply attributes to category declarations,
3207   including class extensions.
3209 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
3210   including instance and class methods. Implicit methods like implicit property
3211   getters and setters do not receive the attribute.
3213 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
3214   instance methods.
3216 - ``objc_property``: Can be used to apply attributes to ``@property``
3217   declarations.
3219 - ``block``: Can be used to apply attributes to block declarations. This does
3220   not include variables/fields of block pointer type.
3222 The use of ``unless`` in match rules is currently restricted to a strict set of
3223 sub-rules that are used by the supported attributes. That means that even though
3224 ``variable(unless(is_parameter))`` is a valid match rule,
3225 ``variable(unless(is_thread_local))`` is not.
3227 Supported Attributes
3228 --------------------
3230 Not all attributes can be used with the ``#pragma clang attribute`` directive.
3231 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
3232 like ``address_space`` aren't supported by this directive. You can determine
3233 whether or not an attribute is supported by the pragma by referring to the
3234 :doc:`individual documentation for that attribute <AttributeReference>`.
3236 The attributes are applied to all matching declarations individually, even when
3237 the attribute is semantically incorrect. The attributes that aren't applied to
3238 any declaration are not verified semantically.
3240 Specifying section names for global objects (#pragma clang section)
3241 ===================================================================
3243 The ``#pragma clang section`` directive provides a means to assign section-names
3244 to global variables, functions and static variables.
3246 The section names can be specified as:
3248 .. code-block:: c++
3250   #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
3252 The section names can be reverted back to default name by supplying an empty
3253 string to the section kind, for example:
3255 .. code-block:: c++
3257   #pragma clang section bss="" data="" text="" rodata="" relro=""
3259 The ``#pragma clang section`` directive obeys the following rules:
3261 * The pragma applies to all global variable, statics and function declarations
3262   from the pragma to the end of the translation unit.
3264 * The pragma clang section is enabled automatically, without need of any flags.
3266 * This feature is only defined to work sensibly for ELF targets.
3268 * If section name is specified through _attribute_((section("myname"))), then
3269   the attribute name gains precedence.
3271 * Global variables that are initialized to zero will be placed in the named
3272   bss section, if one is present.
3274 * The ``#pragma clang section`` directive does not does try to infer section-kind
3275   from the name. For example, naming a section "``.bss.mySec``" does NOT mean
3276   it will be a bss section name.
3278 * The decision about which section-kind applies to each global is taken in the back-end.
3279   Once the section-kind is known, appropriate section name, as specified by the user using
3280   ``#pragma clang section`` directive, is applied to that global.
3282 Specifying Linker Options on ELF Targets
3283 ========================================
3285 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
3286 The second parameter is the library name (without the traditional Unix prefix of
3287 ``lib``).  This allows you to provide an implicit link of dependent libraries.
3289 Evaluating Object Size Dynamically
3290 ==================================
3292 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
3293 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
3294 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
3295 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
3296 for ``__builtin_object_size`` in libraries that support it.
3298 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
3299 safer:
3301 .. code-block:: c
3303   void copy_into_buffer(size_t size) {
3304     char* buffer = malloc(size);
3305     strlcpy(buffer, "some string", strlen("some string"));
3306     // Previous line preprocesses to:
3307     // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
3308   }
3310 Since the size of ``buffer`` can't be known at compile time, Clang will fold
3311 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
3312 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
3313 ``size``, providing some extra runtime safety.