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