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