Home | History | Annotate | 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 
     17 Introduction
     18 ============
     19 
     20 This document describes the language extensions provided by Clang.  In addition
     21 to the language extensions listed here, Clang aims to support a broad range of
     22 GCC extensions.  Please see the `GCC manual
     23 <http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
     24 these extensions.
     25 
     26 .. _langext-feature_check:
     27 
     28 Feature Checking Macros
     29 =======================
     30 
     31 Language extensions can be very useful, but only if you know you can depend on
     32 them.  In order to allow fine-grain features checks, we support three builtin
     33 function-like macros.  This allows you to directly test for a feature in your
     34 code without having to resort to something like autoconf or fragile "compiler
     35 version checks".
     36 
     37 ``__has_builtin``
     38 -----------------
     39 
     40 This function-like macro takes a single identifier argument that is the name of
     41 a builtin function.  It evaluates to 1 if the builtin is supported or 0 if not.
     42 It can be used like this:
     43 
     44 .. code-block:: c++
     45 
     46   #ifndef __has_builtin         // Optional of course.
     47     #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
     48   #endif
     49 
     50   ...
     51   #if __has_builtin(__builtin_trap)
     52     __builtin_trap();
     53   #else
     54     abort();
     55   #endif
     56   ...
     57 
     58 .. _langext-__has_feature-__has_extension:
     59 
     60 ``__has_feature`` and ``__has_extension``
     61 -----------------------------------------
     62 
     63 These function-like macros take a single identifier argument that is the name
     64 of a feature.  ``__has_feature`` evaluates to 1 if the feature is both
     65 supported by Clang and standardized in the current language standard or 0 if
     66 not (but see :ref:`below <langext-has-feature-back-compat>`), while
     67 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
     68 current language (either as a language extension or a standard language
     69 feature) or 0 if not.  They can be used like this:
     70 
     71 .. code-block:: c++
     72 
     73   #ifndef __has_feature         // Optional of course.
     74     #define __has_feature(x) 0  // Compatibility with non-clang compilers.
     75   #endif
     76   #ifndef __has_extension
     77     #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
     78   #endif
     79 
     80   ...
     81   #if __has_feature(cxx_rvalue_references)
     82   // This code will only be compiled with the -std=c++11 and -std=gnu++11
     83   // options, because rvalue references are only standardized in C++11.
     84   #endif
     85 
     86   #if __has_extension(cxx_rvalue_references)
     87   // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
     88   // and -std=gnu++98 options, because rvalue references are supported as a
     89   // language extension in C++98.
     90   #endif
     91 
     92 .. _langext-has-feature-back-compat:
     93 
     94 For backwards compatibility reasons, ``__has_feature`` can also be used to test
     95 for support for non-standardized features, i.e. features not prefixed ``c_``,
     96 ``cxx_`` or ``objc_``.
     97 
     98 Another use of ``__has_feature`` is to check for compiler features not related
     99 to the language standard, such as e.g. :doc:`AddressSanitizer
    100 <AddressSanitizer>`.
    101 
    102 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
    103 to ``__has_feature``.
    104 
    105 The feature tag is described along with the language feature below.
    106 
    107 The feature name or extension name can also be specified with a preceding and
    108 following ``__`` (double underscore) to avoid interference from a macro with
    109 the same name.  For instance, ``__cxx_rvalue_references__`` can be used instead
    110 of ``cxx_rvalue_references``.
    111 
    112 ``__has_attribute``
    113 -------------------
    114 
    115 This function-like macro takes a single identifier argument that is the name of
    116 an attribute.  It evaluates to 1 if the attribute is supported or 0 if not.  It
    117 can be used like this:
    118 
    119 .. code-block:: c++
    120 
    121   #ifndef __has_attribute         // Optional of course.
    122     #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
    123   #endif
    124 
    125   ...
    126   #if __has_attribute(always_inline)
    127   #define ALWAYS_INLINE __attribute__((always_inline))
    128   #else
    129   #define ALWAYS_INLINE
    130   #endif
    131   ...
    132 
    133 The attribute name can also be specified with a preceding and following ``__``
    134 (double underscore) to avoid interference from a macro with the same name.  For
    135 instance, ``__always_inline__`` can be used instead of ``always_inline``.
    136 
    137 Include File Checking Macros
    138 ============================
    139 
    140 Not all developments systems have the same include files.  The
    141 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
    142 you to check for the existence of an include file before doing a possibly
    143 failing ``#include`` directive.  Include file checking macros must be used
    144 as expressions in ``#if`` or ``#elif`` preprocessing directives.
    145 
    146 .. _langext-__has_include:
    147 
    148 ``__has_include``
    149 -----------------
    150 
    151 This function-like macro takes a single file name string argument that is the
    152 name of an include file.  It evaluates to 1 if the file can be found using the
    153 include paths, or 0 otherwise:
    154 
    155 .. code-block:: c++
    156 
    157   // Note the two possible file name string formats.
    158   #if __has_include("myinclude.h") && __has_include(<stdint.h>)
    159   # include "myinclude.h"
    160   #endif
    161 
    162 To test for this feature, use ``#if defined(__has_include)``:
    163 
    164 .. code-block:: c++
    165 
    166   // To avoid problem with non-clang compilers not having this macro.
    167   #if defined(__has_include)
    168   #if __has_include("myinclude.h")
    169   # include "myinclude.h"
    170   #endif
    171   #endif
    172 
    173 .. _langext-__has_include_next:
    174 
    175 ``__has_include_next``
    176 ----------------------
    177 
    178 This function-like macro takes a single file name string argument that is the
    179 name of an include file.  It is like ``__has_include`` except that it looks for
    180 the second instance of the given file found in the include paths.  It evaluates
    181 to 1 if the second instance of the file can be found using the include paths,
    182 or 0 otherwise:
    183 
    184 .. code-block:: c++
    185 
    186   // Note the two possible file name string formats.
    187   #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
    188   # include_next "myinclude.h"
    189   #endif
    190 
    191   // To avoid problem with non-clang compilers not having this macro.
    192   #if defined(__has_include_next)
    193   #if __has_include_next("myinclude.h")
    194   # include_next "myinclude.h"
    195   #endif
    196   #endif
    197 
    198 Note that ``__has_include_next``, like the GNU extension ``#include_next``
    199 directive, is intended for use in headers only, and will issue a warning if
    200 used in the top-level compilation file.  A warning will also be issued if an
    201 absolute path is used in the file argument.
    202 
    203 ``__has_warning``
    204 -----------------
    205 
    206 This function-like macro takes a string literal that represents a command line
    207 option for a warning and returns true if that is a valid warning option.
    208 
    209 .. code-block:: c++
    210 
    211   #if __has_warning("-Wformat")
    212   ...
    213   #endif
    214 
    215 Builtin Macros
    216 ==============
    217 
    218 ``__BASE_FILE__``
    219   Defined to a string that contains the name of the main input file passed to
    220   Clang.
    221 
    222 ``__COUNTER__``
    223   Defined to an integer value that starts at zero and is incremented each time
    224   the ``__COUNTER__`` macro is expanded.
    225 
    226 ``__INCLUDE_LEVEL__``
    227   Defined to an integral value that is the include depth of the file currently
    228   being translated.  For the main file, this value is zero.
    229 
    230 ``__TIMESTAMP__``
    231   Defined to the date and time of the last modification of the current source
    232   file.
    233 
    234 ``__clang__``
    235   Defined when compiling with Clang
    236 
    237 ``__clang_major__``
    238   Defined to the major marketing version number of Clang (e.g., the 2 in
    239   2.0.1).  Note that marketing version numbers should not be used to check for
    240   language features, as different vendors use different numbering schemes.
    241   Instead, use the :ref:`langext-feature_check`.
    242 
    243 ``__clang_minor__``
    244   Defined to the minor version number of Clang (e.g., the 0 in 2.0.1).  Note
    245   that marketing version numbers should not be used to check for language
    246   features, as different vendors use different numbering schemes.  Instead, use
    247   the :ref:`langext-feature_check`.
    248 
    249 ``__clang_patchlevel__``
    250   Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
    251 
    252 ``__clang_version__``
    253   Defined to a string that captures the Clang marketing version, including the
    254   Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
    255 
    256 .. _langext-vectors:
    257 
    258 Vectors and Extended Vectors
    259 ============================
    260 
    261 Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
    262 
    263 OpenCL vector types are created using ``ext_vector_type`` attribute.  It
    264 support for ``V.xyzw`` syntax and other tidbits as seen in OpenCL.  An example
    265 is:
    266 
    267 .. code-block:: c++
    268 
    269   typedef float float4 __attribute__((ext_vector_type(4)));
    270   typedef float float2 __attribute__((ext_vector_type(2)));
    271 
    272   float4 foo(float2 a, float2 b) {
    273     float4 c;
    274     c.xz = a;
    275     c.yw = b;
    276     return c;
    277   }
    278 
    279 Query for this feature with ``__has_extension(attribute_ext_vector_type)``.
    280 
    281 Giving ``-faltivec`` option to clang enables support for AltiVec vector syntax
    282 and functions.  For example:
    283 
    284 .. code-block:: c++
    285 
    286   vector float foo(vector int a) {
    287     vector int b;
    288     b = vec_add(a, a) + a;
    289     return (vector float)b;
    290   }
    291 
    292 NEON vector types are created using ``neon_vector_type`` and
    293 ``neon_polyvector_type`` attributes.  For example:
    294 
    295 .. code-block:: c++
    296 
    297   typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
    298   typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
    299 
    300   int8x8_t foo(int8x8_t a) {
    301     int8x8_t v;
    302     v = a;
    303     return v;
    304   }
    305 
    306 Vector Literals
    307 ---------------
    308 
    309 Vector literals can be used to create vectors from a set of scalars, or
    310 vectors.  Either parentheses or braces form can be used.  In the parentheses
    311 form the number of literal values specified must be one, i.e. referring to a
    312 scalar value, or must match the size of the vector type being created.  If a
    313 single scalar literal value is specified, the scalar literal value will be
    314 replicated to all the components of the vector type.  In the brackets form any
    315 number of literals can be specified.  For example:
    316 
    317 .. code-block:: c++
    318 
    319   typedef int v4si __attribute__((__vector_size__(16)));
    320   typedef float float4 __attribute__((ext_vector_type(4)));
    321   typedef float float2 __attribute__((ext_vector_type(2)));
    322 
    323   v4si vsi = (v4si){1, 2, 3, 4};
    324   float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
    325   vector int vi1 = (vector int)(1);    // vi1 will be (1, 1, 1, 1).
    326   vector int vi2 = (vector int){1};    // vi2 will be (1, 0, 0, 0).
    327   vector int vi3 = (vector int)(1, 2); // error
    328   vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
    329   vector int vi5 = (vector int)(1, 2, 3, 4);
    330   float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
    331 
    332 Vector Operations
    333 -----------------
    334 
    335 The table below shows the support for each operation by vector extension.  A
    336 dash indicates that an operation is not accepted according to a corresponding
    337 specification.
    338 
    339 ============================== ====== ======= === ====
    340          Opeator               OpenCL AltiVec GCC NEON
    341 ============================== ====== ======= === ====
    342 []                              yes     yes   yes  --
    343 unary operators +, --           yes     yes   yes  --
    344 ++, -- --                       yes     yes   yes  --
    345 +,--,*,/,%                      yes     yes   yes  --
    346 bitwise operators &,|,^,~       yes     yes   yes  --
    347 >>,<<                           yes     yes   yes  --
    348 !, &&, ||                       no      --    --   --
    349 ==, !=, >, <, >=, <=            yes     yes   --   --
    350 =                               yes     yes   yes yes
    351 :?                              yes     --    --   --
    352 sizeof                          yes     yes   yes yes
    353 ============================== ====== ======= === ====
    354 
    355 See also :ref:`langext-__builtin_shufflevector`.
    356 
    357 Messages on ``deprecated`` and ``unavailable`` Attributes
    358 =========================================================
    359 
    360 An optional string message can be added to the ``deprecated`` and
    361 ``unavailable`` attributes.  For example:
    362 
    363 .. code-block:: c++
    364 
    365   void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
    366 
    367 If the deprecated or unavailable declaration is used, the message will be
    368 incorporated into the appropriate diagnostic:
    369 
    370 .. code-block:: c++
    371 
    372   harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
    373         [-Wdeprecated-declarations]
    374     explode();
    375     ^
    376 
    377 Query for this feature with
    378 ``__has_extension(attribute_deprecated_with_message)`` and
    379 ``__has_extension(attribute_unavailable_with_message)``.
    380 
    381 Attributes on Enumerators
    382 =========================
    383 
    384 Clang allows attributes to be written on individual enumerators.  This allows
    385 enumerators to be deprecated, made unavailable, etc.  The attribute must appear
    386 after the enumerator name and before any initializer, like so:
    387 
    388 .. code-block:: c++
    389 
    390   enum OperationMode {
    391     OM_Invalid,
    392     OM_Normal,
    393     OM_Terrified __attribute__((deprecated)),
    394     OM_AbortOnError __attribute__((deprecated)) = 4
    395   };
    396 
    397 Attributes on the ``enum`` declaration do not apply to individual enumerators.
    398 
    399 Query for this feature with ``__has_extension(enumerator_attributes)``.
    400 
    401 'User-Specified' System Frameworks
    402 ==================================
    403 
    404 Clang provides a mechanism by which frameworks can be built in such a way that
    405 they will always be treated as being "system frameworks", even if they are not
    406 present in a system framework directory.  This can be useful to system
    407 framework developers who want to be able to test building other applications
    408 with development builds of their framework, including the manner in which the
    409 compiler changes warning behavior for system headers.
    410 
    411 Framework developers can opt-in to this mechanism by creating a
    412 "``.system_framework``" file at the top-level of their framework.  That is, the
    413 framework should have contents like:
    414 
    415 .. code-block:: none
    416 
    417   .../TestFramework.framework
    418   .../TestFramework.framework/.system_framework
    419   .../TestFramework.framework/Headers
    420   .../TestFramework.framework/Headers/TestFramework.h
    421   ...
    422 
    423 Clang will treat the presence of this file as an indicator that the framework
    424 should be treated as a system framework, regardless of how it was found in the
    425 framework search path.  For consistency, we recommend that such files never be
    426 included in installed versions of the framework.
    427 
    428 Availability attribute
    429 ======================
    430 
    431 Clang introduces the ``availability`` attribute, which can be placed on
    432 declarations to describe the lifecycle of that declaration relative to
    433 operating system versions.  Consider the function declaration for a
    434 hypothetical function ``f``:
    435 
    436 .. code-block:: c++
    437 
    438   void f(void) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,obsoleted=10.7)));
    439 
    440 The availability attribute states that ``f`` was introduced in Mac OS X 10.4,
    441 deprecated in Mac OS X 10.6, and obsoleted in Mac OS X 10.7.  This information
    442 is used by Clang to determine when it is safe to use ``f``: for example, if
    443 Clang is instructed to compile code for Mac OS X 10.5, a call to ``f()``
    444 succeeds.  If Clang is instructed to compile code for Mac OS X 10.6, the call
    445 succeeds but Clang emits a warning specifying that the function is deprecated.
    446 Finally, if Clang is instructed to compile code for Mac OS X 10.7, the call
    447 fails because ``f()`` is no longer available.
    448 
    449 The availability attribute is a comma-separated list starting with the
    450 platform name and then including clauses specifying important milestones in the
    451 declaration's lifetime (in any order) along with additional information.  Those
    452 clauses can be:
    453 
    454 introduced=\ *version*
    455   The first version in which this declaration was introduced.
    456 
    457 deprecated=\ *version*
    458   The first version in which this declaration was deprecated, meaning that
    459   users should migrate away from this API.
    460 
    461 obsoleted=\ *version*
    462   The first version in which this declaration was obsoleted, meaning that it
    463   was removed completely and can no longer be used.
    464 
    465 unavailable
    466   This declaration is never available on this platform.
    467 
    468 message=\ *string-literal*
    469   Additional message text that Clang will provide when emitting a warning or
    470   error about use of a deprecated or obsoleted declaration.  Useful to direct
    471   users to replacement APIs.
    472 
    473 Multiple availability attributes can be placed on a declaration, which may
    474 correspond to different platforms.  Only the availability attribute with the
    475 platform corresponding to the target platform will be used; any others will be
    476 ignored.  If no availability attribute specifies availability for the current
    477 target platform, the availability attributes are ignored.  Supported platforms
    478 are:
    479 
    480 ``ios``
    481   Apple's iOS operating system.  The minimum deployment target is specified by
    482   the ``-mios-version-min=*version*`` or ``-miphoneos-version-min=*version*``
    483   command-line arguments.
    484 
    485 ``macosx``
    486   Apple's Mac OS X operating system.  The minimum deployment target is
    487   specified by the ``-mmacosx-version-min=*version*`` command-line argument.
    488 
    489 A declaration can be used even when deploying back to a platform version prior
    490 to when the declaration was introduced.  When this happens, the declaration is
    491 `weakly linked
    492 <https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html>`_,
    493 as if the ``weak_import`` attribute were added to the declaration.  A
    494 weakly-linked declaration may or may not be present a run-time, and a program
    495 can determine whether the declaration is present by checking whether the
    496 address of that declaration is non-NULL.
    497 
    498 If there are multiple declarations of the same entity, the availability
    499 attributes must either match on a per-platform basis or later
    500 declarations must not have availability attributes for that
    501 platform. For example:
    502 
    503 .. code-block:: c
    504 
    505   void g(void) __attribute__((availability(macosx,introduced=10.4)));
    506   void g(void) __attribute__((availability(macosx,introduced=10.4))); // okay, matches
    507   void g(void) __attribute__((availability(ios,introduced=4.0))); // okay, adds a new platform
    508   void g(void); // okay, inherits both macosx and ios availability from above.
    509   void g(void) __attribute__((availability(macosx,introduced=10.5))); // error: mismatch
    510 
    511 When one method overrides another, the overriding method can be more widely available than the overridden method, e.g.,:
    512 
    513 .. code-block:: objc
    514 
    515   @interface A
    516   - (id)method __attribute__((availability(macosx,introduced=10.4)));
    517   - (id)method2 __attribute__((availability(macosx,introduced=10.4)));
    518   @end
    519 
    520   @interface B : A
    521   - (id)method __attribute__((availability(macosx,introduced=10.3))); // okay: method moved into base class later
    522   - (id)method __attribute__((availability(macosx,introduced=10.5))); // error: this method was available via the base class in 10.4
    523   @end
    524 
    525 Checks for Standard Language Features
    526 =====================================
    527 
    528 The ``__has_feature`` macro can be used to query if certain standard language
    529 features are enabled.  The ``__has_extension`` macro can be used to query if
    530 language features are available as an extension when compiling for a standard
    531 which does not provide them.  The features which can be tested are listed here.
    532 
    533 C++98
    534 -----
    535 
    536 The features listed below are part of the C++98 standard.  These features are
    537 enabled by default when compiling C++ code.
    538 
    539 C++ exceptions
    540 ^^^^^^^^^^^^^^
    541 
    542 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
    543 enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
    544 exceptions.
    545 
    546 C++ RTTI
    547 ^^^^^^^^
    548 
    549 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
    550 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
    551 
    552 C++11
    553 -----
    554 
    555 The features listed below are part of the C++11 standard.  As a result, all
    556 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
    557 when compiling C++ code.
    558 
    559 C++11 SFINAE includes access control
    560 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    561 
    562 Use ``__has_feature(cxx_access_control_sfinae)`` or
    563 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
    564 access-control errors (e.g., calling a private constructor) are considered to
    565 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
    566 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
    567 
    568 C++11 alias templates
    569 ^^^^^^^^^^^^^^^^^^^^^
    570 
    571 Use ``__has_feature(cxx_alias_templates)`` or
    572 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
    573 alias declarations and alias templates is enabled.
    574 
    575 C++11 alignment specifiers
    576 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    577 
    578 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
    579 determine if support for alignment specifiers using ``alignas`` is enabled.
    580 
    581 C++11 attributes
    582 ^^^^^^^^^^^^^^^^
    583 
    584 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
    585 determine if support for attribute parsing with C++11's square bracket notation
    586 is enabled.
    587 
    588 C++11 generalized constant expressions
    589 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    590 
    591 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
    592 constant expressions (e.g., ``constexpr``) is enabled.
    593 
    594 C++11 ``decltype()``
    595 ^^^^^^^^^^^^^^^^^^^^
    596 
    597 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
    598 determine if support for the ``decltype()`` specifier is enabled.  C++11's
    599 ``decltype`` does not require type-completeness of a function call expression.
    600 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
    601 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
    602 support for this feature is enabled.
    603 
    604 C++11 default template arguments in function templates
    605 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    606 
    607 Use ``__has_feature(cxx_default_function_template_args)`` or
    608 ``__has_extension(cxx_default_function_template_args)`` to determine if support
    609 for default template arguments in function templates is enabled.
    610 
    611 C++11 ``default``\ ed functions
    612 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    613 
    614 Use ``__has_feature(cxx_defaulted_functions)`` or
    615 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
    616 defaulted function definitions (with ``= default``) is enabled.
    617 
    618 C++11 delegating constructors
    619 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    620 
    621 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
    622 delegating constructors is enabled.
    623 
    624 C++11 ``deleted`` functions
    625 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    626 
    627 Use ``__has_feature(cxx_deleted_functions)`` or
    628 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
    629 function definitions (with ``= delete``) is enabled.
    630 
    631 C++11 explicit conversion functions
    632 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    633 
    634 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
    635 ``explicit`` conversion functions is enabled.
    636 
    637 C++11 generalized initializers
    638 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    639 
    640 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
    641 generalized initializers (using braced lists and ``std::initializer_list``) is
    642 enabled.
    643 
    644 C++11 implicit move constructors/assignment operators
    645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    646 
    647 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
    648 generate move constructors and move assignment operators where needed.
    649 
    650 C++11 inheriting constructors
    651 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    652 
    653 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
    654 inheriting constructors is enabled.
    655 
    656 C++11 inline namespaces
    657 ^^^^^^^^^^^^^^^^^^^^^^^
    658 
    659 Use ``__has_feature(cxx_inline_namespaces)`` or
    660 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
    661 namespaces is enabled.
    662 
    663 C++11 lambdas
    664 ^^^^^^^^^^^^^
    665 
    666 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
    667 determine if support for lambdas is enabled.
    668 
    669 C++11 local and unnamed types as template arguments
    670 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    671 
    672 Use ``__has_feature(cxx_local_type_template_args)`` or
    673 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
    674 local and unnamed types as template arguments is enabled.
    675 
    676 C++11 noexcept
    677 ^^^^^^^^^^^^^^
    678 
    679 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
    680 determine if support for noexcept exception specifications is enabled.
    681 
    682 C++11 in-class non-static data member initialization
    683 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    684 
    685 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
    686 initialization of non-static data members is enabled.
    687 
    688 C++11 ``nullptr``
    689 ^^^^^^^^^^^^^^^^^
    690 
    691 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
    692 determine if support for ``nullptr`` is enabled.
    693 
    694 C++11 ``override control``
    695 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    696 
    697 Use ``__has_feature(cxx_override_control)`` or
    698 ``__has_extension(cxx_override_control)`` to determine if support for the
    699 override control keywords is enabled.
    700 
    701 C++11 reference-qualified functions
    702 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    703 
    704 Use ``__has_feature(cxx_reference_qualified_functions)`` or
    705 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
    706 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
    707 applied to ``*this``) is enabled.
    708 
    709 C++11 range-based ``for`` loop
    710 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    711 
    712 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
    713 determine if support for the range-based for loop is enabled.
    714 
    715 C++11 raw string literals
    716 ^^^^^^^^^^^^^^^^^^^^^^^^^
    717 
    718 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
    719 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
    720 
    721 C++11 rvalue references
    722 ^^^^^^^^^^^^^^^^^^^^^^^
    723 
    724 Use ``__has_feature(cxx_rvalue_references)`` or
    725 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
    726 references is enabled.
    727 
    728 C++11 ``static_assert()``
    729 ^^^^^^^^^^^^^^^^^^^^^^^^^
    730 
    731 Use ``__has_feature(cxx_static_assert)`` or
    732 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
    733 assertions using ``static_assert`` is enabled.
    734 
    735 C++11 ``thread_local``
    736 ^^^^^^^^^^^^^^^^^^^^^^
    737 
    738 Use ``__has_feature(cxx_thread_local)`` to determine if support for
    739 ``thread_local`` variables is enabled.
    740 
    741 C++11 type inference
    742 ^^^^^^^^^^^^^^^^^^^^
    743 
    744 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
    745 determine C++11 type inference is supported using the ``auto`` specifier.  If
    746 this is disabled, ``auto`` will instead be a storage class specifier, as in C
    747 or C++98.
    748 
    749 C++11 strongly typed enumerations
    750 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    751 
    752 Use ``__has_feature(cxx_strong_enums)`` or
    753 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
    754 typed, scoped enumerations is enabled.
    755 
    756 C++11 trailing return type
    757 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    758 
    759 Use ``__has_feature(cxx_trailing_return)`` or
    760 ``__has_extension(cxx_trailing_return)`` to determine if support for the
    761 alternate function declaration syntax with trailing return type is enabled.
    762 
    763 C++11 Unicode string literals
    764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    765 
    766 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
    767 string literals is enabled.
    768 
    769 C++11 unrestricted unions
    770 ^^^^^^^^^^^^^^^^^^^^^^^^^
    771 
    772 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
    773 unrestricted unions is enabled.
    774 
    775 C++11 user-defined literals
    776 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    777 
    778 Use ``__has_feature(cxx_user_literals)`` to determine if support for
    779 user-defined literals is enabled.
    780 
    781 C++11 variadic templates
    782 ^^^^^^^^^^^^^^^^^^^^^^^^
    783 
    784 Use ``__has_feature(cxx_variadic_templates)`` or
    785 ``__has_extension(cxx_variadic_templates)`` to determine if support for
    786 variadic templates is enabled.
    787 
    788 C++1y
    789 -----
    790 
    791 The features listed below are part of the committee draft for the C++1y
    792 standard.  As a result, all these features are enabled with the ``-std=c++1y``
    793 or ``-std=gnu++1y`` option when compiling C++ code.
    794 
    795 C++1y binary literals
    796 ^^^^^^^^^^^^^^^^^^^^^
    797 
    798 Use ``__has_feature(cxx_binary_literals)`` or
    799 ``__has_extension(cxx_binary_literals)`` to determine whether
    800 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
    801 feature as an extension in all language modes.
    802 
    803 C++1y contextual conversions
    804 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    805 
    806 Use ``__has_feature(cxx_contextual_conversions)`` or
    807 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++1y rules
    808 are used when performing an implicit conversion for an array bound in a
    809 *new-expression*, the operand of a *delete-expression*, an integral constant
    810 expression, or a condition in a ``switch`` statement.
    811 
    812 C++1y decltype(auto)
    813 ^^^^^^^^^^^^^^^^^^^^
    814 
    815 Use ``__has_feature(cxx_decltype_auto)`` or
    816 ``__has_extension(cxx_decltype_auto)`` to determine if support
    817 for the ``decltype(auto)`` placeholder type is enabled.
    818 
    819 C++1y default initializers for aggregates
    820 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    821 
    822 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
    823 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
    824 for default initializers in aggregate members is enabled.
    825 
    826 C++1y generalized lambda capture
    827 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    828 
    829 Use ``__has_feature(cxx_init_capture)`` or
    830 ``__has_extension(cxx_init_capture)`` to determine if support for
    831 lambda captures with explicit initializers is enabled
    832 (for instance, ``[n(0)] { return ++n; }``).
    833 Clang does not yet support this feature.
    834 
    835 C++1y generic lambdas
    836 ^^^^^^^^^^^^^^^^^^^^^
    837 
    838 Use ``__has_feature(cxx_generic_lambda)`` or
    839 ``__has_extension(cxx_generic_lambda)`` to determine if support for generic
    840 (polymorphic) lambdas is enabled
    841 (for instance, ``[] (auto x) { return x + 1; }``).
    842 Clang does not yet support this feature.
    843 
    844 C++1y relaxed constexpr
    845 ^^^^^^^^^^^^^^^^^^^^^^^
    846 
    847 Use ``__has_feature(cxx_relaxed_constexpr)`` or
    848 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
    849 declarations, local variable modification, and control flow constructs
    850 are permitted in ``constexpr`` functions.
    851 
    852 C++1y return type deduction
    853 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    854 
    855 Use ``__has_feature(cxx_return_type_deduction)`` or
    856 ``__has_extension(cxx_return_type_deduction)`` to determine if support
    857 for return type deduction for functions (using ``auto`` as a return type)
    858 is enabled.
    859 
    860 C++1y runtime-sized arrays
    861 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    862 
    863 Use ``__has_feature(cxx_runtime_array)`` or
    864 ``__has_extension(cxx_runtime_array)`` to determine if support
    865 for arrays of runtime bound (a restricted form of variable-length arrays)
    866 is enabled.
    867 Clang's implementation of this feature is incomplete.
    868 
    869 C++1y variable templates
    870 ^^^^^^^^^^^^^^^^^^^^^^^^
    871 
    872 Use ``__has_feature(cxx_variable_templates)`` or
    873 ``__has_extension(cxx_variable_templates)`` to determine if support for
    874 templated variable declarations is enabled.
    875 Clang does not yet support this feature.
    876 
    877 C11
    878 ---
    879 
    880 The features listed below are part of the C11 standard.  As a result, all these
    881 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
    882 compiling C code.  Additionally, because these features are all
    883 backward-compatible, they are available as extensions in all language modes.
    884 
    885 C11 alignment specifiers
    886 ^^^^^^^^^^^^^^^^^^^^^^^^
    887 
    888 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
    889 if support for alignment specifiers using ``_Alignas`` is enabled.
    890 
    891 C11 atomic operations
    892 ^^^^^^^^^^^^^^^^^^^^^
    893 
    894 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
    895 if support for atomic types using ``_Atomic`` is enabled.  Clang also provides
    896 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
    897 the ``<stdatomic.h>`` operations on ``_Atomic`` types.
    898 
    899 C11 generic selections
    900 ^^^^^^^^^^^^^^^^^^^^^^
    901 
    902 Use ``__has_feature(c_generic_selections)`` or
    903 ``__has_extension(c_generic_selections)`` to determine if support for generic
    904 selections is enabled.
    905 
    906 As an extension, the C11 generic selection expression is available in all
    907 languages supported by Clang.  The syntax is the same as that given in the C11
    908 standard.
    909 
    910 In C, type compatibility is decided according to the rules given in the
    911 appropriate standard, but in C++, which lacks the type compatibility rules used
    912 in C, types are considered compatible only if they are equivalent.
    913 
    914 C11 ``_Static_assert()``
    915 ^^^^^^^^^^^^^^^^^^^^^^^^
    916 
    917 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
    918 to determine if support for compile-time assertions using ``_Static_assert`` is
    919 enabled.
    920 
    921 C11 ``_Thread_local``
    922 ^^^^^^^^^^^^^^^^^^^^^
    923 
    924 Use ``__has_feature(c_thread_local)`` to determine if support for
    925 ``_Thread_local`` variables is enabled.
    926 
    927 Checks for Type Traits
    928 ======================
    929 
    930 Clang supports the `GNU C++ type traits
    931 <http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
    932 `Microsoft Visual C++ Type traits
    933 <http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_.  For each
    934 supported type trait ``__X``, ``__has_extension(X)`` indicates the presence of
    935 the type trait.  For example:
    936 
    937 .. code-block:: c++
    938 
    939   #if __has_extension(is_convertible_to)
    940   template<typename From, typename To>
    941   struct is_convertible_to {
    942     static const bool value = __is_convertible_to(From, To);
    943   };
    944   #else
    945   // Emulate type trait
    946   #endif
    947 
    948 The following type traits are supported by Clang:
    949 
    950 * ``__has_nothrow_assign`` (GNU, Microsoft)
    951 * ``__has_nothrow_copy`` (GNU, Microsoft)
    952 * ``__has_nothrow_constructor`` (GNU, Microsoft)
    953 * ``__has_trivial_assign`` (GNU, Microsoft)
    954 * ``__has_trivial_copy`` (GNU, Microsoft)
    955 * ``__has_trivial_constructor`` (GNU, Microsoft)
    956 * ``__has_trivial_destructor`` (GNU, Microsoft)
    957 * ``__has_virtual_destructor`` (GNU, Microsoft)
    958 * ``__is_abstract`` (GNU, Microsoft)
    959 * ``__is_base_of`` (GNU, Microsoft)
    960 * ``__is_class`` (GNU, Microsoft)
    961 * ``__is_convertible_to`` (Microsoft)
    962 * ``__is_empty`` (GNU, Microsoft)
    963 * ``__is_enum`` (GNU, Microsoft)
    964 * ``__is_interface_class`` (Microsoft)
    965 * ``__is_pod`` (GNU, Microsoft)
    966 * ``__is_polymorphic`` (GNU, Microsoft)
    967 * ``__is_union`` (GNU, Microsoft)
    968 * ``__is_literal(type)``: Determines whether the given type is a literal type
    969 * ``__is_final``: Determines whether the given type is declared with a
    970   ``final`` class-virt-specifier.
    971 * ``__underlying_type(type)``: Retrieves the underlying type for a given
    972   ``enum`` type.  This trait is required to implement the C++11 standard
    973   library.
    974 * ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value
    975   of type ``totype`` can be assigned to from a value of type ``fromtype`` such
    976   that no non-trivial functions are called as part of that assignment.  This
    977   trait is required to implement the C++11 standard library.
    978 * ``__is_trivially_constructible(type, argtypes...)``: Determines whether a
    979   value of type ``type`` can be direct-initialized with arguments of types
    980   ``argtypes...`` such that no non-trivial functions are called as part of
    981   that initialization.  This trait is required to implement the C++11 standard
    982   library.
    983 
    984 Blocks
    985 ======
    986 
    987 The syntax and high level language feature description is in
    988 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
    989 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
    990 
    991 Query for this feature with ``__has_extension(blocks)``.
    992 
    993 Objective-C Features
    994 ====================
    995 
    996 Related result types
    997 --------------------
    998 
    999 According to Cocoa conventions, Objective-C methods with certain names
   1000 ("``init``", "``alloc``", etc.) always return objects that are an instance of
   1001 the receiving class's type.  Such methods are said to have a "related result
   1002 type", meaning that a message send to one of these methods will have the same
   1003 static type as an instance of the receiver class.  For example, given the
   1004 following classes:
   1005 
   1006 .. code-block:: objc
   1007 
   1008   @interface NSObject
   1009   + (id)alloc;
   1010   - (id)init;
   1011   @end
   1012 
   1013   @interface NSArray : NSObject
   1014   @end
   1015 
   1016 and this common initialization pattern
   1017 
   1018 .. code-block:: objc
   1019 
   1020   NSArray *array = [[NSArray alloc] init];
   1021 
   1022 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
   1023 ``alloc`` implicitly has a related result type.  Similarly, the type of the
   1024 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
   1025 related result type and its receiver is known to have the type ``NSArray *``.
   1026 If neither ``alloc`` nor ``init`` had a related result type, the expressions
   1027 would have had type ``id``, as declared in the method signature.
   1028 
   1029 A method with a related result type can be declared by using the type
   1030 ``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
   1031 that is only permitted in the result type of an Objective-C method, e.g.
   1032 
   1033 .. code-block:: objc
   1034 
   1035   @interface A
   1036   + (instancetype)constructAnA;
   1037   @end
   1038 
   1039 The related result type can also be inferred for some methods.  To determine
   1040 whether a method has an inferred related result type, the first word in the
   1041 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
   1042 and the method will have a related result type if its return type is compatible
   1043 with the type of its class and if:
   1044 
   1045 * the first word is "``alloc``" or "``new``", and the method is a class method,
   1046   or
   1047 
   1048 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
   1049   and the method is an instance method.
   1050 
   1051 If a method with a related result type is overridden by a subclass method, the
   1052 subclass method must also return a type that is compatible with the subclass
   1053 type.  For example:
   1054 
   1055 .. code-block:: objc
   1056 
   1057   @interface NSString : NSObject
   1058   - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
   1059   @end
   1060 
   1061 Related result types only affect the type of a message send or property access
   1062 via the given method.  In all other respects, a method with a related result
   1063 type is treated the same way as method that returns ``id``.
   1064 
   1065 Use ``__has_feature(objc_instancetype)`` to determine whether the
   1066 ``instancetype`` contextual keyword is available.
   1067 
   1068 Automatic reference counting
   1069 ----------------------------
   1070 
   1071 Clang provides support for :doc:`automated reference counting
   1072 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
   1073 for manual ``retain``/``release``/``autorelease`` message sends.  There are two
   1074 feature macros associated with automatic reference counting:
   1075 ``__has_feature(objc_arc)`` indicates the availability of automated reference
   1076 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
   1077 automated reference counting also includes support for ``__weak`` pointers to
   1078 Objective-C objects.
   1079 
   1080 .. _objc-fixed-enum:
   1081 
   1082 Enumerations with a fixed underlying type
   1083 -----------------------------------------
   1084 
   1085 Clang provides support for C++11 enumerations with a fixed underlying type
   1086 within Objective-C.  For example, one can write an enumeration type as:
   1087 
   1088 .. code-block:: c++
   1089 
   1090   typedef enum : unsigned char { Red, Green, Blue } Color;
   1091 
   1092 This specifies that the underlying type, which is used to store the enumeration
   1093 value, is ``unsigned char``.
   1094 
   1095 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
   1096 underlying types is available in Objective-C.
   1097 
   1098 Interoperability with C++11 lambdas
   1099 -----------------------------------
   1100 
   1101 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
   1102 permitting a lambda to be implicitly converted to a block pointer with the
   1103 corresponding signature.  For example, consider an API such as ``NSArray``'s
   1104 array-sorting method:
   1105 
   1106 .. code-block:: objc
   1107 
   1108   - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
   1109 
   1110 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
   1111 (^)(id, id)``, and parameters of this type are generally provided with block
   1112 literals as arguments.  However, one can also use a C++11 lambda so long as it
   1113 provides the same signature (in this case, accepting two parameters of type
   1114 ``id`` and returning an ``NSComparisonResult``):
   1115 
   1116 .. code-block:: objc
   1117 
   1118   NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
   1119                      @"String 02"];
   1120   const NSStringCompareOptions comparisonOptions
   1121     = NSCaseInsensitiveSearch | NSNumericSearch |
   1122       NSWidthInsensitiveSearch | NSForcedOrderingSearch;
   1123   NSLocale *currentLocale = [NSLocale currentLocale];
   1124   NSArray *sorted
   1125     = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
   1126                NSRange string1Range = NSMakeRange(0, [s1 length]);
   1127                return [s1 compare:s2 options:comparisonOptions
   1128                range:string1Range locale:currentLocale];
   1129        }];
   1130   NSLog(@"sorted: %@", sorted);
   1131 
   1132 This code relies on an implicit conversion from the type of the lambda
   1133 expression (an unnamed, local class type called the *closure type*) to the
   1134 corresponding block pointer type.  The conversion itself is expressed by a
   1135 conversion operator in that closure type that produces a block pointer with the
   1136 same signature as the lambda itself, e.g.,
   1137 
   1138 .. code-block:: objc
   1139 
   1140   operator NSComparisonResult (^)(id, id)() const;
   1141 
   1142 This conversion function returns a new block that simply forwards the two
   1143 parameters to the lambda object (which it captures by copy), then returns the
   1144 result.  The returned block is first copied (with ``Block_copy``) and then
   1145 autoreleased.  As an optimization, if a lambda expression is immediately
   1146 converted to a block pointer (as in the first example, above), then the block
   1147 is not copied and autoreleased: rather, it is given the same lifetime as a
   1148 block literal written at that point in the program, which avoids the overhead
   1149 of copying a block to the heap in the common case.
   1150 
   1151 The conversion from a lambda to a block pointer is only available in
   1152 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
   1153 management (autorelease).
   1154 
   1155 Object Literals and Subscripting
   1156 --------------------------------
   1157 
   1158 Clang provides support for :doc:`Object Literals and Subscripting
   1159 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
   1160 programming patterns, makes programs more concise, and improves the safety of
   1161 container creation.  There are several feature macros associated with object
   1162 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
   1163 availability of array literals; ``__has_feature(objc_dictionary_literals)``
   1164 tests the availability of dictionary literals;
   1165 ``__has_feature(objc_subscripting)`` tests the availability of object
   1166 subscripting.
   1167 
   1168 Objective-C Autosynthesis of Properties
   1169 ---------------------------------------
   1170 
   1171 Clang provides support for autosynthesis of declared properties.  Using this
   1172 feature, clang provides default synthesis of those properties not declared
   1173 @dynamic and not having user provided backing getter and setter methods.
   1174 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
   1175 of this feature in version of clang being used.
   1176 
   1177 .. _langext-objc_method_family:
   1178 
   1179 The ``objc_method_family`` attribute
   1180 ------------------------------------
   1181 
   1182 Many methods in Objective-C have conventional meanings determined by their
   1183 selectors. It is sometimes useful to be able to mark a method as having a
   1184 particular conventional meaning despite not having the right selector, or as
   1185 not having the conventional meaning that its selector would suggest. For these
   1186 use cases, we provide an attribute to specifically describe the "method family"
   1187 that a method belongs to.
   1188 
   1189 **Usage**: ``__attribute__((objc_method_family(X)))``, where ``X`` is one of
   1190 ``none``, ``alloc``, ``copy``, ``init``, ``mutableCopy``, or ``new``.  This
   1191 attribute can only be placed at the end of a method declaration:
   1192 
   1193 .. code-block:: objc
   1194 
   1195   - (NSString *)initMyStringValue __attribute__((objc_method_family(none)));
   1196 
   1197 Users who do not wish to change the conventional meaning of a method, and who
   1198 merely want to document its non-standard retain and release semantics, should
   1199 use the :ref:`retaining behavior attributes <langext-objc-retain-release>`
   1200 described below.
   1201 
   1202 Query for this feature with ``__has_attribute(objc_method_family)``.
   1203 
   1204 .. _langext-objc-retain-release:
   1205 
   1206 Objective-C retaining behavior attributes
   1207 -----------------------------------------
   1208 
   1209 In Objective-C, functions and methods are generally assumed to follow the
   1210 `Cocoa Memory Management 
   1211 <http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
   1212 conventions for ownership of object arguments and
   1213 return values. However, there are exceptions, and so Clang provides attributes
   1214 to allow these exceptions to be documented. This are used by ARC and the
   1215 `static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be
   1216 better described using the :ref:`objc_method_family
   1217 <langext-objc_method_family>` attribute instead.
   1218 
   1219 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
   1220 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
   1221 ``cf_returns_not_retained`` attributes can be placed on methods and functions
   1222 that return Objective-C or CoreFoundation objects. They are commonly placed at
   1223 the end of a function prototype or method declaration:
   1224 
   1225 .. code-block:: objc
   1226 
   1227   id foo() __attribute__((ns_returns_retained));
   1228 
   1229   - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
   1230 
   1231 The ``*_returns_retained`` attributes specify that the returned object has a +1
   1232 retain count.  The ``*_returns_not_retained`` attributes specify that the return
   1233 object has a +0 retain count, even if the normal convention for its selector
   1234 would be +1.  ``ns_returns_autoreleased`` specifies that the returned object is
   1235 +0, but is guaranteed to live at least as long as the next flush of an
   1236 autorelease pool.
   1237 
   1238 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
   1239 an parameter declaration; they specify that the argument is expected to have a
   1240 +1 retain count, which will be balanced in some way by the function or method.
   1241 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
   1242 method; it specifies that the method expects its ``self`` parameter to have a
   1243 +1 retain count, which it will balance in some way.
   1244 
   1245 .. code-block:: objc
   1246 
   1247   void foo(__attribute__((ns_consumed)) NSString *string);
   1248 
   1249   - (void) bar __attribute__((ns_consumes_self));
   1250   - (void) baz:(id) __attribute__((ns_consumed)) x;
   1251 
   1252 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
   1253 <http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
   1254 
   1255 Query for these features with ``__has_attribute(ns_consumed)``,
   1256 ``__has_attribute(ns_returns_retained)``, etc.
   1257 
   1258 objc_msg_lookup_stret
   1259 ---------------------
   1260 
   1261 Traditionally, if a runtime is used that follows the GNU Objective-C ABI, a
   1262 call to objc_msg_lookup() would be emitted for each message send, which would
   1263 return a pointer to the actual implementation of the method. However,
   1264 objc_msg_lookup() has no information at all about the method signature of the
   1265 actual method. Therefore, certain features like forwarding messages cannot be
   1266 correctly implemented for methods returning structs using objc_msg_lookup(), as
   1267 methods returning structs use a slightly different calling convention.
   1268 
   1269 To work around this, Clang emits calls to objc_msg_lookup_stret() instead for
   1270 methods that return structs if the runtime supports this, allowing the runtime
   1271 to use a different forwarding handler for methods returning structs.
   1272 
   1273 To check if Clang emits calls to objc_msg_lookup_stret(),
   1274 __has_feature(objc_msg_lookup_stret) can be used.
   1275 
   1276 Function Overloading in C
   1277 =========================
   1278 
   1279 Clang provides support for C++ function overloading in C.  Function overloading
   1280 in C is introduced using the ``overloadable`` attribute.  For example, one
   1281 might provide several overloaded versions of a ``tgsin`` function that invokes
   1282 the appropriate standard function computing the sine of a value with ``float``,
   1283 ``double``, or ``long double`` precision:
   1284 
   1285 .. code-block:: c
   1286 
   1287   #include <math.h>
   1288   float __attribute__((overloadable)) tgsin(float x) { return sinf(x); }
   1289   double __attribute__((overloadable)) tgsin(double x) { return sin(x); }
   1290   long double __attribute__((overloadable)) tgsin(long double x) { return sinl(x); }
   1291 
   1292 Given these declarations, one can call ``tgsin`` with a ``float`` value to
   1293 receive a ``float`` result, with a ``double`` to receive a ``double`` result,
   1294 etc.  Function overloading in C follows the rules of C++ function overloading
   1295 to pick the best overload given the call arguments, with a few C-specific
   1296 semantics:
   1297 
   1298 * Conversion from ``float`` or ``double`` to ``long double`` is ranked as a
   1299   floating-point promotion (per C99) rather than as a floating-point conversion
   1300   (as in C++).
   1301 
   1302 * A conversion from a pointer of type ``T*`` to a pointer of type ``U*`` is
   1303   considered a pointer conversion (with conversion rank) if ``T`` and ``U`` are
   1304   compatible types.
   1305 
   1306 * A conversion from type ``T`` to a value of type ``U`` is permitted if ``T``
   1307   and ``U`` are compatible types.  This conversion is given "conversion" rank.
   1308 
   1309 The declaration of ``overloadable`` functions is restricted to function
   1310 declarations and definitions.  Most importantly, if any function with a given
   1311 name is given the ``overloadable`` attribute, then all function declarations
   1312 and definitions with that name (and in that scope) must have the
   1313 ``overloadable`` attribute.  This rule even applies to redeclarations of
   1314 functions whose original declaration had the ``overloadable`` attribute, e.g.,
   1315 
   1316 .. code-block:: c
   1317 
   1318   int f(int) __attribute__((overloadable));
   1319   float f(float); // error: declaration of "f" must have the "overloadable" attribute
   1320 
   1321   int g(int) __attribute__((overloadable));
   1322   int g(int) { } // error: redeclaration of "g" must also have the "overloadable" attribute
   1323 
   1324 Functions marked ``overloadable`` must have prototypes.  Therefore, the
   1325 following code is ill-formed:
   1326 
   1327 .. code-block:: c
   1328 
   1329   int h() __attribute__((overloadable)); // error: h does not have a prototype
   1330 
   1331 However, ``overloadable`` functions are allowed to use a ellipsis even if there
   1332 are no named parameters (as is permitted in C++).  This feature is particularly
   1333 useful when combined with the ``unavailable`` attribute:
   1334 
   1335 .. code-block:: c++
   1336 
   1337   void honeypot(...) __attribute__((overloadable, unavailable)); // calling me is an error
   1338 
   1339 Functions declared with the ``overloadable`` attribute have their names mangled
   1340 according to the same rules as C++ function names.  For example, the three
   1341 ``tgsin`` functions in our motivating example get the mangled names
   1342 ``_Z5tgsinf``, ``_Z5tgsind``, and ``_Z5tgsine``, respectively.  There are two
   1343 caveats to this use of name mangling:
   1344 
   1345 * Future versions of Clang may change the name mangling of functions overloaded
   1346   in C, so you should not depend on an specific mangling.  To be completely
   1347   safe, we strongly urge the use of ``static inline`` with ``overloadable``
   1348   functions.
   1349 
   1350 * The ``overloadable`` attribute has almost no meaning when used in C++,
   1351   because names will already be mangled and functions are already overloadable.
   1352   However, when an ``overloadable`` function occurs within an ``extern "C"``
   1353   linkage specification, it's name *will* be mangled in the same way as it
   1354   would in C.
   1355 
   1356 Query for this feature with ``__has_extension(attribute_overloadable)``.
   1357 
   1358 Initializer lists for complex numbers in C
   1359 ==========================================
   1360 
   1361 clang supports an extension which allows the following in C:
   1362 
   1363 .. code-block:: c++
   1364 
   1365   #include <math.h>
   1366   #include <complex.h>
   1367   complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
   1368 
   1369 This construct is useful because there is no way to separately initialize the
   1370 real and imaginary parts of a complex variable in standard C, given that clang
   1371 does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
   1372 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
   1373 in static initializers.)
   1374 
   1375 Note that this extension does not allow eliding the braces; the meaning of the
   1376 following two lines is different:
   1377 
   1378 .. code-block:: c++
   1379 
   1380   complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
   1381   complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
   1382 
   1383 This extension also works in C++ mode, as far as that goes, but does not apply
   1384 to the C++ ``std::complex``.  (In C++11, list initialization allows the same
   1385 syntax to be used with ``std::complex`` with the same meaning.)
   1386 
   1387 Builtin Functions
   1388 =================
   1389 
   1390 Clang supports a number of builtin library functions with the same syntax as
   1391 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
   1392 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
   1393 ``__sync_fetch_and_add``, etc.  In addition to the GCC builtins, Clang supports
   1394 a number of builtins that GCC does not, which are listed here.
   1395 
   1396 Please note that Clang does not and will not support all of the GCC builtins
   1397 for vector operations.  Instead of using builtins, you should use the functions
   1398 defined in target-specific header files like ``<xmmintrin.h>``, which define
   1399 portable wrappers for these.  Many of the Clang versions of these functions are
   1400 implemented directly in terms of :ref:`extended vector support
   1401 <langext-vectors>` instead of builtins, in order to reduce the number of
   1402 builtins that we need to implement.
   1403 
   1404 ``__builtin_readcyclecounter``
   1405 ------------------------------
   1406 
   1407 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
   1408 a similar low-latency, high-accuracy clock) on those targets that support it.
   1409 
   1410 **Syntax**:
   1411 
   1412 .. code-block:: c++
   1413 
   1414   __builtin_readcyclecounter()
   1415 
   1416 **Example of Use**:
   1417 
   1418 .. code-block:: c++
   1419 
   1420   unsigned long long t0 = __builtin_readcyclecounter();
   1421   do_something();
   1422   unsigned long long t1 = __builtin_readcyclecounter();
   1423   unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
   1424 
   1425 **Description**:
   1426 
   1427 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
   1428 which may be either global or process/thread-specific depending on the target.
   1429 As the backing counters often overflow quickly (on the order of seconds) this
   1430 should only be used for timing small intervals.  When not supported by the
   1431 target, the return value is always zero.  This builtin takes no arguments and
   1432 produces an unsigned long long result.
   1433 
   1434 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
   1435 that even if present, its use may depend on run-time privilege or other OS
   1436 controlled state.
   1437 
   1438 .. _langext-__builtin_shufflevector:
   1439 
   1440 ``__builtin_shufflevector``
   1441 ---------------------------
   1442 
   1443 ``__builtin_shufflevector`` is used to express generic vector
   1444 permutation/shuffle/swizzle operations.  This builtin is also very important
   1445 for the implementation of various target-specific header files like
   1446 ``<xmmintrin.h>``.
   1447 
   1448 **Syntax**:
   1449 
   1450 .. code-block:: c++
   1451 
   1452   __builtin_shufflevector(vec1, vec2, index1, index2, ...)
   1453 
   1454 **Examples**:
   1455 
   1456 .. code-block:: c++
   1457 
   1458   // identity operation - return 4-element vector v1.
   1459   __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
   1460 
   1461   // "Splat" element 0 of V1 into a 4-element result.
   1462   __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
   1463 
   1464   // Reverse 4-element vector V1.
   1465   __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
   1466 
   1467   // Concatenate every other element of 4-element vectors V1 and V2.
   1468   __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
   1469 
   1470   // Concatenate every other element of 8-element vectors V1 and V2.
   1471   __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
   1472 
   1473   // Shuffle v1 with some elements being undefined
   1474   __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
   1475 
   1476 **Description**:
   1477 
   1478 The first two arguments to ``__builtin_shufflevector`` are vectors that have
   1479 the same element type.  The remaining arguments are a list of integers that
   1480 specify the elements indices of the first two vectors that should be extracted
   1481 and returned in a new vector.  These element indices are numbered sequentially
   1482 starting with the first vector, continuing into the second vector.  Thus, if
   1483 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
   1484 ``vec2``. An index of -1 can be used to indicate that the corresponding element
   1485 in the returned vector is a don't care and can be optimized by the backend.
   1486 
   1487 The result of ``__builtin_shufflevector`` is a vector with the same element
   1488 type as ``vec1``/``vec2`` but that has an element count equal to the number of
   1489 indices specified.
   1490 
   1491 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
   1492 
   1493 ``__builtin_unreachable``
   1494 -------------------------
   1495 
   1496 ``__builtin_unreachable`` is used to indicate that a specific point in the
   1497 program cannot be reached, even if the compiler might otherwise think it can.
   1498 This is useful to improve optimization and eliminates certain warnings.  For
   1499 example, without the ``__builtin_unreachable`` in the example below, the
   1500 compiler assumes that the inline asm can fall through and prints a "function
   1501 declared '``noreturn``' should not return" warning.
   1502 
   1503 **Syntax**:
   1504 
   1505 .. code-block:: c++
   1506 
   1507     __builtin_unreachable()
   1508 
   1509 **Example of use**:
   1510 
   1511 .. code-block:: c++
   1512 
   1513   void myabort(void) __attribute__((noreturn));
   1514   void myabort(void) {
   1515     asm("int3");
   1516     __builtin_unreachable();
   1517   }
   1518 
   1519 **Description**:
   1520 
   1521 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
   1522 Since it has undefined behavior, it is a statement that it is never reached and
   1523 the optimizer can take advantage of this to produce better code.  This builtin
   1524 takes no arguments and produces a void result.
   1525 
   1526 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
   1527 
   1528 ``__sync_swap``
   1529 ---------------
   1530 
   1531 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
   1532 
   1533 **Syntax**:
   1534 
   1535 .. code-block:: c++
   1536 
   1537   type __sync_swap(type *ptr, type value, ...)
   1538 
   1539 **Example of Use**:
   1540 
   1541 .. code-block:: c++
   1542 
   1543   int old_value = __sync_swap(&value, new_value);
   1544 
   1545 **Description**:
   1546 
   1547 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
   1548 atomic intrinsics to allow code to atomically swap the current value with the
   1549 new value.  More importantly, it helps developers write more efficient and
   1550 correct code by avoiding expensive loops around
   1551 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
   1552 implementation details of ``__sync_lock_test_and_set()``.  The
   1553 ``__sync_swap()`` builtin is a full barrier.
   1554 
   1555 ``__builtin_addressof``
   1556 -----------------------
   1557 
   1558 ``__builtin_addressof`` performs the functionality of the built-in ``&``
   1559 operator, ignoring any ``operator&`` overload.  This is useful in constant
   1560 expressions in C++11, where there is no other way to take the address of an
   1561 object that overloads ``operator&``.
   1562 
   1563 **Example of use**:
   1564 
   1565 .. code-block:: c++
   1566 
   1567   template<typename T> constexpr T *addressof(T &value) {
   1568     return __builtin_addressof(value);
   1569   }
   1570 
   1571 Multiprecision Arithmetic Builtins
   1572 ----------------------------------
   1573 
   1574 Clang provides a set of builtins which expose multiprecision arithmetic in a
   1575 manner amenable to C. They all have the following form:
   1576 
   1577 .. code-block:: c
   1578 
   1579   unsigned x = ..., y = ..., carryin = ..., carryout;
   1580   unsigned sum = __builtin_addc(x, y, carryin, &carryout);
   1581 
   1582 Thus one can form a multiprecision addition chain in the following manner:
   1583 
   1584 .. code-block:: c
   1585 
   1586   unsigned *x, *y, *z, carryin=0, carryout;
   1587   z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
   1588   carryin = carryout;
   1589   z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
   1590   carryin = carryout;
   1591   z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
   1592   carryin = carryout;
   1593   z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
   1594 
   1595 The complete list of builtins are:
   1596 
   1597 .. code-block:: c
   1598 
   1599   unsigned char      __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
   1600   unsigned short     __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
   1601   unsigned           __builtin_addc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
   1602   unsigned long      __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
   1603   unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
   1604   unsigned char      __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
   1605   unsigned short     __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
   1606   unsigned           __builtin_subc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
   1607   unsigned long      __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
   1608   unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
   1609 
   1610 Checked Arithmetic Builtins
   1611 ---------------------------
   1612 
   1613 Clang provides a set of builtins that implement checked arithmetic for security
   1614 critical applications in a manner that is fast and easily expressable in C. As
   1615 an example of their usage:
   1616 
   1617 .. code-block:: c
   1618 
   1619   errorcode_t security_critical_application(...) {
   1620     unsigned x, y, result;
   1621     ...
   1622     if (__builtin_umul_overflow(x, y, &result))
   1623       return kErrorCodeHackers;
   1624     ...
   1625     use_multiply(result);
   1626     ...
   1627   }
   1628 
   1629 A complete enumeration of the builtins are:
   1630 
   1631 .. code-block:: c
   1632 
   1633   bool __builtin_uadd_overflow  (unsigned x, unsigned y, unsigned *sum);
   1634   bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
   1635   bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
   1636   bool __builtin_usub_overflow  (unsigned x, unsigned y, unsigned *diff);
   1637   bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
   1638   bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
   1639   bool __builtin_umul_overflow  (unsigned x, unsigned y, unsigned *prod);
   1640   bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
   1641   bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
   1642   bool __builtin_sadd_overflow  (int x, int y, int *sum);
   1643   bool __builtin_saddl_overflow (long x, long y, long *sum);
   1644   bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
   1645   bool __builtin_ssub_overflow  (int x, int y, int *diff);
   1646   bool __builtin_ssubl_overflow (long x, long y, long *diff);
   1647   bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
   1648   bool __builtin_smul_overflow  (int x, int y, int *prod);
   1649   bool __builtin_smull_overflow (long x, long y, long *prod);
   1650   bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
   1651 
   1652 
   1653 .. _langext-__c11_atomic:
   1654 
   1655 __c11_atomic builtins
   1656 ---------------------
   1657 
   1658 Clang provides a set of builtins which are intended to be used to implement
   1659 C11's ``<stdatomic.h>`` header.  These builtins provide the semantics of the
   1660 ``_explicit`` form of the corresponding C11 operation, and are named with a
   1661 ``__c11_`` prefix.  The supported operations are:
   1662 
   1663 * ``__c11_atomic_init``
   1664 * ``__c11_atomic_thread_fence``
   1665 * ``__c11_atomic_signal_fence``
   1666 * ``__c11_atomic_is_lock_free``
   1667 * ``__c11_atomic_store``
   1668 * ``__c11_atomic_load``
   1669 * ``__c11_atomic_exchange``
   1670 * ``__c11_atomic_compare_exchange_strong``
   1671 * ``__c11_atomic_compare_exchange_weak``
   1672 * ``__c11_atomic_fetch_add``
   1673 * ``__c11_atomic_fetch_sub``
   1674 * ``__c11_atomic_fetch_and``
   1675 * ``__c11_atomic_fetch_or``
   1676 * ``__c11_atomic_fetch_xor``
   1677 
   1678 Low-level ARM exclusive memory builtins
   1679 ---------------------------------------
   1680 
   1681 Clang provides overloaded builtins giving direct access to the three key ARM
   1682 instructions for implementing atomic operations.
   1683 
   1684 .. code-block:: c
   1685   T __builtin_arm_ldrex(const volatile T *addr);
   1686   int __builtin_arm_strex(T val, volatile T *addr);
   1687   void __builtin_arm_clrex(void);
   1688 
   1689 The types ``T`` currently supported are:
   1690 * Integer types with width at most 64 bits.
   1691 * Floating-point types
   1692 * Pointer types.
   1693 
   1694 Note that the compiler does not guarantee it will not insert stores which clear
   1695 the exclusive monitor in between an ``ldrex`` and its paired ``strex``. In
   1696 practice this is only usually a risk when the extra store is on the same cache
   1697 line as the variable being modified and Clang will only insert stack stores on
   1698 its own, so it is best not to use these operations on variables with automatic
   1699 storage duration.
   1700 
   1701 Also, loads and stores may be implicit in code written between the ``ldrex`` and
   1702 ``strex``. Clang will not necessarily mitigate the effects of these either, so
   1703 care should be exercised.
   1704 
   1705 For these reasons the higher level atomic primitives should be preferred where
   1706 possible.
   1707 
   1708 Non-standard C++11 Attributes
   1709 =============================
   1710 
   1711 Clang's non-standard C++11 attributes live in the ``clang`` attribute
   1712 namespace.
   1713 
   1714 The ``clang::fallthrough`` attribute
   1715 ------------------------------------
   1716 
   1717 The ``clang::fallthrough`` attribute is used along with the
   1718 ``-Wimplicit-fallthrough`` argument to annotate intentional fall-through
   1719 between switch labels.  It can only be applied to a null statement placed at a
   1720 point of execution between any statement and the next switch label.  It is
   1721 common to mark these places with a specific comment, but this attribute is
   1722 meant to replace comments with a more strict annotation, which can be checked
   1723 by the compiler.  This attribute doesn't change semantics of the code and can
   1724 be used wherever an intended fall-through occurs.  It is designed to mimic
   1725 control-flow statements like ``break;``, so it can be placed in most places
   1726 where ``break;`` can, but only if there are no statements on the execution path
   1727 between it and the next switch label.
   1728 
   1729 Here is an example:
   1730 
   1731 .. code-block:: c++
   1732 
   1733   // compile with -Wimplicit-fallthrough
   1734   switch (n) {
   1735   case 22:
   1736   case 33:  // no warning: no statements between case labels
   1737     f();
   1738   case 44:  // warning: unannotated fall-through
   1739     g();
   1740     [[clang::fallthrough]];
   1741   case 55:  // no warning
   1742     if (x) {
   1743       h();
   1744       break;
   1745     }
   1746     else {
   1747       i();
   1748       [[clang::fallthrough]];
   1749     }
   1750   case 66:  // no warning
   1751     p();
   1752     [[clang::fallthrough]]; // warning: fallthrough annotation does not
   1753                             //          directly precede case label
   1754     q();
   1755   case 77:  // warning: unannotated fall-through
   1756     r();
   1757   }
   1758 
   1759 ``gnu::`` attributes
   1760 --------------------
   1761 
   1762 Clang also supports GCC's ``gnu`` attribute namespace. All GCC attributes which
   1763 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
   1764 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
   1765 (see the list of `GCC function attributes
   1766 <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
   1767 attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
   1768 `GCC type attributes
   1769 <http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
   1770 implementation, these attributes must appertain to the *declarator-id* in a
   1771 declaration, which means they must go either at the start of the declaration or
   1772 immediately after the name being declared.
   1773 
   1774 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
   1775 also applies the GNU ``noreturn`` attribute to ``f``.
   1776 
   1777 .. code-block:: c++
   1778 
   1779   [[gnu::unused]] int a, f [[gnu::noreturn]] ();
   1780 
   1781 Target-Specific Extensions
   1782 ==========================
   1783 
   1784 Clang supports some language features conditionally on some targets.
   1785 
   1786 X86/X86-64 Language Extensions
   1787 ------------------------------
   1788 
   1789 The X86 backend has these language extensions:
   1790 
   1791 Memory references off the GS segment
   1792 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1793 
   1794 Annotating a pointer with address space #256 causes it to be code generated
   1795 relative to the X86 GS segment register, and address space #257 causes it to be
   1796 relative to the X86 FS segment.  Note that this is a very very low-level
   1797 feature that should only be used if you know what you're doing (for example in
   1798 an OS kernel).
   1799 
   1800 Here is an example:
   1801 
   1802 .. code-block:: c++
   1803 
   1804   #define GS_RELATIVE __attribute__((address_space(256)))
   1805   int foo(int GS_RELATIVE *P) {
   1806     return *P;
   1807   }
   1808 
   1809 Which compiles to (on X86-32):
   1810 
   1811 .. code-block:: gas
   1812 
   1813   _foo:
   1814           movl    4(%esp), %eax
   1815           movl    %gs:(%eax), %eax
   1816           ret
   1817 
   1818 Extensions for Static Analysis
   1819 ==============================
   1820 
   1821 Clang supports additional attributes that are useful for documenting program
   1822 invariants and rules for static analysis tools, such as the `Clang Static
   1823 Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented
   1824 in the analyzer's `list of source-level annotations
   1825 <http://clang-analyzer.llvm.org/annotations.html>`_.
   1826 
   1827 
   1828 Extensions for Dynamic Analysis
   1829 ===============================
   1830 
   1831 .. _langext-address_sanitizer:
   1832 
   1833 AddressSanitizer
   1834 ----------------
   1835 
   1836 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
   1837 with :doc:`AddressSanitizer`.
   1838 
   1839 Use ``__attribute__((no_sanitize_address))``
   1840 on a function declaration
   1841 to specify that address safety instrumentation (e.g. AddressSanitizer) should
   1842 not be applied to that function.
   1843 
   1844 .. _langext-thread_sanitizer:
   1845 
   1846 ThreadSanitizer
   1847 ----------------
   1848 
   1849 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
   1850 with :doc:`ThreadSanitizer`.
   1851 
   1852 Use ``__attribute__((no_sanitize_thread))`` on a function declaration
   1853 to specify that checks for data races on plain (non-atomic) memory accesses
   1854 should not be inserted by ThreadSanitizer.
   1855 The function may still be instrumented by the tool
   1856 to avoid false positives in other places.
   1857 
   1858 .. _langext-memory_sanitizer:
   1859 
   1860 MemorySanitizer
   1861 ----------------
   1862 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
   1863 with :doc:`MemorySanitizer`.
   1864 
   1865 Use ``__attribute__((no_sanitize_memory))`` on a function declaration
   1866 to specify that checks for uninitialized memory should not be inserted 
   1867 (e.g. by MemorySanitizer). The function may still be instrumented by the tool
   1868 to avoid false positives in other places.
   1869 
   1870 
   1871 Thread-Safety Annotation Checking
   1872 =================================
   1873 
   1874 Clang supports additional attributes for checking basic locking policies in
   1875 multithreaded programs.  Clang currently parses the following list of
   1876 attributes, although **the implementation for these annotations is currently in
   1877 development.** For more details, see the `GCC implementation
   1878 <http://gcc.gnu.org/wiki/ThreadSafetyAnnotation>`_.
   1879 
   1880 ``no_thread_safety_analysis``
   1881 -----------------------------
   1882 
   1883 Use ``__attribute__((no_thread_safety_analysis))`` on a function declaration to
   1884 specify that the thread safety analysis should not be run on that function.
   1885 This attribute provides an escape hatch (e.g. for situations when it is
   1886 difficult to annotate the locking policy).
   1887 
   1888 ``lockable``
   1889 ------------
   1890 
   1891 Use ``__attribute__((lockable))`` on a class definition to specify that it has
   1892 a lockable type (e.g. a Mutex class).  This annotation is primarily used to
   1893 check consistency.
   1894 
   1895 ``scoped_lockable``
   1896 -------------------
   1897 
   1898 Use ``__attribute__((scoped_lockable))`` on a class definition to specify that
   1899 it has a "scoped" lockable type.  Objects of this type will acquire the lock
   1900 upon construction and release it upon going out of scope.  This annotation is
   1901 primarily used to check consistency.
   1902 
   1903 ``guarded_var``
   1904 ---------------
   1905 
   1906 Use ``__attribute__((guarded_var))`` on a variable declaration to specify that
   1907 the variable must be accessed while holding some lock.
   1908 
   1909 ``pt_guarded_var``
   1910 ------------------
   1911 
   1912 Use ``__attribute__((pt_guarded_var))`` on a pointer declaration to specify
   1913 that the pointer must be dereferenced while holding some lock.
   1914 
   1915 ``guarded_by(l)``
   1916 -----------------
   1917 
   1918 Use ``__attribute__((guarded_by(l)))`` on a variable declaration to specify
   1919 that the variable must be accessed while holding lock ``l``.
   1920 
   1921 ``pt_guarded_by(l)``
   1922 --------------------
   1923 
   1924 Use ``__attribute__((pt_guarded_by(l)))`` on a pointer declaration to specify
   1925 that the pointer must be dereferenced while holding lock ``l``.
   1926 
   1927 ``acquired_before(...)``
   1928 ------------------------
   1929 
   1930 Use ``__attribute__((acquired_before(...)))`` on a declaration of a lockable
   1931 variable to specify that the lock must be acquired before all attribute
   1932 arguments.  Arguments must be lockable type, and there must be at least one
   1933 argument.
   1934 
   1935 ``acquired_after(...)``
   1936 -----------------------
   1937 
   1938 Use ``__attribute__((acquired_after(...)))`` on a declaration of a lockable
   1939 variable to specify that the lock must be acquired after all attribute
   1940 arguments.  Arguments must be lockable type, and there must be at least one
   1941 argument.
   1942 
   1943 ``exclusive_lock_function(...)``
   1944 --------------------------------
   1945 
   1946 Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration
   1947 to specify that the function acquires all listed locks exclusively.  This
   1948 attribute takes zero or more arguments: either of lockable type or integers
   1949 indexing into function parameters of lockable type.  If no arguments are given,
   1950 the acquired lock is implicitly ``this`` of the enclosing object.
   1951 
   1952 ``shared_lock_function(...)``
   1953 -----------------------------
   1954 
   1955 Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to
   1956 specify that the function acquires all listed locks, although the locks may be
   1957 shared (e.g. read locks).  This attribute takes zero or more arguments: either
   1958 of lockable type or integers indexing into function parameters of lockable
   1959 type.  If no arguments are given, the acquired lock is implicitly ``this`` of
   1960 the enclosing object.
   1961 
   1962 ``exclusive_trylock_function(...)``
   1963 -----------------------------------
   1964 
   1965 Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration
   1966 to specify that the function will try (without blocking) to acquire all listed
   1967 locks exclusively.  This attribute takes one or more arguments.  The first
   1968 argument is an integer or boolean value specifying the return value of a
   1969 successful lock acquisition.  The remaining arugments are either of lockable
   1970 type or integers indexing into function parameters of lockable type.  If only
   1971 one argument is given, the acquired lock is implicitly ``this`` of the
   1972 enclosing object.
   1973 
   1974 ``shared_trylock_function(...)``
   1975 --------------------------------
   1976 
   1977 Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to
   1978 specify that the function will try (without blocking) to acquire all listed
   1979 locks, although the locks may be shared (e.g. read locks).  This attribute
   1980 takes one or more arguments.  The first argument is an integer or boolean value
   1981 specifying the return value of a successful lock acquisition.  The remaining
   1982 arugments are either of lockable type or integers indexing into function
   1983 parameters of lockable type.  If only one argument is given, the acquired lock
   1984 is implicitly ``this`` of the enclosing object.
   1985 
   1986 ``unlock_function(...)``
   1987 ------------------------
   1988 
   1989 Use ``__attribute__((unlock_function(...)))`` on a function declaration to
   1990 specify that the function release all listed locks.  This attribute takes zero
   1991 or more arguments: either of lockable type or integers indexing into function
   1992 parameters of lockable type.  If no arguments are given, the acquired lock is
   1993 implicitly ``this`` of the enclosing object.
   1994 
   1995 ``lock_returned(l)``
   1996 --------------------
   1997 
   1998 Use ``__attribute__((lock_returned(l)))`` on a function declaration to specify
   1999 that the function returns lock ``l`` (``l`` must be of lockable type).  This
   2000 annotation is used to aid in resolving lock expressions.
   2001 
   2002 ``locks_excluded(...)``
   2003 -----------------------
   2004 
   2005 Use ``__attribute__((locks_excluded(...)))`` on a function declaration to
   2006 specify that the function must not be called with the listed locks.  Arguments
   2007 must be lockable type, and there must be at least one argument.
   2008 
   2009 ``exclusive_locks_required(...)``
   2010 ---------------------------------
   2011 
   2012 Use ``__attribute__((exclusive_locks_required(...)))`` on a function
   2013 declaration to specify that the function must be called while holding the
   2014 listed exclusive locks.  Arguments must be lockable type, and there must be at
   2015 least one argument.
   2016 
   2017 ``shared_locks_required(...)``
   2018 ------------------------------
   2019 
   2020 Use ``__attribute__((shared_locks_required(...)))`` on a function declaration
   2021 to specify that the function must be called while holding the listed shared
   2022 locks.  Arguments must be lockable type, and there must be at least one
   2023 argument.
   2024 
   2025 Type Safety Checking
   2026 ====================
   2027 
   2028 Clang supports additional attributes to enable checking type safety properties
   2029 that can't be enforced by the C type system.  Use cases include:
   2030 
   2031 * MPI library implementations, where these attributes enable checking that
   2032   the buffer type matches the passed ``MPI_Datatype``;
   2033 * for HDF5 library there is a similar use case to MPI;
   2034 * checking types of variadic functions' arguments for functions like
   2035   ``fcntl()`` and ``ioctl()``.
   2036 
   2037 You can detect support for these attributes with ``__has_attribute()``.  For
   2038 example:
   2039 
   2040 .. code-block:: c++
   2041 
   2042   #if defined(__has_attribute)
   2043   #  if __has_attribute(argument_with_type_tag) && \
   2044         __has_attribute(pointer_with_type_tag) && \
   2045         __has_attribute(type_tag_for_datatype)
   2046   #    define ATTR_MPI_PWT(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(mpi,buffer_idx,type_idx)))
   2047   /* ... other macros ...  */
   2048   #  endif
   2049   #endif
   2050 
   2051   #if !defined(ATTR_MPI_PWT)
   2052   # define ATTR_MPI_PWT(buffer_idx, type_idx)
   2053   #endif
   2054 
   2055   int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
   2056       ATTR_MPI_PWT(1,3);
   2057 
   2058 ``argument_with_type_tag(...)``
   2059 -------------------------------
   2060 
   2061 Use ``__attribute__((argument_with_type_tag(arg_kind, arg_idx,
   2062 type_tag_idx)))`` on a function declaration to specify that the function
   2063 accepts a type tag that determines the type of some other argument.
   2064 ``arg_kind`` is an identifier that should be used when annotating all
   2065 applicable type tags.
   2066 
   2067 This attribute is primarily useful for checking arguments of variadic functions
   2068 (``pointer_with_type_tag`` can be used in most non-variadic cases).
   2069 
   2070 For example:
   2071 
   2072 .. code-block:: c++
   2073 
   2074   int fcntl(int fd, int cmd, ...)
   2075       __attribute__(( argument_with_type_tag(fcntl,3,2) ));
   2076 
   2077 ``pointer_with_type_tag(...)``
   2078 ------------------------------
   2079 
   2080 Use ``__attribute__((pointer_with_type_tag(ptr_kind, ptr_idx, type_tag_idx)))``
   2081 on a function declaration to specify that the function accepts a type tag that
   2082 determines the pointee type of some other pointer argument.
   2083 
   2084 For example:
   2085 
   2086 .. code-block:: c++
   2087 
   2088   int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
   2089       __attribute__(( pointer_with_type_tag(mpi,1,3) ));
   2090 
   2091 ``type_tag_for_datatype(...)``
   2092 ------------------------------
   2093 
   2094 Clang supports annotating type tags of two forms.
   2095 
   2096 * **Type tag that is an expression containing a reference to some declared
   2097   identifier.** Use ``__attribute__((type_tag_for_datatype(kind, type)))`` on a
   2098   declaration with that identifier:
   2099 
   2100   .. code-block:: c++
   2101 
   2102     extern struct mpi_datatype mpi_datatype_int
   2103         __attribute__(( type_tag_for_datatype(mpi,int) ));
   2104     #define MPI_INT ((MPI_Datatype) &mpi_datatype_int)
   2105 
   2106 * **Type tag that is an integral literal.** Introduce a ``static const``
   2107   variable with a corresponding initializer value and attach
   2108   ``__attribute__((type_tag_for_datatype(kind, type)))`` on that declaration,
   2109   for example:
   2110 
   2111   .. code-block:: c++
   2112 
   2113     #define MPI_INT ((MPI_Datatype) 42)
   2114     static const MPI_Datatype mpi_datatype_int
   2115         __attribute__(( type_tag_for_datatype(mpi,int) )) = 42
   2116 
   2117 The attribute also accepts an optional third argument that determines how the
   2118 expression is compared to the type tag.  There are two supported flags:
   2119 
   2120 * ``layout_compatible`` will cause types to be compared according to
   2121   layout-compatibility rules (C++11 [class.mem] p 17, 18).  This is
   2122   implemented to support annotating types like ``MPI_DOUBLE_INT``.
   2123 
   2124   For example:
   2125 
   2126   .. code-block:: c++
   2127 
   2128     /* In mpi.h */
   2129     struct internal_mpi_double_int { double d; int i; };
   2130     extern struct mpi_datatype mpi_datatype_double_int
   2131         __attribute__(( type_tag_for_datatype(mpi, struct internal_mpi_double_int, layout_compatible) ));
   2132 
   2133     #define MPI_DOUBLE_INT ((MPI_Datatype) &mpi_datatype_double_int)
   2134 
   2135     /* In user code */
   2136     struct my_pair { double a; int b; };
   2137     struct my_pair *buffer;
   2138     MPI_Send(buffer, 1, MPI_DOUBLE_INT /*, ...  */); // no warning
   2139 
   2140     struct my_int_pair { int a; int b; }
   2141     struct my_int_pair *buffer2;
   2142     MPI_Send(buffer2, 1, MPI_DOUBLE_INT /*, ...  */); // warning: actual buffer element
   2143                                                       // type 'struct my_int_pair'
   2144                                                       // doesn't match specified MPI_Datatype
   2145 
   2146 * ``must_be_null`` specifies that the expression should be a null pointer
   2147   constant, for example:
   2148 
   2149   .. code-block:: c++
   2150 
   2151     /* In mpi.h */
   2152     extern struct mpi_datatype mpi_datatype_null
   2153         __attribute__(( type_tag_for_datatype(mpi, void, must_be_null) ));
   2154 
   2155     #define MPI_DATATYPE_NULL ((MPI_Datatype) &mpi_datatype_null)
   2156 
   2157     /* In user code */
   2158     MPI_Send(buffer, 1, MPI_DATATYPE_NULL /*, ...  */); // warning: MPI_DATATYPE_NULL
   2159                                                         // was specified but buffer
   2160                                                         // is not a null pointer
   2161 
   2162 Format String Checking
   2163 ======================
   2164 
   2165 Clang supports the ``format`` attribute, which indicates that the function
   2166 accepts a ``printf`` or ``scanf``-like format string and corresponding
   2167 arguments or a ``va_list`` that contains these arguments.
   2168 
   2169 Please see `GCC documentation about format attribute
   2170 <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ to find details
   2171 about attribute syntax.
   2172 
   2173 Clang implements two kinds of checks with this attribute.
   2174 
   2175 #. Clang checks that the function with the ``format`` attribute is called with
   2176    a format string that uses format specifiers that are allowed, and that
   2177    arguments match the format string.  This is the ``-Wformat`` warning, it is
   2178    on by default.
   2179 
   2180 #. Clang checks that the format string argument is a literal string.  This is
   2181    the ``-Wformat-nonliteral`` warning, it is off by default.
   2182 
   2183    Clang implements this mostly the same way as GCC, but there is a difference
   2184    for functions that accept a ``va_list`` argument (for example, ``vprintf``).
   2185    GCC does not emit ``-Wformat-nonliteral`` warning for calls to such
   2186    fuctions.  Clang does not warn if the format string comes from a function
   2187    parameter, where the function is annotated with a compatible attribute,
   2188    otherwise it warns.  For example:
   2189 
   2190    .. code-block:: c
   2191 
   2192      __attribute__((__format__ (__scanf__, 1, 3)))
   2193      void foo(const char* s, char *buf, ...) {
   2194        va_list ap;
   2195        va_start(ap, buf);
   2196 
   2197        vprintf(s, ap); // warning: format string is not a string literal
   2198      }
   2199 
   2200    In this case we warn because ``s`` contains a format string for a
   2201    ``scanf``-like function, but it is passed to a ``printf``-like function.
   2202 
   2203    If the attribute is removed, clang still warns, because the format string is
   2204    not a string literal.
   2205 
   2206    Another example:
   2207 
   2208    .. code-block:: c
   2209 
   2210      __attribute__((__format__ (__printf__, 1, 3)))
   2211      void foo(const char* s, char *buf, ...) {
   2212        va_list ap;
   2213        va_start(ap, buf);
   2214 
   2215        vprintf(s, ap); // warning
   2216      }
   2217 
   2218    In this case Clang does not warn because the format string ``s`` and
   2219    the corresponding arguments are annotated.  If the arguments are
   2220    incorrect, the caller of ``foo`` will receive a warning.
   2221