Home | History | Annotate | Line # | Download | only in docs
      1 =========================
      2 Clang Language Extensions
      3 =========================
      4 
      5 .. contents::
      6    :local:
      7    :depth: 1
      8 
      9 .. toctree::
     10    :hidden:
     11 
     12    ObjectiveCLiterals
     13    BlockLanguageSpec
     14    Block-ABI-Apple
     15    AutomaticReferenceCounting
     16    MatrixTypes
     17 
     18 Introduction
     19 ============
     20 
     21 This document describes the language extensions provided by Clang.  In addition
     22 to the language extensions listed here, Clang aims to support a broad range of
     23 GCC extensions.  Please see the `GCC manual
     24 <https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
     25 these extensions.
     26 
     27 .. _langext-feature_check:
     28 
     29 Feature Checking Macros
     30 =======================
     31 
     32 Language extensions can be very useful, but only if you know you can depend on
     33 them.  In order to allow fine-grain features checks, we support three builtin
     34 function-like macros.  This allows you to directly test for a feature in your
     35 code without having to resort to something like autoconf or fragile "compiler
     36 version checks".
     37 
     38 ``__has_builtin``
     39 -----------------
     40 
     41 This function-like macro takes a single identifier argument that is the name of
     42 a builtin function, a builtin pseudo-function (taking one or more type
     43 arguments), or a builtin template.
     44 It evaluates to 1 if the builtin is supported or 0 if not.
     45 It can be used like this:
     46 
     47 .. code-block:: c++
     48 
     49   #ifndef __has_builtin         // Optional of course.
     50     #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
     51   #endif
     52 
     53   ...
     54   #if __has_builtin(__builtin_trap)
     55     __builtin_trap();
     56   #else
     57     abort();
     58   #endif
     59   ...
     60 
     61 .. note::
     62 
     63   Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
     64   pseudo-functions.
     65 
     66   ``__has_builtin`` should not be used to detect support for a builtin macro;
     67   use ``#ifdef`` instead.
     68 
     69 .. _langext-__has_feature-__has_extension:
     70 
     71 ``__has_feature`` and ``__has_extension``
     72 -----------------------------------------
     73 
     74 These function-like macros take a single identifier argument that is the name
     75 of a feature.  ``__has_feature`` evaluates to 1 if the feature is both
     76 supported by Clang and standardized in the current language standard or 0 if
     77 not (but see :ref:`below <langext-has-feature-back-compat>`), while
     78 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
     79 current language (either as a language extension or a standard language
     80 feature) or 0 if not.  They can be used like this:
     81 
     82 .. code-block:: c++
     83 
     84   #ifndef __has_feature         // Optional of course.
     85     #define __has_feature(x) 0  // Compatibility with non-clang compilers.
     86   #endif
     87   #ifndef __has_extension
     88     #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
     89   #endif
     90 
     91   ...
     92   #if __has_feature(cxx_rvalue_references)
     93   // This code will only be compiled with the -std=c++11 and -std=gnu++11
     94   // options, because rvalue references are only standardized in C++11.
     95   #endif
     96 
     97   #if __has_extension(cxx_rvalue_references)
     98   // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
     99   // and -std=gnu++98 options, because rvalue references are supported as a
    100   // language extension in C++98.
    101   #endif
    102 
    103 .. _langext-has-feature-back-compat:
    104 
    105 For backward compatibility, ``__has_feature`` can also be used to test
    106 for support for non-standardized features, i.e. features not prefixed ``c_``,
    107 ``cxx_`` or ``objc_``.
    108 
    109 Another use of ``__has_feature`` is to check for compiler features not related
    110 to the language standard, such as e.g. :doc:`AddressSanitizer
    111 <AddressSanitizer>`.
    112 
    113 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
    114 to ``__has_feature``.
    115 
    116 The feature tag is described along with the language feature below.
    117 
    118 The feature name or extension name can also be specified with a preceding and
    119 following ``__`` (double underscore) to avoid interference from a macro with
    120 the same name.  For instance, ``__cxx_rvalue_references__`` can be used instead
    121 of ``cxx_rvalue_references``.
    122 
    123 ``__has_cpp_attribute``
    124 -----------------------
    125 
    126 This function-like macro is available in C++20 by default, and is provided as an
    127 extension in earlier language standards. It takes a single argument that is the
    128 name of a double-square-bracket-style attribute. The argument can either be a
    129 single identifier or a scoped identifier. If the attribute is supported, a
    130 nonzero value is returned. If the attribute is a standards-based attribute, this
    131 macro returns a nonzero value based on the year and month in which the attribute
    132 was voted into the working draft. See `WG21 SD-6
    133 <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
    134 for the list of values returned for standards-based attributes. If the attribute
    135 is not supported by the current compilation target, this macro evaluates to 0.
    136 It can be used like this:
    137 
    138 .. code-block:: c++
    139 
    140   #ifndef __has_cpp_attribute         // For backwards compatibility
    141     #define __has_cpp_attribute(x) 0
    142   #endif
    143 
    144   ...
    145   #if __has_cpp_attribute(clang::fallthrough)
    146   #define FALLTHROUGH [[clang::fallthrough]]
    147   #else
    148   #define FALLTHROUGH
    149   #endif
    150   ...
    151 
    152 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
    153 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
    154 of these namespaces can be specified with a preceding and following ``__``
    155 (double underscore) to avoid interference from a macro with the same name. For
    156 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
    157 
    158 ``__has_c_attribute``
    159 ---------------------
    160 
    161 This function-like macro takes a single argument that is the name of an
    162 attribute exposed with the double square-bracket syntax in C mode. The argument
    163 can either be a single identifier or a scoped identifier. If the attribute is
    164 supported, a nonzero value is returned. If the attribute is not supported by the
    165 current compilation target, this macro evaluates to 0. It can be used like this:
    166 
    167 .. code-block:: c
    168 
    169   #ifndef __has_c_attribute         // Optional of course.
    170     #define __has_c_attribute(x) 0  // Compatibility with non-clang compilers.
    171   #endif
    172 
    173   ...
    174   #if __has_c_attribute(fallthrough)
    175     #define FALLTHROUGH [[fallthrough]]
    176   #else
    177     #define FALLTHROUGH
    178   #endif
    179   ...
    180 
    181 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
    182 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
    183 of these namespaces can be specified with a preceding and following ``__``
    184 (double underscore) to avoid interference from a macro with the same name. For
    185 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
    186 
    187 ``__has_attribute``
    188 -------------------
    189 
    190 This function-like macro takes a single identifier argument that is the name of
    191 a GNU-style attribute.  It evaluates to 1 if the attribute is supported by the
    192 current compilation target, or 0 if not.  It can be used like this:
    193 
    194 .. code-block:: c++
    195 
    196   #ifndef __has_attribute         // Optional of course.
    197     #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
    198   #endif
    199 
    200   ...
    201   #if __has_attribute(always_inline)
    202   #define ALWAYS_INLINE __attribute__((always_inline))
    203   #else
    204   #define ALWAYS_INLINE
    205   #endif
    206   ...
    207 
    208 The attribute name can also be specified with a preceding and following ``__``
    209 (double underscore) to avoid interference from a macro with the same name.  For
    210 instance, ``__always_inline__`` can be used instead of ``always_inline``.
    211 
    212 
    213 ``__has_declspec_attribute``
    214 ----------------------------
    215 
    216 This function-like macro takes a single identifier argument that is the name of
    217 an attribute implemented as a Microsoft-style ``__declspec`` attribute.  It
    218 evaluates to 1 if the attribute is supported by the current compilation target,
    219 or 0 if not.  It can be used like this:
    220 
    221 .. code-block:: c++
    222 
    223   #ifndef __has_declspec_attribute         // Optional of course.
    224     #define __has_declspec_attribute(x) 0  // Compatibility with non-clang compilers.
    225   #endif
    226 
    227   ...
    228   #if __has_declspec_attribute(dllexport)
    229   #define DLLEXPORT __declspec(dllexport)
    230   #else
    231   #define DLLEXPORT
    232   #endif
    233   ...
    234 
    235 The attribute name can also be specified with a preceding and following ``__``
    236 (double underscore) to avoid interference from a macro with the same name.  For
    237 instance, ``__dllexport__`` can be used instead of ``dllexport``.
    238 
    239 ``__is_identifier``
    240 -------------------
    241 
    242 This function-like macro takes a single identifier argument that might be either
    243 a reserved word or a regular identifier. It evaluates to 1 if the argument is just
    244 a regular identifier and not a reserved word, in the sense that it can then be
    245 used as the name of a user-defined function or variable. Otherwise it evaluates
    246 to 0.  It can be used like this:
    247 
    248 .. code-block:: c++
    249 
    250   ...
    251   #ifdef __is_identifier          // Compatibility with non-clang compilers.
    252     #if __is_identifier(__wchar_t)
    253       typedef wchar_t __wchar_t;
    254     #endif
    255   #endif
    256 
    257   __wchar_t WideCharacter;
    258   ...
    259 
    260 Include File Checking Macros
    261 ============================
    262 
    263 Not all developments systems have the same include files.  The
    264 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
    265 you to check for the existence of an include file before doing a possibly
    266 failing ``#include`` directive.  Include file checking macros must be used
    267 as expressions in ``#if`` or ``#elif`` preprocessing directives.
    268 
    269 .. _langext-__has_include:
    270 
    271 ``__has_include``
    272 -----------------
    273 
    274 This function-like macro takes a single file name string argument that is the
    275 name of an include file.  It evaluates to 1 if the file can be found using the
    276 include paths, or 0 otherwise:
    277 
    278 .. code-block:: c++
    279 
    280   // Note the two possible file name string formats.
    281   #if __has_include("myinclude.h") && __has_include(<stdint.h>)
    282   # include "myinclude.h"
    283   #endif
    284 
    285 To test for this feature, use ``#if defined(__has_include)``:
    286 
    287 .. code-block:: c++
    288 
    289   // To avoid problem with non-clang compilers not having this macro.
    290   #if defined(__has_include)
    291   #if __has_include("myinclude.h")
    292   # include "myinclude.h"
    293   #endif
    294   #endif
    295 
    296 .. _langext-__has_include_next:
    297 
    298 ``__has_include_next``
    299 ----------------------
    300 
    301 This function-like macro takes a single file name string argument that is the
    302 name of an include file.  It is like ``__has_include`` except that it looks for
    303 the second instance of the given file found in the include paths.  It evaluates
    304 to 1 if the second instance of the file can be found using the include paths,
    305 or 0 otherwise:
    306 
    307 .. code-block:: c++
    308 
    309   // Note the two possible file name string formats.
    310   #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
    311   # include_next "myinclude.h"
    312   #endif
    313 
    314   // To avoid problem with non-clang compilers not having this macro.
    315   #if defined(__has_include_next)
    316   #if __has_include_next("myinclude.h")
    317   # include_next "myinclude.h"
    318   #endif
    319   #endif
    320 
    321 Note that ``__has_include_next``, like the GNU extension ``#include_next``
    322 directive, is intended for use in headers only, and will issue a warning if
    323 used in the top-level compilation file.  A warning will also be issued if an
    324 absolute path is used in the file argument.
    325 
    326 ``__has_warning``
    327 -----------------
    328 
    329 This function-like macro takes a string literal that represents a command line
    330 option for a warning and returns true if that is a valid warning option.
    331 
    332 .. code-block:: c++
    333 
    334   #if __has_warning("-Wformat")
    335   ...
    336   #endif
    337 
    338 .. _languageextensions-builtin-macros:
    339 
    340 Builtin Macros
    341 ==============
    342 
    343 ``__BASE_FILE__``
    344   Defined to a string that contains the name of the main input file passed to
    345   Clang.
    346 
    347 ``__FILE_NAME__``
    348   Clang-specific extension that functions similar to ``__FILE__`` but only
    349   renders the last path component (the filename) instead of an invocation
    350   dependent full path to that file.
    351 
    352 ``__COUNTER__``
    353   Defined to an integer value that starts at zero and is incremented each time
    354   the ``__COUNTER__`` macro is expanded.
    355 
    356 ``__INCLUDE_LEVEL__``
    357   Defined to an integral value that is the include depth of the file currently
    358   being translated.  For the main file, this value is zero.
    359 
    360 ``__TIMESTAMP__``
    361   Defined to the date and time of the last modification of the current source
    362   file.
    363 
    364 ``__clang__``
    365   Defined when compiling with Clang
    366 
    367 ``__clang_major__``
    368   Defined to the major marketing version number of Clang (e.g., the 2 in
    369   2.0.1).  Note that marketing version numbers should not be used to check for
    370   language features, as different vendors use different numbering schemes.
    371   Instead, use the :ref:`langext-feature_check`.
    372 
    373 ``__clang_minor__``
    374   Defined to the minor version number of Clang (e.g., the 0 in 2.0.1).  Note
    375   that marketing version numbers should not be used to check for language
    376   features, as different vendors use different numbering schemes.  Instead, use
    377   the :ref:`langext-feature_check`.
    378 
    379 ``__clang_patchlevel__``
    380   Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
    381 
    382 ``__clang_version__``
    383   Defined to a string that captures the Clang marketing version, including the
    384   Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
    385 
    386 ``__clang_literal_encoding__``
    387   Defined to a narrow string literal that represents the current encoding of
    388   narrow string literals, e.g., ``"hello"``. This macro typically expands to
    389   "UTF-8" (but may change in the future if the
    390   ``-fexec-charset="Encoding-Name"`` option is implemented.)
    391 
    392 ``__clang_wide_literal_encoding__``
    393   Defined to a narrow string literal that represents the current encoding of
    394   wide string literals, e.g., ``L"hello"``. This macro typically expands to
    395   "UTF-16" or "UTF-32" (but may change in the future if the
    396   ``-fwide-exec-charset="Encoding-Name"`` option is implemented.)
    397 
    398 .. _langext-vectors:
    399 
    400 Vectors and Extended Vectors
    401 ============================
    402 
    403 Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
    404 
    405 OpenCL vector types are created using the ``ext_vector_type`` attribute.  It
    406 supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL.  An example
    407 is:
    408 
    409 .. code-block:: c++
    410 
    411   typedef float float4 __attribute__((ext_vector_type(4)));
    412   typedef float float2 __attribute__((ext_vector_type(2)));
    413 
    414   float4 foo(float2 a, float2 b) {
    415     float4 c;
    416     c.xz = a;
    417     c.yw = b;
    418     return c;
    419   }
    420 
    421 Query for this feature with ``__has_attribute(ext_vector_type)``.
    422 
    423 Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
    424 and functions.  For example:
    425 
    426 .. code-block:: c++
    427 
    428   vector float foo(vector int a) {
    429     vector int b;
    430     b = vec_add(a, a) + a;
    431     return (vector float)b;
    432   }
    433 
    434 NEON vector types are created using ``neon_vector_type`` and
    435 ``neon_polyvector_type`` attributes.  For example:
    436 
    437 .. code-block:: c++
    438 
    439   typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
    440   typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
    441 
    442   int8x8_t foo(int8x8_t a) {
    443     int8x8_t v;
    444     v = a;
    445     return v;
    446   }
    447 
    448 Vector Literals
    449 ---------------
    450 
    451 Vector literals can be used to create vectors from a set of scalars, or
    452 vectors.  Either parentheses or braces form can be used.  In the parentheses
    453 form the number of literal values specified must be one, i.e. referring to a
    454 scalar value, or must match the size of the vector type being created.  If a
    455 single scalar literal value is specified, the scalar literal value will be
    456 replicated to all the components of the vector type.  In the brackets form any
    457 number of literals can be specified.  For example:
    458 
    459 .. code-block:: c++
    460 
    461   typedef int v4si __attribute__((__vector_size__(16)));
    462   typedef float float4 __attribute__((ext_vector_type(4)));
    463   typedef float float2 __attribute__((ext_vector_type(2)));
    464 
    465   v4si vsi = (v4si){1, 2, 3, 4};
    466   float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
    467   vector int vi1 = (vector int)(1);    // vi1 will be (1, 1, 1, 1).
    468   vector int vi2 = (vector int){1};    // vi2 will be (1, 0, 0, 0).
    469   vector int vi3 = (vector int)(1, 2); // error
    470   vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
    471   vector int vi5 = (vector int)(1, 2, 3, 4);
    472   float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
    473 
    474 Vector Operations
    475 -----------------
    476 
    477 The table below shows the support for each operation by vector extension.  A
    478 dash indicates that an operation is not accepted according to a corresponding
    479 specification.
    480 
    481 ============================== ======= ======= ============= =======
    482          Operator              OpenCL  AltiVec     GCC        NEON
    483 ============================== ======= ======= ============= =======
    484 []                               yes     yes       yes         --
    485 unary operators +, --            yes     yes       yes         --
    486 ++, -- --                        yes     yes       yes         --
    487 +,--,*,/,%                       yes     yes       yes         --
    488 bitwise operators &,|,^,~        yes     yes       yes         --
    489 >>,<<                            yes     yes       yes         --
    490 !, &&, ||                        yes     --        yes         --
    491 ==, !=, >, <, >=, <=             yes     yes       yes         --
    492 =                                yes     yes       yes         yes
    493 ?: [#]_                          yes     --        yes         --
    494 sizeof                           yes     yes       yes         yes
    495 C-style cast                     yes     yes       yes         no
    496 reinterpret_cast                 yes     no        yes         no
    497 static_cast                      yes     no        yes         no
    498 const_cast                       no      no        no          no
    499 ============================== ======= ======= ============= =======
    500 
    501 See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
    502 
    503 .. [#] ternary operator(?:) has different behaviors depending on condition
    504   operand's vector type. If the condition is a GNU vector (i.e. __vector_size__),
    505   it's only available in C++ and uses normal bool conversions (that is, != 0).
    506   If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
    507   And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
    508 
    509 Matrix Types
    510 ============
    511 
    512 Clang provides an extension for matrix types, which is currently being
    513 implemented. See :ref:`the draft specification <matrixtypes>` for more details.
    514 
    515 For example, the code below uses the matrix types extension to multiply two 4x4
    516 float matrices and add the result to a third 4x4 matrix.
    517 
    518 .. code-block:: c++
    519 
    520   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
    521 
    522   m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
    523     return a + b * c;
    524   }
    525 
    526 
    527 Half-Precision Floating Point
    528 =============================
    529 
    530 Clang supports three half-precision (16-bit) floating point types: ``__fp16``,
    531 ``_Float16`` and ``__bf16``.  These types are supported in all language modes.
    532 
    533 ``__fp16`` is supported on every target, as it is purely a storage format; see below.
    534 ``_Float16`` is currently only supported on the following targets, with further
    535 targets pending ABI standardization:
    536 
    537 * 32-bit ARM
    538 * 64-bit ARM (AArch64)
    539 * AMDGPU
    540 * SPIR
    541 
    542 ``_Float16`` will be supported on more targets as they define ABIs for it.
    543 
    544 ``__bf16`` is purely a storage format; it is currently only supported on the following targets:
    545 * 32-bit ARM
    546 * 64-bit ARM (AArch64)
    547 
    548 The ``__bf16`` type is only available when supported in hardware.
    549 
    550 ``__fp16`` is a storage and interchange format only.  This means that values of
    551 ``__fp16`` are immediately promoted to (at least) ``float`` when used in arithmetic
    552 operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``.
    553 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>`_).
    554 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM
    555 alternative format.
    556 
    557 ``_Float16`` is an interchange floating-point type.  This means that, just like arithmetic on
    558 ``float`` or ``double``, arithmetic on ``_Float16`` operands is formally performed in the
    559 ``_Float16`` type, so that e.g. the result of adding two ``_Float16`` values has type
    560 ``_Float16``.  The behavior of ``_Float16`` is specified by ISO/IEC TS 18661-3:2015
    561 ("Floating-point extensions for C").  As with ``__fp16``, Clang uses the ``binary16``
    562 format from IEEE 754-2008 for ``_Float16``.
    563 
    564 ``_Float16`` arithmetic will be performed using native half-precision support
    565 when available on the target (e.g. on ARMv8.2a); otherwise it will be performed
    566 at a higher precision (currently always ``float``) and then truncated down to
    567 ``_Float16``.  Note that C and C++ allow intermediate floating-point operands
    568 of an expression to be computed with greater precision than is expressible in
    569 their type, so Clang may avoid intermediate truncations in certain cases; this may
    570 lead to results that are inconsistent with native arithmetic.
    571 
    572 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
    573 as it has been defined by the C standards committee and has behavior that is
    574 more familiar to most programmers.
    575 
    576 Because ``__fp16`` operands are always immediately promoted to ``float``, the
    577 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
    578 arithmetic conversions is ``float``.
    579 
    580 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
    581 ``3.14f16``.
    582 
    583 Because default argument promotion only applies to the standard floating-point
    584 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
    585 or untyped arguments.  As a consequence, some caution must be taken when using
    586 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
    587 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
    588 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
    589 ``double`` before using it with an ``%f`` or similar specifier.
    590 
    591 Messages on ``deprecated`` and ``unavailable`` Attributes
    592 =========================================================
    593 
    594 An optional string message can be added to the ``deprecated`` and
    595 ``unavailable`` attributes.  For example:
    596 
    597 .. code-block:: c++
    598 
    599   void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
    600 
    601 If the deprecated or unavailable declaration is used, the message will be
    602 incorporated into the appropriate diagnostic:
    603 
    604 .. code-block:: none
    605 
    606   harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
    607         [-Wdeprecated-declarations]
    608     explode();
    609     ^
    610 
    611 Query for this feature with
    612 ``__has_extension(attribute_deprecated_with_message)`` and
    613 ``__has_extension(attribute_unavailable_with_message)``.
    614 
    615 Attributes on Enumerators
    616 =========================
    617 
    618 Clang allows attributes to be written on individual enumerators.  This allows
    619 enumerators to be deprecated, made unavailable, etc.  The attribute must appear
    620 after the enumerator name and before any initializer, like so:
    621 
    622 .. code-block:: c++
    623 
    624   enum OperationMode {
    625     OM_Invalid,
    626     OM_Normal,
    627     OM_Terrified __attribute__((deprecated)),
    628     OM_AbortOnError __attribute__((deprecated)) = 4
    629   };
    630 
    631 Attributes on the ``enum`` declaration do not apply to individual enumerators.
    632 
    633 Query for this feature with ``__has_extension(enumerator_attributes)``.
    634 
    635 'User-Specified' System Frameworks
    636 ==================================
    637 
    638 Clang provides a mechanism by which frameworks can be built in such a way that
    639 they will always be treated as being "system frameworks", even if they are not
    640 present in a system framework directory.  This can be useful to system
    641 framework developers who want to be able to test building other applications
    642 with development builds of their framework, including the manner in which the
    643 compiler changes warning behavior for system headers.
    644 
    645 Framework developers can opt-in to this mechanism by creating a
    646 "``.system_framework``" file at the top-level of their framework.  That is, the
    647 framework should have contents like:
    648 
    649 .. code-block:: none
    650 
    651   .../TestFramework.framework
    652   .../TestFramework.framework/.system_framework
    653   .../TestFramework.framework/Headers
    654   .../TestFramework.framework/Headers/TestFramework.h
    655   ...
    656 
    657 Clang will treat the presence of this file as an indicator that the framework
    658 should be treated as a system framework, regardless of how it was found in the
    659 framework search path.  For consistency, we recommend that such files never be
    660 included in installed versions of the framework.
    661 
    662 Checks for Standard Language Features
    663 =====================================
    664 
    665 The ``__has_feature`` macro can be used to query if certain standard language
    666 features are enabled.  The ``__has_extension`` macro can be used to query if
    667 language features are available as an extension when compiling for a standard
    668 which does not provide them.  The features which can be tested are listed here.
    669 
    670 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
    671 These are macros with names of the form ``__cpp_<feature_name>``, and are
    672 intended to be a portable way to query the supported features of the compiler.
    673 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
    674 information on the version of SD-6 supported by each Clang release, and the
    675 macros provided by that revision of the recommendations.
    676 
    677 C++98
    678 -----
    679 
    680 The features listed below are part of the C++98 standard.  These features are
    681 enabled by default when compiling C++ code.
    682 
    683 C++ exceptions
    684 ^^^^^^^^^^^^^^
    685 
    686 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
    687 enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
    688 exceptions.
    689 
    690 C++ RTTI
    691 ^^^^^^^^
    692 
    693 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
    694 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
    695 
    696 C++11
    697 -----
    698 
    699 The features listed below are part of the C++11 standard.  As a result, all
    700 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
    701 when compiling C++ code.
    702 
    703 C++11 SFINAE includes access control
    704 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    705 
    706 Use ``__has_feature(cxx_access_control_sfinae)`` or
    707 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
    708 access-control errors (e.g., calling a private constructor) are considered to
    709 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
    710 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
    711 
    712 C++11 alias templates
    713 ^^^^^^^^^^^^^^^^^^^^^
    714 
    715 Use ``__has_feature(cxx_alias_templates)`` or
    716 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
    717 alias declarations and alias templates is enabled.
    718 
    719 C++11 alignment specifiers
    720 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    721 
    722 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
    723 determine if support for alignment specifiers using ``alignas`` is enabled.
    724 
    725 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
    726 determine if support for the ``alignof`` keyword is enabled.
    727 
    728 C++11 attributes
    729 ^^^^^^^^^^^^^^^^
    730 
    731 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
    732 determine if support for attribute parsing with C++11's square bracket notation
    733 is enabled.
    734 
    735 C++11 generalized constant expressions
    736 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    737 
    738 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
    739 constant expressions (e.g., ``constexpr``) is enabled.
    740 
    741 C++11 ``decltype()``
    742 ^^^^^^^^^^^^^^^^^^^^
    743 
    744 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
    745 determine if support for the ``decltype()`` specifier is enabled.  C++11's
    746 ``decltype`` does not require type-completeness of a function call expression.
    747 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
    748 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
    749 support for this feature is enabled.
    750 
    751 C++11 default template arguments in function templates
    752 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    753 
    754 Use ``__has_feature(cxx_default_function_template_args)`` or
    755 ``__has_extension(cxx_default_function_template_args)`` to determine if support
    756 for default template arguments in function templates is enabled.
    757 
    758 C++11 ``default``\ ed functions
    759 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    760 
    761 Use ``__has_feature(cxx_defaulted_functions)`` or
    762 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
    763 defaulted function definitions (with ``= default``) is enabled.
    764 
    765 C++11 delegating constructors
    766 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    767 
    768 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
    769 delegating constructors is enabled.
    770 
    771 C++11 ``deleted`` functions
    772 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    773 
    774 Use ``__has_feature(cxx_deleted_functions)`` or
    775 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
    776 function definitions (with ``= delete``) is enabled.
    777 
    778 C++11 explicit conversion functions
    779 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    780 
    781 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
    782 ``explicit`` conversion functions is enabled.
    783 
    784 C++11 generalized initializers
    785 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    786 
    787 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
    788 generalized initializers (using braced lists and ``std::initializer_list``) is
    789 enabled.
    790 
    791 C++11 implicit move constructors/assignment operators
    792 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    793 
    794 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
    795 generate move constructors and move assignment operators where needed.
    796 
    797 C++11 inheriting constructors
    798 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    799 
    800 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
    801 inheriting constructors is enabled.
    802 
    803 C++11 inline namespaces
    804 ^^^^^^^^^^^^^^^^^^^^^^^
    805 
    806 Use ``__has_feature(cxx_inline_namespaces)`` or
    807 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
    808 namespaces is enabled.
    809 
    810 C++11 lambdas
    811 ^^^^^^^^^^^^^
    812 
    813 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
    814 determine if support for lambdas is enabled.
    815 
    816 C++11 local and unnamed types as template arguments
    817 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    818 
    819 Use ``__has_feature(cxx_local_type_template_args)`` or
    820 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
    821 local and unnamed types as template arguments is enabled.
    822 
    823 C++11 noexcept
    824 ^^^^^^^^^^^^^^
    825 
    826 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
    827 determine if support for noexcept exception specifications is enabled.
    828 
    829 C++11 in-class non-static data member initialization
    830 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    831 
    832 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
    833 initialization of non-static data members is enabled.
    834 
    835 C++11 ``nullptr``
    836 ^^^^^^^^^^^^^^^^^
    837 
    838 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
    839 determine if support for ``nullptr`` is enabled.
    840 
    841 C++11 ``override control``
    842 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    843 
    844 Use ``__has_feature(cxx_override_control)`` or
    845 ``__has_extension(cxx_override_control)`` to determine if support for the
    846 override control keywords is enabled.
    847 
    848 C++11 reference-qualified functions
    849 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    850 
    851 Use ``__has_feature(cxx_reference_qualified_functions)`` or
    852 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
    853 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
    854 applied to ``*this``) is enabled.
    855 
    856 C++11 range-based ``for`` loop
    857 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    858 
    859 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
    860 determine if support for the range-based for loop is enabled.
    861 
    862 C++11 raw string literals
    863 ^^^^^^^^^^^^^^^^^^^^^^^^^
    864 
    865 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
    866 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
    867 
    868 C++11 rvalue references
    869 ^^^^^^^^^^^^^^^^^^^^^^^
    870 
    871 Use ``__has_feature(cxx_rvalue_references)`` or
    872 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
    873 references is enabled.
    874 
    875 C++11 ``static_assert()``
    876 ^^^^^^^^^^^^^^^^^^^^^^^^^
    877 
    878 Use ``__has_feature(cxx_static_assert)`` or
    879 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
    880 assertions using ``static_assert`` is enabled.
    881 
    882 C++11 ``thread_local``
    883 ^^^^^^^^^^^^^^^^^^^^^^
    884 
    885 Use ``__has_feature(cxx_thread_local)`` to determine if support for
    886 ``thread_local`` variables is enabled.
    887 
    888 C++11 type inference
    889 ^^^^^^^^^^^^^^^^^^^^
    890 
    891 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
    892 determine C++11 type inference is supported using the ``auto`` specifier.  If
    893 this is disabled, ``auto`` will instead be a storage class specifier, as in C
    894 or C++98.
    895 
    896 C++11 strongly typed enumerations
    897 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    898 
    899 Use ``__has_feature(cxx_strong_enums)`` or
    900 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
    901 typed, scoped enumerations is enabled.
    902 
    903 C++11 trailing return type
    904 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    905 
    906 Use ``__has_feature(cxx_trailing_return)`` or
    907 ``__has_extension(cxx_trailing_return)`` to determine if support for the
    908 alternate function declaration syntax with trailing return type is enabled.
    909 
    910 C++11 Unicode string literals
    911 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    912 
    913 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
    914 string literals is enabled.
    915 
    916 C++11 unrestricted unions
    917 ^^^^^^^^^^^^^^^^^^^^^^^^^
    918 
    919 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
    920 unrestricted unions is enabled.
    921 
    922 C++11 user-defined literals
    923 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    924 
    925 Use ``__has_feature(cxx_user_literals)`` to determine if support for
    926 user-defined literals is enabled.
    927 
    928 C++11 variadic templates
    929 ^^^^^^^^^^^^^^^^^^^^^^^^
    930 
    931 Use ``__has_feature(cxx_variadic_templates)`` or
    932 ``__has_extension(cxx_variadic_templates)`` to determine if support for
    933 variadic templates is enabled.
    934 
    935 C++14
    936 -----
    937 
    938 The features listed below are part of the C++14 standard.  As a result, all
    939 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
    940 when compiling C++ code.
    941 
    942 C++14 binary literals
    943 ^^^^^^^^^^^^^^^^^^^^^
    944 
    945 Use ``__has_feature(cxx_binary_literals)`` or
    946 ``__has_extension(cxx_binary_literals)`` to determine whether
    947 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
    948 feature as an extension in all language modes.
    949 
    950 C++14 contextual conversions
    951 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    952 
    953 Use ``__has_feature(cxx_contextual_conversions)`` or
    954 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
    955 are used when performing an implicit conversion for an array bound in a
    956 *new-expression*, the operand of a *delete-expression*, an integral constant
    957 expression, or a condition in a ``switch`` statement.
    958 
    959 C++14 decltype(auto)
    960 ^^^^^^^^^^^^^^^^^^^^
    961 
    962 Use ``__has_feature(cxx_decltype_auto)`` or
    963 ``__has_extension(cxx_decltype_auto)`` to determine if support
    964 for the ``decltype(auto)`` placeholder type is enabled.
    965 
    966 C++14 default initializers for aggregates
    967 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    968 
    969 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
    970 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
    971 for default initializers in aggregate members is enabled.
    972 
    973 C++14 digit separators
    974 ^^^^^^^^^^^^^^^^^^^^^^
    975 
    976 Use ``__cpp_digit_separators`` to determine if support for digit separators
    977 using single quotes (for instance, ``10'000``) is enabled. At this time, there
    978 is no corresponding ``__has_feature`` name
    979 
    980 C++14 generalized lambda capture
    981 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    982 
    983 Use ``__has_feature(cxx_init_captures)`` or
    984 ``__has_extension(cxx_init_captures)`` to determine if support for
    985 lambda captures with explicit initializers is enabled
    986 (for instance, ``[n(0)] { return ++n; }``).
    987 
    988 C++14 generic lambdas
    989 ^^^^^^^^^^^^^^^^^^^^^
    990 
    991 Use ``__has_feature(cxx_generic_lambdas)`` or
    992 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
    993 (polymorphic) lambdas is enabled
    994 (for instance, ``[] (auto x) { return x + 1; }``).
    995 
    996 C++14 relaxed constexpr
    997 ^^^^^^^^^^^^^^^^^^^^^^^
    998 
    999 Use ``__has_feature(cxx_relaxed_constexpr)`` or
   1000 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
   1001 declarations, local variable modification, and control flow constructs
   1002 are permitted in ``constexpr`` functions.
   1003 
   1004 C++14 return type deduction
   1005 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1006 
   1007 Use ``__has_feature(cxx_return_type_deduction)`` or
   1008 ``__has_extension(cxx_return_type_deduction)`` to determine if support
   1009 for return type deduction for functions (using ``auto`` as a return type)
   1010 is enabled.
   1011 
   1012 C++14 runtime-sized arrays
   1013 ^^^^^^^^^^^^^^^^^^^^^^^^^^
   1014 
   1015 Use ``__has_feature(cxx_runtime_array)`` or
   1016 ``__has_extension(cxx_runtime_array)`` to determine if support
   1017 for arrays of runtime bound (a restricted form of variable-length arrays)
   1018 is enabled.
   1019 Clang's implementation of this feature is incomplete.
   1020 
   1021 C++14 variable templates
   1022 ^^^^^^^^^^^^^^^^^^^^^^^^
   1023 
   1024 Use ``__has_feature(cxx_variable_templates)`` or
   1025 ``__has_extension(cxx_variable_templates)`` to determine if support for
   1026 templated variable declarations is enabled.
   1027 
   1028 C11
   1029 ---
   1030 
   1031 The features listed below are part of the C11 standard.  As a result, all these
   1032 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
   1033 compiling C code.  Additionally, because these features are all
   1034 backward-compatible, they are available as extensions in all language modes.
   1035 
   1036 C11 alignment specifiers
   1037 ^^^^^^^^^^^^^^^^^^^^^^^^
   1038 
   1039 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
   1040 if support for alignment specifiers using ``_Alignas`` is enabled.
   1041 
   1042 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
   1043 if support for the ``_Alignof`` keyword is enabled.
   1044 
   1045 C11 atomic operations
   1046 ^^^^^^^^^^^^^^^^^^^^^
   1047 
   1048 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
   1049 if support for atomic types using ``_Atomic`` is enabled.  Clang also provides
   1050 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
   1051 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
   1052 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
   1053 is available.
   1054 
   1055 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
   1056 will otherwise use its own. When using its own, implementations of the atomic
   1057 operations are provided as macros. In the cases where C11 also requires a real
   1058 function, this header provides only the declaration of that function (along
   1059 with a shadowing macro implementation), and you must link to a library which
   1060 provides a definition of the function if you use it instead of the macro.
   1061 
   1062 C11 generic selections
   1063 ^^^^^^^^^^^^^^^^^^^^^^
   1064 
   1065 Use ``__has_feature(c_generic_selections)`` or
   1066 ``__has_extension(c_generic_selections)`` to determine if support for generic
   1067 selections is enabled.
   1068 
   1069 As an extension, the C11 generic selection expression is available in all
   1070 languages supported by Clang.  The syntax is the same as that given in the C11
   1071 standard.
   1072 
   1073 In C, type compatibility is decided according to the rules given in the
   1074 appropriate standard, but in C++, which lacks the type compatibility rules used
   1075 in C, types are considered compatible only if they are equivalent.
   1076 
   1077 C11 ``_Static_assert()``
   1078 ^^^^^^^^^^^^^^^^^^^^^^^^
   1079 
   1080 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
   1081 to determine if support for compile-time assertions using ``_Static_assert`` is
   1082 enabled.
   1083 
   1084 C11 ``_Thread_local``
   1085 ^^^^^^^^^^^^^^^^^^^^^
   1086 
   1087 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
   1088 to determine if support for ``_Thread_local`` variables is enabled.
   1089 
   1090 Modules
   1091 -------
   1092 
   1093 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
   1094 For example, compiling code with ``-fmodules`` enables the use of Modules.
   1095 
   1096 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
   1097 
   1098 Type Trait Primitives
   1099 =====================
   1100 
   1101 Type trait primitives are special builtin constant expressions that can be used
   1102 by the standard C++ library to facilitate or simplify the implementation of
   1103 user-facing type traits in the <type_traits> header.
   1104 
   1105 They are not intended to be used directly by user code because they are
   1106 implementation-defined and subject to change -- as such they're tied closely to
   1107 the supported set of system headers, currently:
   1108 
   1109 * LLVM's own libc++
   1110 * GNU libstdc++
   1111 * The Microsoft standard C++ library
   1112 
   1113 Clang supports the `GNU C++ type traits
   1114 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
   1115 `Microsoft Visual C++ type traits
   1116 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
   1117 as well as nearly all of the
   1118 `Embarcadero C++ type traits
   1119 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
   1120 
   1121 The following type trait primitives are supported by Clang. Those traits marked
   1122 (C++) provide implementations for type traits specified by the C++ standard;
   1123 ``__X(...)`` has the same semantics and constraints as the corresponding
   1124 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
   1125 
   1126 * ``__array_rank(type)`` (Embarcadero):
   1127   Returns the number of levels of array in the type ``type``:
   1128   ``0`` if ``type`` is not an array type, and
   1129   ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
   1130 * ``__array_extent(type, dim)`` (Embarcadero):
   1131   The ``dim``'th array bound in the type ``type``, or ``0`` if
   1132   ``dim >= __array_rank(type)``.
   1133 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
   1134   Deprecated, use ``__is_nothrow_assignable`` instead.
   1135 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
   1136   Deprecated, use ``__is_nothrow_assignable`` instead.
   1137 * ``__has_nothrow_copy`` (GNU, Microsoft):
   1138   Deprecated, use ``__is_nothrow_constructible`` instead.
   1139 * ``__has_nothrow_constructor`` (GNU, Microsoft):
   1140   Deprecated, use ``__is_nothrow_constructible`` instead.
   1141 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
   1142   Deprecated, use ``__is_trivially_assignable`` instead.
   1143 * ``__has_trivial_move_assign`` (GNU, Microsoft):
   1144   Deprecated, use ``__is_trivially_assignable`` instead.
   1145 * ``__has_trivial_copy`` (GNU, Microsoft):
   1146   Deprecated, use ``__is_trivially_constructible`` instead.
   1147 * ``__has_trivial_constructor`` (GNU, Microsoft):
   1148   Deprecated, use ``__is_trivially_constructible`` instead.
   1149 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
   1150   Deprecated, use ``__is_trivially_constructible`` instead.
   1151 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
   1152   Deprecated, use ``__is_trivially_destructible`` instead.
   1153 * ``__has_unique_object_representations`` (C++, GNU)
   1154 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
   1155 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
   1156 * ``__is_aggregate`` (C++, GNU, Microsoft)
   1157 * ``__is_arithmetic`` (C++, Embarcadero)
   1158 * ``__is_array`` (C++, Embarcadero)
   1159 * ``__is_assignable`` (C++, MSVC 2015)
   1160 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
   1161 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
   1162 * ``__is_complete_type(type)`` (Embarcadero):
   1163   Return ``true`` if ``type`` is a complete type.
   1164   Warning: this trait is dangerous because it can return different values at
   1165   different points in the same program.
   1166 * ``__is_compound`` (C++, Embarcadero)
   1167 * ``__is_const`` (C++, Embarcadero)
   1168 * ``__is_constructible`` (C++, MSVC 2013)
   1169 * ``__is_convertible`` (C++, Embarcadero)
   1170 * ``__is_convertible_to`` (Microsoft):
   1171   Synonym for ``__is_convertible``.
   1172 * ``__is_destructible`` (C++, MSVC 2013):
   1173   Only available in ``-fms-extensions`` mode.
   1174 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
   1175 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
   1176 * ``__is_final`` (C++, GNU, Microsoft)
   1177 * ``__is_floating_point`` (C++, Embarcadero)
   1178 * ``__is_function`` (C++, Embarcadero)
   1179 * ``__is_fundamental`` (C++, Embarcadero)
   1180 * ``__is_integral`` (C++, Embarcadero)
   1181 * ``__is_interface_class`` (Microsoft):
   1182   Returns ``false``, even for types defined with ``__interface``.
   1183 * ``__is_literal`` (Clang):
   1184   Synonym for ``__is_literal_type``.
   1185 * ``__is_literal_type`` (C++, GNU, Microsoft):
   1186   Note, the corresponding standard trait was deprecated in C++17
   1187   and removed in C++20.
   1188 * ``__is_lvalue_reference`` (C++, Embarcadero)
   1189 * ``__is_member_object_pointer`` (C++, Embarcadero)
   1190 * ``__is_member_function_pointer`` (C++, Embarcadero)
   1191 * ``__is_member_pointer`` (C++, Embarcadero)
   1192 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
   1193 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
   1194 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
   1195   Only available in ``-fms-extensions`` mode.
   1196 * ``__is_object`` (C++, Embarcadero)
   1197 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
   1198   Note, the corresponding standard trait was deprecated in C++20.
   1199 * ``__is_pointer`` (C++, Embarcadero)
   1200 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
   1201 * ``__is_reference`` (C++, Embarcadero)
   1202 * ``__is_rvalue_reference`` (C++, Embarcadero)
   1203 * ``__is_same`` (C++, Embarcadero)
   1204 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
   1205 * ``__is_scalar`` (C++, Embarcadero)
   1206 * ``__is_sealed`` (Microsoft):
   1207   Synonym for ``__is_final``.
   1208 * ``__is_signed`` (C++, Embarcadero):
   1209   Returns false for enumeration types, and returns true for floating-point
   1210   types. Note, before Clang 10, returned true for enumeration types if the
   1211   underlying type was signed, and returned false for floating-point types.
   1212 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
   1213 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
   1214 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
   1215 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
   1216 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
   1217 * ``__is_trivially_destructible`` (C++, MSVC 2013)
   1218 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
   1219 * ``__is_unsigned`` (C++, Embarcadero):
   1220   Returns false for enumeration types. Note, before Clang 13, returned true for
   1221   enumeration types if the underlying type was unsigned.
   1222 * ``__is_void`` (C++, Embarcadero)
   1223 * ``__is_volatile`` (C++, Embarcadero)
   1224 * ``__reference_binds_to_temporary(T, U)`` (Clang):  Determines whether a
   1225   reference of type ``T`` bound to an expression of type ``U`` would bind to a
   1226   materialized temporary object. If ``T`` is not a reference type the result
   1227   is false. Note this trait will also return false when the initialization of
   1228   ``T`` from ``U`` is ill-formed.
   1229 * ``__underlying_type`` (C++, GNU, Microsoft)
   1230 
   1231 In addition, the following expression traits are supported:
   1232 
   1233 * ``__is_lvalue_expr(e)`` (Embarcadero):
   1234   Returns true if ``e`` is an lvalue expression.
   1235   Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
   1236 * ``__is_rvalue_expr(e)`` (Embarcadero):
   1237   Returns true if ``e`` is a prvalue expression.
   1238   Deprecated, use ``!__is_reference(decltype((e)))`` instead.
   1239 
   1240 There are multiple ways to detect support for a type trait ``__X`` in the
   1241 compiler, depending on the oldest version of Clang you wish to support.
   1242 
   1243 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
   1244 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
   1245 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
   1246   the following traits:
   1247 
   1248   * ``__has_nothrow_assign``
   1249   * ``__has_nothrow_copy``
   1250   * ``__has_nothrow_constructor``
   1251   * ``__has_trivial_assign``
   1252   * ``__has_trivial_copy``
   1253   * ``__has_trivial_constructor``
   1254   * ``__has_trivial_destructor``
   1255   * ``__has_virtual_destructor``
   1256   * ``__is_abstract``
   1257   * ``__is_base_of``
   1258   * ``__is_class``
   1259   * ``__is_constructible``
   1260   * ``__is_convertible_to``
   1261   * ``__is_empty``
   1262   * ``__is_enum``
   1263   * ``__is_final``
   1264   * ``__is_literal``
   1265   * ``__is_standard_layout``
   1266   * ``__is_pod``
   1267   * ``__is_polymorphic``
   1268   * ``__is_sealed``
   1269   * ``__is_trivial``
   1270   * ``__is_trivially_assignable``
   1271   * ``__is_trivially_constructible``
   1272   * ``__is_trivially_copyable``
   1273   * ``__is_union``
   1274   * ``__underlying_type``
   1275 
   1276 A simplistic usage example as might be seen in standard C++ headers follows:
   1277 
   1278 .. code-block:: c++
   1279 
   1280   #if __has_builtin(__is_convertible_to)
   1281   template<typename From, typename To>
   1282   struct is_convertible_to {
   1283     static const bool value = __is_convertible_to(From, To);
   1284   };
   1285   #else
   1286   // Emulate type trait for compatibility with other compilers.
   1287   #endif
   1288 
   1289 Blocks
   1290 ======
   1291 
   1292 The syntax and high level language feature description is in
   1293 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
   1294 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
   1295 
   1296 Query for this feature with ``__has_extension(blocks)``.
   1297 
   1298 ASM Goto with Output Constraints
   1299 ================================
   1300 
   1301 In addition to the functionality provided by `GCC's extended
   1302 assembly <https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html>`_, clang
   1303 supports output constraints with the `goto` form.
   1304 
   1305 The goto form of GCC's extended assembly allows the programmer to branch to a C
   1306 label from within an inline assembly block. Clang extends this behavior by
   1307 allowing the programmer to use output constraints:
   1308 
   1309 .. code-block:: c++
   1310 
   1311   int foo(int x) {
   1312       int y;
   1313       asm goto("# %0 %1 %l2" : "=r"(y) : "r"(x) : : err);
   1314       return y;
   1315     err:
   1316       return -1;
   1317   }
   1318 
   1319 It's important to note that outputs are valid only on the "fallthrough" branch.
   1320 Using outputs on an indirect branch may result in undefined behavior. For
   1321 example, in the function above, use of the value assigned to `y` in the `err`
   1322 block is undefined behavior.
   1323 
   1324 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
   1325 
   1326 Objective-C Features
   1327 ====================
   1328 
   1329 Related result types
   1330 --------------------
   1331 
   1332 According to Cocoa conventions, Objective-C methods with certain names
   1333 ("``init``", "``alloc``", etc.) always return objects that are an instance of
   1334 the receiving class's type.  Such methods are said to have a "related result
   1335 type", meaning that a message send to one of these methods will have the same
   1336 static type as an instance of the receiver class.  For example, given the
   1337 following classes:
   1338 
   1339 .. code-block:: objc
   1340 
   1341   @interface NSObject
   1342   + (id)alloc;
   1343   - (id)init;
   1344   @end
   1345 
   1346   @interface NSArray : NSObject
   1347   @end
   1348 
   1349 and this common initialization pattern
   1350 
   1351 .. code-block:: objc
   1352 
   1353   NSArray *array = [[NSArray alloc] init];
   1354 
   1355 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
   1356 ``alloc`` implicitly has a related result type.  Similarly, the type of the
   1357 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
   1358 related result type and its receiver is known to have the type ``NSArray *``.
   1359 If neither ``alloc`` nor ``init`` had a related result type, the expressions
   1360 would have had type ``id``, as declared in the method signature.
   1361 
   1362 A method with a related result type can be declared by using the type
   1363 ``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
   1364 that is only permitted in the result type of an Objective-C method, e.g.
   1365 
   1366 .. code-block:: objc
   1367 
   1368   @interface A
   1369   + (instancetype)constructAnA;
   1370   @end
   1371 
   1372 The related result type can also be inferred for some methods.  To determine
   1373 whether a method has an inferred related result type, the first word in the
   1374 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
   1375 and the method will have a related result type if its return type is compatible
   1376 with the type of its class and if:
   1377 
   1378 * the first word is "``alloc``" or "``new``", and the method is a class method,
   1379   or
   1380 
   1381 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
   1382   and the method is an instance method.
   1383 
   1384 If a method with a related result type is overridden by a subclass method, the
   1385 subclass method must also return a type that is compatible with the subclass
   1386 type.  For example:
   1387 
   1388 .. code-block:: objc
   1389 
   1390   @interface NSString : NSObject
   1391   - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
   1392   @end
   1393 
   1394 Related result types only affect the type of a message send or property access
   1395 via the given method.  In all other respects, a method with a related result
   1396 type is treated the same way as method that returns ``id``.
   1397 
   1398 Use ``__has_feature(objc_instancetype)`` to determine whether the
   1399 ``instancetype`` contextual keyword is available.
   1400 
   1401 Automatic reference counting
   1402 ----------------------------
   1403 
   1404 Clang provides support for :doc:`automated reference counting
   1405 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
   1406 for manual ``retain``/``release``/``autorelease`` message sends.  There are three
   1407 feature macros associated with automatic reference counting:
   1408 ``__has_feature(objc_arc)`` indicates the availability of automated reference
   1409 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
   1410 automated reference counting also includes support for ``__weak`` pointers to
   1411 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
   1412 are allowed to have fields that are pointers to Objective-C objects managed by
   1413 automatic reference counting.
   1414 
   1415 .. _objc-weak:
   1416 
   1417 Weak references
   1418 ---------------
   1419 
   1420 Clang supports ARC-style weak and unsafe references in Objective-C even
   1421 outside of ARC mode.  Weak references must be explicitly enabled with
   1422 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
   1423 to test whether they are enabled.  Unsafe references are enabled
   1424 unconditionally.  ARC-style weak and unsafe references cannot be used
   1425 when Objective-C garbage collection is enabled.
   1426 
   1427 Except as noted below, the language rules for the ``__weak`` and
   1428 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
   1429 ``unsafe_unretained`` property attributes) are just as laid out
   1430 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
   1431 In particular, note that some classes do not support forming weak
   1432 references to their instances, and note that special care must be
   1433 taken when storing weak references in memory where initialization
   1434 and deinitialization are outside the responsibility of the compiler
   1435 (such as in ``malloc``-ed memory).
   1436 
   1437 Loading from a ``__weak`` variable always implicitly retains the
   1438 loaded value.  In non-ARC modes, this retain is normally balanced
   1439 by an implicit autorelease.  This autorelease can be suppressed
   1440 by performing the load in the receiver position of a ``-retain``
   1441 message send (e.g. ``[weakReference retain]``); note that this performs
   1442 only a single retain (the retain done when primitively loading from
   1443 the weak reference).
   1444 
   1445 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
   1446 default behavior of variables and therefore is not needed.  However,
   1447 it does have an effect on the semantics of block captures: normally,
   1448 copying a block which captures an Objective-C object or block pointer
   1449 causes the captured pointer to be retained or copied, respectively,
   1450 but that behavior is suppressed when the captured variable is qualified
   1451 with ``__unsafe_unretained``.
   1452 
   1453 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
   1454 all non-ARC modes and was silently ignored outside of GC modes.  It now
   1455 means the ARC-style qualifier in all non-GC modes and is no longer
   1456 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
   1457 It is expected that ``-fobjc-weak`` will eventually be enabled by default
   1458 in all non-GC Objective-C modes.
   1459 
   1460 .. _objc-fixed-enum:
   1461 
   1462 Enumerations with a fixed underlying type
   1463 -----------------------------------------
   1464 
   1465 Clang provides support for C++11 enumerations with a fixed underlying type
   1466 within Objective-C.  For example, one can write an enumeration type as:
   1467 
   1468 .. code-block:: c++
   1469 
   1470   typedef enum : unsigned char { Red, Green, Blue } Color;
   1471 
   1472 This specifies that the underlying type, which is used to store the enumeration
   1473 value, is ``unsigned char``.
   1474 
   1475 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
   1476 underlying types is available in Objective-C.
   1477 
   1478 Interoperability with C++11 lambdas
   1479 -----------------------------------
   1480 
   1481 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
   1482 permitting a lambda to be implicitly converted to a block pointer with the
   1483 corresponding signature.  For example, consider an API such as ``NSArray``'s
   1484 array-sorting method:
   1485 
   1486 .. code-block:: objc
   1487 
   1488   - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
   1489 
   1490 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
   1491 (^)(id, id)``, and parameters of this type are generally provided with block
   1492 literals as arguments.  However, one can also use a C++11 lambda so long as it
   1493 provides the same signature (in this case, accepting two parameters of type
   1494 ``id`` and returning an ``NSComparisonResult``):
   1495 
   1496 .. code-block:: objc
   1497 
   1498   NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
   1499                      @"String 02"];
   1500   const NSStringCompareOptions comparisonOptions
   1501     = NSCaseInsensitiveSearch | NSNumericSearch |
   1502       NSWidthInsensitiveSearch | NSForcedOrderingSearch;
   1503   NSLocale *currentLocale = [NSLocale currentLocale];
   1504   NSArray *sorted
   1505     = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
   1506                NSRange string1Range = NSMakeRange(0, [s1 length]);
   1507                return [s1 compare:s2 options:comparisonOptions
   1508                range:string1Range locale:currentLocale];
   1509        }];
   1510   NSLog(@"sorted: %@", sorted);
   1511 
   1512 This code relies on an implicit conversion from the type of the lambda
   1513 expression (an unnamed, local class type called the *closure type*) to the
   1514 corresponding block pointer type.  The conversion itself is expressed by a
   1515 conversion operator in that closure type that produces a block pointer with the
   1516 same signature as the lambda itself, e.g.,
   1517 
   1518 .. code-block:: objc
   1519 
   1520   operator NSComparisonResult (^)(id, id)() const;
   1521 
   1522 This conversion function returns a new block that simply forwards the two
   1523 parameters to the lambda object (which it captures by copy), then returns the
   1524 result.  The returned block is first copied (with ``Block_copy``) and then
   1525 autoreleased.  As an optimization, if a lambda expression is immediately
   1526 converted to a block pointer (as in the first example, above), then the block
   1527 is not copied and autoreleased: rather, it is given the same lifetime as a
   1528 block literal written at that point in the program, which avoids the overhead
   1529 of copying a block to the heap in the common case.
   1530 
   1531 The conversion from a lambda to a block pointer is only available in
   1532 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
   1533 management (autorelease).
   1534 
   1535 Object Literals and Subscripting
   1536 --------------------------------
   1537 
   1538 Clang provides support for :doc:`Object Literals and Subscripting
   1539 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
   1540 programming patterns, makes programs more concise, and improves the safety of
   1541 container creation.  There are several feature macros associated with object
   1542 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
   1543 availability of array literals; ``__has_feature(objc_dictionary_literals)``
   1544 tests the availability of dictionary literals;
   1545 ``__has_feature(objc_subscripting)`` tests the availability of object
   1546 subscripting.
   1547 
   1548 Objective-C Autosynthesis of Properties
   1549 ---------------------------------------
   1550 
   1551 Clang provides support for autosynthesis of declared properties.  Using this
   1552 feature, clang provides default synthesis of those properties not declared
   1553 @dynamic and not having user provided backing getter and setter methods.
   1554 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
   1555 of this feature in version of clang being used.
   1556 
   1557 .. _langext-objc-retain-release:
   1558 
   1559 Objective-C retaining behavior attributes
   1560 -----------------------------------------
   1561 
   1562 In Objective-C, functions and methods are generally assumed to follow the
   1563 `Cocoa Memory Management
   1564 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
   1565 conventions for ownership of object arguments and
   1566 return values. However, there are exceptions, and so Clang provides attributes
   1567 to allow these exceptions to be documented. This are used by ARC and the
   1568 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
   1569 better described using the ``objc_method_family`` attribute instead.
   1570 
   1571 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
   1572 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
   1573 ``cf_returns_not_retained`` attributes can be placed on methods and functions
   1574 that return Objective-C or CoreFoundation objects. They are commonly placed at
   1575 the end of a function prototype or method declaration:
   1576 
   1577 .. code-block:: objc
   1578 
   1579   id foo() __attribute__((ns_returns_retained));
   1580 
   1581   - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
   1582 
   1583 The ``*_returns_retained`` attributes specify that the returned object has a +1
   1584 retain count.  The ``*_returns_not_retained`` attributes specify that the return
   1585 object has a +0 retain count, even if the normal convention for its selector
   1586 would be +1.  ``ns_returns_autoreleased`` specifies that the returned object is
   1587 +0, but is guaranteed to live at least as long as the next flush of an
   1588 autorelease pool.
   1589 
   1590 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
   1591 an parameter declaration; they specify that the argument is expected to have a
   1592 +1 retain count, which will be balanced in some way by the function or method.
   1593 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
   1594 method; it specifies that the method expects its ``self`` parameter to have a
   1595 +1 retain count, which it will balance in some way.
   1596 
   1597 .. code-block:: objc
   1598 
   1599   void foo(__attribute__((ns_consumed)) NSString *string);
   1600 
   1601   - (void) bar __attribute__((ns_consumes_self));
   1602   - (void) baz:(id) __attribute__((ns_consumed)) x;
   1603 
   1604 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
   1605 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
   1606 
   1607 Query for these features with ``__has_attribute(ns_consumed)``,
   1608 ``__has_attribute(ns_returns_retained)``, etc.
   1609 
   1610 Objective-C @available
   1611 ----------------------
   1612 
   1613 It is possible to use the newest SDK but still build a program that can run on
   1614 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
   1615 ``-miphoneos-version-min=``.
   1616 
   1617 Before LLVM 5.0, when calling a function that exists only in the OS that's
   1618 newer than the target OS (as determined by the minimum deployment version),
   1619 programmers had to carefully check if the function exists at runtime, using
   1620 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
   1621 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
   1622 Objective-C methods.  If such a check was missed, the program would compile
   1623 fine, run fine on newer systems, but crash on older systems.
   1624 
   1625 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
   1626 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
   1627 with the new ``@available()`` keyword to assist with this issue.
   1628 When a method that's introduced in the OS newer than the target OS is called, a
   1629 -Wunguarded-availability warning is emitted if that call is not guarded:
   1630 
   1631 .. code-block:: objc
   1632 
   1633   void my_fun(NSSomeClass* var) {
   1634     // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
   1635     // built with -mmacosx-version-min=10.11, then this unconditional call
   1636     // will emit a -Wunguarded-availability warning:
   1637     [var fancyNewMethod];
   1638   }
   1639 
   1640 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
   1641 ``if(@available())``:
   1642 
   1643 .. code-block:: objc
   1644 
   1645   void my_fun(NSSomeClass* var) {
   1646     if (@available(macOS 10.12, *)) {
   1647       [var fancyNewMethod];
   1648     } else {
   1649       // Put fallback behavior for old macOS versions (and for non-mac
   1650       // platforms) here.
   1651     }
   1652   }
   1653 
   1654 The ``*`` is required and means that platforms not explicitly listed will take
   1655 the true branch, and the compiler will emit ``-Wunguarded-availability``
   1656 warnings for unlisted platforms based on those platform's deployment target.
   1657 More than one platform can be listed in ``@available()``:
   1658 
   1659 .. code-block:: objc
   1660 
   1661   void my_fun(NSSomeClass* var) {
   1662     if (@available(macOS 10.12, iOS 10, *)) {
   1663       [var fancyNewMethod];
   1664     }
   1665   }
   1666 
   1667 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
   1668 on 10.12, then add an `availability attribute
   1669 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
   1670 which will also suppress the warning and require that calls to my_fun() are
   1671 checked:
   1672 
   1673 .. code-block:: objc
   1674 
   1675   API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
   1676     [var fancyNewMethod];  // Now ok.
   1677   }
   1678 
   1679 ``@available()`` is only available in Objective-C code.  To use the feature
   1680 in C and C++ code, use the ``__builtin_available()`` spelling instead.
   1681 
   1682 If existing code uses null checks or ``-respondsToSelector:``, it should
   1683 be changed to use ``@available()`` (or ``__builtin_available``) instead.
   1684 
   1685 ``-Wunguarded-availability`` is disabled by default, but
   1686 ``-Wunguarded-availability-new``, which only emits this warning for APIs
   1687 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
   1688 tvOS >= 11, is enabled by default.
   1689 
   1690 .. _langext-overloading:
   1691 
   1692 Objective-C++ ABI: protocol-qualifier mangling of parameters
   1693 ------------------------------------------------------------
   1694 
   1695 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
   1696 type is a qualified-``id`` (e.g., ``id<Foo>``).  This mangling allows such
   1697 parameters to be differentiated from those with the regular unqualified ``id``
   1698 type.
   1699 
   1700 This was a non-backward compatible mangling change to the ABI.  This change
   1701 allows proper overloading, and also prevents mangling conflicts with template
   1702 parameters of protocol-qualified type.
   1703 
   1704 Query the presence of this new mangling with
   1705 ``__has_feature(objc_protocol_qualifier_mangling)``.
   1706 
   1707 Initializer lists for complex numbers in C
   1708 ==========================================
   1709 
   1710 clang supports an extension which allows the following in C:
   1711 
   1712 .. code-block:: c++
   1713 
   1714   #include <math.h>
   1715   #include <complex.h>
   1716   complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
   1717 
   1718 This construct is useful because there is no way to separately initialize the
   1719 real and imaginary parts of a complex variable in standard C, given that clang
   1720 does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
   1721 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
   1722 in static initializers.)
   1723 
   1724 Note that this extension does not allow eliding the braces; the meaning of the
   1725 following two lines is different:
   1726 
   1727 .. code-block:: c++
   1728 
   1729   complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
   1730   complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
   1731 
   1732 This extension also works in C++ mode, as far as that goes, but does not apply
   1733 to the C++ ``std::complex``.  (In C++11, list initialization allows the same
   1734 syntax to be used with ``std::complex`` with the same meaning.)
   1735 
   1736 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
   1737 construct a complex number from the given real and imaginary components.
   1738 
   1739 OpenCL Features
   1740 ===============
   1741 
   1742 Clang supports internal OpenCL extensions documented below.
   1743 
   1744 ``__cl_clang_function_pointers``
   1745 --------------------------------
   1746 
   1747 With this extension it is possible to enable various language features that
   1748 are relying on function pointers using regular OpenCL extension pragma
   1749 mechanism detailed in `the OpenCL Extension Specification,
   1750 section 1.2
   1751 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
   1752 
   1753 In C++ for OpenCL this also enables:
   1754 
   1755 - Use of member function pointers;
   1756 
   1757 - Unrestricted use of references to functions;
   1758 
   1759 - Virtual member functions.
   1760 
   1761 Such functionality is not conformant and does not guarantee to compile
   1762 correctly in any circumstances. It can be used if:
   1763 
   1764 - the kernel source does not contain call expressions to (member-) function
   1765   pointers, or virtual functions. For example this extension can be used in
   1766   metaprogramming algorithms to be able to specify/detect types generically.
   1767 
   1768 - the generated kernel binary does not contain indirect calls because they
   1769   are eliminated using compiler optimizations e.g. devirtualization. 
   1770 
   1771 - the selected target supports the function pointer like functionality e.g.
   1772   most CPU targets.
   1773 
   1774 **Example of Use**:
   1775 
   1776 .. code-block:: c++
   1777 
   1778   #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
   1779   void foo()
   1780   {
   1781     void (*fp)(); // compiled - no diagnostic generated
   1782   }
   1783 
   1784   #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
   1785   void bar()
   1786   {
   1787     void (*fp)(); // error - pointers to function are not allowed
   1788   }
   1789 
   1790 ``__cl_clang_variadic_functions``
   1791 ---------------------------------
   1792 
   1793 With this extension it is possible to enable variadic arguments in functions
   1794 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
   1795 Extension Specification, section 1.2
   1796 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
   1797 
   1798 This is not conformant behavior and it can only be used portably when the
   1799 functions with variadic prototypes do not get generated in binary e.g. the
   1800 variadic prototype is used to specify a function type with any number of
   1801 arguments in metaprogramming algorithms in C++ for OpenCL.
   1802 
   1803 This extensions can also be used when the kernel code is intended for targets
   1804 supporting the variadic arguments e.g. majority of CPU targets.
   1805 
   1806 **Example of Use**:
   1807 
   1808 .. code-block:: c++
   1809 
   1810   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
   1811   void foo(int a, ...); // compiled - no diagnostic generated
   1812 
   1813   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
   1814   void bar(int a, ...); // error - variadic prototype is not allowed
   1815 
   1816 ``__cl_clang_non_portable_kernel_param_types``
   1817 ----------------------------------------------
   1818 
   1819 With this extension it is possible to enable the use of some restricted types
   1820 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
   1821 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
   1822 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
   1823 detailed in `the OpenCL Extension Specification, section 1.2
   1824 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
   1825 
   1826 This is not a conformant behavior and it can only be used when the
   1827 kernel arguments are not accessed on the host side or the data layout/size
   1828 between the host and device is known to be compatible.
   1829 
   1830 **Example of Use**:
   1831 
   1832 .. code-block:: c++
   1833 
   1834   // Plain Old Data type.
   1835   struct Pod {
   1836     int a;
   1837     int b;
   1838   };
   1839 
   1840   // Not POD type because of the constructor.
   1841   // Standard layout type because there is only one access control.
   1842   struct OnlySL {
   1843     int a;
   1844     int b;
   1845     NotPod() : a(0), b(0) {}
   1846   };
   1847 
   1848   // Not standard layout type because of two different access controls.
   1849   struct NotSL {
   1850     int a;
   1851   private:
   1852     int b;
   1853   }
   1854 
   1855   kernel void kernel_main(
   1856     Pod a,
   1857   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
   1858     OnlySL b,
   1859     global NotSL *c,
   1860   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
   1861     global OnlySL *d,
   1862   );
   1863 
   1864 Legacy 1.x atomics with generic address space
   1865 ---------------------------------------------
   1866 
   1867 Clang allows use of atomic functions from the OpenCL 1.x standards
   1868 with the generic address space pointer in C++ for OpenCL mode.
   1869 
   1870 This is a non-portable feature and might not be supported by all
   1871 targets.
   1872 
   1873 **Example of Use**:
   1874 
   1875 .. code-block:: c++
   1876 
   1877   void foo(__generic volatile unsigned int* a) {
   1878     atomic_add(a, 1);
   1879   }
   1880 
   1881 Builtin Functions
   1882 =================
   1883 
   1884 Clang supports a number of builtin library functions with the same syntax as
   1885 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
   1886 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
   1887 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc.  In addition to
   1888 the GCC builtins, Clang supports a number of builtins that GCC does not, which
   1889 are listed here.
   1890 
   1891 Please note that Clang does not and will not support all of the GCC builtins
   1892 for vector operations.  Instead of using builtins, you should use the functions
   1893 defined in target-specific header files like ``<xmmintrin.h>``, which define
   1894 portable wrappers for these.  Many of the Clang versions of these functions are
   1895 implemented directly in terms of :ref:`extended vector support
   1896 <langext-vectors>` instead of builtins, in order to reduce the number of
   1897 builtins that we need to implement.
   1898 
   1899 .. _langext-__builtin_assume:
   1900 
   1901 ``__builtin_assume``
   1902 ------------------------------
   1903 
   1904 ``__builtin_assume`` is used to provide the optimizer with a boolean
   1905 invariant that is defined to be true.
   1906 
   1907 **Syntax**:
   1908 
   1909 .. code-block:: c++
   1910 
   1911   __builtin_assume(bool)
   1912 
   1913 **Example of Use**:
   1914 
   1915 .. code-block:: c++
   1916 
   1917   int foo(int x) {
   1918     __builtin_assume(x != 0);
   1919 
   1920     // The optimizer may short-circuit this check using the invariant.
   1921     if (x == 0)
   1922       return do_something();
   1923 
   1924     return do_something_else();
   1925   }
   1926 
   1927 **Description**:
   1928 
   1929 The boolean argument to this function is defined to be true. The optimizer may
   1930 analyze the form of the expression provided as the argument and deduce from
   1931 that information used to optimize the program. If the condition is violated
   1932 during execution, the behavior is undefined. The argument itself is never
   1933 evaluated, so any side effects of the expression will be discarded.
   1934 
   1935 Query for this feature with ``__has_builtin(__builtin_assume)``.
   1936 
   1937 ``__builtin_readcyclecounter``
   1938 ------------------------------
   1939 
   1940 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
   1941 a similar low-latency, high-accuracy clock) on those targets that support it.
   1942 
   1943 **Syntax**:
   1944 
   1945 .. code-block:: c++
   1946 
   1947   __builtin_readcyclecounter()
   1948 
   1949 **Example of Use**:
   1950 
   1951 .. code-block:: c++
   1952 
   1953   unsigned long long t0 = __builtin_readcyclecounter();
   1954   do_something();
   1955   unsigned long long t1 = __builtin_readcyclecounter();
   1956   unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
   1957 
   1958 **Description**:
   1959 
   1960 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
   1961 which may be either global or process/thread-specific depending on the target.
   1962 As the backing counters often overflow quickly (on the order of seconds) this
   1963 should only be used for timing small intervals.  When not supported by the
   1964 target, the return value is always zero.  This builtin takes no arguments and
   1965 produces an unsigned long long result.
   1966 
   1967 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
   1968 that even if present, its use may depend on run-time privilege or other OS
   1969 controlled state.
   1970 
   1971 ``__builtin_dump_struct``
   1972 -------------------------
   1973 
   1974 **Syntax**:
   1975 
   1976 .. code-block:: c++
   1977 
   1978      __builtin_dump_struct(&some_struct, &some_printf_func);
   1979 
   1980 **Examples**:
   1981 
   1982 .. code-block:: c++
   1983 
   1984      struct S {
   1985        int x, y;
   1986        float f;
   1987        struct T {
   1988          int i;
   1989        } t;
   1990      };
   1991 
   1992      void func(struct S *s) {
   1993        __builtin_dump_struct(s, &printf);
   1994      }
   1995 
   1996 Example output:
   1997 
   1998 .. code-block:: none
   1999 
   2000      struct S {
   2001      int i : 100
   2002      int j : 42
   2003      float f : 3.14159
   2004      struct T t : struct T {
   2005          int i : 1997
   2006          }
   2007      }
   2008 
   2009 **Description**:
   2010 
   2011 The '``__builtin_dump_struct``' function is used to print the fields of a simple
   2012 structure and their values for debugging purposes. The builtin accepts a pointer
   2013 to a structure to dump the fields of, and a pointer to a formatted output
   2014 function whose signature must be: ``int (*)(const char *, ...)`` and must
   2015 support the format specifiers used by ``printf()``.
   2016 
   2017 .. _langext-__builtin_shufflevector:
   2018 
   2019 ``__builtin_shufflevector``
   2020 ---------------------------
   2021 
   2022 ``__builtin_shufflevector`` is used to express generic vector
   2023 permutation/shuffle/swizzle operations.  This builtin is also very important
   2024 for the implementation of various target-specific header files like
   2025 ``<xmmintrin.h>``.
   2026 
   2027 **Syntax**:
   2028 
   2029 .. code-block:: c++
   2030 
   2031   __builtin_shufflevector(vec1, vec2, index1, index2, ...)
   2032 
   2033 **Examples**:
   2034 
   2035 .. code-block:: c++
   2036 
   2037   // identity operation - return 4-element vector v1.
   2038   __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
   2039 
   2040   // "Splat" element 0 of V1 into a 4-element result.
   2041   __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
   2042 
   2043   // Reverse 4-element vector V1.
   2044   __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
   2045 
   2046   // Concatenate every other element of 4-element vectors V1 and V2.
   2047   __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
   2048 
   2049   // Concatenate every other element of 8-element vectors V1 and V2.
   2050   __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
   2051 
   2052   // Shuffle v1 with some elements being undefined
   2053   __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
   2054 
   2055 **Description**:
   2056 
   2057 The first two arguments to ``__builtin_shufflevector`` are vectors that have
   2058 the same element type.  The remaining arguments are a list of integers that
   2059 specify the elements indices of the first two vectors that should be extracted
   2060 and returned in a new vector.  These element indices are numbered sequentially
   2061 starting with the first vector, continuing into the second vector.  Thus, if
   2062 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
   2063 ``vec2``. An index of -1 can be used to indicate that the corresponding element
   2064 in the returned vector is a don't care and can be optimized by the backend.
   2065 
   2066 The result of ``__builtin_shufflevector`` is a vector with the same element
   2067 type as ``vec1``/``vec2`` but that has an element count equal to the number of
   2068 indices specified.
   2069 
   2070 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
   2071 
   2072 .. _langext-__builtin_convertvector:
   2073 
   2074 ``__builtin_convertvector``
   2075 ---------------------------
   2076 
   2077 ``__builtin_convertvector`` is used to express generic vector
   2078 type-conversion operations. The input vector and the output vector
   2079 type must have the same number of elements.
   2080 
   2081 **Syntax**:
   2082 
   2083 .. code-block:: c++
   2084 
   2085   __builtin_convertvector(src_vec, dst_vec_type)
   2086 
   2087 **Examples**:
   2088 
   2089 .. code-block:: c++
   2090 
   2091   typedef double vector4double __attribute__((__vector_size__(32)));
   2092   typedef float  vector4float  __attribute__((__vector_size__(16)));
   2093   typedef short  vector4short  __attribute__((__vector_size__(8)));
   2094   vector4float vf; vector4short vs;
   2095 
   2096   // convert from a vector of 4 floats to a vector of 4 doubles.
   2097   __builtin_convertvector(vf, vector4double)
   2098   // equivalent to:
   2099   (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
   2100 
   2101   // convert from a vector of 4 shorts to a vector of 4 floats.
   2102   __builtin_convertvector(vs, vector4float)
   2103   // equivalent to:
   2104   (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
   2105 
   2106 **Description**:
   2107 
   2108 The first argument to ``__builtin_convertvector`` is a vector, and the second
   2109 argument is a vector type with the same number of elements as the first
   2110 argument.
   2111 
   2112 The result of ``__builtin_convertvector`` is a vector with the same element
   2113 type as the second argument, with a value defined in terms of the action of a
   2114 C-style cast applied to each element of the first argument.
   2115 
   2116 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
   2117 
   2118 ``__builtin_bitreverse``
   2119 ------------------------
   2120 
   2121 * ``__builtin_bitreverse8``
   2122 * ``__builtin_bitreverse16``
   2123 * ``__builtin_bitreverse32``
   2124 * ``__builtin_bitreverse64``
   2125 
   2126 **Syntax**:
   2127 
   2128 .. code-block:: c++
   2129 
   2130      __builtin_bitreverse32(x)
   2131 
   2132 **Examples**:
   2133 
   2134 .. code-block:: c++
   2135 
   2136       uint8_t rev_x = __builtin_bitreverse8(x);
   2137       uint16_t rev_x = __builtin_bitreverse16(x);
   2138       uint32_t rev_y = __builtin_bitreverse32(y);
   2139       uint64_t rev_z = __builtin_bitreverse64(z);
   2140 
   2141 **Description**:
   2142 
   2143 The '``__builtin_bitreverse``' family of builtins is used to reverse
   2144 the bitpattern of an integer value; for example ``0b10110110`` becomes
   2145 ``0b01101101``. These builtins can be used within constant expressions.
   2146 
   2147 ``__builtin_rotateleft``
   2148 ------------------------
   2149 
   2150 * ``__builtin_rotateleft8``
   2151 * ``__builtin_rotateleft16``
   2152 * ``__builtin_rotateleft32``
   2153 * ``__builtin_rotateleft64``
   2154 
   2155 **Syntax**:
   2156 
   2157 .. code-block:: c++
   2158 
   2159      __builtin_rotateleft32(x, y)
   2160 
   2161 **Examples**:
   2162 
   2163 .. code-block:: c++
   2164 
   2165       uint8_t rot_x = __builtin_rotateleft8(x, y);
   2166       uint16_t rot_x = __builtin_rotateleft16(x, y);
   2167       uint32_t rot_x = __builtin_rotateleft32(x, y);
   2168       uint64_t rot_x = __builtin_rotateleft64(x, y);
   2169 
   2170 **Description**:
   2171 
   2172 The '``__builtin_rotateleft``' family of builtins is used to rotate
   2173 the bits in the first argument by the amount in the second argument.
   2174 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
   2175 The shift value is treated as an unsigned amount modulo the size of
   2176 the arguments. Both arguments and the result have the bitwidth specified
   2177 by the name of the builtin. These builtins can be used within constant
   2178 expressions.
   2179 
   2180 ``__builtin_rotateright``
   2181 -------------------------
   2182 
   2183 * ``__builtin_rotateright8``
   2184 * ``__builtin_rotateright16``
   2185 * ``__builtin_rotateright32``
   2186 * ``__builtin_rotateright64``
   2187 
   2188 **Syntax**:
   2189 
   2190 .. code-block:: c++
   2191 
   2192      __builtin_rotateright32(x, y)
   2193 
   2194 **Examples**:
   2195 
   2196 .. code-block:: c++
   2197 
   2198       uint8_t rot_x = __builtin_rotateright8(x, y);
   2199       uint16_t rot_x = __builtin_rotateright16(x, y);
   2200       uint32_t rot_x = __builtin_rotateright32(x, y);
   2201       uint64_t rot_x = __builtin_rotateright64(x, y);
   2202 
   2203 **Description**:
   2204 
   2205 The '``__builtin_rotateright``' family of builtins is used to rotate
   2206 the bits in the first argument by the amount in the second argument.
   2207 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
   2208 The shift value is treated as an unsigned amount modulo the size of
   2209 the arguments. Both arguments and the result have the bitwidth specified
   2210 by the name of the builtin. These builtins can be used within constant
   2211 expressions.
   2212 
   2213 ``__builtin_unreachable``
   2214 -------------------------
   2215 
   2216 ``__builtin_unreachable`` is used to indicate that a specific point in the
   2217 program cannot be reached, even if the compiler might otherwise think it can.
   2218 This is useful to improve optimization and eliminates certain warnings.  For
   2219 example, without the ``__builtin_unreachable`` in the example below, the
   2220 compiler assumes that the inline asm can fall through and prints a "function
   2221 declared '``noreturn``' should not return" warning.
   2222 
   2223 **Syntax**:
   2224 
   2225 .. code-block:: c++
   2226 
   2227     __builtin_unreachable()
   2228 
   2229 **Example of use**:
   2230 
   2231 .. code-block:: c++
   2232 
   2233   void myabort(void) __attribute__((noreturn));
   2234   void myabort(void) {
   2235     asm("int3");
   2236     __builtin_unreachable();
   2237   }
   2238 
   2239 **Description**:
   2240 
   2241 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
   2242 Since it has undefined behavior, it is a statement that it is never reached and
   2243 the optimizer can take advantage of this to produce better code.  This builtin
   2244 takes no arguments and produces a void result.
   2245 
   2246 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
   2247 
   2248 ``__builtin_unpredictable``
   2249 ---------------------------
   2250 
   2251 ``__builtin_unpredictable`` is used to indicate that a branch condition is
   2252 unpredictable by hardware mechanisms such as branch prediction logic.
   2253 
   2254 **Syntax**:
   2255 
   2256 .. code-block:: c++
   2257 
   2258     __builtin_unpredictable(long long)
   2259 
   2260 **Example of use**:
   2261 
   2262 .. code-block:: c++
   2263 
   2264   if (__builtin_unpredictable(x > 0)) {
   2265      foo();
   2266   }
   2267 
   2268 **Description**:
   2269 
   2270 The ``__builtin_unpredictable()`` builtin is expected to be used with control
   2271 flow conditions such as in ``if`` and ``switch`` statements.
   2272 
   2273 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
   2274 
   2275 ``__sync_swap``
   2276 ---------------
   2277 
   2278 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
   2279 
   2280 **Syntax**:
   2281 
   2282 .. code-block:: c++
   2283 
   2284   type __sync_swap(type *ptr, type value, ...)
   2285 
   2286 **Example of Use**:
   2287 
   2288 .. code-block:: c++
   2289 
   2290   int old_value = __sync_swap(&value, new_value);
   2291 
   2292 **Description**:
   2293 
   2294 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
   2295 atomic intrinsics to allow code to atomically swap the current value with the
   2296 new value.  More importantly, it helps developers write more efficient and
   2297 correct code by avoiding expensive loops around
   2298 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
   2299 implementation details of ``__sync_lock_test_and_set()``.  The
   2300 ``__sync_swap()`` builtin is a full barrier.
   2301 
   2302 ``__builtin_addressof``
   2303 -----------------------
   2304 
   2305 ``__builtin_addressof`` performs the functionality of the built-in ``&``
   2306 operator, ignoring any ``operator&`` overload.  This is useful in constant
   2307 expressions in C++11, where there is no other way to take the address of an
   2308 object that overloads ``operator&``.
   2309 
   2310 **Example of use**:
   2311 
   2312 .. code-block:: c++
   2313 
   2314   template<typename T> constexpr T *addressof(T &value) {
   2315     return __builtin_addressof(value);
   2316   }
   2317 
   2318 ``__builtin_operator_new`` and ``__builtin_operator_delete``
   2319 ------------------------------------------------------------
   2320 
   2321 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
   2322 ``::operator new(args)``, except that it allows certain optimizations
   2323 that the C++ standard does not permit for a direct function call to
   2324 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
   2325 merging allocations), and that the call is required to resolve to a
   2326 `replaceable global allocation function
   2327 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
   2328 
   2329 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
   2330 ``::operator delete(args)``, except that it permits optimizations
   2331 and that the call is required to resolve to a
   2332 `replaceable global deallocation function
   2333 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
   2334 
   2335 These builtins are intended for use in the implementation of ``std::allocator``
   2336 and other similar allocation libraries, and are only available in C++.
   2337 
   2338 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
   2339 ``__has_builtin(__builtin_operator_delete)``:
   2340 
   2341   * If the value is at least ``201802L``, the builtins behave as described above.
   2342 
   2343   * If the value is non-zero, the builtins may not support calling arbitrary
   2344     replaceable global (de)allocation functions, but do support calling at least
   2345     ``::operator new(size_t)`` and ``::operator delete(void*)``.
   2346 
   2347 ``__builtin_preserve_access_index``
   2348 -----------------------------------
   2349 
   2350 ``__builtin_preserve_access_index`` specifies a code section where
   2351 array subscript access and structure/union member access are relocatable
   2352 under bpf compile-once run-everywhere framework. Debuginfo (typically
   2353 with ``-g``) is needed, otherwise, the compiler will exit with an error.
   2354 The return type for the intrinsic is the same as the type of the
   2355 argument.
   2356 
   2357 **Syntax**:
   2358 
   2359 .. code-block:: c
   2360 
   2361   type __builtin_preserve_access_index(type arg)
   2362 
   2363 **Example of Use**:
   2364 
   2365 .. code-block:: c
   2366 
   2367   struct t {
   2368     int i;
   2369     int j;
   2370     union {
   2371       int a;
   2372       int b;
   2373     } c[4];
   2374   };
   2375   struct t *v = ...;
   2376   int *pb =__builtin_preserve_access_index(&v->c[3].b);
   2377   __builtin_preserve_access_index(v->j);
   2378 
   2379 Multiprecision Arithmetic Builtins
   2380 ----------------------------------
   2381 
   2382 Clang provides a set of builtins which expose multiprecision arithmetic in a
   2383 manner amenable to C. They all have the following form:
   2384 
   2385 .. code-block:: c
   2386 
   2387   unsigned x = ..., y = ..., carryin = ..., carryout;
   2388   unsigned sum = __builtin_addc(x, y, carryin, &carryout);
   2389 
   2390 Thus one can form a multiprecision addition chain in the following manner:
   2391 
   2392 .. code-block:: c
   2393 
   2394   unsigned *x, *y, *z, carryin=0, carryout;
   2395   z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
   2396   carryin = carryout;
   2397   z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
   2398   carryin = carryout;
   2399   z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
   2400   carryin = carryout;
   2401   z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
   2402 
   2403 The complete list of builtins are:
   2404 
   2405 .. code-block:: c
   2406 
   2407   unsigned char      __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
   2408   unsigned short     __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
   2409   unsigned           __builtin_addc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
   2410   unsigned long      __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
   2411   unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
   2412   unsigned char      __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
   2413   unsigned short     __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
   2414   unsigned           __builtin_subc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
   2415   unsigned long      __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
   2416   unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
   2417 
   2418 Checked Arithmetic Builtins
   2419 ---------------------------
   2420 
   2421 Clang provides a set of builtins that implement checked arithmetic for security
   2422 critical applications in a manner that is fast and easily expressible in C. As
   2423 an example of their usage:
   2424 
   2425 .. code-block:: c
   2426 
   2427   errorcode_t security_critical_application(...) {
   2428     unsigned x, y, result;
   2429     ...
   2430     if (__builtin_mul_overflow(x, y, &result))
   2431       return kErrorCodeHackers;
   2432     ...
   2433     use_multiply(result);
   2434     ...
   2435   }
   2436 
   2437 Clang provides the following checked arithmetic builtins:
   2438 
   2439 .. code-block:: c
   2440 
   2441   bool __builtin_add_overflow   (type1 x, type2 y, type3 *sum);
   2442   bool __builtin_sub_overflow   (type1 x, type2 y, type3 *diff);
   2443   bool __builtin_mul_overflow   (type1 x, type2 y, type3 *prod);
   2444   bool __builtin_uadd_overflow  (unsigned x, unsigned y, unsigned *sum);
   2445   bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
   2446   bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
   2447   bool __builtin_usub_overflow  (unsigned x, unsigned y, unsigned *diff);
   2448   bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
   2449   bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
   2450   bool __builtin_umul_overflow  (unsigned x, unsigned y, unsigned *prod);
   2451   bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
   2452   bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
   2453   bool __builtin_sadd_overflow  (int x, int y, int *sum);
   2454   bool __builtin_saddl_overflow (long x, long y, long *sum);
   2455   bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
   2456   bool __builtin_ssub_overflow  (int x, int y, int *diff);
   2457   bool __builtin_ssubl_overflow (long x, long y, long *diff);
   2458   bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
   2459   bool __builtin_smul_overflow  (int x, int y, int *prod);
   2460   bool __builtin_smull_overflow (long x, long y, long *prod);
   2461   bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
   2462 
   2463 Each builtin performs the specified mathematical operation on the
   2464 first two arguments and stores the result in the third argument.  If
   2465 possible, the result will be equal to mathematically-correct result
   2466 and the builtin will return 0.  Otherwise, the builtin will return
   2467 1 and the result will be equal to the unique value that is equivalent
   2468 to the mathematically-correct result modulo two raised to the *k*
   2469 power, where *k* is the number of bits in the result type.  The
   2470 behavior of these builtins is well-defined for all argument values.
   2471 
   2472 The first three builtins work generically for operands of any integer type,
   2473 including boolean types.  The operands need not have the same type as each
   2474 other, or as the result.  The other builtins may implicitly promote or
   2475 convert their operands before performing the operation.
   2476 
   2477 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
   2478 
   2479 Floating point builtins
   2480 ---------------------------------------
   2481 
   2482 ``__builtin_canonicalize``
   2483 --------------------------
   2484 
   2485 .. code-block:: c
   2486 
   2487    double __builtin_canonicalize(double);
   2488    float __builtin_canonicalizef(float);
   2489    long double__builtin_canonicalizel(long double);
   2490 
   2491 Returns the platform specific canonical encoding of a floating point
   2492 number. This canonicalization is useful for implementing certain
   2493 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
   2494 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
   2495 more information on the semantics.
   2496 
   2497 String builtins
   2498 ---------------
   2499 
   2500 Clang provides constant expression evaluation support for builtins forms of
   2501 the following functions from the C standard library headers
   2502 ``<string.h>`` and ``<wchar.h>``:
   2503 
   2504 * ``memchr``
   2505 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
   2506 * ``strchr``
   2507 * ``strcmp``
   2508 * ``strlen``
   2509 * ``strncmp``
   2510 * ``wcschr``
   2511 * ``wcscmp``
   2512 * ``wcslen``
   2513 * ``wcsncmp``
   2514 * ``wmemchr``
   2515 * ``wmemcmp``
   2516 
   2517 In each case, the builtin form has the name of the C library function prefixed
   2518 by ``__builtin_``. Example:
   2519 
   2520 .. code-block:: c
   2521 
   2522   void *p = __builtin_memchr("foobar", 'b', 5);
   2523 
   2524 In addition to the above, one further builtin is provided:
   2525 
   2526 .. code-block:: c
   2527 
   2528   char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
   2529 
   2530 ``__builtin_char_memchr(a, b, c)`` is identical to
   2531 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
   2532 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
   2533 is disallowed in general).
   2534 
   2535 Constant evaluation support for the ``__builtin_mem*`` functions is provided
   2536 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
   2537 despite these functions accepting an argument of type ``const void*``.
   2538 
   2539 Support for constant expression evaluation for the above builtins can be detected
   2540 with ``__has_feature(cxx_constexpr_string_builtins)``.
   2541 
   2542 Memory builtins
   2543 ---------------
   2544 
   2545 Clang provides constant expression evaluation support for builtin forms of the
   2546 following functions from the C standard library headers
   2547 ``<string.h>`` and ``<wchar.h>``:
   2548 
   2549 * ``memcpy``
   2550 * ``memmove``
   2551 * ``wmemcpy``
   2552 * ``wmemmove``
   2553 
   2554 In each case, the builtin form has the name of the C library function prefixed
   2555 by ``__builtin_``.
   2556 
   2557 Constant evaluation support is only provided when the source and destination
   2558 are pointers to arrays with the same trivially copyable element type, and the
   2559 given size is an exact multiple of the element size that is no greater than
   2560 the number of elements accessible through the source and destination operands.
   2561 
   2562 Guaranteed inlined copy
   2563 ^^^^^^^^^^^^^^^^^^^^^^^
   2564 
   2565 .. code-block:: c
   2566 
   2567   void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
   2568 
   2569 
   2570 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
   2571 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
   2572 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
   2573 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic 
   2574 for more information.
   2575 
   2576 This is useful to implement a custom version of ``memcpy``, implement a
   2577 ``libc`` memcpy or work around the absence of a ``libc``.
   2578 
   2579 Note that the `size` argument must be a compile time constant.
   2580 
   2581 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
   2582 
   2583 
   2584 Atomic Min/Max builtins with memory ordering
   2585 --------------------------------------------
   2586 
   2587 There are two atomic builtins with min/max in-memory comparison and swap.
   2588 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
   2589 
   2590 * ``__atomic_fetch_min``
   2591 * ``__atomic_fetch_max``
   2592 
   2593 The builtins work with signed and unsigned integers and require to specify memory ordering.
   2594 The return value is the original value that was stored in memory before comparison.
   2595 
   2596 Example:
   2597 
   2598 .. code-block:: c
   2599 
   2600   unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
   2601 
   2602 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
   2603 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
   2604 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
   2605 
   2606 In terms or aquire-release ordering barriers these two operations are always
   2607 considered as operations with *load-store* semantics, even when the original value
   2608 is not actually modified after comparison.
   2609 
   2610 .. _langext-__c11_atomic:
   2611 
   2612 __c11_atomic builtins
   2613 ---------------------
   2614 
   2615 Clang provides a set of builtins which are intended to be used to implement
   2616 C11's ``<stdatomic.h>`` header.  These builtins provide the semantics of the
   2617 ``_explicit`` form of the corresponding C11 operation, and are named with a
   2618 ``__c11_`` prefix.  The supported operations, and the differences from
   2619 the corresponding C11 operations, are:
   2620 
   2621 * ``__c11_atomic_init``
   2622 * ``__c11_atomic_thread_fence``
   2623 * ``__c11_atomic_signal_fence``
   2624 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
   2625   ``_Atomic(...)`` object, instead of its address)
   2626 * ``__c11_atomic_store``
   2627 * ``__c11_atomic_load``
   2628 * ``__c11_atomic_exchange``
   2629 * ``__c11_atomic_compare_exchange_strong``
   2630 * ``__c11_atomic_compare_exchange_weak``
   2631 * ``__c11_atomic_fetch_add``
   2632 * ``__c11_atomic_fetch_sub``
   2633 * ``__c11_atomic_fetch_and``
   2634 * ``__c11_atomic_fetch_or``
   2635 * ``__c11_atomic_fetch_xor``
   2636 * ``__c11_atomic_fetch_max``
   2637 * ``__c11_atomic_fetch_min``
   2638 
   2639 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
   2640 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
   2641 provided, with values corresponding to the enumerators of C11's
   2642 ``memory_order`` enumeration.
   2643 
   2644 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
   2645 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
   2646 atomic builtins are an explicit form of the corresponding OpenCL 2.0
   2647 builtin function, and are named with a ``__opencl_`` prefix. The macros
   2648 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
   2649 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
   2650 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
   2651 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
   2652 
   2653 Low-level ARM exclusive memory builtins
   2654 ---------------------------------------
   2655 
   2656 Clang provides overloaded builtins giving direct access to the three key ARM
   2657 instructions for implementing atomic operations.
   2658 
   2659 .. code-block:: c
   2660 
   2661   T __builtin_arm_ldrex(const volatile T *addr);
   2662   T __builtin_arm_ldaex(const volatile T *addr);
   2663   int __builtin_arm_strex(T val, volatile T *addr);
   2664   int __builtin_arm_stlex(T val, volatile T *addr);
   2665   void __builtin_arm_clrex(void);
   2666 
   2667 The types ``T`` currently supported are:
   2668 
   2669 * Integer types with width at most 64 bits (or 128 bits on AArch64).
   2670 * Floating-point types
   2671 * Pointer types.
   2672 
   2673 Note that the compiler does not guarantee it will not insert stores which clear
   2674 the exclusive monitor in between an ``ldrex`` type operation and its paired
   2675 ``strex``. In practice this is only usually a risk when the extra store is on
   2676 the same cache line as the variable being modified and Clang will only insert
   2677 stack stores on its own, so it is best not to use these operations on variables
   2678 with automatic storage duration.
   2679 
   2680 Also, loads and stores may be implicit in code written between the ``ldrex`` and
   2681 ``strex``. Clang will not necessarily mitigate the effects of these either, so
   2682 care should be exercised.
   2683 
   2684 For these reasons the higher level atomic primitives should be preferred where
   2685 possible.
   2686 
   2687 Non-temporal load/store builtins
   2688 --------------------------------
   2689 
   2690 Clang provides overloaded builtins allowing generation of non-temporal memory
   2691 accesses.
   2692 
   2693 .. code-block:: c
   2694 
   2695   T __builtin_nontemporal_load(T *addr);
   2696   void __builtin_nontemporal_store(T value, T *addr);
   2697 
   2698 The types ``T`` currently supported are:
   2699 
   2700 * Integer types.
   2701 * Floating-point types.
   2702 * Vector types.
   2703 
   2704 Note that the compiler does not guarantee that non-temporal loads or stores
   2705 will be used.
   2706 
   2707 C++ Coroutines support builtins
   2708 --------------------------------
   2709 
   2710 .. warning::
   2711   This is a work in progress. Compatibility across Clang/LLVM releases is not
   2712   guaranteed.
   2713 
   2714 Clang provides experimental builtins to support C++ Coroutines as defined by
   2715 https://wg21.link/P0057. The following four are intended to be used by the
   2716 standard library to implement `std::experimental::coroutine_handle` type.
   2717 
   2718 **Syntax**:
   2719 
   2720 .. code-block:: c
   2721 
   2722   void  __builtin_coro_resume(void *addr);
   2723   void  __builtin_coro_destroy(void *addr);
   2724   bool  __builtin_coro_done(void *addr);
   2725   void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
   2726 
   2727 **Example of use**:
   2728 
   2729 .. code-block:: c++
   2730 
   2731   template <> struct coroutine_handle<void> {
   2732     void resume() const { __builtin_coro_resume(ptr); }
   2733     void destroy() const { __builtin_coro_destroy(ptr); }
   2734     bool done() const { return __builtin_coro_done(ptr); }
   2735     // ...
   2736   protected:
   2737     void *ptr;
   2738   };
   2739 
   2740   template <typename Promise> struct coroutine_handle : coroutine_handle<> {
   2741     // ...
   2742     Promise &promise() const {
   2743       return *reinterpret_cast<Promise *>(
   2744         __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
   2745     }
   2746     static coroutine_handle from_promise(Promise &promise) {
   2747       coroutine_handle p;
   2748       p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
   2749                                                       /*from-promise=*/true);
   2750       return p;
   2751     }
   2752   };
   2753 
   2754 
   2755 Other coroutine builtins are either for internal clang use or for use during
   2756 development of the coroutine feature. See `Coroutines in LLVM
   2757 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
   2758 more information on their semantics. Note that builtins matching the intrinsics
   2759 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
   2760 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
   2761 an appropriate value during the emission.
   2762 
   2763 **Syntax**:
   2764 
   2765 .. code-block:: c
   2766 
   2767   size_t __builtin_coro_size()
   2768   void  *__builtin_coro_frame()
   2769   void  *__builtin_coro_free(void *coro_frame)
   2770 
   2771   void  *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
   2772   bool   __builtin_coro_alloc()
   2773   void  *__builtin_coro_begin(void *memory)
   2774   void   __builtin_coro_end(void *coro_frame, bool unwind)
   2775   char   __builtin_coro_suspend(bool final)
   2776   bool   __builtin_coro_param(void *original, void *copy)
   2777 
   2778 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
   2779 automatically will insert one if the first argument to `llvm.coro.suspend` is
   2780 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
   2781 as the first argument to the intrinsic.
   2782 
   2783 Source location builtins
   2784 ------------------------
   2785 
   2786 Clang provides experimental builtins to support C++ standard library implementation
   2787 of ``std::experimental::source_location`` as specified in  http://wg21.link/N4600.
   2788 With the exception of ``__builtin_COLUMN``, these builtins are also implemented by
   2789 GCC.
   2790 
   2791 **Syntax**:
   2792 
   2793 .. code-block:: c
   2794 
   2795   const char *__builtin_FILE();
   2796   const char *__builtin_FUNCTION();
   2797   unsigned    __builtin_LINE();
   2798   unsigned    __builtin_COLUMN(); // Clang only
   2799 
   2800 **Example of use**:
   2801 
   2802 .. code-block:: c++
   2803 
   2804   void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
   2805                  const char* file = __builtin_FILE(),
   2806                  const char* function = __builtin_FUNCTION()) {
   2807     if (pred) return;
   2808     printf("%s:%d assertion failed in function %s\n", file, line, function);
   2809     std::abort();
   2810   }
   2811 
   2812   struct MyAggregateType {
   2813     int x;
   2814     int line = __builtin_LINE(); // captures line where aggregate initialization occurs
   2815   };
   2816   static_assert(MyAggregateType{42}.line == __LINE__);
   2817 
   2818   struct MyClassType {
   2819     int line = __builtin_LINE(); // captures line of the constructor used during initialization
   2820     constexpr MyClassType(int) { assert(line == __LINE__); }
   2821   };
   2822 
   2823 **Description**:
   2824 
   2825 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return
   2826 the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and
   2827 ``__FILE__`` respectively. These builtins are constant expressions.
   2828 
   2829 When the builtins appear as part of a default function argument the invocation
   2830 point is the location of the caller. When the builtins appear as part of a
   2831 default member initializer, the invocation point is the location of the
   2832 constructor or aggregate initialization used to create the object. Otherwise
   2833 the invocation point is the same as the location of the builtin.
   2834 
   2835 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
   2836 empty string is returned.
   2837 
   2838 Alignment builtins
   2839 ------------------
   2840 Clang provides builtins to support checking and adjusting alignment of
   2841 pointers and integers.
   2842 These builtins can be used to avoid relying on implementation-defined behavior
   2843 of arithmetic on integers derived from pointers.
   2844 Additionally, these builtins retain type information and, unlike bitwise
   2845 arithmetic, they can perform semantic checking on the alignment value.
   2846 
   2847 **Syntax**:
   2848 
   2849 .. code-block:: c
   2850 
   2851   Type __builtin_align_up(Type value, size_t alignment);
   2852   Type __builtin_align_down(Type value, size_t alignment);
   2853   bool __builtin_is_aligned(Type value, size_t alignment);
   2854 
   2855 
   2856 **Example of use**:
   2857 
   2858 .. code-block:: c++
   2859 
   2860   char* global_alloc_buffer;
   2861   void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
   2862     char* result = __builtin_align_up(global_alloc_buffer, alignment);
   2863     // result now contains the value of global_alloc_buffer rounded up to the
   2864     // next multiple of alignment.
   2865     global_alloc_buffer = result + alloc_size;
   2866     return result;
   2867   }
   2868 
   2869   void* get_start_of_page(void* ptr) {
   2870     return __builtin_align_down(ptr, PAGE_SIZE);
   2871   }
   2872 
   2873   void example(char* buffer) {
   2874      if (__builtin_is_aligned(buffer, 64)) {
   2875        do_fast_aligned_copy(buffer);
   2876      } else {
   2877        do_unaligned_copy(buffer);
   2878      }
   2879   }
   2880 
   2881   // In addition to pointers, the builtins can also be used on integer types
   2882   // and are evaluatable inside constant expressions.
   2883   static_assert(__builtin_align_up(123, 64) == 128, "");
   2884   static_assert(__builtin_align_down(123u, 64) == 64u, "");
   2885   static_assert(!__builtin_is_aligned(123, 64), "");
   2886 
   2887 
   2888 **Description**:
   2889 
   2890 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
   2891 first argument aligned up/down to the next multiple of the second argument.
   2892 If the value is already sufficiently aligned, it is returned unchanged.
   2893 The builtin ``__builtin_is_aligned`` returns whether the first argument is
   2894 aligned to a multiple of the second argument.
   2895 All of these builtins expect the alignment to be expressed as a number of bytes.
   2896 
   2897 These builtins can be used for all integer types as well as (non-function)
   2898 pointer types. For pointer types, these builtins operate in terms of the integer
   2899 address of the pointer and return a new pointer of the same type (including
   2900 qualifiers such as ``const``) with an adjusted address.
   2901 When aligning pointers up or down, the resulting value must be within the same
   2902 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
   2903 This means that arbitrary integer values stored in pointer-type variables must
   2904 not be passed to these builtins. For those use cases, the builtins can still be
   2905 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
   2906 
   2907 If Clang can determine that the alignment is not a power of two at compile time,
   2908 it will result in a compilation failure. If the alignment argument is not a
   2909 power of two at run time, the behavior of these builtins is undefined.
   2910 
   2911 Non-standard C++11 Attributes
   2912 =============================
   2913 
   2914 Clang's non-standard C++11 attributes live in the ``clang`` attribute
   2915 namespace.
   2916 
   2917 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
   2918 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
   2919 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
   2920 (see the list of `GCC function attributes
   2921 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
   2922 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
   2923 `GCC type attributes
   2924 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
   2925 implementation, these attributes must appertain to the *declarator-id* in a
   2926 declaration, which means they must go either at the start of the declaration or
   2927 immediately after the name being declared.
   2928 
   2929 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
   2930 also applies the GNU ``noreturn`` attribute to ``f``.
   2931 
   2932 .. code-block:: c++
   2933 
   2934   [[gnu::unused]] int a, f [[gnu::noreturn]] ();
   2935 
   2936 Target-Specific Extensions
   2937 ==========================
   2938 
   2939 Clang supports some language features conditionally on some targets.
   2940 
   2941 ARM/AArch64 Language Extensions
   2942 -------------------------------
   2943 
   2944 Memory Barrier Intrinsics
   2945 ^^^^^^^^^^^^^^^^^^^^^^^^^
   2946 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
   2947 in the `ARM C Language Extensions Release 2.0
   2948 <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
   2949 Note that these intrinsics are implemented as motion barriers that block
   2950 reordering of memory accesses and side effect instructions. Other instructions
   2951 like simple arithmetic may be reordered around the intrinsic. If you expect to
   2952 have no reordering at all, use inline assembly instead.
   2953 
   2954 X86/X86-64 Language Extensions
   2955 ------------------------------
   2956 
   2957 The X86 backend has these language extensions:
   2958 
   2959 Memory references to specified segments
   2960 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2961 
   2962 Annotating a pointer with address space #256 causes it to be code generated
   2963 relative to the X86 GS segment register, address space #257 causes it to be
   2964 relative to the X86 FS segment, and address space #258 causes it to be
   2965 relative to the X86 SS segment.  Note that this is a very very low-level
   2966 feature that should only be used if you know what you're doing (for example in
   2967 an OS kernel).
   2968 
   2969 Here is an example:
   2970 
   2971 .. code-block:: c++
   2972 
   2973   #define GS_RELATIVE __attribute__((address_space(256)))
   2974   int foo(int GS_RELATIVE *P) {
   2975     return *P;
   2976   }
   2977 
   2978 Which compiles to (on X86-32):
   2979 
   2980 .. code-block:: gas
   2981 
   2982   _foo:
   2983           movl    4(%esp), %eax
   2984           movl    %gs:(%eax), %eax
   2985           ret
   2986 
   2987 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
   2988 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
   2989 indicate their support.
   2990 
   2991 PowerPC Language Extensions
   2992 ------------------------------
   2993 
   2994 Set the Floating Point Rounding Mode
   2995 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   2996 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
   2997 the floating point rounding mode. This function will use the least significant
   2998 two bits of integer argument to set the floating point rounding mode.
   2999 
   3000 .. code-block:: c++
   3001 
   3002   double __builtin_setrnd(int mode);
   3003 
   3004 The effective values for mode are:
   3005 
   3006     - 0 - round to nearest
   3007     - 1 - round to zero
   3008     - 2 - round to +infinity
   3009     - 3 - round to -infinity
   3010 
   3011 Note that the mode argument will modulo 4, so if the integer argument is greater
   3012 than 3, it will only use the least significant two bits of the mode.
   3013 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
   3014 
   3015 PowerPC cache builtins
   3016 ^^^^^^^^^^^^^^^^^^^^^^
   3017 
   3018 The PowerPC architecture specifies instructions implementing cache operations.
   3019 Clang provides builtins that give direct programmer access to these cache
   3020 instructions.
   3021 
   3022 Currently the following builtins are implemented in clang:
   3023 
   3024 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
   3025 to main memory and flushes the copy from the data cache.
   3026 
   3027 **Syntax**:
   3028 
   3029 .. code-block:: c
   3030 
   3031   void __dcbf(const void* addr); /* Data Cache Block Flush */
   3032 
   3033 **Example of Use**:
   3034 
   3035 .. code-block:: c
   3036 
   3037   int a = 1;
   3038   __builtin_dcbf (&a);
   3039 
   3040 Extensions for Static Analysis
   3041 ==============================
   3042 
   3043 Clang supports additional attributes that are useful for documenting program
   3044 invariants and rules for static analysis tools, such as the `Clang Static
   3045 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
   3046 in the analyzer's `list of source-level annotations
   3047 <https://clang-analyzer.llvm.org/annotations.html>`_.
   3048 
   3049 
   3050 Extensions for Dynamic Analysis
   3051 ===============================
   3052 
   3053 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
   3054 with :doc:`AddressSanitizer`.
   3055 
   3056 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
   3057 with :doc:`ThreadSanitizer`.
   3058 
   3059 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
   3060 with :doc:`MemorySanitizer`.
   3061 
   3062 Use ``__has_feature(safe_stack)`` to check if the code is being built
   3063 with :doc:`SafeStack`.
   3064 
   3065 
   3066 Extensions for selectively disabling optimization
   3067 =================================================
   3068 
   3069 Clang provides a mechanism for selectively disabling optimizations in functions
   3070 and methods.
   3071 
   3072 To disable optimizations in a single function definition, the GNU-style or C++11
   3073 non-standard attribute ``optnone`` can be used.
   3074 
   3075 .. code-block:: c++
   3076 
   3077   // The following functions will not be optimized.
   3078   // GNU-style attribute
   3079   __attribute__((optnone)) int foo() {
   3080     // ... code
   3081   }
   3082   // C++11 attribute
   3083   [[clang::optnone]] int bar() {
   3084     // ... code
   3085   }
   3086 
   3087 To facilitate disabling optimization for a range of function definitions, a
   3088 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
   3089 followed by ``off`` or ``on``.
   3090 
   3091 All function definitions in the region between an ``off`` and the following
   3092 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
   3093 conflict with explicit attributes already present on the function (e.g. the
   3094 ones that control inlining).
   3095 
   3096 .. code-block:: c++
   3097 
   3098   #pragma clang optimize off
   3099   // This function will be decorated with optnone.
   3100   int foo() {
   3101     // ... code
   3102   }
   3103 
   3104   // optnone conflicts with always_inline, so bar() will not be decorated.
   3105   __attribute__((always_inline)) int bar() {
   3106     // ... code
   3107   }
   3108   #pragma clang optimize on
   3109 
   3110 If no ``on`` is found to close an ``off`` region, the end of the region is the
   3111 end of the compilation unit.
   3112 
   3113 Note that a stray ``#pragma clang optimize on`` does not selectively enable
   3114 additional optimizations when compiling at low optimization levels. This feature
   3115 can only be used to selectively disable optimizations.
   3116 
   3117 The pragma has an effect on functions only at the point of their definition; for
   3118 function templates, this means that the state of the pragma at the point of an
   3119 instantiation is not necessarily relevant. Consider the following example:
   3120 
   3121 .. code-block:: c++
   3122 
   3123   template<typename T> T twice(T t) {
   3124     return 2 * t;
   3125   }
   3126 
   3127   #pragma clang optimize off
   3128   template<typename T> T thrice(T t) {
   3129     return 3 * t;
   3130   }
   3131 
   3132   int container(int a, int b) {
   3133     return twice(a) + thrice(b);
   3134   }
   3135   #pragma clang optimize on
   3136 
   3137 In this example, the definition of the template function ``twice`` is outside
   3138 the pragma region, whereas the definition of ``thrice`` is inside the region.
   3139 The ``container`` function is also in the region and will not be optimized, but
   3140 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
   3141 these two instantiations, ``twice`` will be optimized (because its definition
   3142 was outside the region) and ``thrice`` will not be optimized.
   3143 
   3144 Extensions for loop hint optimizations
   3145 ======================================
   3146 
   3147 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
   3148 subsequent for, while, do-while, or c++11 range-based for loop. The directive
   3149 provides options for vectorization, interleaving, predication, unrolling and
   3150 distribution. Loop hints can be specified before any loop and will be ignored if
   3151 the optimization is not safe to apply.
   3152 
   3153 There are loop hints that control transformations (e.g. vectorization, loop
   3154 unrolling) and there are loop hints that set transformation options (e.g.
   3155 ``vectorize_width``, ``unroll_count``).  Pragmas setting transformation options
   3156 imply the transformation is enabled, as if it was enabled via the corresponding
   3157 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
   3158 disabled  (e.g. ``vectorize(disable)``), that takes precedence over
   3159 transformations option pragmas implying that transformation.
   3160 
   3161 Vectorization, Interleaving, and Predication
   3162 --------------------------------------------
   3163 
   3164 A vectorized loop performs multiple iterations of the original loop
   3165 in parallel using vector instructions. The instruction set of the target
   3166 processor determines which vector instructions are available and their vector
   3167 widths. This restricts the types of loops that can be vectorized. The vectorizer
   3168 automatically determines if the loop is safe and profitable to vectorize. A
   3169 vector instruction cost model is used to select the vector width.
   3170 
   3171 Interleaving multiple loop iterations allows modern processors to further
   3172 improve instruction-level parallelism (ILP) using advanced hardware features,
   3173 such as multiple execution units and out-of-order execution. The vectorizer uses
   3174 a cost model that depends on the register pressure and generated code size to
   3175 select the interleaving count.
   3176 
   3177 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
   3178 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
   3179 manually enable vectorization or interleaving.
   3180 
   3181 .. code-block:: c++
   3182 
   3183   #pragma clang loop vectorize(enable)
   3184   #pragma clang loop interleave(enable)
   3185   for(...) {
   3186     ...
   3187   }
   3188 
   3189 The vector width is specified by
   3190 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
   3191 integer and the type of vectorization can be specified with an optional
   3192 second parameter. The default for the second parameter is 'fixed' and
   3193 refers to fixed width vectorization, whereas 'scalable' indicates the
   3194 compiler should use scalable vectors instead. Another use of vectorize_width
   3195 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
   3196 of vectorization to use without specifying the exact width. In both variants
   3197 of the pragma the vectorizer may decide to fall back on fixed width
   3198 vectorization if the target does not support scalable vectors.
   3199 
   3200 The interleave count is specified by ``interleave_count(_value_)``, where
   3201 _value_ is a positive integer. This is useful for specifying the optimal
   3202 width/count of the set of target architectures supported by your application.
   3203 
   3204 .. code-block:: c++
   3205 
   3206   #pragma clang loop vectorize_width(2)
   3207   #pragma clang loop interleave_count(2)
   3208   for(...) {
   3209     ...
   3210   }
   3211 
   3212 Specifying a width/count of 1 disables the optimization, and is equivalent to
   3213 ``vectorize(disable)`` or ``interleave(disable)``.
   3214 
   3215 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
   3216 
   3217 .. code-block:: c++
   3218 
   3219   #pragma clang loop vectorize(enable)
   3220   #pragma clang loop vectorize_predicate(enable)
   3221   for(...) {
   3222     ...
   3223   }
   3224 
   3225 This predicates (masks) all instructions in the loop, which allows the scalar
   3226 remainder loop (the tail) to be folded into the main vectorized loop. This
   3227 might be more efficient when vector predication is efficiently supported by the
   3228 target platform.
   3229 
   3230 Loop Unrolling
   3231 --------------
   3232 
   3233 Unrolling a loop reduces the loop control overhead and exposes more
   3234 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
   3235 eliminates the loop and replaces it with an enumerated sequence of loop
   3236 iterations. Full unrolling is only possible if the loop trip count is known at
   3237 compile time. Partial unrolling replicates the loop body within the loop and
   3238 reduces the trip count.
   3239 
   3240 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
   3241 loop if the trip count is known at compile time. If the fully unrolled code size
   3242 is greater than an internal limit the loop will be partially unrolled up to this
   3243 limit. If the trip count is not known at compile time the loop will be partially
   3244 unrolled with a heuristically chosen unroll factor.
   3245 
   3246 .. code-block:: c++
   3247 
   3248   #pragma clang loop unroll(enable)
   3249   for(...) {
   3250     ...
   3251   }
   3252 
   3253 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
   3254 loop if the trip count is known at compile time identically to
   3255 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
   3256 if the loop count is not known at compile time.
   3257 
   3258 .. code-block:: c++
   3259 
   3260   #pragma clang loop unroll(full)
   3261   for(...) {
   3262     ...
   3263   }
   3264 
   3265 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
   3266 _value_ is a positive integer. If this value is greater than the trip count the
   3267 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
   3268 to the same code size limit as with ``unroll(enable)``.
   3269 
   3270 .. code-block:: c++
   3271 
   3272   #pragma clang loop unroll_count(8)
   3273   for(...) {
   3274     ...
   3275   }
   3276 
   3277 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
   3278 
   3279 Loop Distribution
   3280 -----------------
   3281 
   3282 Loop Distribution allows splitting a loop into multiple loops.  This is
   3283 beneficial for example when the entire loop cannot be vectorized but some of the
   3284 resulting loops can.
   3285 
   3286 If ``distribute(enable))`` is specified and the loop has memory dependencies
   3287 that inhibit vectorization, the compiler will attempt to isolate the offending
   3288 operations into a new loop.  This optimization is not enabled by default, only
   3289 loops marked with the pragma are considered.
   3290 
   3291 .. code-block:: c++
   3292 
   3293   #pragma clang loop distribute(enable)
   3294   for (i = 0; i < N; ++i) {
   3295     S1: A[i + 1] = A[i] + B[i];
   3296     S2: C[i] = D[i] * E[i];
   3297   }
   3298 
   3299 This loop will be split into two loops between statements S1 and S2.  The
   3300 second loop containing S2 will be vectorized.
   3301 
   3302 Loop Distribution is currently not enabled by default in the optimizer because
   3303 it can hurt performance in some cases.  For example, instruction-level
   3304 parallelism could be reduced by sequentializing the execution of the
   3305 statements S1 and S2 above.
   3306 
   3307 If Loop Distribution is turned on globally with
   3308 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
   3309 be used the disable it on a per-loop basis.
   3310 
   3311 Additional Information
   3312 ----------------------
   3313 
   3314 For convenience multiple loop hints can be specified on a single line.
   3315 
   3316 .. code-block:: c++
   3317 
   3318   #pragma clang loop vectorize_width(4) interleave_count(8)
   3319   for(...) {
   3320     ...
   3321   }
   3322 
   3323 If an optimization cannot be applied any hints that apply to it will be ignored.
   3324 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
   3325 proven safe to vectorize. To identify and diagnose optimization issues use
   3326 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
   3327 user guide for details.
   3328 
   3329 Extensions to specify floating-point flags
   3330 ====================================================
   3331 
   3332 The ``#pragma clang fp`` pragma allows floating-point options to be specified
   3333 for a section of the source code. This pragma can only appear at file scope or
   3334 at the start of a compound statement (excluding comments). When using within a
   3335 compound statement, the pragma is active within the scope of the compound
   3336 statement.
   3337 
   3338 Currently, the following settings can be controlled with this pragma:
   3339 
   3340 ``#pragma clang fp reassociate`` allows control over the reassociation
   3341 of floating point expressions. When enabled, this pragma allows the expression
   3342 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
   3343 Reassociation can also occur across multiple statements.
   3344 This pragma can be used to disable reassociation when it is otherwise
   3345 enabled for the translation unit with the ``-fassociative-math`` flag.
   3346 The pragma can take two values: ``on`` and ``off``.
   3347 
   3348 .. code-block:: c++
   3349 
   3350   float f(float x, float y, float z)
   3351   {
   3352     // Enable floating point reassociation across statements
   3353     #pragma clang fp reassociate(on)
   3354     float t = x + y;
   3355     float v = t + z;
   3356   }
   3357 
   3358 
   3359 ``#pragma clang fp contract`` specifies whether the compiler should
   3360 contract a multiply and an addition (or subtraction) into a fused FMA
   3361 operation when supported by the target.
   3362 
   3363 The pragma can take three values: ``on``, ``fast`` and ``off``.  The ``on``
   3364 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
   3365 fusion as specified the language standard.  The ``fast`` option allows fusion
   3366 in cases when the language standard does not make this possible (e.g. across
   3367 statements in C).
   3368 
   3369 .. code-block:: c++
   3370 
   3371   for(...) {
   3372     #pragma clang fp contract(fast)
   3373     a = b[i] * c[i];
   3374     d[i] += a;
   3375   }
   3376 
   3377 
   3378 The pragma can also be used with ``off`` which turns FP contraction off for a
   3379 section of the code. This can be useful when fast contraction is otherwise
   3380 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
   3381 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
   3382 addition across statements regardless of any controlling pragmas.
   3383 
   3384 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
   3385 may take one the the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
   3386 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
   3387 
   3388 .. code-block:: c++
   3389 
   3390   {
   3391     // Preserve floating point exceptions
   3392     #pragma clang fp exceptions(strict)
   3393     z = x + y;
   3394     if (fetestexcept(FE_OVERFLOW))
   3395 	  ...
   3396   }
   3397 
   3398 A ``#pragma clang fp`` pragma may contain any number of options:
   3399 
   3400 .. code-block:: c++
   3401 
   3402   void func(float *dest, float a, float b) {
   3403     #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
   3404     ...
   3405   }
   3406 
   3407 
   3408 The ``#pragma float_control`` pragma allows precise floating-point
   3409 semantics and floating-point exception behavior to be specified
   3410 for a section of the source code. This pragma can only appear at file scope or
   3411 at the start of a compound statement (excluding comments). When using within a
   3412 compound statement, the pragma is active within the scope of the compound
   3413 statement.  This pragma is modeled after a Microsoft pragma with the
   3414 same spelling and syntax.  For pragmas specified at file scope, a stack
   3415 is supported so that the ``pragma float_control`` settings can be pushed or popped.
   3416 
   3417 When ``pragma float_control(precise, on)`` is enabled, the section of code
   3418 governed by the pragma uses precise floating point semantics, effectively
   3419 ``-ffast-math`` is disabled and ``-ffp-contract=on``
   3420 (fused multiply add) is enabled.
   3421 
   3422 When ``pragma float_control(except, on)`` is enabled, the section of code governed
   3423 by the pragma behaves as though the command-line option
   3424 ``-ffp-exception-behavior=strict`` is enabled,
   3425 when ``pragma float_control(precise, off)`` is enabled, the section of code
   3426 governed by the pragma behaves as though the command-line option
   3427 ``-ffp-exception-behavior=ignore`` is enabled.
   3428 
   3429 The full syntax this pragma supports is
   3430 ``float_control(except|precise, on|off [, push])`` and
   3431 ``float_control(push|pop)``.
   3432 The ``push`` and ``pop`` forms, including using ``push`` as the optional
   3433 third argument, can only occur at file scope.
   3434 
   3435 .. code-block:: c++
   3436 
   3437   for(...) {
   3438     // This block will be compiled with -fno-fast-math and -ffp-contract=on
   3439     #pragma float_control(precise, on)
   3440     a = b[i] * c[i] + e;
   3441   }
   3442 
   3443 Specifying an attribute for multiple declarations (#pragma clang attribute)
   3444 ===========================================================================
   3445 
   3446 The ``#pragma clang attribute`` directive can be used to apply an attribute to
   3447 multiple declarations. The ``#pragma clang attribute push`` variation of the
   3448 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
   3449 can be added to. The ``#pragma clang attribute (...)`` variation adds an
   3450 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
   3451 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
   3452 shorthand for when you want to add one attribute to a new scope. Multiple push
   3453 directives can be nested inside each other.
   3454 
   3455 The attributes that are used in the ``#pragma clang attribute`` directives
   3456 can be written using the GNU-style syntax:
   3457 
   3458 .. code-block:: c++
   3459 
   3460   #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
   3461 
   3462   void function(); // The function now has the annotate("custom") attribute
   3463 
   3464   #pragma clang attribute pop
   3465 
   3466 The attributes can also be written using the C++11 style syntax:
   3467 
   3468 .. code-block:: c++
   3469 
   3470   #pragma clang attribute push ([[noreturn]], apply_to = function)
   3471 
   3472   void function(); // The function now has the [[noreturn]] attribute
   3473 
   3474   #pragma clang attribute pop
   3475 
   3476 The ``__declspec`` style syntax is also supported:
   3477 
   3478 .. code-block:: c++
   3479 
   3480   #pragma clang attribute push (__declspec(dllexport), apply_to = function)
   3481 
   3482   void function(); // The function now has the __declspec(dllexport) attribute
   3483 
   3484   #pragma clang attribute pop
   3485 
   3486 A single push directive accepts only one attribute regardless of the syntax
   3487 used.
   3488 
   3489 Because multiple push directives can be nested, if you're writing a macro that
   3490 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
   3491 required) to add a namespace to your push/pop directives. A pop directive with a
   3492 namespace will pop the innermost push that has that same namespace. This will
   3493 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
   3494 that an ``pop`` without a namespace will pop the innermost ``push`` without a
   3495 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
   3496 same namespace. For instance:
   3497 
   3498 .. code-block:: c++
   3499 
   3500    #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
   3501    #define ASSUME_NORETURN_END   _Pragma("clang attribute AssumeNoreturn.pop")
   3502 
   3503    #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
   3504    #define ASSUME_UNAVAILABLE_END   _Pragma("clang attribute Unavailable.pop")
   3505 
   3506 
   3507    ASSUME_NORETURN_BEGIN
   3508    ASSUME_UNAVAILABLE_BEGIN
   3509    void function(); // function has [[noreturn]] and __attribute__((unavailable))
   3510    ASSUME_NORETURN_END
   3511    void other_function(); // function has __attribute__((unavailable))
   3512    ASSUME_UNAVAILABLE_END
   3513 
   3514 Without the namespaces on the macros, ``other_function`` will be annotated with
   3515 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
   3516 a contrived example, but its very possible for this kind of situation to appear
   3517 in real code if the pragmas are spread out across a large file. You can test if
   3518 your version of clang supports namespaces on ``#pragma clang attribute`` with
   3519 ``__has_extension(pragma_clang_attribute_namespaces)``.
   3520 
   3521 Subject Match Rules
   3522 -------------------
   3523 
   3524 The set of declarations that receive a single attribute from the attribute stack
   3525 depends on the subject match rules that were specified in the pragma. Subject
   3526 match rules are specified after the attribute. The compiler expects an
   3527 identifier that corresponds to the subject set specifier. The ``apply_to``
   3528 specifier is currently the only supported subject set specifier. It allows you
   3529 to specify match rules that form a subset of the attribute's allowed subject
   3530 set, i.e. the compiler doesn't require all of the attribute's subjects. For
   3531 example, an attribute like ``[[nodiscard]]`` whose subject set includes
   3532 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
   3533 least one of these rules after ``apply_to``:
   3534 
   3535 .. code-block:: c++
   3536 
   3537   #pragma clang attribute push([[nodiscard]], apply_to = enum)
   3538 
   3539   enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
   3540 
   3541   struct Record1 { }; // The struct will *not* receive [[nodiscard]]
   3542 
   3543   #pragma clang attribute pop
   3544 
   3545   #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
   3546 
   3547   enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
   3548 
   3549   struct Record2 { }; // The struct *will* receive [[nodiscard]]
   3550 
   3551   #pragma clang attribute pop
   3552 
   3553   // This is an error, since [[nodiscard]] can't be applied to namespaces:
   3554   #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
   3555 
   3556   #pragma clang attribute pop
   3557 
   3558 Multiple match rules can be specified using the ``any`` match rule, as shown
   3559 in the example above. The ``any`` rule applies attributes to all declarations
   3560 that are matched by at least one of the rules in the ``any``. It doesn't nest
   3561 and can't be used inside the other match rules. Redundant match rules or rules
   3562 that conflict with one another should not be used inside of ``any``.
   3563 
   3564 Clang supports the following match rules:
   3565 
   3566 - ``function``: Can be used to apply attributes to functions. This includes C++
   3567   member functions, static functions, operators, and constructors/destructors.
   3568 
   3569 - ``function(is_member)``: Can be used to apply attributes to C++ member
   3570   functions. This includes members like static functions, operators, and
   3571   constructors/destructors.
   3572 
   3573 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
   3574   member functions, and variables/fields whose type is a function pointer. It
   3575   does not apply attributes to Objective-C methods or blocks.
   3576 
   3577 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
   3578   and C++11 type aliases.
   3579 
   3580 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
   3581   ``union`` declarations.
   3582 
   3583 - ``record(unless(is_union))``: Can be used to apply attributes only to
   3584   ``struct`` and ``class`` declarations.
   3585 
   3586 - ``enum``: Can be be used to apply attributes to enumeration declarations.
   3587 
   3588 - ``enum_constant``: Can be used to apply attributes to enumerators.
   3589 
   3590 - ``variable``: Can be used to apply attributes to variables, including
   3591   local variables, parameters, global variables, and static member variables.
   3592   It does not apply attributes to instance member variables or Objective-C
   3593   ivars.
   3594 
   3595 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
   3596   variables only.
   3597 
   3598 - ``variable(is_global)``: Can be used to apply attributes to global variables
   3599   only.
   3600 
   3601 - ``variable(is_local)``: Can be used to apply attributes to local variables
   3602   only.
   3603 
   3604 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
   3605   only.
   3606 
   3607 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
   3608   the variables that are not parameters.
   3609 
   3610 - ``field``: Can be used to apply attributes to non-static member variables
   3611   in a record. This includes Objective-C ivars.
   3612 
   3613 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
   3614 
   3615 - ``objc_interface``: Can be used to apply attributes to ``@interface``
   3616   declarations.
   3617 
   3618 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
   3619   declarations.
   3620 
   3621 - ``objc_category``: Can be used to apply attributes to category declarations,
   3622   including class extensions.
   3623 
   3624 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
   3625   including instance and class methods. Implicit methods like implicit property
   3626   getters and setters do not receive the attribute.
   3627 
   3628 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
   3629   instance methods.
   3630 
   3631 - ``objc_property``: Can be used to apply attributes to ``@property``
   3632   declarations.
   3633 
   3634 - ``block``: Can be used to apply attributes to block declarations. This does
   3635   not include variables/fields of block pointer type.
   3636 
   3637 The use of ``unless`` in match rules is currently restricted to a strict set of
   3638 sub-rules that are used by the supported attributes. That means that even though
   3639 ``variable(unless(is_parameter))`` is a valid match rule,
   3640 ``variable(unless(is_thread_local))`` is not.
   3641 
   3642 Supported Attributes
   3643 --------------------
   3644 
   3645 Not all attributes can be used with the ``#pragma clang attribute`` directive.
   3646 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
   3647 like ``address_space`` aren't supported by this directive. You can determine
   3648 whether or not an attribute is supported by the pragma by referring to the
   3649 :doc:`individual documentation for that attribute <AttributeReference>`.
   3650 
   3651 The attributes are applied to all matching declarations individually, even when
   3652 the attribute is semantically incorrect. The attributes that aren't applied to
   3653 any declaration are not verified semantically.
   3654 
   3655 Specifying section names for global objects (#pragma clang section)
   3656 ===================================================================
   3657 
   3658 The ``#pragma clang section`` directive provides a means to assign section-names
   3659 to global variables, functions and static variables.
   3660 
   3661 The section names can be specified as:
   3662 
   3663 .. code-block:: c++
   3664 
   3665   #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
   3666 
   3667 The section names can be reverted back to default name by supplying an empty
   3668 string to the section kind, for example:
   3669 
   3670 .. code-block:: c++
   3671 
   3672   #pragma clang section bss="" data="" text="" rodata="" relro=""
   3673 
   3674 The ``#pragma clang section`` directive obeys the following rules:
   3675 
   3676 * The pragma applies to all global variable, statics and function declarations
   3677   from the pragma to the end of the translation unit.
   3678 
   3679 * The pragma clang section is enabled automatically, without need of any flags.
   3680 
   3681 * This feature is only defined to work sensibly for ELF targets.
   3682 
   3683 * If section name is specified through _attribute_((section("myname"))), then
   3684   the attribute name gains precedence.
   3685 
   3686 * Global variables that are initialized to zero will be placed in the named
   3687   bss section, if one is present.
   3688 
   3689 * The ``#pragma clang section`` directive does not does try to infer section-kind
   3690   from the name. For example, naming a section "``.bss.mySec``" does NOT mean
   3691   it will be a bss section name.
   3692 
   3693 * The decision about which section-kind applies to each global is taken in the back-end.
   3694   Once the section-kind is known, appropriate section name, as specified by the user using
   3695   ``#pragma clang section`` directive, is applied to that global.
   3696 
   3697 Specifying Linker Options on ELF Targets
   3698 ========================================
   3699 
   3700 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
   3701 The second parameter is the library name (without the traditional Unix prefix of
   3702 ``lib``).  This allows you to provide an implicit link of dependent libraries.
   3703 
   3704 Evaluating Object Size Dynamically
   3705 ==================================
   3706 
   3707 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
   3708 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
   3709 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
   3710 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
   3711 for ``__builtin_object_size`` in libraries that support it.
   3712 
   3713 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
   3714 safer:
   3715 
   3716 .. code-block:: c
   3717 
   3718   void copy_into_buffer(size_t size) {
   3719     char* buffer = malloc(size);
   3720     strlcpy(buffer, "some string", strlen("some string"));
   3721     // Previous line preprocesses to:
   3722     // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
   3723   }
   3724 
   3725 Since the size of ``buffer`` can't be known at compile time, Clang will fold
   3726 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
   3727 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
   3728 ``size``, providing some extra runtime safety.
   3729 
   3730 Extended Integer Types
   3731 ======================
   3732 
   3733 Clang supports a set of extended integer types under the syntax ``_ExtInt(N)``
   3734 where ``N`` is an integer that specifies the number of bits that are used to represent
   3735 the type, including the sign bit. The keyword ``_ExtInt`` is a type specifier, thus
   3736 it can be used in any place a type can, including as a non-type-template-parameter,
   3737 as the type of a bitfield, and as the underlying type of an enumeration.
   3738 
   3739 An extended integer can be declared either signed, or unsigned by using the
   3740 ``signed``/``unsigned`` keywords. If no sign specifier is used or if the ``signed``
   3741 keyword is used, the extended integer type is a signed integer and can represent
   3742 negative values.
   3743 
   3744 The ``N`` expression is an integer constant expression, which specifies the number
   3745 of bits used to represent the type, following normal integer representations for
   3746 both signed and unsigned types. Both a signed and unsigned extended integer of the
   3747 same ``N`` value will have the same number of bits in its representation. Many
   3748 architectures don't have a way of representing non power-of-2 integers, so these
   3749 architectures emulate these types using larger integers. In these cases, they are
   3750 expected to follow the 'as-if' rule and do math 'as-if' they were done at the
   3751 specified number of bits.
   3752 
   3753 In order to be consistent with the C language specification, and make the extended
   3754 integer types useful for their intended purpose, extended integers follow the C
   3755 standard integer conversion ranks. An extended integer type has a greater rank than
   3756 any integer type with less precision.  However, they have lower rank than any
   3757 of the built in or other integer types (such as __int128). Usual arithmetic conversions
   3758 also work the same, where the smaller ranked integer is converted to the larger.
   3759 
   3760 The one exception to the C rules for integers for these types is Integer Promotion.
   3761 Unary +, -, and ~ operators typically will promote operands to ``int``. Doing these
   3762 promotions would inflate the size of required hardware on some platforms, so extended
   3763 integer types aren't subject to the integer promotion rules in these cases.
   3764 
   3765 In languages (such as OpenCL) that define shift by-out-of-range behavior as a mask,
   3766 non-power-of-two versions of these types use an unsigned remainder operation to constrain
   3767 the value to the proper range, preventing undefined behavior.
   3768 
   3769 Extended integer types are aligned to the next greatest power-of-2 up to 64 bits.
   3770 The size of these types for the purposes of layout and ``sizeof`` are the number of
   3771 bits aligned to this calculated alignment. This permits the use of these types in
   3772 allocated arrays using common ``sizeof(Array)/sizeof(ElementType)`` pattern.
   3773 
   3774 Extended integer types work with the C _Atomic type modifier, however only precisions
   3775 that are powers-of-2 greater than 8 bit are accepted.
   3776 
   3777 Extended integer types align with existing calling conventions. They have the same size
   3778 and alignment as the smallest basic type that can contain them. Types that are larger
   3779 than 64 bits are handled in the same way as _int128 is handled; they are conceptually
   3780 treated as struct of register size chunks. They number of chunks are the smallest
   3781 number that can contain the types which does not necessarily mean a power-of-2 size.
   3782 
   3783 Intrinsics Support within Constant Expressions
   3784 ==============================================
   3785 
   3786 The following builtin intrinsics can be used in constant expressions:
   3787 
   3788 * ``__builtin_bitreverse8``
   3789 * ``__builtin_bitreverse16``
   3790 * ``__builtin_bitreverse32``
   3791 * ``__builtin_bitreverse64``
   3792 * ``__builtin_bswap16``
   3793 * ``__builtin_bswap32``
   3794 * ``__builtin_bswap64``
   3795 * ``__builtin_clrsb``
   3796 * ``__builtin_clrsbl``
   3797 * ``__builtin_clrsbll``
   3798 * ``__builtin_clz``
   3799 * ``__builtin_clzl``
   3800 * ``__builtin_clzll``
   3801 * ``__builtin_clzs``
   3802 * ``__builtin_ctz``
   3803 * ``__builtin_ctzl``
   3804 * ``__builtin_ctzll``
   3805 * ``__builtin_ctzs``
   3806 * ``__builtin_ffs``
   3807 * ``__builtin_ffsl``
   3808 * ``__builtin_ffsll``
   3809 * ``__builtin_fpclassify``
   3810 * ``__builtin_inf``
   3811 * ``__builtin_isinf``
   3812 * ``__builtin_isinf_sign``
   3813 * ``__builtin_isfinite``
   3814 * ``__builtin_isnan``
   3815 * ``__builtin_isnormal``
   3816 * ``__builtin_nan``
   3817 * ``__builtin_nans``
   3818 * ``__builtin_parity``
   3819 * ``__builtin_parityl``
   3820 * ``__builtin_parityll``
   3821 * ``__builtin_popcount``
   3822 * ``__builtin_popcountl``
   3823 * ``__builtin_popcountll``
   3824 * ``__builtin_rotateleft8``
   3825 * ``__builtin_rotateleft16``
   3826 * ``__builtin_rotateleft32``
   3827 * ``__builtin_rotateleft64``
   3828 * ``__builtin_rotateright8``
   3829 * ``__builtin_rotateright16``
   3830 * ``__builtin_rotateright32``
   3831 * ``__builtin_rotateright64``
   3832 
   3833 The following x86-specific intrinsics can be used in constant expressions:
   3834 
   3835 * ``_bit_scan_forward``
   3836 * ``_bit_scan_reverse``
   3837 * ``__bsfd``
   3838 * ``__bsfq``
   3839 * ``__bsrd``
   3840 * ``__bsrq``
   3841 * ``__bswap``
   3842 * ``__bswapd``
   3843 * ``__bswap64``
   3844 * ``__bswapq``
   3845 * ``_castf32_u32``
   3846 * ``_castf64_u64``
   3847 * ``_castu32_f32``
   3848 * ``_castu64_f64``
   3849 * ``_mm_popcnt_u32``
   3850 * ``_mm_popcnt_u64``
   3851 * ``_popcnt32``
   3852 * ``_popcnt64``
   3853 * ``__popcntd``
   3854 * ``__popcntq``
   3855 * ``__rolb``
   3856 * ``__rolw``
   3857 * ``__rold``
   3858 * ``__rolq``
   3859 * ``__rorb``
   3860 * ``__rorw``
   3861 * ``__rord``
   3862 * ``__rorq``
   3863 * ``_rotl``
   3864 * ``_rotr``
   3865 * ``_rotwl``
   3866 * ``_rotwr``
   3867 * ``_lrotl``
   3868 * ``_lrotr``
   3869