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