Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / docs / LanguageExtensions.rst
blob30e288f986782fdeb10de11e34fc0dd1911c1c8e
1 =========================
2 Clang Language Extensions
3 =========================
5 .. contents::
6    :local:
7    :depth: 1
9 .. toctree::
10    :hidden:
12    ObjectiveCLiterals
13    BlockLanguageSpec
14    Block-ABI-Apple
15    AutomaticReferenceCounting
16    MatrixTypes
18 Introduction
19 ============
21 This document describes the language extensions provided by Clang.  In addition
22 to the language extensions listed here, Clang aims to support a broad range of
23 GCC extensions.  Please see the `GCC manual
24 <https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
25 these extensions.
27 .. _langext-feature_check:
29 Feature Checking Macros
30 =======================
32 Language extensions can be very useful, but only if you know you can depend on
33 them.  In order to allow fine-grain features checks, we support three builtin
34 function-like macros.  This allows you to directly test for a feature in your
35 code without having to resort to something like autoconf or fragile "compiler
36 version checks".
38 ``__has_builtin``
39 -----------------
41 This function-like macro takes a single identifier argument that is the name of
42 a builtin function, a builtin pseudo-function (taking one or more type
43 arguments), or a builtin template.
44 It evaluates to 1 if the builtin is supported or 0 if not.
45 It can be used like this:
47 .. code-block:: c++
49   #ifndef __has_builtin         // Optional of course.
50     #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
51   #endif
53   ...
54   #if __has_builtin(__builtin_trap)
55     __builtin_trap();
56   #else
57     abort();
58   #endif
59   ...
61 .. note::
63   Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
64   pseudo-functions.
66   ``__has_builtin`` should not be used to detect support for a builtin macro;
67   use ``#ifdef`` instead.
69 ``__has_constexpr_builtin``
70 ---------------------------
72 This function-like macro takes a single identifier argument that is the name of
73 a builtin function, a builtin pseudo-function (taking one or more type
74 arguments), or a builtin template.
75 It evaluates to 1 if the builtin is supported and can be constant evaluated or
76 0 if not. It can be used for writing conditionally constexpr code like this:
78 .. code-block:: c++
80   #ifndef __has_constexpr_builtin         // Optional of course.
81     #define __has_constexpr_builtin(x) 0  // Compatibility with non-clang compilers.
82   #endif
84   ...
85   #if __has_constexpr_builtin(__builtin_fmax)
86     constexpr
87   #endif
88     double money_fee(double amount) {
89         return __builtin_fmax(amount * 0.03, 10.0);
90     }
91   ...
93 For example, ``__has_constexpr_builtin`` is used in libcxx's implementation of
94 the ``<cmath>`` header file to conditionally make a function constexpr whenever
95 the constant evaluation of the corresponding builtin (for example,
96 ``std::fmax`` calls ``__builtin_fmax``) is supported in Clang.
98 .. _langext-__has_feature-__has_extension:
100 ``__has_feature`` and ``__has_extension``
101 -----------------------------------------
103 These function-like macros take a single identifier argument that is the name
104 of a feature.  ``__has_feature`` evaluates to 1 if the feature is both
105 supported by Clang and standardized in the current language standard or 0 if
106 not (but see :ref:`below <langext-has-feature-back-compat>`), while
107 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
108 current language (either as a language extension or a standard language
109 feature) or 0 if not.  They can be used like this:
111 .. code-block:: c++
113   #ifndef __has_feature         // Optional of course.
114     #define __has_feature(x) 0  // Compatibility with non-clang compilers.
115   #endif
116   #ifndef __has_extension
117     #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
118   #endif
120   ...
121   #if __has_feature(cxx_rvalue_references)
122   // This code will only be compiled with the -std=c++11 and -std=gnu++11
123   // options, because rvalue references are only standardized in C++11.
124   #endif
126   #if __has_extension(cxx_rvalue_references)
127   // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
128   // and -std=gnu++98 options, because rvalue references are supported as a
129   // language extension in C++98.
130   #endif
132 .. _langext-has-feature-back-compat:
134 For backward compatibility, ``__has_feature`` can also be used to test
135 for support for non-standardized features, i.e. features not prefixed ``c_``,
136 ``cxx_`` or ``objc_``.
138 Another use of ``__has_feature`` is to check for compiler features not related
139 to the language standard, such as e.g. :doc:`AddressSanitizer
140 <AddressSanitizer>`.
142 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
143 to ``__has_feature``.
145 The feature tag is described along with the language feature below.
147 The feature name or extension name can also be specified with a preceding and
148 following ``__`` (double underscore) to avoid interference from a macro with
149 the same name.  For instance, ``__cxx_rvalue_references__`` can be used instead
150 of ``cxx_rvalue_references``.
152 ``__has_cpp_attribute``
153 -----------------------
155 This function-like macro is available in C++20 by default, and is provided as an
156 extension in earlier language standards. It takes a single argument that is the
157 name of a double-square-bracket-style attribute. The argument can either be a
158 single identifier or a scoped identifier. If the attribute is supported, a
159 nonzero value is returned. If the attribute is a standards-based attribute, this
160 macro returns a nonzero value based on the year and month in which the attribute
161 was voted into the working draft. See `WG21 SD-6
162 <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
163 for the list of values returned for standards-based attributes. If the attribute
164 is not supported by the current compilation target, this macro evaluates to 0.
165 It can be used like this:
167 .. code-block:: c++
169   #ifndef __has_cpp_attribute         // For backwards compatibility
170     #define __has_cpp_attribute(x) 0
171   #endif
173   ...
174   #if __has_cpp_attribute(clang::fallthrough)
175   #define FALLTHROUGH [[clang::fallthrough]]
176   #else
177   #define FALLTHROUGH
178   #endif
179   ...
181 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
182 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
183 of these namespaces can be specified with a preceding and following ``__``
184 (double underscore) to avoid interference from a macro with the same name. For
185 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
187 ``__has_c_attribute``
188 ---------------------
190 This function-like macro takes a single argument that is the name of an
191 attribute exposed with the double square-bracket syntax in C mode. The argument
192 can either be a single identifier or a scoped identifier. If the attribute is
193 supported, a nonzero value is returned. If the attribute is not supported by the
194 current compilation target, this macro evaluates to 0. It can be used like this:
196 .. code-block:: c
198   #ifndef __has_c_attribute         // Optional of course.
199     #define __has_c_attribute(x) 0  // Compatibility with non-clang compilers.
200   #endif
202   ...
203   #if __has_c_attribute(fallthrough)
204     #define FALLTHROUGH [[fallthrough]]
205   #else
206     #define FALLTHROUGH
207   #endif
208   ...
210 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
211 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
212 of these namespaces can be specified with a preceding and following ``__``
213 (double underscore) to avoid interference from a macro with the same name. For
214 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
216 ``__has_attribute``
217 -------------------
219 This function-like macro takes a single identifier argument that is the name of
220 a GNU-style attribute.  It evaluates to 1 if the attribute is supported by the
221 current compilation target, or 0 if not.  It can be used like this:
223 .. code-block:: c++
225   #ifndef __has_attribute         // Optional of course.
226     #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
227   #endif
229   ...
230   #if __has_attribute(always_inline)
231   #define ALWAYS_INLINE __attribute__((always_inline))
232   #else
233   #define ALWAYS_INLINE
234   #endif
235   ...
237 The attribute name can also be specified with a preceding and following ``__``
238 (double underscore) to avoid interference from a macro with the same name.  For
239 instance, ``__always_inline__`` can be used instead of ``always_inline``.
242 ``__has_declspec_attribute``
243 ----------------------------
245 This function-like macro takes a single identifier argument that is the name of
246 an attribute implemented as a Microsoft-style ``__declspec`` attribute.  It
247 evaluates to 1 if the attribute is supported by the current compilation target,
248 or 0 if not.  It can be used like this:
250 .. code-block:: c++
252   #ifndef __has_declspec_attribute         // Optional of course.
253     #define __has_declspec_attribute(x) 0  // Compatibility with non-clang compilers.
254   #endif
256   ...
257   #if __has_declspec_attribute(dllexport)
258   #define DLLEXPORT __declspec(dllexport)
259   #else
260   #define DLLEXPORT
261   #endif
262   ...
264 The attribute name can also be specified with a preceding and following ``__``
265 (double underscore) to avoid interference from a macro with the same name.  For
266 instance, ``__dllexport__`` can be used instead of ``dllexport``.
268 ``__is_identifier``
269 -------------------
271 This function-like macro takes a single identifier argument that might be either
272 a reserved word or a regular identifier. It evaluates to 1 if the argument is just
273 a regular identifier and not a reserved word, in the sense that it can then be
274 used as the name of a user-defined function or variable. Otherwise it evaluates
275 to 0.  It can be used like this:
277 .. code-block:: c++
279   ...
280   #ifdef __is_identifier          // Compatibility with non-clang compilers.
281     #if __is_identifier(__wchar_t)
282       typedef wchar_t __wchar_t;
283     #endif
284   #endif
286   __wchar_t WideCharacter;
287   ...
289 Include File Checking Macros
290 ============================
292 Not all developments systems have the same include files.  The
293 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
294 you to check for the existence of an include file before doing a possibly
295 failing ``#include`` directive.  Include file checking macros must be used
296 as expressions in ``#if`` or ``#elif`` preprocessing directives.
298 .. _langext-__has_include:
300 ``__has_include``
301 -----------------
303 This function-like macro takes a single file name string argument that is the
304 name of an include file.  It evaluates to 1 if the file can be found using the
305 include paths, or 0 otherwise:
307 .. code-block:: c++
309   // Note the two possible file name string formats.
310   #if __has_include("myinclude.h") && __has_include(<stdint.h>)
311   # include "myinclude.h"
312   #endif
314 To test for this feature, use ``#if defined(__has_include)``:
316 .. code-block:: c++
318   // To avoid problem with non-clang compilers not having this macro.
319   #if defined(__has_include)
320   #if __has_include("myinclude.h")
321   # include "myinclude.h"
322   #endif
323   #endif
325 .. _langext-__has_include_next:
327 ``__has_include_next``
328 ----------------------
330 This function-like macro takes a single file name string argument that is the
331 name of an include file.  It is like ``__has_include`` except that it looks for
332 the second instance of the given file found in the include paths.  It evaluates
333 to 1 if the second instance of the file can be found using the include paths,
334 or 0 otherwise:
336 .. code-block:: c++
338   // Note the two possible file name string formats.
339   #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
340   # include_next "myinclude.h"
341   #endif
343   // To avoid problem with non-clang compilers not having this macro.
344   #if defined(__has_include_next)
345   #if __has_include_next("myinclude.h")
346   # include_next "myinclude.h"
347   #endif
348   #endif
350 Note that ``__has_include_next``, like the GNU extension ``#include_next``
351 directive, is intended for use in headers only, and will issue a warning if
352 used in the top-level compilation file.  A warning will also be issued if an
353 absolute path is used in the file argument.
355 ``__has_warning``
356 -----------------
358 This function-like macro takes a string literal that represents a command line
359 option for a warning and returns true if that is a valid warning option.
361 .. code-block:: c++
363   #if __has_warning("-Wformat")
364   ...
365   #endif
367 .. _languageextensions-builtin-macros:
369 Builtin Macros
370 ==============
372 ``__BASE_FILE__``
373   Defined to a string that contains the name of the main input file passed to
374   Clang.
376 ``__FILE_NAME__``
377   Clang-specific extension that functions similar to ``__FILE__`` but only
378   renders the last path component (the filename) instead of an invocation
379   dependent full path to that file.
381 ``__COUNTER__``
382   Defined to an integer value that starts at zero and is incremented each time
383   the ``__COUNTER__`` macro is expanded.
385 ``__INCLUDE_LEVEL__``
386   Defined to an integral value that is the include depth of the file currently
387   being translated.  For the main file, this value is zero.
389 ``__TIMESTAMP__``
390   Defined to the date and time of the last modification of the current source
391   file.
393 ``__clang__``
394   Defined when compiling with Clang
396 ``__clang_major__``
397   Defined to the major marketing version number of Clang (e.g., the 2 in
398   2.0.1).  Note that marketing version numbers should not be used to check for
399   language features, as different vendors use different numbering schemes.
400   Instead, use the :ref:`langext-feature_check`.
402 ``__clang_minor__``
403   Defined to the minor version number of Clang (e.g., the 0 in 2.0.1).  Note
404   that marketing version numbers should not be used to check for language
405   features, as different vendors use different numbering schemes.  Instead, use
406   the :ref:`langext-feature_check`.
408 ``__clang_patchlevel__``
409   Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
411 ``__clang_version__``
412   Defined to a string that captures the Clang marketing version, including the
413   Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
415 ``__clang_literal_encoding__``
416   Defined to a narrow string literal that represents the current encoding of
417   narrow string literals, e.g., ``"hello"``. This macro typically expands to
418   "UTF-8" (but may change in the future if the
419   ``-fexec-charset="Encoding-Name"`` option is implemented.)
421 ``__clang_wide_literal_encoding__``
422   Defined to a narrow string literal that represents the current encoding of
423   wide string literals, e.g., ``L"hello"``. This macro typically expands to
424   "UTF-16" or "UTF-32" (but may change in the future if the
425   ``-fwide-exec-charset="Encoding-Name"`` option is implemented.)
427 .. _langext-vectors:
429 Vectors and Extended Vectors
430 ============================
432 Supports the GCC, OpenCL, AltiVec, NEON and SVE vector extensions.
434 OpenCL vector types are created using the ``ext_vector_type`` attribute.  It
435 supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL.  An example
438 .. code-block:: c++
440   typedef float float4 __attribute__((ext_vector_type(4)));
441   typedef float float2 __attribute__((ext_vector_type(2)));
443   float4 foo(float2 a, float2 b) {
444     float4 c;
445     c.xz = a;
446     c.yw = b;
447     return c;
448   }
450 Query for this feature with ``__has_attribute(ext_vector_type)``.
452 Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
453 and functions.  For example:
455 .. code-block:: c++
457   vector float foo(vector int a) {
458     vector int b;
459     b = vec_add(a, a) + a;
460     return (vector float)b;
461   }
463 NEON vector types are created using ``neon_vector_type`` and
464 ``neon_polyvector_type`` attributes.  For example:
466 .. code-block:: c++
468   typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
469   typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
471   int8x8_t foo(int8x8_t a) {
472     int8x8_t v;
473     v = a;
474     return v;
475   }
477 GCC vector types are created using the ``vector_size(N)`` attribute.  The
478 argument ``N`` specifies the number of bytes that will be allocated for an
479 object of this type.  The size has to be multiple of the size of the vector
480 element type. For example:
482 .. code-block:: c++
484   // OK: This declares a vector type with four 'int' elements
485   typedef int int4 __attribute__((vector_size(4 * sizeof(int))));
487   // ERROR: '11' is not a multiple of sizeof(int)
488   typedef int int_impossible __attribute__((vector_size(11)));
490   int4 foo(int4 a) {
491     int4 v;
492     v = a;
493     return v;
494   }
497 Boolean Vectors
498 ---------------
500 Clang also supports the ext_vector_type attribute with boolean element types in
501 C and C++.  For example:
503 .. code-block:: c++
505   // legal for Clang, error for GCC:
506   typedef bool bool4 __attribute__((ext_vector_type(4)));
507   // Objects of bool4 type hold 8 bits, sizeof(bool4) == 1
509   bool4 foo(bool4 a) {
510     bool4 v;
511     v = a;
512     return v;
513   }
515 Boolean vectors are a Clang extension of the ext vector type.  Boolean vectors
516 are intended, though not guaranteed, to map to vector mask registers.  The size
517 parameter of a boolean vector type is the number of bits in the vector.  The
518 boolean vector is dense and each bit in the boolean vector is one vector
519 element.
521 The semantics of boolean vectors borrows from C bit-fields with the following
522 differences:
524 * Distinct boolean vectors are always distinct memory objects (there is no
525   packing).
526 * Only the operators `?:`, `!`, `~`, `|`, `&`, `^` and comparison are allowed on
527   boolean vectors.
528 * Casting a scalar bool value to a boolean vector type means broadcasting the
529   scalar value onto all lanes (same as general ext_vector_type).
530 * It is not possible to access or swizzle elements of a boolean vector
531   (different than general ext_vector_type).
533 The size and alignment are both the number of bits rounded up to the next power
534 of two, but the alignment is at most the maximum vector alignment of the
535 target.
538 Vector Literals
539 ---------------
541 Vector literals can be used to create vectors from a set of scalars, or
542 vectors.  Either parentheses or braces form can be used.  In the parentheses
543 form the number of literal values specified must be one, i.e. referring to a
544 scalar value, or must match the size of the vector type being created.  If a
545 single scalar literal value is specified, the scalar literal value will be
546 replicated to all the components of the vector type.  In the brackets form any
547 number of literals can be specified.  For example:
549 .. code-block:: c++
551   typedef int v4si __attribute__((__vector_size__(16)));
552   typedef float float4 __attribute__((ext_vector_type(4)));
553   typedef float float2 __attribute__((ext_vector_type(2)));
555   v4si vsi = (v4si){1, 2, 3, 4};
556   float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
557   vector int vi1 = (vector int)(1);    // vi1 will be (1, 1, 1, 1).
558   vector int vi2 = (vector int){1};    // vi2 will be (1, 0, 0, 0).
559   vector int vi3 = (vector int)(1, 2); // error
560   vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
561   vector int vi5 = (vector int)(1, 2, 3, 4);
562   float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
564 Vector Operations
565 -----------------
567 The table below shows the support for each operation by vector extension.  A
568 dash indicates that an operation is not accepted according to a corresponding
569 specification.
571 ============================== ======= ======= ============= ======= =====
572          Operator              OpenCL  AltiVec     GCC        NEON    SVE
573 ============================== ======= ======= ============= ======= =====
574 []                               yes     yes       yes         yes    yes
575 unary operators +, --            yes     yes       yes         yes    yes
576 ++, -- --                        yes     yes       yes         no     no
577 +,--,*,/,%                       yes     yes       yes         yes    yes
578 bitwise operators &,|,^,~        yes     yes       yes         yes    yes
579 >>,<<                            yes     yes       yes         yes    yes
580 !, &&, ||                        yes     --        yes         yes    yes
581 ==, !=, >, <, >=, <=             yes     yes       yes         yes    yes
582 =                                yes     yes       yes         yes    yes
583 ?: [#]_                          yes     --        yes         yes    yes
584 sizeof                           yes     yes       yes         yes    yes [#]_
585 C-style cast                     yes     yes       yes         no     no
586 reinterpret_cast                 yes     no        yes         no     no
587 static_cast                      yes     no        yes         no     no
588 const_cast                       no      no        no          no     no
589 address &v[i]                    no      no        no [#]_     no     no
590 ============================== ======= ======= ============= ======= =====
592 See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
594 .. [#] ternary operator(?:) has different behaviors depending on condition
595   operand's vector type. If the condition is a GNU vector (i.e. __vector_size__),
596   a NEON vector or an SVE vector, it's only available in C++ and uses normal bool
597   conversions (that is, != 0).
598   If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
599   And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
600 .. [#] sizeof can only be used on vector length specific SVE types.
601 .. [#] Clang does not allow the address of an element to be taken while GCC
602    allows this. This is intentional for vectors with a boolean element type and
603    not implemented otherwise.
605 Vector Builtins
606 ---------------
608 **Note: The implementation of vector builtins is work-in-progress and incomplete.**
610 In addition to the operators mentioned above, Clang provides a set of builtins
611 to perform additional operations on certain scalar and vector types.
613 Let ``T`` be one of the following types:
615 * an integer type (as in C23 6.2.5p22), but excluding enumerated types and ``bool``
616 * the standard floating types float or double
617 * a half-precision floating point type, if one is supported on the target
618 * a vector type.
620 For scalar types, consider the operation applied to a vector with a single element.
622 *Vector Size*
623 To determine the number of elements in a vector, use ``__builtin_vectorelements()``.
624 For fixed-sized vectors, e.g., defined via ``__attribute__((vector_size(N)))`` or ARM
625 NEON's vector types (e.g., ``uint16x8_t``), this returns the constant number of
626 elements at compile-time. For scalable vectors, e.g., SVE or RISC-V V, the number of
627 elements is not known at compile-time and is determined at runtime. This builtin can
628 be used, e.g., to increment the loop-counter in vector-type agnostic loops.
630 *Elementwise Builtins*
632 Each builtin returns a vector equivalent to applying the specified operation
633 elementwise to the input.
635 Unless specified otherwise operation(±0) = Â±0 and operation(±infinity) = Â±infinity
637 =========================================== ================================================================ =========================================
638          Name                                Operation                                                        Supported element types
639 =========================================== ================================================================ =========================================
640  T __builtin_elementwise_abs(T x)            return the absolute value of a number x; the absolute value of   signed integer and floating point types
641                                              the most negative integer remains the most negative integer
642  T __builtin_elementwise_fma(T x, T y, T z)  fused multiply add, (x * y) +  z.                                floating point types
643  T __builtin_elementwise_ceil(T x)           return the smallest integral value greater than or equal to x    floating point types
644  T __builtin_elementwise_sin(T x)            return the sine of x interpreted as an angle in radians          floating point types
645  T __builtin_elementwise_cos(T x)            return the cosine of x interpreted as an angle in radians        floating point types
646  T __builtin_elementwise_floor(T x)          return the largest integral value less than or equal to x        floating point types
647  T __builtin_elementwise_log(T x)            return the natural logarithm of x                                floating point types
648  T __builtin_elementwise_log2(T x)           return the base 2 logarithm of x                                 floating point types
649  T __builtin_elementwise_log10(T x)          return the base 10 logarithm of x                                floating point types
650  T __builtin_elementwise_pow(T x, T y)       return x raised to the power of y                                floating point types
651  T __builtin_elementwise_bitreverse(T x)     return the integer represented after reversing the bits of x     integer types
652  T __builtin_elementwise_exp(T x)            returns the base-e exponential, e^x, of the specified value      floating point types
653  T __builtin_elementwise_exp2(T x)           returns the base-2 exponential, 2^x, of the specified value      floating point types
655  T __builtin_elementwise_sqrt(T x)           return the square root of a floating-point number                floating point types
656  T __builtin_elementwise_roundeven(T x)      round x to the nearest integer value in floating point format,   floating point types
657                                              rounding halfway cases to even (that is, to the nearest value
658                                              that is an even integer), regardless of the current rounding
659                                              direction.
660  T __builtin_elementwise_round(T x)          round x to the nearest  integer value in floating point format,      floating point types
661                                              rounding halfway cases away from zero, regardless of the
662                                              current rounding direction. May raise floating-point
663                                              exceptions.
664  T __builtin_elementwise_trunc(T x)          return the integral value nearest to but no larger in            floating point types
665                                              magnitude than x
667   T __builtin_elementwise_nearbyint(T x)     round x to the nearest  integer value in floating point format,      floating point types
668                                              rounding according to the current rounding direction.
669                                              May not raise the inexact floating-point exception. This is
670                                              treated the same as ``__builtin_elementwise_rint`` unless
671                                              :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
673  T __builtin_elementwise_rint(T x)           round x to the nearest  integer value in floating point format,      floating point types
674                                              rounding according to the current rounding
675                                              direction. May raise floating-point exceptions. This is treated
676                                              the same as ``__builtin_elementwise_nearbyint`` unless
677                                              :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
679  T __builtin_elementwise_canonicalize(T x)   return the platform specific canonical encoding                  floating point types
680                                              of a floating-point number
681  T __builtin_elementwise_copysign(T x, T y)  return the magnitude of x with the sign of y.                    floating point types
682  T __builtin_elementwise_max(T x, T y)       return x or y, whichever is larger                               integer and floating point types
683  T __builtin_elementwise_min(T x, T y)       return x or y, whichever is smaller                              integer and floating point types
684  T __builtin_elementwise_add_sat(T x, T y)   return the sum of x and y, clamped to the range of               integer types
685                                              representable values for the signed/unsigned integer type.
686  T __builtin_elementwise_sub_sat(T x, T y)   return the difference of x and y, clamped to the range of        integer types
687                                              representable values for the signed/unsigned integer type.
688 =========================================== ================================================================ =========================================
691 *Reduction Builtins*
693 Each builtin returns a scalar equivalent to applying the specified
694 operation(x, y) as recursive even-odd pairwise reduction to all vector
695 elements. ``operation(x, y)`` is repeatedly applied to each non-overlapping
696 even-odd element pair with indices ``i * 2`` and ``i * 2 + 1`` with
697 ``i in [0, Number of elements / 2)``. If the numbers of elements is not a
698 power of 2, the vector is widened with neutral elements for the reduction
699 at the end to the next power of 2.
701 Example:
703 .. code-block:: c++
705     __builtin_reduce_add([e3, e2, e1, e0]) = __builtin_reduced_add([e3 + e2, e1 + e0])
706                                            = (e3 + e2) + (e1 + e0)
709 Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
711 ======================================= ================================================================ ==================================
712          Name                            Operation                                                        Supported element types
713 ======================================= ================================================================ ==================================
714  ET __builtin_reduce_max(VT a)           return x or y, whichever is larger; If exactly one argument is   integer and floating point types
715                                          a NaN, return the other argument. If both arguments are NaNs,
716                                          fmax() return a NaN.
717  ET __builtin_reduce_min(VT a)           return x or y, whichever is smaller; If exactly one argument     integer and floating point types
718                                          is a NaN, return the other argument. If both arguments are
719                                          NaNs, fmax() return a NaN.
720  ET __builtin_reduce_add(VT a)           \+                                                               integer types
721  ET __builtin_reduce_mul(VT a)           \*                                                               integer types
722  ET __builtin_reduce_and(VT a)           &                                                                integer types
723  ET __builtin_reduce_or(VT a)            \|                                                               integer types
724  ET __builtin_reduce_xor(VT a)           ^                                                                integer types
725 ======================================= ================================================================ ==================================
727 Matrix Types
728 ============
730 Clang provides an extension for matrix types, which is currently being
731 implemented. See :ref:`the draft specification <matrixtypes>` for more details.
733 For example, the code below uses the matrix types extension to multiply two 4x4
734 float matrices and add the result to a third 4x4 matrix.
736 .. code-block:: c++
738   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
740   m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
741     return a + b * c;
742   }
744 The matrix type extension also supports operations on a matrix and a scalar.
746 .. code-block:: c++
748   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
750   m4x4_t f(m4x4_t a) {
751     return (a + 23) * 12;
752   }
754 The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
756 .. code-block:: c++
758   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
760   m4x4_t f(m4x4_t a) {
761     a = a / 3.0;
762     return a;
763   }
765 The matrix type extension supports compound assignments for addition, subtraction, and multiplication on matrices
766 and on a matrix and a scalar, provided their types are consistent.
768 .. code-block:: c++
770   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
772   m4x4_t f(m4x4_t a, m4x4_t b) {
773     a += b;
774     a -= b;
775     a *= b;
776     a += 23;
777     a -= 12;
778     return a;
779   }
781 The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
783 .. code-block:: c++
785   typedef int ix5x5 __attribute__((matrix_type(5, 5)));
786   typedef float fx5x5 __attribute__((matrix_type(5, 5)));
788   fx5x5 f1(ix5x5 i, fx5x5 f) {
789     return (fx5x5) i;
790   }
793   template <typename X>
794   using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
796   void f2() {
797     matrix_5_5<double> d;
798     matrix_5_5<int> i;
799     i = (matrix_5_5<int>)d;
800     i = static_cast<matrix_5_5<int>>(d);
801   }
803 Half-Precision Floating Point
804 =============================
806 Clang supports three half-precision (16-bit) floating point types:
807 ``__fp16``, ``_Float16`` and ``__bf16``. These types are supported
808 in all language modes, but their support differs between targets.
809 A target is said to have "native support" for a type if the target
810 processor offers instructions for directly performing basic arithmetic
811 on that type.  In the absence of native support, a type can still be
812 supported if the compiler can emulate arithmetic on the type by promoting
813 to ``float``; see below for more information on this emulation.
815 * ``__fp16`` is supported on all targets. The special semantics of this
816   type mean that no arithmetic is ever performed directly on ``__fp16`` values;
817   see below.
819 * ``_Float16`` is supported on the following targets:
820   * 32-bit ARM (natively on some architecture versions)
821   * 64-bit ARM (AArch64) (natively on ARMv8.2a and above)
822   * AMDGPU (natively)
823   * SPIR (natively)
824   * X86 (if SSE2 is available; natively if AVX512-FP16 is also available)
825   * RISC-V (natively if Zfh or Zhinx is available)
827 * ``__bf16`` is supported on the following targets (currently never natively):
828   * 32-bit ARM
829   * 64-bit ARM (AArch64)
830   * RISC-V
831   * X86 (when SSE2 is available)
833 (For X86, SSE2 is available on 64-bit and all recent 32-bit processors.)
835 ``__fp16`` and ``_Float16`` both use the binary16 format from IEEE
836 754-2008, which provides a 5-bit exponent and an 11-bit significand
837 (counting the implicit leading 1). ``__bf16`` uses the `bfloat16
838 <https://en.wikipedia.org/wiki/Bfloat16_floating-point_format>`_ format,
839 which provides an 8-bit exponent and an 8-bit significand; this is the same
840 exponent range as `float`, just with greatly reduced precision.
842 ``_Float16`` and ``__bf16`` follow the usual rules for arithmetic
843 floating-point types. Most importantly, this means that arithmetic operations
844 on operands of these types are formally performed in the type and produce
845 values of the type. ``__fp16`` does not follow those rules: most operations
846 immediately promote operands of type ``__fp16`` to ``float``, and so
847 arithmetic operations are defined to be performed in ``float`` and so result in
848 a value of type ``float`` (unless further promoted because of other operands).
849 See below for more information on the exact specifications of these types.
851 When compiling arithmetic on ``_Float16`` and ``__bf16`` for a target without
852 native support, Clang will perform the arithmetic in ``float``, inserting
853 extensions and truncations as necessary. This can be done in a way that
854 exactly matches the operation-by-operation behavior of native support,
855 but that can require many extra truncations and extensions. By default,
856 when emulating ``_Float16`` and ``__bf16`` arithmetic using ``float``, Clang
857 does not truncate intermediate operands back to their true type unless the
858 operand is the result of an explicit cast or assignment. This is generally
859 much faster but can generate different results from strict operation-by-operation
860 emulation. Usually the results are more precise. This is permitted by the
861 C and C++ standards under the rules for excess precision in intermediate operands;
862 see the discussion of evaluation formats in the C standard and [expr.pre] in
863 the C++ standard.
865 The use of excess precision can be independently controlled for these two
866 types with the ``-ffloat16-excess-precision=`` and
867 ``-fbfloat16-excess-precision=`` options. Valid values include:
869 * ``none``: meaning to perform strict operation-by-operation emulation
870 * ``standard``: meaning that excess precision is permitted under the rules
871   described in the standard, i.e. never across explicit casts or statements
872 * ``fast``: meaning that excess precision is permitted whenever the
873   optimizer sees an opportunity to avoid truncations; currently this has no
874   effect beyond ``standard``
876 The ``_Float16`` type is an interchange floating type specified in
877 ISO/IEC TS 18661-3:2015 ("Floating-point extensions for C"). It will
878 be supported on more targets as they define ABIs for it.
880 The ``__bf16`` type is a non-standard extension, but it generally follows
881 the rules for arithmetic interchange floating types from ISO/IEC TS
882 18661-3:2015. In previous versions of Clang, it was a storage-only type
883 that forbade arithmetic operations. It will be supported on more targets
884 as they define ABIs for it.
886 The ``__fp16`` type was originally an ARM extension and is specified
887 by the `ARM C Language Extensions <https://github.com/ARM-software/acle/releases>`_.
888 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``,
889 not the ARM alternative format. Operators that expect arithmetic operands
890 immediately promote ``__fp16`` operands to ``float``.
892 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
893 as it has been defined by the C standards committee and has behavior that is
894 more familiar to most programmers.
896 Because ``__fp16`` operands are always immediately promoted to ``float``, the
897 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
898 arithmetic conversions is ``float``.
900 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
901 ``3.14f16``.
903 Because default argument promotion only applies to the standard floating-point
904 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
905 or untyped arguments. As a consequence, some caution must be taken when using
906 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
907 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
908 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
909 ``double`` before using it with an ``%f`` or similar specifier.
911 Messages on ``deprecated`` and ``unavailable`` Attributes
912 =========================================================
914 An optional string message can be added to the ``deprecated`` and
915 ``unavailable`` attributes.  For example:
917 .. code-block:: c++
919   void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
921 If the deprecated or unavailable declaration is used, the message will be
922 incorporated into the appropriate diagnostic:
924 .. code-block:: none
926   harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
927         [-Wdeprecated-declarations]
928     explode();
929     ^
931 Query for this feature with
932 ``__has_extension(attribute_deprecated_with_message)`` and
933 ``__has_extension(attribute_unavailable_with_message)``.
935 Attributes on Enumerators
936 =========================
938 Clang allows attributes to be written on individual enumerators.  This allows
939 enumerators to be deprecated, made unavailable, etc.  The attribute must appear
940 after the enumerator name and before any initializer, like so:
942 .. code-block:: c++
944   enum OperationMode {
945     OM_Invalid,
946     OM_Normal,
947     OM_Terrified __attribute__((deprecated)),
948     OM_AbortOnError __attribute__((deprecated)) = 4
949   };
951 Attributes on the ``enum`` declaration do not apply to individual enumerators.
953 Query for this feature with ``__has_extension(enumerator_attributes)``.
955 C++11 Attributes on using-declarations
956 ======================================
958 Clang allows C++-style ``[[]]`` attributes to be written on using-declarations.
959 For instance:
961 .. code-block:: c++
963   [[clang::using_if_exists]] using foo::bar;
964   using foo::baz [[clang::using_if_exists]];
966 You can test for support for this extension with
967 ``__has_extension(cxx_attributes_on_using_declarations)``.
969 'User-Specified' System Frameworks
970 ==================================
972 Clang provides a mechanism by which frameworks can be built in such a way that
973 they will always be treated as being "system frameworks", even if they are not
974 present in a system framework directory.  This can be useful to system
975 framework developers who want to be able to test building other applications
976 with development builds of their framework, including the manner in which the
977 compiler changes warning behavior for system headers.
979 Framework developers can opt-in to this mechanism by creating a
980 "``.system_framework``" file at the top-level of their framework.  That is, the
981 framework should have contents like:
983 .. code-block:: none
985   .../TestFramework.framework
986   .../TestFramework.framework/.system_framework
987   .../TestFramework.framework/Headers
988   .../TestFramework.framework/Headers/TestFramework.h
989   ...
991 Clang will treat the presence of this file as an indicator that the framework
992 should be treated as a system framework, regardless of how it was found in the
993 framework search path.  For consistency, we recommend that such files never be
994 included in installed versions of the framework.
996 Checks for Standard Language Features
997 =====================================
999 The ``__has_feature`` macro can be used to query if certain standard language
1000 features are enabled.  The ``__has_extension`` macro can be used to query if
1001 language features are available as an extension when compiling for a standard
1002 which does not provide them.  The features which can be tested are listed here.
1004 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
1005 These are macros with names of the form ``__cpp_<feature_name>``, and are
1006 intended to be a portable way to query the supported features of the compiler.
1007 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
1008 information on the version of SD-6 supported by each Clang release, and the
1009 macros provided by that revision of the recommendations.
1011 C++98
1012 -----
1014 The features listed below are part of the C++98 standard.  These features are
1015 enabled by default when compiling C++ code.
1017 C++ exceptions
1018 ^^^^^^^^^^^^^^
1020 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
1021 enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
1022 exceptions.
1024 C++ RTTI
1025 ^^^^^^^^
1027 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
1028 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
1030 C++11
1031 -----
1033 The features listed below are part of the C++11 standard.  As a result, all
1034 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
1035 when compiling C++ code.
1037 C++11 SFINAE includes access control
1038 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1040 Use ``__has_feature(cxx_access_control_sfinae)`` or
1041 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
1042 access-control errors (e.g., calling a private constructor) are considered to
1043 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
1044 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
1046 C++11 alias templates
1047 ^^^^^^^^^^^^^^^^^^^^^
1049 Use ``__has_feature(cxx_alias_templates)`` or
1050 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
1051 alias declarations and alias templates is enabled.
1053 C++11 alignment specifiers
1054 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1056 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
1057 determine if support for alignment specifiers using ``alignas`` is enabled.
1059 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
1060 determine if support for the ``alignof`` keyword is enabled.
1062 C++11 attributes
1063 ^^^^^^^^^^^^^^^^
1065 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
1066 determine if support for attribute parsing with C++11's square bracket notation
1067 is enabled.
1069 C++11 generalized constant expressions
1070 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1072 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
1073 constant expressions (e.g., ``constexpr``) is enabled.
1075 C++11 ``decltype()``
1076 ^^^^^^^^^^^^^^^^^^^^
1078 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
1079 determine if support for the ``decltype()`` specifier is enabled.  C++11's
1080 ``decltype`` does not require type-completeness of a function call expression.
1081 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
1082 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
1083 support for this feature is enabled.
1085 C++11 default template arguments in function templates
1086 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1088 Use ``__has_feature(cxx_default_function_template_args)`` or
1089 ``__has_extension(cxx_default_function_template_args)`` to determine if support
1090 for default template arguments in function templates is enabled.
1092 C++11 ``default``\ ed functions
1093 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1095 Use ``__has_feature(cxx_defaulted_functions)`` or
1096 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
1097 defaulted function definitions (with ``= default``) is enabled.
1099 C++11 delegating constructors
1100 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1102 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
1103 delegating constructors is enabled.
1105 C++11 ``deleted`` functions
1106 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1108 Use ``__has_feature(cxx_deleted_functions)`` or
1109 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
1110 function definitions (with ``= delete``) is enabled.
1112 C++11 explicit conversion functions
1113 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1115 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
1116 ``explicit`` conversion functions is enabled.
1118 C++11 generalized initializers
1119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1121 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
1122 generalized initializers (using braced lists and ``std::initializer_list``) is
1123 enabled.
1125 C++11 implicit move constructors/assignment operators
1126 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1128 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
1129 generate move constructors and move assignment operators where needed.
1131 C++11 inheriting constructors
1132 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1134 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
1135 inheriting constructors is enabled.
1137 C++11 inline namespaces
1138 ^^^^^^^^^^^^^^^^^^^^^^^
1140 Use ``__has_feature(cxx_inline_namespaces)`` or
1141 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
1142 namespaces is enabled.
1144 C++11 lambdas
1145 ^^^^^^^^^^^^^
1147 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
1148 determine if support for lambdas is enabled.
1150 C++11 local and unnamed types as template arguments
1151 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1153 Use ``__has_feature(cxx_local_type_template_args)`` or
1154 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
1155 local and unnamed types as template arguments is enabled.
1157 C++11 noexcept
1158 ^^^^^^^^^^^^^^
1160 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
1161 determine if support for noexcept exception specifications is enabled.
1163 C++11 in-class non-static data member initialization
1164 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1166 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
1167 initialization of non-static data members is enabled.
1169 C++11 ``nullptr``
1170 ^^^^^^^^^^^^^^^^^
1172 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
1173 determine if support for ``nullptr`` is enabled.
1175 C++11 ``override control``
1176 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1178 Use ``__has_feature(cxx_override_control)`` or
1179 ``__has_extension(cxx_override_control)`` to determine if support for the
1180 override control keywords is enabled.
1182 C++11 reference-qualified functions
1183 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1185 Use ``__has_feature(cxx_reference_qualified_functions)`` or
1186 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
1187 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
1188 applied to ``*this``) is enabled.
1190 C++11 range-based ``for`` loop
1191 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1193 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
1194 determine if support for the range-based for loop is enabled.
1196 C++11 raw string literals
1197 ^^^^^^^^^^^^^^^^^^^^^^^^^
1199 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
1200 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
1202 C++11 rvalue references
1203 ^^^^^^^^^^^^^^^^^^^^^^^
1205 Use ``__has_feature(cxx_rvalue_references)`` or
1206 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
1207 references is enabled.
1209 C++11 ``static_assert()``
1210 ^^^^^^^^^^^^^^^^^^^^^^^^^
1212 Use ``__has_feature(cxx_static_assert)`` or
1213 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
1214 assertions using ``static_assert`` is enabled.
1216 C++11 ``thread_local``
1217 ^^^^^^^^^^^^^^^^^^^^^^
1219 Use ``__has_feature(cxx_thread_local)`` to determine if support for
1220 ``thread_local`` variables is enabled.
1222 C++11 type inference
1223 ^^^^^^^^^^^^^^^^^^^^
1225 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
1226 determine C++11 type inference is supported using the ``auto`` specifier.  If
1227 this is disabled, ``auto`` will instead be a storage class specifier, as in C
1228 or C++98.
1230 C++11 strongly typed enumerations
1231 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1233 Use ``__has_feature(cxx_strong_enums)`` or
1234 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
1235 typed, scoped enumerations is enabled.
1237 C++11 trailing return type
1238 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1240 Use ``__has_feature(cxx_trailing_return)`` or
1241 ``__has_extension(cxx_trailing_return)`` to determine if support for the
1242 alternate function declaration syntax with trailing return type is enabled.
1244 C++11 Unicode string literals
1245 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1247 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
1248 string literals is enabled.
1250 C++11 unrestricted unions
1251 ^^^^^^^^^^^^^^^^^^^^^^^^^
1253 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
1254 unrestricted unions is enabled.
1256 C++11 user-defined literals
1257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1259 Use ``__has_feature(cxx_user_literals)`` to determine if support for
1260 user-defined literals is enabled.
1262 C++11 variadic templates
1263 ^^^^^^^^^^^^^^^^^^^^^^^^
1265 Use ``__has_feature(cxx_variadic_templates)`` or
1266 ``__has_extension(cxx_variadic_templates)`` to determine if support for
1267 variadic templates is enabled.
1269 C++14
1270 -----
1272 The features listed below are part of the C++14 standard.  As a result, all
1273 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
1274 when compiling C++ code.
1276 C++14 binary literals
1277 ^^^^^^^^^^^^^^^^^^^^^
1279 Use ``__has_feature(cxx_binary_literals)`` or
1280 ``__has_extension(cxx_binary_literals)`` to determine whether
1281 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
1282 feature as an extension in all language modes.
1284 C++14 contextual conversions
1285 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1287 Use ``__has_feature(cxx_contextual_conversions)`` or
1288 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
1289 are used when performing an implicit conversion for an array bound in a
1290 *new-expression*, the operand of a *delete-expression*, an integral constant
1291 expression, or a condition in a ``switch`` statement.
1293 C++14 decltype(auto)
1294 ^^^^^^^^^^^^^^^^^^^^
1296 Use ``__has_feature(cxx_decltype_auto)`` or
1297 ``__has_extension(cxx_decltype_auto)`` to determine if support
1298 for the ``decltype(auto)`` placeholder type is enabled.
1300 C++14 default initializers for aggregates
1301 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1303 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
1304 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
1305 for default initializers in aggregate members is enabled.
1307 C++14 digit separators
1308 ^^^^^^^^^^^^^^^^^^^^^^
1310 Use ``__cpp_digit_separators`` to determine if support for digit separators
1311 using single quotes (for instance, ``10'000``) is enabled. At this time, there
1312 is no corresponding ``__has_feature`` name
1314 C++14 generalized lambda capture
1315 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1317 Use ``__has_feature(cxx_init_captures)`` or
1318 ``__has_extension(cxx_init_captures)`` to determine if support for
1319 lambda captures with explicit initializers is enabled
1320 (for instance, ``[n(0)] { return ++n; }``).
1322 C++14 generic lambdas
1323 ^^^^^^^^^^^^^^^^^^^^^
1325 Use ``__has_feature(cxx_generic_lambdas)`` or
1326 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
1327 (polymorphic) lambdas is enabled
1328 (for instance, ``[] (auto x) { return x + 1; }``).
1330 C++14 relaxed constexpr
1331 ^^^^^^^^^^^^^^^^^^^^^^^
1333 Use ``__has_feature(cxx_relaxed_constexpr)`` or
1334 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
1335 declarations, local variable modification, and control flow constructs
1336 are permitted in ``constexpr`` functions.
1338 C++14 return type deduction
1339 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1341 Use ``__has_feature(cxx_return_type_deduction)`` or
1342 ``__has_extension(cxx_return_type_deduction)`` to determine if support
1343 for return type deduction for functions (using ``auto`` as a return type)
1344 is enabled.
1346 C++14 runtime-sized arrays
1347 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1349 Use ``__has_feature(cxx_runtime_array)`` or
1350 ``__has_extension(cxx_runtime_array)`` to determine if support
1351 for arrays of runtime bound (a restricted form of variable-length arrays)
1352 is enabled.
1353 Clang's implementation of this feature is incomplete.
1355 C++14 variable templates
1356 ^^^^^^^^^^^^^^^^^^^^^^^^
1358 Use ``__has_feature(cxx_variable_templates)`` or
1359 ``__has_extension(cxx_variable_templates)`` to determine if support for
1360 templated variable declarations is enabled.
1365 The features listed below are part of the C11 standard.  As a result, all these
1366 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
1367 compiling C code.  Additionally, because these features are all
1368 backward-compatible, they are available as extensions in all language modes.
1370 C11 alignment specifiers
1371 ^^^^^^^^^^^^^^^^^^^^^^^^
1373 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1374 if support for alignment specifiers using ``_Alignas`` is enabled.
1376 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1377 if support for the ``_Alignof`` keyword is enabled.
1379 C11 atomic operations
1380 ^^^^^^^^^^^^^^^^^^^^^
1382 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1383 if support for atomic types using ``_Atomic`` is enabled.  Clang also provides
1384 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
1385 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1386 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1387 is available.
1389 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1390 will otherwise use its own. When using its own, implementations of the atomic
1391 operations are provided as macros. In the cases where C11 also requires a real
1392 function, this header provides only the declaration of that function (along
1393 with a shadowing macro implementation), and you must link to a library which
1394 provides a definition of the function if you use it instead of the macro.
1396 C11 generic selections
1397 ^^^^^^^^^^^^^^^^^^^^^^
1399 Use ``__has_feature(c_generic_selections)`` or
1400 ``__has_extension(c_generic_selections)`` to determine if support for generic
1401 selections is enabled.
1403 As an extension, the C11 generic selection expression is available in all
1404 languages supported by Clang.  The syntax is the same as that given in the C11
1405 standard.
1407 In C, type compatibility is decided according to the rules given in the
1408 appropriate standard, but in C++, which lacks the type compatibility rules used
1409 in C, types are considered compatible only if they are equivalent.
1411 Clang also supports an extended form of ``_Generic`` with a controlling type
1412 rather than a controlling expression. Unlike with a controlling expression, a
1413 controlling type argument does not undergo any conversions and thus is suitable
1414 for use when trying to match qualified types, incomplete types, or function
1415 types. Variable-length array types lack the necessary compile-time information
1416 to resolve which association they match with and thus are not allowed as a
1417 controlling type argument.
1419 Use ``__has_extension(c_generic_selection_with_controlling_type)`` to determine
1420 if support for this extension is enabled.
1422 C11 ``_Static_assert()``
1423 ^^^^^^^^^^^^^^^^^^^^^^^^
1425 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1426 to determine if support for compile-time assertions using ``_Static_assert`` is
1427 enabled.
1429 C11 ``_Thread_local``
1430 ^^^^^^^^^^^^^^^^^^^^^
1432 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1433 to determine if support for ``_Thread_local`` variables is enabled.
1435 Modules
1436 -------
1438 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1439 For example, compiling code with ``-fmodules`` enables the use of Modules.
1441 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1443 Language Extensions Back-ported to Previous Standards
1444 =====================================================
1446 ====================================== ================================ ============= =============
1447 Feature                                Feature Test Macro               Introduced In Backported To
1448 ====================================== ================================ ============= =============
1449 variadic templates                     __cpp_variadic_templates         C++11         C++03
1450 Alias templates                        __cpp_alias_templates            C++11         C++03
1451 Non-static data member initializers    __cpp_nsdmi                      C++11         C++03
1452 Range-based ``for`` loop               __cpp_range_based_for            C++11         C++03
1453 RValue references                      __cpp_rvalue_references          C++11         C++03
1454 Attributes                             __cpp_attributes                 C++11         C++03
1455 variable templates                     __cpp_variable_templates         C++14         C++03
1456 Binary literals                        __cpp_binary_literals            C++14         C++03
1457 Relaxed constexpr                      __cpp_constexpr                  C++14         C++11
1458 ``if constexpr``                       __cpp_if_constexpr               C++17         C++11
1459 fold expressions                       __cpp_fold_expressions           C++17         C++03
1460 Lambda capture of \*this by value      __cpp_capture_star_this          C++17         C++11
1461 Attributes on enums                    __cpp_enumerator_attributes      C++17         C++11
1462 Guaranteed copy elision                __cpp_guaranteed_copy_elision    C++17         C++03
1463 Hexadecimal floating literals          __cpp_hex_float                  C++17         C++03
1464 ``inline`` variables                   __cpp_inline_variables           C++17         C++03
1465 Attributes on namespaces               __cpp_namespace_attributes       C++17         C++11
1466 Structured bindings                    __cpp_structured_bindings        C++17         C++03
1467 template template arguments            __cpp_template_template_args     C++17         C++03
1468 ``static operator[]``                  __cpp_multidimensional_subscript C++20         C++03
1469 Designated initializers                __cpp_designated_initializers    C++20         C++03
1470 Conditional ``explicit``               __cpp_conditional_explicit       C++20         C++03
1471 ``using enum``                         __cpp_using_enum                 C++20         C++03
1472 ``if consteval``                       __cpp_if_consteval               C++23         C++20
1473 ``static operator()``                  __cpp_static_call_operator       C++23         C++03
1474 -------------------------------------- -------------------------------- ------------- -------------
1475 Designated initializers (N494)                                          C99           C89
1476 Array & element qualification (N2607)                                   C23           C89
1477 Attributes (N2335)                                                      C23           C89
1478 ====================================== ================================ ============= =============
1480 Type Trait Primitives
1481 =====================
1483 Type trait primitives are special builtin constant expressions that can be used
1484 by the standard C++ library to facilitate or simplify the implementation of
1485 user-facing type traits in the <type_traits> header.
1487 They are not intended to be used directly by user code because they are
1488 implementation-defined and subject to change -- as such they're tied closely to
1489 the supported set of system headers, currently:
1491 * LLVM's own libc++
1492 * GNU libstdc++
1493 * The Microsoft standard C++ library
1495 Clang supports the `GNU C++ type traits
1496 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1497 `Microsoft Visual C++ type traits
1498 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1499 as well as nearly all of the
1500 `Embarcadero C++ type traits
1501 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
1503 The following type trait primitives are supported by Clang. Those traits marked
1504 (C++) provide implementations for type traits specified by the C++ standard;
1505 ``__X(...)`` has the same semantics and constraints as the corresponding
1506 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
1508 * ``__array_rank(type)`` (Embarcadero):
1509   Returns the number of levels of array in the type ``type``:
1510   ``0`` if ``type`` is not an array type, and
1511   ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1512 * ``__array_extent(type, dim)`` (Embarcadero):
1513   The ``dim``'th array bound in the type ``type``, or ``0`` if
1514   ``dim >= __array_rank(type)``.
1515 * ``__can_pass_in_regs`` (C++)
1516   Returns whether a class can be passed in registers under the current
1517   ABI. This type can only be applied to unqualified class types.
1518   This is not a portable type trait.
1519 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1520   Deprecated, use ``__is_nothrow_assignable`` instead.
1521 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
1522   Deprecated, use ``__is_nothrow_assignable`` instead.
1523 * ``__has_nothrow_copy`` (GNU, Microsoft):
1524   Deprecated, use ``__is_nothrow_constructible`` instead.
1525 * ``__has_nothrow_constructor`` (GNU, Microsoft):
1526   Deprecated, use ``__is_nothrow_constructible`` instead.
1527 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1528   Deprecated, use ``__is_trivially_assignable`` instead.
1529 * ``__has_trivial_move_assign`` (GNU, Microsoft):
1530   Deprecated, use ``__is_trivially_assignable`` instead.
1531 * ``__has_trivial_copy`` (GNU, Microsoft):
1532   Deprecated, use ``__is_trivially_copyable`` instead.
1533 * ``__has_trivial_constructor`` (GNU, Microsoft):
1534   Deprecated, use ``__is_trivially_constructible`` instead.
1535 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
1536   Deprecated, use ``__is_trivially_constructible`` instead.
1537 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1538   Deprecated, use ``__is_trivially_destructible`` instead.
1539 * ``__has_unique_object_representations`` (C++, GNU)
1540 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1541 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1542 * ``__is_aggregate`` (C++, GNU, Microsoft)
1543 * ``__is_arithmetic`` (C++, Embarcadero)
1544 * ``__is_array`` (C++, Embarcadero)
1545 * ``__is_assignable`` (C++, MSVC 2015)
1546 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1547 * ``__is_bounded_array`` (C++, GNU, Microsoft, Embarcadero)
1548 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1549 * ``__is_complete_type(type)`` (Embarcadero):
1550   Return ``true`` if ``type`` is a complete type.
1551   Warning: this trait is dangerous because it can return different values at
1552   different points in the same program.
1553 * ``__is_compound`` (C++, Embarcadero)
1554 * ``__is_const`` (C++, Embarcadero)
1555 * ``__is_constructible`` (C++, MSVC 2013)
1556 * ``__is_convertible`` (C++, Embarcadero)
1557 * ``__is_convertible_to`` (Microsoft):
1558   Synonym for ``__is_convertible``.
1559 * ``__is_destructible`` (C++, MSVC 2013)
1560 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1561 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1562 * ``__is_final`` (C++, GNU, Microsoft)
1563 * ``__is_floating_point`` (C++, Embarcadero)
1564 * ``__is_function`` (C++, Embarcadero)
1565 * ``__is_fundamental`` (C++, Embarcadero)
1566 * ``__is_integral`` (C++, Embarcadero)
1567 * ``__is_interface_class`` (Microsoft):
1568   Returns ``false``, even for types defined with ``__interface``.
1569 * ``__is_literal`` (Clang):
1570   Synonym for ``__is_literal_type``.
1571 * ``__is_literal_type`` (C++, GNU, Microsoft):
1572   Note, the corresponding standard trait was deprecated in C++17
1573   and removed in C++20.
1574 * ``__is_lvalue_reference`` (C++, Embarcadero)
1575 * ``__is_member_object_pointer`` (C++, Embarcadero)
1576 * ``__is_member_function_pointer`` (C++, Embarcadero)
1577 * ``__is_member_pointer`` (C++, Embarcadero)
1578 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
1579 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
1580 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
1581 * ``__is_nullptr`` (C++, GNU, Microsoft, Embarcadero):
1582   Returns true for ``std::nullptr_t`` and false for everything else. The
1583   corresponding standard library feature is ``std::is_null_pointer``, but
1584   ``__is_null_pointer`` is already in use by some implementations.
1585 * ``__is_object`` (C++, Embarcadero)
1586 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1587   Note, the corresponding standard trait was deprecated in C++20.
1588 * ``__is_pointer`` (C++, Embarcadero)
1589 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1590 * ``__is_reference`` (C++, Embarcadero)
1591 * ``__is_referenceable`` (C++, GNU, Microsoft, Embarcadero):
1592   Returns true if a type is referenceable, and false otherwise. A referenceable
1593   type is a type that's either an object type, a reference type, or an unqualified
1594   function type.
1595 * ``__is_rvalue_reference`` (C++, Embarcadero)
1596 * ``__is_same`` (C++, Embarcadero)
1597 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
1598 * ``__is_scalar`` (C++, Embarcadero)
1599 * ``__is_scoped_enum`` (C++, GNU, Microsoft, Embarcadero)
1600 * ``__is_sealed`` (Microsoft):
1601   Synonym for ``__is_final``.
1602 * ``__is_signed`` (C++, Embarcadero):
1603   Returns false for enumeration types, and returns true for floating-point
1604   types. Note, before Clang 10, returned true for enumeration types if the
1605   underlying type was signed, and returned false for floating-point types.
1606 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1607 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1608 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1609 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1610 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1611 * ``__is_trivially_destructible`` (C++, MSVC 2013)
1612 * ``__is_trivially_relocatable`` (Clang): Returns true if moving an object
1613   of the given type, and then destroying the source object, is known to be
1614   functionally equivalent to copying the underlying bytes and then dropping the
1615   source object on the floor. This is true of trivial types and types which
1616   were made trivially relocatable via the ``clang::trivial_abi`` attribute.
1617 * ``__is_trivially_equality_comparable`` (Clang): Returns true if comparing two
1618   objects of the provided type is known to be equivalent to comparing their
1619   value representations.
1620 * ``__is_unbounded_array`` (C++, GNU, Microsoft, Embarcadero)
1621 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1622 * ``__is_unsigned`` (C++, Embarcadero):
1623   Returns false for enumeration types. Note, before Clang 13, returned true for
1624   enumeration types if the underlying type was unsigned.
1625 * ``__is_void`` (C++, Embarcadero)
1626 * ``__is_volatile`` (C++, Embarcadero)
1627 * ``__reference_binds_to_temporary(T, U)`` (Clang):  Determines whether a
1628   reference of type ``T`` bound to an expression of type ``U`` would bind to a
1629   materialized temporary object. If ``T`` is not a reference type the result
1630   is false. Note this trait will also return false when the initialization of
1631   ``T`` from ``U`` is ill-formed.
1632   Deprecated, use ``__reference_constructs_from_temporary``.
1633 * ``__reference_constructs_from_temporary(T, U)`` (C++)
1634   Returns true if a reference ``T`` can be constructed from a temporary of type
1635   a non-cv-qualified ``U``.
1636 * ``__underlying_type`` (C++, GNU, Microsoft)
1638 In addition, the following expression traits are supported:
1640 * ``__is_lvalue_expr(e)`` (Embarcadero):
1641   Returns true if ``e`` is an lvalue expression.
1642   Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1643 * ``__is_rvalue_expr(e)`` (Embarcadero):
1644   Returns true if ``e`` is a prvalue expression.
1645   Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1647 There are multiple ways to detect support for a type trait ``__X`` in the
1648 compiler, depending on the oldest version of Clang you wish to support.
1650 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1651 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1652 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1653   the following traits:
1655   * ``__has_nothrow_assign``
1656   * ``__has_nothrow_copy``
1657   * ``__has_nothrow_constructor``
1658   * ``__has_trivial_assign``
1659   * ``__has_trivial_copy``
1660   * ``__has_trivial_constructor``
1661   * ``__has_trivial_destructor``
1662   * ``__has_virtual_destructor``
1663   * ``__is_abstract``
1664   * ``__is_base_of``
1665   * ``__is_class``
1666   * ``__is_constructible``
1667   * ``__is_convertible_to``
1668   * ``__is_empty``
1669   * ``__is_enum``
1670   * ``__is_final``
1671   * ``__is_literal``
1672   * ``__is_standard_layout``
1673   * ``__is_pod``
1674   * ``__is_polymorphic``
1675   * ``__is_sealed``
1676   * ``__is_trivial``
1677   * ``__is_trivially_assignable``
1678   * ``__is_trivially_constructible``
1679   * ``__is_trivially_copyable``
1680   * ``__is_union``
1681   * ``__underlying_type``
1683 A simplistic usage example as might be seen in standard C++ headers follows:
1685 .. code-block:: c++
1687   #if __has_builtin(__is_convertible_to)
1688   template<typename From, typename To>
1689   struct is_convertible_to {
1690     static const bool value = __is_convertible_to(From, To);
1691   };
1692   #else
1693   // Emulate type trait for compatibility with other compilers.
1694   #endif
1696 Blocks
1697 ======
1699 The syntax and high level language feature description is in
1700 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1701 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1703 Query for this feature with ``__has_extension(blocks)``.
1705 ASM Goto with Output Constraints
1706 ================================
1708 Outputs may be used along any branches from the ``asm goto`` whether the
1709 branches are taken or not.
1711 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1713 Prior to clang-16, the output may only be used safely when the indirect
1714 branches are not taken.  Query for this difference with
1715 ``__has_extension(gnu_asm_goto_with_outputs_full)``.
1717 When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1718 outputs) with the `+r` constraint, there is a hidden input that's created
1719 before the label, so numeric references to operands must account for that.
1721 .. code-block:: c++
1723   int foo(int x) {
1724       // %0 and %1 both refer to x
1725       // %l2 refers to err
1726       asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1727       return x;
1728     err:
1729       return -1;
1730   }
1732 This was changed to match GCC in clang-13; for better portability, symbolic
1733 references can be used instead of numeric references.
1735 .. code-block:: c++
1737   int foo(int x) {
1738       asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1739       return x;
1740     err:
1741       return -1;
1742   }
1744 Objective-C Features
1745 ====================
1747 Related result types
1748 --------------------
1750 According to Cocoa conventions, Objective-C methods with certain names
1751 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1752 the receiving class's type.  Such methods are said to have a "related result
1753 type", meaning that a message send to one of these methods will have the same
1754 static type as an instance of the receiver class.  For example, given the
1755 following classes:
1757 .. code-block:: objc
1759   @interface NSObject
1760   + (id)alloc;
1761   - (id)init;
1762   @end
1764   @interface NSArray : NSObject
1765   @end
1767 and this common initialization pattern
1769 .. code-block:: objc
1771   NSArray *array = [[NSArray alloc] init];
1773 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1774 ``alloc`` implicitly has a related result type.  Similarly, the type of the
1775 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1776 related result type and its receiver is known to have the type ``NSArray *``.
1777 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1778 would have had type ``id``, as declared in the method signature.
1780 A method with a related result type can be declared by using the type
1781 ``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
1782 that is only permitted in the result type of an Objective-C method, e.g.
1784 .. code-block:: objc
1786   @interface A
1787   + (instancetype)constructAnA;
1788   @end
1790 The related result type can also be inferred for some methods.  To determine
1791 whether a method has an inferred related result type, the first word in the
1792 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1793 and the method will have a related result type if its return type is compatible
1794 with the type of its class and if:
1796 * the first word is "``alloc``" or "``new``", and the method is a class method,
1797   or
1799 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1800   and the method is an instance method.
1802 If a method with a related result type is overridden by a subclass method, the
1803 subclass method must also return a type that is compatible with the subclass
1804 type.  For example:
1806 .. code-block:: objc
1808   @interface NSString : NSObject
1809   - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1810   @end
1812 Related result types only affect the type of a message send or property access
1813 via the given method.  In all other respects, a method with a related result
1814 type is treated the same way as method that returns ``id``.
1816 Use ``__has_feature(objc_instancetype)`` to determine whether the
1817 ``instancetype`` contextual keyword is available.
1819 Automatic reference counting
1820 ----------------------------
1822 Clang provides support for :doc:`automated reference counting
1823 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1824 for manual ``retain``/``release``/``autorelease`` message sends.  There are three
1825 feature macros associated with automatic reference counting:
1826 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1827 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1828 automated reference counting also includes support for ``__weak`` pointers to
1829 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1830 are allowed to have fields that are pointers to Objective-C objects managed by
1831 automatic reference counting.
1833 .. _objc-weak:
1835 Weak references
1836 ---------------
1838 Clang supports ARC-style weak and unsafe references in Objective-C even
1839 outside of ARC mode.  Weak references must be explicitly enabled with
1840 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1841 to test whether they are enabled.  Unsafe references are enabled
1842 unconditionally.  ARC-style weak and unsafe references cannot be used
1843 when Objective-C garbage collection is enabled.
1845 Except as noted below, the language rules for the ``__weak`` and
1846 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1847 ``unsafe_unretained`` property attributes) are just as laid out
1848 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1849 In particular, note that some classes do not support forming weak
1850 references to their instances, and note that special care must be
1851 taken when storing weak references in memory where initialization
1852 and deinitialization are outside the responsibility of the compiler
1853 (such as in ``malloc``-ed memory).
1855 Loading from a ``__weak`` variable always implicitly retains the
1856 loaded value.  In non-ARC modes, this retain is normally balanced
1857 by an implicit autorelease.  This autorelease can be suppressed
1858 by performing the load in the receiver position of a ``-retain``
1859 message send (e.g. ``[weakReference retain]``); note that this performs
1860 only a single retain (the retain done when primitively loading from
1861 the weak reference).
1863 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1864 default behavior of variables and therefore is not needed.  However,
1865 it does have an effect on the semantics of block captures: normally,
1866 copying a block which captures an Objective-C object or block pointer
1867 causes the captured pointer to be retained or copied, respectively,
1868 but that behavior is suppressed when the captured variable is qualified
1869 with ``__unsafe_unretained``.
1871 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1872 all non-ARC modes and was silently ignored outside of GC modes.  It now
1873 means the ARC-style qualifier in all non-GC modes and is no longer
1874 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1875 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1876 in all non-GC Objective-C modes.
1878 .. _objc-fixed-enum:
1880 Enumerations with a fixed underlying type
1881 -----------------------------------------
1883 Clang provides support for C++11 enumerations with a fixed underlying type
1884 within Objective-C.  For example, one can write an enumeration type as:
1886 .. code-block:: c++
1888   typedef enum : unsigned char { Red, Green, Blue } Color;
1890 This specifies that the underlying type, which is used to store the enumeration
1891 value, is ``unsigned char``.
1893 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1894 underlying types is available in Objective-C.
1896 Interoperability with C++11 lambdas
1897 -----------------------------------
1899 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1900 permitting a lambda to be implicitly converted to a block pointer with the
1901 corresponding signature.  For example, consider an API such as ``NSArray``'s
1902 array-sorting method:
1904 .. code-block:: objc
1906   - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1908 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1909 (^)(id, id)``, and parameters of this type are generally provided with block
1910 literals as arguments.  However, one can also use a C++11 lambda so long as it
1911 provides the same signature (in this case, accepting two parameters of type
1912 ``id`` and returning an ``NSComparisonResult``):
1914 .. code-block:: objc
1916   NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1917                      @"String 02"];
1918   const NSStringCompareOptions comparisonOptions
1919     = NSCaseInsensitiveSearch | NSNumericSearch |
1920       NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1921   NSLocale *currentLocale = [NSLocale currentLocale];
1922   NSArray *sorted
1923     = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1924                NSRange string1Range = NSMakeRange(0, [s1 length]);
1925                return [s1 compare:s2 options:comparisonOptions
1926                range:string1Range locale:currentLocale];
1927        }];
1928   NSLog(@"sorted: %@", sorted);
1930 This code relies on an implicit conversion from the type of the lambda
1931 expression (an unnamed, local class type called the *closure type*) to the
1932 corresponding block pointer type.  The conversion itself is expressed by a
1933 conversion operator in that closure type that produces a block pointer with the
1934 same signature as the lambda itself, e.g.,
1936 .. code-block:: objc
1938   operator NSComparisonResult (^)(id, id)() const;
1940 This conversion function returns a new block that simply forwards the two
1941 parameters to the lambda object (which it captures by copy), then returns the
1942 result.  The returned block is first copied (with ``Block_copy``) and then
1943 autoreleased.  As an optimization, if a lambda expression is immediately
1944 converted to a block pointer (as in the first example, above), then the block
1945 is not copied and autoreleased: rather, it is given the same lifetime as a
1946 block literal written at that point in the program, which avoids the overhead
1947 of copying a block to the heap in the common case.
1949 The conversion from a lambda to a block pointer is only available in
1950 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1951 management (autorelease).
1953 Object Literals and Subscripting
1954 --------------------------------
1956 Clang provides support for :doc:`Object Literals and Subscripting
1957 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1958 programming patterns, makes programs more concise, and improves the safety of
1959 container creation.  There are several feature macros associated with object
1960 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1961 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1962 tests the availability of dictionary literals;
1963 ``__has_feature(objc_subscripting)`` tests the availability of object
1964 subscripting.
1966 Objective-C Autosynthesis of Properties
1967 ---------------------------------------
1969 Clang provides support for autosynthesis of declared properties.  Using this
1970 feature, clang provides default synthesis of those properties not declared
1971 @dynamic and not having user provided backing getter and setter methods.
1972 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1973 of this feature in version of clang being used.
1975 .. _langext-objc-retain-release:
1977 Objective-C retaining behavior attributes
1978 -----------------------------------------
1980 In Objective-C, functions and methods are generally assumed to follow the
1981 `Cocoa Memory Management
1982 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1983 conventions for ownership of object arguments and
1984 return values. However, there are exceptions, and so Clang provides attributes
1985 to allow these exceptions to be documented. This are used by ARC and the
1986 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
1987 better described using the ``objc_method_family`` attribute instead.
1989 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1990 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1991 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1992 that return Objective-C or CoreFoundation objects. They are commonly placed at
1993 the end of a function prototype or method declaration:
1995 .. code-block:: objc
1997   id foo() __attribute__((ns_returns_retained));
1999   - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
2001 The ``*_returns_retained`` attributes specify that the returned object has a +1
2002 retain count.  The ``*_returns_not_retained`` attributes specify that the return
2003 object has a +0 retain count, even if the normal convention for its selector
2004 would be +1.  ``ns_returns_autoreleased`` specifies that the returned object is
2005 +0, but is guaranteed to live at least as long as the next flush of an
2006 autorelease pool.
2008 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
2009 an parameter declaration; they specify that the argument is expected to have a
2010 +1 retain count, which will be balanced in some way by the function or method.
2011 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
2012 method; it specifies that the method expects its ``self`` parameter to have a
2013 +1 retain count, which it will balance in some way.
2015 .. code-block:: objc
2017   void foo(__attribute__((ns_consumed)) NSString *string);
2019   - (void) bar __attribute__((ns_consumes_self));
2020   - (void) baz:(id) __attribute__((ns_consumed)) x;
2022 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
2023 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
2025 Query for these features with ``__has_attribute(ns_consumed)``,
2026 ``__has_attribute(ns_returns_retained)``, etc.
2028 Objective-C @available
2029 ----------------------
2031 It is possible to use the newest SDK but still build a program that can run on
2032 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
2033 ``-miphoneos-version-min=``.
2035 Before LLVM 5.0, when calling a function that exists only in the OS that's
2036 newer than the target OS (as determined by the minimum deployment version),
2037 programmers had to carefully check if the function exists at runtime, using
2038 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
2039 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
2040 Objective-C methods.  If such a check was missed, the program would compile
2041 fine, run fine on newer systems, but crash on older systems.
2043 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
2044 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
2045 with the new ``@available()`` keyword to assist with this issue.
2046 When a method that's introduced in the OS newer than the target OS is called, a
2047 -Wunguarded-availability warning is emitted if that call is not guarded:
2049 .. code-block:: objc
2051   void my_fun(NSSomeClass* var) {
2052     // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
2053     // built with -mmacosx-version-min=10.11, then this unconditional call
2054     // will emit a -Wunguarded-availability warning:
2055     [var fancyNewMethod];
2056   }
2058 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
2059 ``if(@available())``:
2061 .. code-block:: objc
2063   void my_fun(NSSomeClass* var) {
2064     if (@available(macOS 10.12, *)) {
2065       [var fancyNewMethod];
2066     } else {
2067       // Put fallback behavior for old macOS versions (and for non-mac
2068       // platforms) here.
2069     }
2070   }
2072 The ``*`` is required and means that platforms not explicitly listed will take
2073 the true branch, and the compiler will emit ``-Wunguarded-availability``
2074 warnings for unlisted platforms based on those platform's deployment target.
2075 More than one platform can be listed in ``@available()``:
2077 .. code-block:: objc
2079   void my_fun(NSSomeClass* var) {
2080     if (@available(macOS 10.12, iOS 10, *)) {
2081       [var fancyNewMethod];
2082     }
2083   }
2085 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
2086 on 10.12, then add an `availability attribute
2087 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
2088 which will also suppress the warning and require that calls to my_fun() are
2089 checked:
2091 .. code-block:: objc
2093   API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
2094     [var fancyNewMethod];  // Now ok.
2095   }
2097 ``@available()`` is only available in Objective-C code.  To use the feature
2098 in C and C++ code, use the ``__builtin_available()`` spelling instead.
2100 If existing code uses null checks or ``-respondsToSelector:``, it should
2101 be changed to use ``@available()`` (or ``__builtin_available``) instead.
2103 ``-Wunguarded-availability`` is disabled by default, but
2104 ``-Wunguarded-availability-new``, which only emits this warning for APIs
2105 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
2106 tvOS >= 11, is enabled by default.
2108 .. _langext-overloading:
2110 Objective-C++ ABI: protocol-qualifier mangling of parameters
2111 ------------------------------------------------------------
2113 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
2114 type is a qualified-``id`` (e.g., ``id<Foo>``).  This mangling allows such
2115 parameters to be differentiated from those with the regular unqualified ``id``
2116 type.
2118 This was a non-backward compatible mangling change to the ABI.  This change
2119 allows proper overloading, and also prevents mangling conflicts with template
2120 parameters of protocol-qualified type.
2122 Query the presence of this new mangling with
2123 ``__has_feature(objc_protocol_qualifier_mangling)``.
2125 Initializer lists for complex numbers in C
2126 ==========================================
2128 clang supports an extension which allows the following in C:
2130 .. code-block:: c++
2132   #include <math.h>
2133   #include <complex.h>
2134   complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
2136 This construct is useful because there is no way to separately initialize the
2137 real and imaginary parts of a complex variable in standard C, given that clang
2138 does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
2139 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
2140 in static initializers.)
2142 Note that this extension does not allow eliding the braces; the meaning of the
2143 following two lines is different:
2145 .. code-block:: c++
2147   complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
2148   complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
2150 This extension also works in C++ mode, as far as that goes, but does not apply
2151 to the C++ ``std::complex``.  (In C++11, list initialization allows the same
2152 syntax to be used with ``std::complex`` with the same meaning.)
2154 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2155 construct a complex number from the given real and imaginary components.
2157 OpenCL Features
2158 ===============
2160 Clang supports internal OpenCL extensions documented below.
2162 ``__cl_clang_bitfields``
2163 --------------------------------
2165 With this extension it is possible to enable bitfields in structs
2166 or unions using the OpenCL extension pragma mechanism detailed in
2167 `the OpenCL Extension Specification, section 1.2
2168 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2170 Use of bitfields in OpenCL kernels can result in reduced portability as struct
2171 layout is not guaranteed to be consistent when compiled by different compilers.
2172 If structs with bitfields are used as kernel function parameters, it can result
2173 in incorrect functionality when the layout is different between the host and
2174 device code.
2176 **Example of Use**:
2178 .. code-block:: c++
2180   #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2181   struct with_bitfield {
2182     unsigned int i : 5; // compiled - no diagnostic generated
2183   };
2185   #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2186   struct without_bitfield {
2187     unsigned int i : 5; // error - bitfields are not supported
2188   };
2190 ``__cl_clang_function_pointers``
2191 --------------------------------
2193 With this extension it is possible to enable various language features that
2194 are relying on function pointers using regular OpenCL extension pragma
2195 mechanism detailed in `the OpenCL Extension Specification,
2196 section 1.2
2197 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2199 In C++ for OpenCL this also enables:
2201 - Use of member function pointers;
2203 - Unrestricted use of references to functions;
2205 - Virtual member functions.
2207 Such functionality is not conformant and does not guarantee to compile
2208 correctly in any circumstances. It can be used if:
2210 - the kernel source does not contain call expressions to (member-) function
2211   pointers, or virtual functions. For example this extension can be used in
2212   metaprogramming algorithms to be able to specify/detect types generically.
2214 - the generated kernel binary does not contain indirect calls because they
2215   are eliminated using compiler optimizations e.g. devirtualization.
2217 - the selected target supports the function pointer like functionality e.g.
2218   most CPU targets.
2220 **Example of Use**:
2222 .. code-block:: c++
2224   #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2225   void foo()
2226   {
2227     void (*fp)(); // compiled - no diagnostic generated
2228   }
2230   #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2231   void bar()
2232   {
2233     void (*fp)(); // error - pointers to function are not allowed
2234   }
2236 ``__cl_clang_variadic_functions``
2237 ---------------------------------
2239 With this extension it is possible to enable variadic arguments in functions
2240 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2241 Extension Specification, section 1.2
2242 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2244 This is not conformant behavior and it can only be used portably when the
2245 functions with variadic prototypes do not get generated in binary e.g. the
2246 variadic prototype is used to specify a function type with any number of
2247 arguments in metaprogramming algorithms in C++ for OpenCL.
2249 This extensions can also be used when the kernel code is intended for targets
2250 supporting the variadic arguments e.g. majority of CPU targets.
2252 **Example of Use**:
2254 .. code-block:: c++
2256   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2257   void foo(int a, ...); // compiled - no diagnostic generated
2259   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2260   void bar(int a, ...); // error - variadic prototype is not allowed
2262 ``__cl_clang_non_portable_kernel_param_types``
2263 ----------------------------------------------
2265 With this extension it is possible to enable the use of some restricted types
2266 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2267 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2268 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2269 detailed in `the OpenCL Extension Specification, section 1.2
2270 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2272 This is not a conformant behavior and it can only be used when the
2273 kernel arguments are not accessed on the host side or the data layout/size
2274 between the host and device is known to be compatible.
2276 **Example of Use**:
2278 .. code-block:: c++
2280   // Plain Old Data type.
2281   struct Pod {
2282     int a;
2283     int b;
2284   };
2286   // Not POD type because of the constructor.
2287   // Standard layout type because there is only one access control.
2288   struct OnlySL {
2289     int a;
2290     int b;
2291     OnlySL() : a(0), b(0) {}
2292   };
2294   // Not standard layout type because of two different access controls.
2295   struct NotSL {
2296     int a;
2297   private:
2298     int b;
2299   };
2301   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2302   kernel void kernel_main(
2303     Pod a,
2305     OnlySL b,
2306     global NotSL *c,
2307     global OnlySL *d
2308   );
2309   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2311 Remove address space builtin function
2312 -------------------------------------
2314 ``__remove_address_space`` allows to derive types in C++ for OpenCL
2315 that have address space qualifiers removed. This utility only affects
2316 address space qualifiers, therefore, other type qualifiers such as
2317 ``const`` or ``volatile`` remain unchanged.
2319 **Example of Use**:
2321 .. code-block:: c++
2323   template<typename T>
2324   void foo(T *par){
2325     T var1; // error - local function variable with global address space
2326     __private T var2; // error - conflicting address space qualifiers
2327     __private __remove_address_space<T>::type var3; // var3 is __private int
2328   }
2330   void bar(){
2331     __global int* ptr;
2332     foo(ptr);
2333   }
2335 Legacy 1.x atomics with generic address space
2336 ---------------------------------------------
2338 Clang allows use of atomic functions from the OpenCL 1.x standards
2339 with the generic address space pointer in C++ for OpenCL mode.
2341 This is a non-portable feature and might not be supported by all
2342 targets.
2344 **Example of Use**:
2346 .. code-block:: c++
2348   void foo(__generic volatile unsigned int* a) {
2349     atomic_add(a, 1);
2350   }
2352 WebAssembly Features
2353 ====================
2355 Clang supports the WebAssembly features documented below. For further
2356 information related to the semantics of the builtins, please refer to the `WebAssembly Specification <https://webassembly.github.io/spec/core/>`_.
2357 In this section, when we refer to reference types, we are referring to
2358 WebAssembly reference types, not C++ reference types unless stated
2359 otherwise.
2361 ``__builtin_wasm_table_set``
2362 ----------------------------
2364 This builtin function stores a value in a WebAssembly table.
2365 It takes three arguments.
2366 The first argument is the table to store a value into, the second
2367 argument is the index to which to store the value into, and the
2368 third argument is a value of reference type to store in the table.
2369 It returns nothing.
2371 .. code-block:: c++
2373   static __externref_t table[0];
2374   extern __externref_t JSObj;
2376   void store(int index) {
2377     __builtin_wasm_table_set(table, index, JSObj);
2378   }
2380 ``__builtin_wasm_table_get``
2381 ----------------------------
2383 This builtin function is the counterpart to ``__builtin_wasm_table_set``
2384 and loads a value from a WebAssembly table of reference typed values.
2385 It takes 2 arguments.
2386 The first argument is a table of reference typed values and the
2387 second argument is an index from which to load the value. It returns
2388 the loaded reference typed value.
2390 .. code-block:: c++
2392   static __externref_t table[0];
2394   __externref_t load(int index) {
2395     __externref_t Obj = __builtin_wasm_table_get(table, index);
2396     return Obj;
2397   }
2399 ``__builtin_wasm_table_size``
2400 -----------------------------
2402 This builtin function returns the size of the WebAssembly table.
2403 Takes the table as an argument and returns an unsigned integer (``size_t``)
2404 with the current table size.
2406 .. code-block:: c++
2408   typedef void (*__funcref funcref_t)();
2409   static __funcref table[0];
2411   size_t getSize() {
2412     return __builtin_wasm_table_size(table);
2413   }
2415 ``__builtin_wasm_table_grow``
2416 -----------------------------
2418 This builtin function grows the WebAssembly table by a certain amount.
2419 Currently, as all WebAssembly tables created in C/C++ are zero-sized,
2420 this always needs to be called to grow the table.
2422 It takes three arguments. The first argument is the WebAssembly table
2423 to grow. The second argument is the reference typed value to store in
2424 the new table entries (the initialization value), and the third argument
2425 is the amount to grow the table by. It returns the previous table size
2426 or -1. It will return -1 if not enough space could be allocated.
2428 .. code-block:: c++
2430   typedef void (*__funcref funcref_t)();
2431   static __funcref table[0];
2433   // grow returns the new table size or -1 on error.
2434   int grow(__funcref fn, int delta) {
2435     int prevSize = __builtin_wasm_table_grow(table, fn, delta);
2436     if (prevSize == -1)
2437       return -1;
2438     return prevSize + delta;
2439   }
2441 ``__builtin_wasm_table_fill``
2442 -----------------------------
2444 This builtin function sets all the entries of a WebAssembly table to a given
2445 reference typed value. It takes four arguments. The first argument is
2446 the WebAssembly table, the second argument is the index that starts the
2447 range, the third argument is the value to set in the new entries, and
2448 the fourth and the last argument is the size of the range. It returns
2449 nothing.
2451 .. code-block:: c++
2453   static __externref_t table[0];
2455   // resets a table by setting all of its entries to a given value.
2456   void reset(__externref_t Obj) {
2457     int Size = __builtin_wasm_table_size(table);
2458     __builtin_wasm_table_fill(table, 0, Obj, Size);
2459   }
2461 ``__builtin_wasm_table_copy``
2462 -----------------------------
2464 This builtin function copies elements from a source WebAssembly table
2465 to a possibly overlapping destination region. It takes five arguments.
2466 The first argument is the destination WebAssembly table, and the second
2467 argument is the source WebAssembly table. The third argument is the
2468 destination index from where the copy starts, the fourth argument is the
2469 source index from there the copy starts, and the fifth and last argument
2470 is the number of elements to copy. It returns nothing.
2472 .. code-block:: c++
2474   static __externref_t tableSrc[0];
2475   static __externref_t tableDst[0];
2477   // Copy nelem elements from [src, src + nelem - 1] in tableSrc to
2478   // [dst, dst + nelem - 1] in tableDst
2479   void copy(int dst, int src, int nelem) {
2480     __builtin_wasm_table_copy(tableDst, tableSrc, dst, src, nelem);
2481   }
2484 Builtin Functions
2485 =================
2487 Clang supports a number of builtin library functions with the same syntax as
2488 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
2489 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
2490 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc.  In addition to
2491 the GCC builtins, Clang supports a number of builtins that GCC does not, which
2492 are listed here.
2494 Please note that Clang does not and will not support all of the GCC builtins
2495 for vector operations.  Instead of using builtins, you should use the functions
2496 defined in target-specific header files like ``<xmmintrin.h>``, which define
2497 portable wrappers for these.  Many of the Clang versions of these functions are
2498 implemented directly in terms of :ref:`extended vector support
2499 <langext-vectors>` instead of builtins, in order to reduce the number of
2500 builtins that we need to implement.
2502 ``__builtin_alloca``
2503 --------------------
2505 ``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2506 is automatically freed upon function termination.
2508 **Syntax**:
2510 .. code-block:: c++
2512   __builtin_alloca(size_t n)
2514 **Example of Use**:
2516 .. code-block:: c++
2518   void init(float* data, size_t nbelems);
2519   void process(float* data, size_t nbelems);
2520   int foo(size_t n) {
2521     auto mem = (float*)__builtin_alloca(n * sizeof(float));
2522     init(mem, n);
2523     process(mem, n);
2524     /* mem is automatically freed at this point */
2525   }
2527 **Description**:
2529 ``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2530 on the stack. This amount is subject to stack allocation limits.
2532 Query for this feature with ``__has_builtin(__builtin_alloca)``.
2534 ``__builtin_alloca_with_align``
2535 -------------------------------
2537 ``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2538 stack while controlling its alignment. Memory is automatically freed upon
2539 function termination.
2542 **Syntax**:
2544 .. code-block:: c++
2546   __builtin_alloca_with_align(size_t n, size_t align)
2548 **Example of Use**:
2550 .. code-block:: c++
2552   void init(float* data, size_t nbelems);
2553   void process(float* data, size_t nbelems);
2554   int foo(size_t n) {
2555     auto mem = (float*)__builtin_alloca_with_align(
2556                         n * sizeof(float),
2557                         CHAR_BIT * alignof(float));
2558     init(mem, n);
2559     process(mem, n);
2560     /* mem is automatically freed at this point */
2561   }
2563 **Description**:
2565 ``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2566 on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2567 argument whose value is the alignment constraint, as a power of 2 in *bits*.
2569 Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2571 .. _langext-__builtin_assume:
2573 ``__builtin_assume``
2574 --------------------
2576 ``__builtin_assume`` is used to provide the optimizer with a boolean
2577 invariant that is defined to be true.
2579 **Syntax**:
2581 .. code-block:: c++
2583     __builtin_assume(bool)
2585 **Example of Use**:
2587 .. code-block:: c++
2589   int foo(int x) {
2590       __builtin_assume(x != 0);
2591       // The optimizer may short-circuit this check using the invariant.
2592       if (x == 0)
2593             return do_something();
2594       return do_something_else();
2595   }
2597 **Description**:
2599 The boolean argument to this function is defined to be true. The optimizer may
2600 analyze the form of the expression provided as the argument and deduce from
2601 that information used to optimize the program. If the condition is violated
2602 during execution, the behavior is undefined. The argument itself is never
2603 evaluated, so any side effects of the expression will be discarded.
2605 Query for this feature with ``__has_builtin(__builtin_assume)``.
2607 .. _langext-__builtin_assume_separate_storage:
2609 ``__builtin_assume_separate_storage``
2610 -------------------------------------
2612 ``__builtin_assume_separate_storage`` is used to provide the optimizer with the
2613 knowledge that its two arguments point to separately allocated objects.
2615 **Syntax**:
2617 .. code-block:: c++
2619     __builtin_assume_separate_storage(const volatile void *, const volatile void *)
2621 **Example of Use**:
2623 .. code-block:: c++
2625   int foo(int *x, int *y) {
2626       __builtin_assume_separate_storage(x, y);
2627       *x = 0;
2628       *y = 1;
2629       // The optimizer may optimize this to return 0 without reloading from *x.
2630       return *x;
2631   }
2633 **Description**:
2635 The arguments to this function are assumed to point into separately allocated
2636 storage (either different variable definitions or different dynamic storage
2637 allocations). The optimizer may use this fact to aid in alias analysis. If the
2638 arguments point into the same storage, the behavior is undefined. Note that the
2639 definition of "storage" here refers to the outermost enclosing allocation of any
2640 particular object (so for example, it's never correct to call this function
2641 passing the addresses of fields in the same struct, elements of the same array,
2642 etc.).
2644 Query for this feature with ``__has_builtin(__builtin_assume_separate_storage)``.
2647 ``__builtin_offsetof``
2648 ----------------------
2650 ``__builtin_offsetof`` is used to implement the ``offsetof`` macro, which
2651 calculates the offset (in bytes) to a given member of the given type.
2653 **Syntax**:
2655 .. code-block:: c++
2657     __builtin_offsetof(type-name, member-designator)
2659 **Example of Use**:
2661 .. code-block:: c++
2663   struct S {
2664     char c;
2665     int i;
2666     struct T {
2667       float f[2];
2668     } t;
2669   };
2671   const int offset_to_i = __builtin_offsetof(struct S, i);
2672   const int ext1 = __builtin_offsetof(struct U { int i; }, i); // C extension
2673   const int offset_to_subobject = __builtin_offsetof(struct S, t.f[1]);
2675 **Description**:
2677 This builtin is usable in an integer constant expression which returns a value
2678 of type ``size_t``. The value returned is the offset in bytes to the subobject
2679 designated by the member-designator from the beginning of an object of type
2680 ``type-name``. Clang extends the required standard functionality in the
2681 following way:
2683 * In C language modes, the first argument may be the definition of a new type.
2684   Any type declared this way is scoped to the nearest scope containing the call
2685   to the builtin.
2687 Query for this feature with ``__has_builtin(__builtin_offsetof)``.
2689 ``__builtin_call_with_static_chain``
2690 ------------------------------------
2692 ``__builtin_call_with_static_chain`` is used to perform a static call while
2693 setting updating the static chain register.
2695 **Syntax**:
2697 .. code-block:: c++
2699   T __builtin_call_with_static_chain(T expr, void* ptr)
2701 **Example of Use**:
2703 .. code-block:: c++
2705   auto v = __builtin_call_with_static_chain(foo(3), foo);
2707 **Description**:
2709 This builtin returns ``expr`` after checking that ``expr`` is a non-member
2710 static call expression. The call to that expression is made while using ``ptr``
2711 as a function pointer stored in a dedicated register to implement *static chain*
2712 calling convention, as used by some language to implement closures or nested
2713 functions.
2715 Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2717 ``__builtin_readcyclecounter``
2718 ------------------------------
2720 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2721 a similar low-latency, high-accuracy clock) on those targets that support it.
2723 **Syntax**:
2725 .. code-block:: c++
2727   __builtin_readcyclecounter()
2729 **Example of Use**:
2731 .. code-block:: c++
2733   unsigned long long t0 = __builtin_readcyclecounter();
2734   do_something();
2735   unsigned long long t1 = __builtin_readcyclecounter();
2736   unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2738 **Description**:
2740 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2741 which may be either global or process/thread-specific depending on the target.
2742 As the backing counters often overflow quickly (on the order of seconds) this
2743 should only be used for timing small intervals.  When not supported by the
2744 target, the return value is always zero.  This builtin takes no arguments and
2745 produces an unsigned long long result.
2747 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2748 that even if present, its use may depend on run-time privilege or other OS
2749 controlled state.
2751 ``__builtin_dump_struct``
2752 -------------------------
2754 **Syntax**:
2756 .. code-block:: c++
2758     __builtin_dump_struct(&some_struct, some_printf_func, args...);
2760 **Examples**:
2762 .. code-block:: c++
2764     struct S {
2765       int x, y;
2766       float f;
2767       struct T {
2768         int i;
2769       } t;
2770     };
2772     void func(struct S *s) {
2773       __builtin_dump_struct(s, printf);
2774     }
2776 Example output:
2778 .. code-block:: none
2780     struct S {
2781       int x = 100
2782       int y = 42
2783       float f = 3.141593
2784       struct T t = {
2785         int i = 1997
2786       }
2787     }
2789 .. code-block:: c++
2791     #include <string>
2792     struct T { int a, b; };
2793     constexpr void constexpr_sprintf(std::string &out, const char *format,
2794                                      auto ...args) {
2795       // ...
2796     }
2797     constexpr std::string dump_struct(auto &x) {
2798       std::string s;
2799       __builtin_dump_struct(&x, constexpr_sprintf, s);
2800       return s;
2801     }
2802     static_assert(dump_struct(T{1, 2}) == R"(struct T {
2803       int a = 1
2804       int b = 2
2805     }
2806     )");
2808 **Description**:
2810 The ``__builtin_dump_struct`` function is used to print the fields of a simple
2811 structure and their values for debugging purposes. The first argument of the
2812 builtin should be a pointer to the struct to dump. The second argument ``f``
2813 should be some callable expression, and can be a function object or an overload
2814 set. The builtin calls ``f``, passing any further arguments ``args...``
2815 followed by a ``printf``-compatible format string and the corresponding
2816 arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2817 evaluated once per call. In C++, ``f`` may be a template or overload set and
2818 resolve to different functions for each call.
2820 In the format string, a suitable format specifier will be used for builtin
2821 types that Clang knows how to format. This includes standard builtin types, as
2822 well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2823 char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2824 that Clang doesn't know how to format, and the corresponding argument will be a
2825 pointer to the field. This allows a C++ templated formatting function to detect
2826 this case and implement custom formatting. A ``*`` will otherwise not precede a
2827 format specifier.
2829 This builtin does not return a value.
2831 This builtin can be used in constant expressions.
2833 Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2835 .. _langext-__builtin_shufflevector:
2837 ``__builtin_shufflevector``
2838 ---------------------------
2840 ``__builtin_shufflevector`` is used to express generic vector
2841 permutation/shuffle/swizzle operations.  This builtin is also very important
2842 for the implementation of various target-specific header files like
2843 ``<xmmintrin.h>``.
2845 **Syntax**:
2847 .. code-block:: c++
2849   __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2851 **Examples**:
2853 .. code-block:: c++
2855   // identity operation - return 4-element vector v1.
2856   __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2858   // "Splat" element 0 of V1 into a 4-element result.
2859   __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2861   // Reverse 4-element vector V1.
2862   __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2864   // Concatenate every other element of 4-element vectors V1 and V2.
2865   __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2867   // Concatenate every other element of 8-element vectors V1 and V2.
2868   __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2870   // Shuffle v1 with some elements being undefined
2871   __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2873 **Description**:
2875 The first two arguments to ``__builtin_shufflevector`` are vectors that have
2876 the same element type.  The remaining arguments are a list of integers that
2877 specify the elements indices of the first two vectors that should be extracted
2878 and returned in a new vector.  These element indices are numbered sequentially
2879 starting with the first vector, continuing into the second vector.  Thus, if
2880 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
2881 ``vec2``. An index of -1 can be used to indicate that the corresponding element
2882 in the returned vector is a don't care and can be optimized by the backend.
2884 The result of ``__builtin_shufflevector`` is a vector with the same element
2885 type as ``vec1``/``vec2`` but that has an element count equal to the number of
2886 indices specified.
2888 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2890 .. _langext-__builtin_convertvector:
2892 ``__builtin_convertvector``
2893 ---------------------------
2895 ``__builtin_convertvector`` is used to express generic vector
2896 type-conversion operations. The input vector and the output vector
2897 type must have the same number of elements.
2899 **Syntax**:
2901 .. code-block:: c++
2903   __builtin_convertvector(src_vec, dst_vec_type)
2905 **Examples**:
2907 .. code-block:: c++
2909   typedef double vector4double __attribute__((__vector_size__(32)));
2910   typedef float  vector4float  __attribute__((__vector_size__(16)));
2911   typedef short  vector4short  __attribute__((__vector_size__(8)));
2912   vector4float vf; vector4short vs;
2914   // convert from a vector of 4 floats to a vector of 4 doubles.
2915   __builtin_convertvector(vf, vector4double)
2916   // equivalent to:
2917   (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2919   // convert from a vector of 4 shorts to a vector of 4 floats.
2920   __builtin_convertvector(vs, vector4float)
2921   // equivalent to:
2922   (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2924 **Description**:
2926 The first argument to ``__builtin_convertvector`` is a vector, and the second
2927 argument is a vector type with the same number of elements as the first
2928 argument.
2930 The result of ``__builtin_convertvector`` is a vector with the same element
2931 type as the second argument, with a value defined in terms of the action of a
2932 C-style cast applied to each element of the first argument.
2934 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2936 ``__builtin_bitreverse``
2937 ------------------------
2939 * ``__builtin_bitreverse8``
2940 * ``__builtin_bitreverse16``
2941 * ``__builtin_bitreverse32``
2942 * ``__builtin_bitreverse64``
2944 **Syntax**:
2946 .. code-block:: c++
2948      __builtin_bitreverse32(x)
2950 **Examples**:
2952 .. code-block:: c++
2954       uint8_t rev_x = __builtin_bitreverse8(x);
2955       uint16_t rev_x = __builtin_bitreverse16(x);
2956       uint32_t rev_y = __builtin_bitreverse32(y);
2957       uint64_t rev_z = __builtin_bitreverse64(z);
2959 **Description**:
2961 The '``__builtin_bitreverse``' family of builtins is used to reverse
2962 the bitpattern of an integer value; for example ``0b10110110`` becomes
2963 ``0b01101101``. These builtins can be used within constant expressions.
2965 ``__builtin_rotateleft``
2966 ------------------------
2968 * ``__builtin_rotateleft8``
2969 * ``__builtin_rotateleft16``
2970 * ``__builtin_rotateleft32``
2971 * ``__builtin_rotateleft64``
2973 **Syntax**:
2975 .. code-block:: c++
2977      __builtin_rotateleft32(x, y)
2979 **Examples**:
2981 .. code-block:: c++
2983       uint8_t rot_x = __builtin_rotateleft8(x, y);
2984       uint16_t rot_x = __builtin_rotateleft16(x, y);
2985       uint32_t rot_x = __builtin_rotateleft32(x, y);
2986       uint64_t rot_x = __builtin_rotateleft64(x, y);
2988 **Description**:
2990 The '``__builtin_rotateleft``' family of builtins is used to rotate
2991 the bits in the first argument by the amount in the second argument.
2992 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2993 The shift value is treated as an unsigned amount modulo the size of
2994 the arguments. Both arguments and the result have the bitwidth specified
2995 by the name of the builtin. These builtins can be used within constant
2996 expressions.
2998 ``__builtin_rotateright``
2999 -------------------------
3001 * ``__builtin_rotateright8``
3002 * ``__builtin_rotateright16``
3003 * ``__builtin_rotateright32``
3004 * ``__builtin_rotateright64``
3006 **Syntax**:
3008 .. code-block:: c++
3010      __builtin_rotateright32(x, y)
3012 **Examples**:
3014 .. code-block:: c++
3016       uint8_t rot_x = __builtin_rotateright8(x, y);
3017       uint16_t rot_x = __builtin_rotateright16(x, y);
3018       uint32_t rot_x = __builtin_rotateright32(x, y);
3019       uint64_t rot_x = __builtin_rotateright64(x, y);
3021 **Description**:
3023 The '``__builtin_rotateright``' family of builtins is used to rotate
3024 the bits in the first argument by the amount in the second argument.
3025 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
3026 The shift value is treated as an unsigned amount modulo the size of
3027 the arguments. Both arguments and the result have the bitwidth specified
3028 by the name of the builtin. These builtins can be used within constant
3029 expressions.
3031 ``__builtin_unreachable``
3032 -------------------------
3034 ``__builtin_unreachable`` is used to indicate that a specific point in the
3035 program cannot be reached, even if the compiler might otherwise think it can.
3036 This is useful to improve optimization and eliminates certain warnings.  For
3037 example, without the ``__builtin_unreachable`` in the example below, the
3038 compiler assumes that the inline asm can fall through and prints a "function
3039 declared '``noreturn``' should not return" warning.
3041 **Syntax**:
3043 .. code-block:: c++
3045     __builtin_unreachable()
3047 **Example of use**:
3049 .. code-block:: c++
3051   void myabort(void) __attribute__((noreturn));
3052   void myabort(void) {
3053     asm("int3");
3054     __builtin_unreachable();
3055   }
3057 **Description**:
3059 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
3060 Since it has undefined behavior, it is a statement that it is never reached and
3061 the optimizer can take advantage of this to produce better code.  This builtin
3062 takes no arguments and produces a void result.
3064 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
3066 ``__builtin_unpredictable``
3067 ---------------------------
3069 ``__builtin_unpredictable`` is used to indicate that a branch condition is
3070 unpredictable by hardware mechanisms such as branch prediction logic.
3072 **Syntax**:
3074 .. code-block:: c++
3076     __builtin_unpredictable(long long)
3078 **Example of use**:
3080 .. code-block:: c++
3082   if (__builtin_unpredictable(x > 0)) {
3083      foo();
3084   }
3086 **Description**:
3088 The ``__builtin_unpredictable()`` builtin is expected to be used with control
3089 flow conditions such as in ``if`` and ``switch`` statements.
3091 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
3094 ``__builtin_expect``
3095 --------------------
3097 ``__builtin_expect`` is used to indicate that the value of an expression is
3098 anticipated to be the same as a statically known result.
3100 **Syntax**:
3102 .. code-block:: c++
3104     long __builtin_expect(long expr, long val)
3106 **Example of use**:
3108 .. code-block:: c++
3110   if (__builtin_expect(x, 0)) {
3111      bar();
3112   }
3114 **Description**:
3116 The ``__builtin_expect()`` builtin is typically used with control flow
3117 conditions such as in ``if`` and ``switch`` statements to help branch
3118 prediction. It means that its first argument ``expr`` is expected to take the
3119 value of its second argument ``val``. It always returns ``expr``.
3121 Query for this feature with ``__has_builtin(__builtin_expect)``.
3123 ``__builtin_expect_with_probability``
3124 -------------------------------------
3126 ``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
3127 takes a probability as third argument.
3129 **Syntax**:
3131 .. code-block:: c++
3133     long __builtin_expect_with_probability(long expr, long val, double p)
3135 **Example of use**:
3137 .. code-block:: c++
3139   if (__builtin_expect_with_probability(x, 0, .3)) {
3140      bar();
3141   }
3143 **Description**:
3145 The ``__builtin_expect_with_probability()`` builtin is typically used with
3146 control flow conditions such as in ``if`` and ``switch`` statements to help
3147 branch prediction. It means that its first argument ``expr`` is expected to take
3148 the value of its second argument ``val`` with probability ``p``. ``p`` must be
3149 within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
3151 Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
3153 ``__builtin_prefetch``
3154 ----------------------
3156 ``__builtin_prefetch`` is used to communicate with the cache handler to bring
3157 data into the cache before it gets used.
3159 **Syntax**:
3161 .. code-block:: c++
3163     void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
3165 **Example of use**:
3167 .. code-block:: c++
3169     __builtin_prefetch(a + i);
3171 **Description**:
3173 The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
3174 avoid cache misses when the developer has a good understanding of which data
3175 are going to be used next. ``addr`` is the address that needs to be brought into
3176 the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
3177 for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
3178 indicates the expected persistence of data in cache, from ``0`` which means that
3179 data can be discarded from cache after its next use to ``3`` which means that
3180 data is going to be reused a lot once in cache. ``1`` and ``2`` provide
3181 intermediate behavior between these two extremes.
3183 Query for this feature with ``__has_builtin(__builtin_prefetch)``.
3185 ``__sync_swap``
3186 ---------------
3188 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
3190 **Syntax**:
3192 .. code-block:: c++
3194   type __sync_swap(type *ptr, type value, ...)
3196 **Example of Use**:
3198 .. code-block:: c++
3200   int old_value = __sync_swap(&value, new_value);
3202 **Description**:
3204 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
3205 atomic intrinsics to allow code to atomically swap the current value with the
3206 new value.  More importantly, it helps developers write more efficient and
3207 correct code by avoiding expensive loops around
3208 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
3209 implementation details of ``__sync_lock_test_and_set()``.  The
3210 ``__sync_swap()`` builtin is a full barrier.
3212 ``__builtin_addressof``
3213 -----------------------
3215 ``__builtin_addressof`` performs the functionality of the built-in ``&``
3216 operator, ignoring any ``operator&`` overload.  This is useful in constant
3217 expressions in C++11, where there is no other way to take the address of an
3218 object that overloads ``operator&``. Clang automatically adds
3219 ``[[clang::lifetimebound]]`` to the parameter of ``__builtin_addressof``.
3221 **Example of use**:
3223 .. code-block:: c++
3225   template<typename T> constexpr T *addressof(T &value) {
3226     return __builtin_addressof(value);
3227   }
3229 ``__builtin_function_start``
3230 -----------------------------
3232 ``__builtin_function_start`` returns the address of a function body.
3234 **Syntax**:
3236 .. code-block:: c++
3238   void *__builtin_function_start(function)
3240 **Example of use**:
3242 .. code-block:: c++
3244   void a() {}
3245   void *p = __builtin_function_start(a);
3247   class A {
3248   public:
3249     void a(int n);
3250     void a();
3251   };
3253   void A::a(int n) {}
3254   void A::a() {}
3256   void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
3257   void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
3259 **Description**:
3261 The ``__builtin_function_start`` builtin accepts an argument that can be
3262 constant-evaluated to a function, and returns the address of the function
3263 body.  This builtin is not supported on all targets.
3265 The returned pointer may differ from the normally taken function address
3266 and is not safe to call.  For example, with ``-fsanitize=cfi``, taking a
3267 function address produces a callable pointer to a CFI jump table, while
3268 ``__builtin_function_start`` returns an address that fails
3269 :doc:`cfi-icall<ControlFlowIntegrity>` checks.
3271 ``__builtin_operator_new`` and ``__builtin_operator_delete``
3272 ------------------------------------------------------------
3274 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
3275 ``::operator new(args)``, except that it allows certain optimizations
3276 that the C++ standard does not permit for a direct function call to
3277 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
3278 merging allocations), and that the call is required to resolve to a
3279 `replaceable global allocation function
3280 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
3282 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
3283 ``::operator delete(args)``, except that it permits optimizations
3284 and that the call is required to resolve to a
3285 `replaceable global deallocation function
3286 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
3288 These builtins are intended for use in the implementation of ``std::allocator``
3289 and other similar allocation libraries, and are only available in C++.
3291 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
3292 ``__has_builtin(__builtin_operator_delete)``:
3294   * If the value is at least ``201802L``, the builtins behave as described above.
3296   * If the value is non-zero, the builtins may not support calling arbitrary
3297     replaceable global (de)allocation functions, but do support calling at least
3298     ``::operator new(size_t)`` and ``::operator delete(void*)``.
3300 ``__builtin_preserve_access_index``
3301 -----------------------------------
3303 ``__builtin_preserve_access_index`` specifies a code section where
3304 array subscript access and structure/union member access are relocatable
3305 under bpf compile-once run-everywhere framework. Debuginfo (typically
3306 with ``-g``) is needed, otherwise, the compiler will exit with an error.
3307 The return type for the intrinsic is the same as the type of the
3308 argument.
3310 **Syntax**:
3312 .. code-block:: c
3314   type __builtin_preserve_access_index(type arg)
3316 **Example of Use**:
3318 .. code-block:: c
3320   struct t {
3321     int i;
3322     int j;
3323     union {
3324       int a;
3325       int b;
3326     } c[4];
3327   };
3328   struct t *v = ...;
3329   int *pb =__builtin_preserve_access_index(&v->c[3].b);
3330   __builtin_preserve_access_index(v->j);
3332 ``__builtin_debugtrap``
3333 -----------------------
3335 ``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
3337 **Syntax**:
3339 .. code-block:: c++
3341     __builtin_debugtrap()
3343 **Description**
3345 ``__builtin_debugtrap`` is lowered to the ` ``llvm.debugtrap`` <https://llvm.org/docs/LangRef.html#llvm-debugtrap-intrinsic>`_ builtin. It should have the same effect as setting a breakpoint on the line where the builtin is called.
3347 Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
3350 ``__builtin_trap``
3351 ------------------
3353 ``__builtin_trap`` causes the program to stop its execution abnormally.
3355 **Syntax**:
3357 .. code-block:: c++
3359     __builtin_trap()
3361 **Description**
3363 ``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
3365 Query for this feature with ``__has_builtin(__builtin_trap)``.
3367 ``__builtin_nondeterministic_value``
3368 ------------------------------------
3370 ``__builtin_nondeterministic_value`` returns a valid nondeterministic value of the same type as the provided argument.
3372 **Syntax**:
3374 .. code-block:: c++
3376     type __builtin_nondeterministic_value(type x)
3378 **Examples**:
3380 .. code-block:: c++
3382     int x = __builtin_nondeterministic_value(x);
3383     float y = __builtin_nondeterministic_value(y);
3384     __m256i a = __builtin_nondeterministic_value(a);
3386 **Description**
3388 Each call to ``__builtin_nondeterministic_value`` returns a valid value of the type given by the argument.
3390 The types currently supported are: integer types, floating-point types, vector types.
3392 Query for this feature with ``__has_builtin(__builtin_nondeterministic_value)``.
3394 ``__builtin_sycl_unique_stable_name``
3395 -------------------------------------
3397 ``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3398 produces a string literal containing a unique name for the type that is stable
3399 across split compilations, mainly to support SYCL/Data Parallel C++ language.
3401 In cases where the split compilation needs to share a unique token for a type
3402 across the boundary (such as in an offloading situation), this name can be used
3403 for lookup purposes, such as in the SYCL Integration Header.
3405 The value of this builtin is computed entirely at compile time, so it can be
3406 used in constant expressions. This value encodes lambda functions based on a
3407 stable numbering order in which they appear in their local declaration contexts.
3408 Once this builtin is evaluated in a constexpr context, it is erroneous to use
3409 it in an instantiation which changes its value.
3411 In order to produce the unique name, the current implementation of the builtin
3412 uses Itanium mangling even if the host compilation uses a different name
3413 mangling scheme at runtime. The mangler marks all the lambdas required to name
3414 the SYCL kernel and emits a stable local ordering of the respective lambdas.
3415 The resulting pattern is demanglable.  When non-lambda types are passed to the
3416 builtin, the mangler emits their usual pattern without any special treatment.
3418 **Syntax**:
3420 .. code-block:: c
3422   // Computes a unique stable name for the given type.
3423   constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3425 Multiprecision Arithmetic Builtins
3426 ----------------------------------
3428 Clang provides a set of builtins which expose multiprecision arithmetic in a
3429 manner amenable to C. They all have the following form:
3431 .. code-block:: c
3433   unsigned x = ..., y = ..., carryin = ..., carryout;
3434   unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3436 Thus one can form a multiprecision addition chain in the following manner:
3438 .. code-block:: c
3440   unsigned *x, *y, *z, carryin=0, carryout;
3441   z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3442   carryin = carryout;
3443   z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3444   carryin = carryout;
3445   z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3446   carryin = carryout;
3447   z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3449 The complete list of builtins are:
3451 .. code-block:: c
3453   unsigned char      __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3454   unsigned short     __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3455   unsigned           __builtin_addc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3456   unsigned long      __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3457   unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3458   unsigned char      __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3459   unsigned short     __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3460   unsigned           __builtin_subc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3461   unsigned long      __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3462   unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3464 Checked Arithmetic Builtins
3465 ---------------------------
3467 Clang provides a set of builtins that implement checked arithmetic for security
3468 critical applications in a manner that is fast and easily expressible in C. As
3469 an example of their usage:
3471 .. code-block:: c
3473   errorcode_t security_critical_application(...) {
3474     unsigned x, y, result;
3475     ...
3476     if (__builtin_mul_overflow(x, y, &result))
3477       return kErrorCodeHackers;
3478     ...
3479     use_multiply(result);
3480     ...
3481   }
3483 Clang provides the following checked arithmetic builtins:
3485 .. code-block:: c
3487   bool __builtin_add_overflow   (type1 x, type2 y, type3 *sum);
3488   bool __builtin_sub_overflow   (type1 x, type2 y, type3 *diff);
3489   bool __builtin_mul_overflow   (type1 x, type2 y, type3 *prod);
3490   bool __builtin_uadd_overflow  (unsigned x, unsigned y, unsigned *sum);
3491   bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
3492   bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
3493   bool __builtin_usub_overflow  (unsigned x, unsigned y, unsigned *diff);
3494   bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
3495   bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
3496   bool __builtin_umul_overflow  (unsigned x, unsigned y, unsigned *prod);
3497   bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
3498   bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
3499   bool __builtin_sadd_overflow  (int x, int y, int *sum);
3500   bool __builtin_saddl_overflow (long x, long y, long *sum);
3501   bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
3502   bool __builtin_ssub_overflow  (int x, int y, int *diff);
3503   bool __builtin_ssubl_overflow (long x, long y, long *diff);
3504   bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
3505   bool __builtin_smul_overflow  (int x, int y, int *prod);
3506   bool __builtin_smull_overflow (long x, long y, long *prod);
3507   bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
3509 Each builtin performs the specified mathematical operation on the
3510 first two arguments and stores the result in the third argument.  If
3511 possible, the result will be equal to mathematically-correct result
3512 and the builtin will return 0.  Otherwise, the builtin will return
3513 1 and the result will be equal to the unique value that is equivalent
3514 to the mathematically-correct result modulo two raised to the *k*
3515 power, where *k* is the number of bits in the result type.  The
3516 behavior of these builtins is well-defined for all argument values.
3518 The first three builtins work generically for operands of any integer type,
3519 including boolean types.  The operands need not have the same type as each
3520 other, or as the result.  The other builtins may implicitly promote or
3521 convert their operands before performing the operation.
3523 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3525 Floating point builtins
3526 ---------------------------------------
3528 ``__builtin_isfpclass``
3529 -----------------------
3531 ``__builtin_isfpclass`` is used to test if the specified floating-point values
3532 fall into one of the specified floating-point classes.
3534 **Syntax**:
3536 .. code-block:: c++
3538     int __builtin_isfpclass(fp_type expr, int mask)
3539     int_vector __builtin_isfpclass(fp_vector expr, int mask)
3541 **Example of use**:
3543 .. code-block:: c++
3545   if (__builtin_isfpclass(x, 448)) {
3546      // `x` is positive finite value
3547          ...
3548   }
3550 **Description**:
3552 The ``__builtin_isfpclass()`` builtin is a generalization of functions ``isnan``,
3553 ``isinf``, ``isfinite`` and some others defined by the C standard. It tests if
3554 the floating-point value, specified by the first argument, falls into any of data
3555 classes, specified by the second argument. The latter is an integer constant
3556 bitmask expression, in which each data class is represented by a bit
3557 using the encoding:
3559 ========== =================== ======================
3560 Mask value Data class          Macro
3561 ========== =================== ======================
3562 0x0001     Signaling NaN       __FPCLASS_SNAN
3563 0x0002     Quiet NaN           __FPCLASS_QNAN
3564 0x0004     Negative infinity   __FPCLASS_NEGINF
3565 0x0008     Negative normal     __FPCLASS_NEGNORMAL
3566 0x0010     Negative subnormal  __FPCLASS_NEGSUBNORMAL
3567 0x0020     Negative zero       __FPCLASS_NEGZERO
3568 0x0040     Positive zero       __FPCLASS_POSZERO
3569 0x0080     Positive subnormal  __FPCLASS_POSSUBNORMAL
3570 0x0100     Positive normal     __FPCLASS_POSNORMAL
3571 0x0200     Positive infinity   __FPCLASS_POSINF
3572 ========== =================== ======================
3574 For convenience preprocessor defines macros for these values. The function
3575 returns 1 if ``expr`` falls into one of the specified data classes, 0 otherwise.
3577 In the example above the mask value 448 (0x1C0) contains the bits selecting
3578 positive zero, positive subnormal and positive normal classes.
3579 ``__builtin_isfpclass(x, 448)`` would return true only if ``x`` if of any of
3580 these data classes. Using suitable mask value, the function can implement any of
3581 the standard classification functions, for example, ``__builtin_isfpclass(x, 3)``
3582 is identical to ``isnan``,``__builtin_isfpclass(x, 504)`` - to ``isfinite``
3583 and so on.
3585 If the first argument is a vector, the function is equivalent to the set of
3586 scalar calls of ``__builtin_isfpclass`` applied to the input elementwise.
3588 The result of ``__builtin_isfpclass`` is a boolean value, if the first argument
3589 is a scalar, or an integer vector with the same element count as the first
3590 argument. The element type in this vector has the same bit length as the
3591 element of the the first argument type.
3593 This function never raises floating-point exceptions and does not canonicalize
3594 its input. The floating-point argument is not promoted, its data class is
3595 determined based on its representation in its actual semantic type.
3597 ``__builtin_canonicalize``
3598 --------------------------
3600 .. code-block:: c
3602    double __builtin_canonicalize(double);
3603    float __builtin_canonicalizef(float);
3604    long double __builtin_canonicalizel(long double);
3606 Returns the platform specific canonical encoding of a floating point
3607 number. This canonicalization is useful for implementing certain
3608 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3609 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3610 more information on the semantics.
3612 ``__builtin_flt_rounds`` and ``__builtin_set_flt_rounds``
3613 ---------------------------------------------------------
3615 .. code-block:: c
3617    int __builtin_flt_rounds();
3618    void __builtin_set_flt_rounds(int);
3620 Returns and sets current floating point rounding mode. The encoding of returned
3621 values and input parameters is same as the result of FLT_ROUNDS, specified by C
3622 standard:
3623 - ``0``  - toward zero
3624 - ``1``  - to nearest, ties to even
3625 - ``2``  - toward positive infinity
3626 - ``3``  - toward negative infinity
3627 - ``4``  - to nearest, ties away from zero
3628 The effect of passing some other value to ``__builtin_flt_rounds`` is
3629 implementation-defined. ``__builtin_set_flt_rounds`` is currently only supported
3630 to work on x86, x86_64, Arm and AArch64 targets. These builtins read and modify
3631 the floating-point environment, which is not always allowed and may have unexpected
3632 behavior. Please see the section on `Accessing the floating point environment <https://clang.llvm.org/docs/UsersManual.html#accessing-the-floating-point-environment>`_ for more information.
3634 String builtins
3635 ---------------
3637 Clang provides constant expression evaluation support for builtins forms of
3638 the following functions from the C standard library headers
3639 ``<string.h>`` and ``<wchar.h>``:
3641 * ``memchr``
3642 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3643 * ``strchr``
3644 * ``strcmp``
3645 * ``strlen``
3646 * ``strncmp``
3647 * ``wcschr``
3648 * ``wcscmp``
3649 * ``wcslen``
3650 * ``wcsncmp``
3651 * ``wmemchr``
3652 * ``wmemcmp``
3654 In each case, the builtin form has the name of the C library function prefixed
3655 by ``__builtin_``. Example:
3657 .. code-block:: c
3659   void *p = __builtin_memchr("foobar", 'b', 5);
3661 In addition to the above, one further builtin is provided:
3663 .. code-block:: c
3665   char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3667 ``__builtin_char_memchr(a, b, c)`` is identical to
3668 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3669 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3670 is disallowed in general).
3672 Constant evaluation support for the ``__builtin_mem*`` functions is provided
3673 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3674 despite these functions accepting an argument of type ``const void*``.
3676 Support for constant expression evaluation for the above builtins can be detected
3677 with ``__has_feature(cxx_constexpr_string_builtins)``.
3679 Variadic function builtins
3680 --------------------------
3682 Clang provides several builtins for working with variadic functions from the C
3683 standard library ``<stdarg.h>`` header:
3685 * ``__builtin_va_list``
3687 A predefined typedef for the target-specific ``va_list`` type.
3689 * ``void __builtin_va_start(__builtin_va_list list, <parameter-name>)``
3691 A builtin function for the target-specific ``va_start`` function-like macro.
3692 The ``parameter-name`` argument is the name of the parameter preceding the
3693 ellipsis (``...``) in the function signature. Alternatively, in C23 mode or
3694 later, it may be the integer literal ``0`` if there is no parameter preceding
3695 the ellipsis. This function initializes the given ``__builtin_va_list`` object.
3696 It is undefined behavior to call this function on an already initialized
3697 ``__builin_va_list`` object.
3699 * ``void __builtin_va_end(__builtin_va_list list)``
3701 A builtin function for the target-specific ``va_end`` function-like macro. This
3702 function finalizes the given ``__builtin_va_list`` object such that it is no
3703 longer usable unless re-initialized with a call to ``__builtin_va_start`` or
3704 ``__builtin_va_copy``. It is undefined behavior to call this function with a
3705 ``list`` that has not been initialized by either ``__builtin_va_start`` or
3706 ``__builtin_va_copy``.
3708 * ``<type-name> __builtin_va_arg(__builtin_va_list list, <type-name>)``
3710 A builtin function for the target-specific ``va_arg`` function-like macro. This
3711 function returns the value of the next variadic argument to the call. It is
3712 undefined behavior to call this builtin when there is no next variadic argument
3713 to retrieve or if the next variadic argument does not have a type compatible
3714 with the given ``type-name``. The return type of the function is the
3715 ``type-name`` given as the second argument. It is undefined behavior to call
3716 this function with a ``list`` that has not been initialized by either
3717 ``__builtin_va_start`` or ``__builtin_va_copy``.
3719 * ``void __builtin_va_copy(__builtin_va_list dest, __builtin_va_list src)``
3721 A builtin function for the target-specific ``va_copy`` function-like macro.
3722 This function initializes ``dest`` as a copy of ``src``. It is undefined
3723 behavior to call this function with an already initialized ``dest`` argument.
3725 Memory builtins
3726 ---------------
3728 Clang provides constant expression evaluation support for builtin forms of the
3729 following functions from the C standard library headers
3730 ``<string.h>`` and ``<wchar.h>``:
3732 * ``memcpy``
3733 * ``memmove``
3734 * ``wmemcpy``
3735 * ``wmemmove``
3737 In each case, the builtin form has the name of the C library function prefixed
3738 by ``__builtin_``.
3740 Constant evaluation support is only provided when the source and destination
3741 are pointers to arrays with the same trivially copyable element type, and the
3742 given size is an exact multiple of the element size that is no greater than
3743 the number of elements accessible through the source and destination operands.
3745 Guaranteed inlined copy
3746 ^^^^^^^^^^^^^^^^^^^^^^^
3748 .. code-block:: c
3750   void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3753 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
3754 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3755 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3756 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3757 for more information.
3759 This is useful to implement a custom version of ``memcpy``, implement a
3760 ``libc`` memcpy or work around the absence of a ``libc``.
3762 Note that the `size` argument must be a compile time constant.
3764 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3766 Guaranteed inlined memset
3767 ^^^^^^^^^^^^^^^^^^^^^^^^^
3769 .. code-block:: c
3771   void __builtin_memset_inline(void *dst, int value, size_t size);
3774 ``__builtin_memset_inline`` has been designed as a building block for efficient
3775 ``memset`` implementations. It is identical to ``__builtin_memset`` but also
3776 guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3777 <https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3778 for more information.
3780 This is useful to implement a custom version of ``memset``, implement a
3781 ``libc`` memset or work around the absence of a ``libc``.
3783 Note that the `size` argument must be a compile time constant.
3785 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3787 Atomic Min/Max builtins with memory ordering
3788 --------------------------------------------
3790 There are two atomic builtins with min/max in-memory comparison and swap.
3791 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3793 * ``__atomic_fetch_min``
3794 * ``__atomic_fetch_max``
3796 The builtins work with signed and unsigned integers and require to specify memory ordering.
3797 The return value is the original value that was stored in memory before comparison.
3799 Example:
3801 .. code-block:: c
3803   unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3805 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
3806 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
3807 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
3809 In terms of acquire-release ordering barriers these two operations are always
3810 considered as operations with *load-store* semantics, even when the original value
3811 is not actually modified after comparison.
3813 .. _langext-__c11_atomic:
3815 __c11_atomic builtins
3816 ---------------------
3818 Clang provides a set of builtins which are intended to be used to implement
3819 C11's ``<stdatomic.h>`` header.  These builtins provide the semantics of the
3820 ``_explicit`` form of the corresponding C11 operation, and are named with a
3821 ``__c11_`` prefix.  The supported operations, and the differences from
3822 the corresponding C11 operations, are:
3824 * ``__c11_atomic_init``
3825 * ``__c11_atomic_thread_fence``
3826 * ``__c11_atomic_signal_fence``
3827 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
3828   ``_Atomic(...)`` object, instead of its address)
3829 * ``__c11_atomic_store``
3830 * ``__c11_atomic_load``
3831 * ``__c11_atomic_exchange``
3832 * ``__c11_atomic_compare_exchange_strong``
3833 * ``__c11_atomic_compare_exchange_weak``
3834 * ``__c11_atomic_fetch_add``
3835 * ``__c11_atomic_fetch_sub``
3836 * ``__c11_atomic_fetch_and``
3837 * ``__c11_atomic_fetch_or``
3838 * ``__c11_atomic_fetch_xor``
3839 * ``__c11_atomic_fetch_nand`` (Nand is not presented in ``<stdatomic.h>``)
3840 * ``__c11_atomic_fetch_max``
3841 * ``__c11_atomic_fetch_min``
3843 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3844 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3845 provided, with values corresponding to the enumerators of C11's
3846 ``memory_order`` enumeration.
3848 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
3849 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3850 atomic builtins are an explicit form of the corresponding OpenCL 2.0
3851 builtin function, and are named with a ``__opencl_`` prefix. The macros
3852 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
3853 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
3854 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3855 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3857 Low-level ARM exclusive memory builtins
3858 ---------------------------------------
3860 Clang provides overloaded builtins giving direct access to the three key ARM
3861 instructions for implementing atomic operations.
3863 .. code-block:: c
3865   T __builtin_arm_ldrex(const volatile T *addr);
3866   T __builtin_arm_ldaex(const volatile T *addr);
3867   int __builtin_arm_strex(T val, volatile T *addr);
3868   int __builtin_arm_stlex(T val, volatile T *addr);
3869   void __builtin_arm_clrex(void);
3871 The types ``T`` currently supported are:
3873 * Integer types with width at most 64 bits (or 128 bits on AArch64).
3874 * Floating-point types
3875 * Pointer types.
3877 Note that the compiler does not guarantee it will not insert stores which clear
3878 the exclusive monitor in between an ``ldrex`` type operation and its paired
3879 ``strex``. In practice this is only usually a risk when the extra store is on
3880 the same cache line as the variable being modified and Clang will only insert
3881 stack stores on its own, so it is best not to use these operations on variables
3882 with automatic storage duration.
3884 Also, loads and stores may be implicit in code written between the ``ldrex`` and
3885 ``strex``. Clang will not necessarily mitigate the effects of these either, so
3886 care should be exercised.
3888 For these reasons the higher level atomic primitives should be preferred where
3889 possible.
3891 Non-temporal load/store builtins
3892 --------------------------------
3894 Clang provides overloaded builtins allowing generation of non-temporal memory
3895 accesses.
3897 .. code-block:: c
3899   T __builtin_nontemporal_load(T *addr);
3900   void __builtin_nontemporal_store(T value, T *addr);
3902 The types ``T`` currently supported are:
3904 * Integer types.
3905 * Floating-point types.
3906 * Vector types.
3908 Note that the compiler does not guarantee that non-temporal loads or stores
3909 will be used.
3911 C++ Coroutines support builtins
3912 --------------------------------
3914 .. warning::
3915   This is a work in progress. Compatibility across Clang/LLVM releases is not
3916   guaranteed.
3918 Clang provides experimental builtins to support C++ Coroutines as defined by
3919 https://wg21.link/P0057. The following four are intended to be used by the
3920 standard library to implement the ``std::coroutine_handle`` type.
3922 **Syntax**:
3924 .. code-block:: c
3926   void  __builtin_coro_resume(void *addr);
3927   void  __builtin_coro_destroy(void *addr);
3928   bool  __builtin_coro_done(void *addr);
3929   void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
3931 **Example of use**:
3933 .. code-block:: c++
3935   template <> struct coroutine_handle<void> {
3936     void resume() const { __builtin_coro_resume(ptr); }
3937     void destroy() const { __builtin_coro_destroy(ptr); }
3938     bool done() const { return __builtin_coro_done(ptr); }
3939     // ...
3940   protected:
3941     void *ptr;
3942   };
3944   template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3945     // ...
3946     Promise &promise() const {
3947       return *reinterpret_cast<Promise *>(
3948         __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3949     }
3950     static coroutine_handle from_promise(Promise &promise) {
3951       coroutine_handle p;
3952       p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3953                                                       /*from-promise=*/true);
3954       return p;
3955     }
3956   };
3959 Other coroutine builtins are either for internal clang use or for use during
3960 development of the coroutine feature. See `Coroutines in LLVM
3961 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3962 more information on their semantics. Note that builtins matching the intrinsics
3963 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
3964 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
3965 an appropriate value during the emission.
3967 **Syntax**:
3969 .. code-block:: c
3971   size_t __builtin_coro_size()
3972   void  *__builtin_coro_frame()
3973   void  *__builtin_coro_free(void *coro_frame)
3975   void  *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
3976   bool   __builtin_coro_alloc()
3977   void  *__builtin_coro_begin(void *memory)
3978   void   __builtin_coro_end(void *coro_frame, bool unwind)
3979   char   __builtin_coro_suspend(bool final)
3981 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
3982 automatically will insert one if the first argument to `llvm.coro.suspend` is
3983 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
3984 as the first argument to the intrinsic.
3986 Source location builtins
3987 ------------------------
3989 Clang provides builtins to support C++ standard library implementation
3990 of ``std::source_location`` as specified in C++20.  With the exception
3991 of ``__builtin_COLUMN``, ``__builtin_FILE_NAME`` and ``__builtin_FUNCSIG``,
3992 these builtins are also implemented by GCC.
3994 **Syntax**:
3996 .. code-block:: c
3998   const char *__builtin_FILE();
3999   const char *__builtin_FILE_NAME(); // Clang only
4000   const char *__builtin_FUNCTION();
4001   const char *__builtin_FUNCSIG(); // Microsoft
4002   unsigned    __builtin_LINE();
4003   unsigned    __builtin_COLUMN(); // Clang only
4004   const std::source_location::__impl *__builtin_source_location();
4006 **Example of use**:
4008 .. code-block:: c++
4010   void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
4011                  const char* file = __builtin_FILE(),
4012                  const char* function = __builtin_FUNCTION()) {
4013     if (pred) return;
4014     printf("%s:%d assertion failed in function %s\n", file, line, function);
4015     std::abort();
4016   }
4018   struct MyAggregateType {
4019     int x;
4020     int line = __builtin_LINE(); // captures line where aggregate initialization occurs
4021   };
4022   static_assert(MyAggregateType{42}.line == __LINE__);
4024   struct MyClassType {
4025     int line = __builtin_LINE(); // captures line of the constructor used during initialization
4026     constexpr MyClassType(int) { assert(line == __LINE__); }
4027   };
4029 **Description**:
4031 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, ``__builtin_FUNCSIG``,
4032 ``__builtin_FILE`` and ``__builtin_FILE_NAME`` return the values, at the
4033 "invocation point", for ``__LINE__``, ``__FUNCTION__``, ``__FUNCSIG__``,
4034 ``__FILE__`` and ``__FILE_NAME__`` respectively. ``__builtin_COLUMN`` similarly
4035 returns the column, though there is no corresponding macro. These builtins are
4036 constant expressions.
4038 When the builtins appear as part of a default function argument the invocation
4039 point is the location of the caller. When the builtins appear as part of a
4040 default member initializer, the invocation point is the location of the
4041 constructor or aggregate initialization used to create the object. Otherwise
4042 the invocation point is the same as the location of the builtin.
4044 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
4045 empty string is returned.
4047 The builtin ``__builtin_source_location`` returns a pointer to constant static
4048 data of type ``std::source_location::__impl``. This type must have already been
4049 defined, and must contain exactly four fields: ``const char *_M_file_name``,
4050 ``const char *_M_function_name``, ``<any-integral-type> _M_line``, and
4051 ``<any-integral-type> _M_column``. The fields will be populated in the same
4052 manner as the above four builtins, except that ``_M_function_name`` is populated
4053 with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
4056 Alignment builtins
4057 ------------------
4058 Clang provides builtins to support checking and adjusting alignment of
4059 pointers and integers.
4060 These builtins can be used to avoid relying on implementation-defined behavior
4061 of arithmetic on integers derived from pointers.
4062 Additionally, these builtins retain type information and, unlike bitwise
4063 arithmetic, they can perform semantic checking on the alignment value.
4065 **Syntax**:
4067 .. code-block:: c
4069   Type __builtin_align_up(Type value, size_t alignment);
4070   Type __builtin_align_down(Type value, size_t alignment);
4071   bool __builtin_is_aligned(Type value, size_t alignment);
4074 **Example of use**:
4076 .. code-block:: c++
4078   char* global_alloc_buffer;
4079   void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
4080     char* result = __builtin_align_up(global_alloc_buffer, alignment);
4081     // result now contains the value of global_alloc_buffer rounded up to the
4082     // next multiple of alignment.
4083     global_alloc_buffer = result + alloc_size;
4084     return result;
4085   }
4087   void* get_start_of_page(void* ptr) {
4088     return __builtin_align_down(ptr, PAGE_SIZE);
4089   }
4091   void example(char* buffer) {
4092      if (__builtin_is_aligned(buffer, 64)) {
4093        do_fast_aligned_copy(buffer);
4094      } else {
4095        do_unaligned_copy(buffer);
4096      }
4097   }
4099   // In addition to pointers, the builtins can also be used on integer types
4100   // and are evaluatable inside constant expressions.
4101   static_assert(__builtin_align_up(123, 64) == 128, "");
4102   static_assert(__builtin_align_down(123u, 64) == 64u, "");
4103   static_assert(!__builtin_is_aligned(123, 64), "");
4106 **Description**:
4108 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
4109 first argument aligned up/down to the next multiple of the second argument.
4110 If the value is already sufficiently aligned, it is returned unchanged.
4111 The builtin ``__builtin_is_aligned`` returns whether the first argument is
4112 aligned to a multiple of the second argument.
4113 All of these builtins expect the alignment to be expressed as a number of bytes.
4115 These builtins can be used for all integer types as well as (non-function)
4116 pointer types. For pointer types, these builtins operate in terms of the integer
4117 address of the pointer and return a new pointer of the same type (including
4118 qualifiers such as ``const``) with an adjusted address.
4119 When aligning pointers up or down, the resulting value must be within the same
4120 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
4121 This means that arbitrary integer values stored in pointer-type variables must
4122 not be passed to these builtins. For those use cases, the builtins can still be
4123 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
4125 If Clang can determine that the alignment is not a power of two at compile time,
4126 it will result in a compilation failure. If the alignment argument is not a
4127 power of two at run time, the behavior of these builtins is undefined.
4129 Non-standard C++11 Attributes
4130 =============================
4132 Clang's non-standard C++11 attributes live in the ``clang`` attribute
4133 namespace.
4135 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
4136 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
4137 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
4138 (see the list of `GCC function attributes
4139 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
4140 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
4141 `GCC type attributes
4142 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
4143 implementation, these attributes must appertain to the *declarator-id* in a
4144 declaration, which means they must go either at the start of the declaration or
4145 immediately after the name being declared.
4147 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
4148 also applies the GNU ``noreturn`` attribute to ``f``.
4150 .. code-block:: c++
4152   [[gnu::unused]] int a, f [[gnu::noreturn]] ();
4154 Target-Specific Extensions
4155 ==========================
4157 Clang supports some language features conditionally on some targets.
4159 ARM/AArch64 Language Extensions
4160 -------------------------------
4162 Memory Barrier Intrinsics
4163 ^^^^^^^^^^^^^^^^^^^^^^^^^
4164 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
4165 in the `Arm C Language Extensions
4166 <https://github.com/ARM-software/acle/releases>`_.
4167 Note that these intrinsics are implemented as motion barriers that block
4168 reordering of memory accesses and side effect instructions. Other instructions
4169 like simple arithmetic may be reordered around the intrinsic. If you expect to
4170 have no reordering at all, use inline assembly instead.
4172 X86/X86-64 Language Extensions
4173 ------------------------------
4175 The X86 backend has these language extensions:
4177 Memory references to specified segments
4178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4180 Annotating a pointer with address space #256 causes it to be code generated
4181 relative to the X86 GS segment register, address space #257 causes it to be
4182 relative to the X86 FS segment, and address space #258 causes it to be
4183 relative to the X86 SS segment.  Note that this is a very very low-level
4184 feature that should only be used if you know what you're doing (for example in
4185 an OS kernel).
4187 Here is an example:
4189 .. code-block:: c++
4191   #define GS_RELATIVE __attribute__((address_space(256)))
4192   int foo(int GS_RELATIVE *P) {
4193     return *P;
4194   }
4196 Which compiles to (on X86-32):
4198 .. code-block:: gas
4200   _foo:
4201           movl    4(%esp), %eax
4202           movl    %gs:(%eax), %eax
4203           ret
4205 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
4206 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
4207 indicate their support.
4209 PowerPC Language Extensions
4210 ---------------------------
4212 Set the Floating Point Rounding Mode
4213 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4214 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
4215 the floating point rounding mode. This function will use the least significant
4216 two bits of integer argument to set the floating point rounding mode.
4218 .. code-block:: c++
4220   double __builtin_setrnd(int mode);
4222 The effective values for mode are:
4224     - 0 - round to nearest
4225     - 1 - round to zero
4226     - 2 - round to +infinity
4227     - 3 - round to -infinity
4229 Note that the mode argument will modulo 4, so if the integer argument is greater
4230 than 3, it will only use the least significant two bits of the mode.
4231 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
4233 PowerPC cache builtins
4234 ^^^^^^^^^^^^^^^^^^^^^^
4236 The PowerPC architecture specifies instructions implementing cache operations.
4237 Clang provides builtins that give direct programmer access to these cache
4238 instructions.
4240 Currently the following builtins are implemented in clang:
4242 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
4243 to main memory and flushes the copy from the data cache.
4245 **Syntax**:
4247 .. code-block:: c
4249   void __dcbf(const void* addr); /* Data Cache Block Flush */
4251 **Example of Use**:
4253 .. code-block:: c
4255   int a = 1;
4256   __builtin_dcbf (&a);
4258 Extensions for Static Analysis
4259 ==============================
4261 Clang supports additional attributes that are useful for documenting program
4262 invariants and rules for static analysis tools, such as the `Clang Static
4263 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
4264 in the analyzer's `list of source-level annotations
4265 <https://clang-analyzer.llvm.org/annotations.html>`_.
4268 Extensions for Dynamic Analysis
4269 ===============================
4271 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
4272 with :doc:`AddressSanitizer`.
4274 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
4275 with :doc:`ThreadSanitizer`.
4277 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
4278 with :doc:`MemorySanitizer`.
4280 Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
4281 with :doc:`DataFlowSanitizer`.
4283 Use ``__has_feature(safe_stack)`` to check if the code is being built
4284 with :doc:`SafeStack`.
4287 Extensions for selectively disabling optimization
4288 =================================================
4290 Clang provides a mechanism for selectively disabling optimizations in functions
4291 and methods.
4293 To disable optimizations in a single function definition, the GNU-style or C++11
4294 non-standard attribute ``optnone`` can be used.
4296 .. code-block:: c++
4298   // The following functions will not be optimized.
4299   // GNU-style attribute
4300   __attribute__((optnone)) int foo() {
4301     // ... code
4302   }
4303   // C++11 attribute
4304   [[clang::optnone]] int bar() {
4305     // ... code
4306   }
4308 To facilitate disabling optimization for a range of function definitions, a
4309 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
4310 followed by ``off`` or ``on``.
4312 All function definitions in the region between an ``off`` and the following
4313 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
4314 conflict with explicit attributes already present on the function (e.g. the
4315 ones that control inlining).
4317 .. code-block:: c++
4319   #pragma clang optimize off
4320   // This function will be decorated with optnone.
4321   int foo() {
4322     // ... code
4323   }
4325   // optnone conflicts with always_inline, so bar() will not be decorated.
4326   __attribute__((always_inline)) int bar() {
4327     // ... code
4328   }
4329   #pragma clang optimize on
4331 If no ``on`` is found to close an ``off`` region, the end of the region is the
4332 end of the compilation unit.
4334 Note that a stray ``#pragma clang optimize on`` does not selectively enable
4335 additional optimizations when compiling at low optimization levels. This feature
4336 can only be used to selectively disable optimizations.
4338 The pragma has an effect on functions only at the point of their definition; for
4339 function templates, this means that the state of the pragma at the point of an
4340 instantiation is not necessarily relevant. Consider the following example:
4342 .. code-block:: c++
4344   template<typename T> T twice(T t) {
4345     return 2 * t;
4346   }
4348   #pragma clang optimize off
4349   template<typename T> T thrice(T t) {
4350     return 3 * t;
4351   }
4353   int container(int a, int b) {
4354     return twice(a) + thrice(b);
4355   }
4356   #pragma clang optimize on
4358 In this example, the definition of the template function ``twice`` is outside
4359 the pragma region, whereas the definition of ``thrice`` is inside the region.
4360 The ``container`` function is also in the region and will not be optimized, but
4361 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
4362 these two instantiations, ``twice`` will be optimized (because its definition
4363 was outside the region) and ``thrice`` will not be optimized.
4365 Clang also implements MSVC's range-based pragma,
4366 ``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
4367 supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
4368 ``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
4369 the same as ``#pragma clang optimize``. All functions
4370 between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
4372 .. code-block:: c++
4374   #pragma optimize("", off)
4375   // This function will be decorated with optnone.
4376   void f1() {}
4378   #pragma optimize("", on)
4379   // This function will be optimized with whatever was specified on
4380   // the commandline.
4381   void f2() {}
4383   // This will warn with Clang's current implementation.
4384   #pragma optimize("g", on)
4385   void f3() {}
4387 For MSVC, an empty optimization list and ``off`` parameter will turn off
4388 all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
4389 ``on`` parameter will reset the optimizations to the ones specified on the
4390 commandline.
4392 .. list-table:: Parameters (unsupported by Clang)
4394    * - Parameter
4395      - Type of optimization
4396    * - g
4397      - Deprecated
4398    * - s or t
4399      - Short or fast sequences of machine code
4400    * - y
4401      - Enable frame pointers
4403 Extensions for loop hint optimizations
4404 ======================================
4406 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
4407 subsequent for, while, do-while, or c++11 range-based for loop. The directive
4408 provides options for vectorization, interleaving, predication, unrolling and
4409 distribution. Loop hints can be specified before any loop and will be ignored if
4410 the optimization is not safe to apply.
4412 There are loop hints that control transformations (e.g. vectorization, loop
4413 unrolling) and there are loop hints that set transformation options (e.g.
4414 ``vectorize_width``, ``unroll_count``).  Pragmas setting transformation options
4415 imply the transformation is enabled, as if it was enabled via the corresponding
4416 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
4417 disabled  (e.g. ``vectorize(disable)``), that takes precedence over
4418 transformations option pragmas implying that transformation.
4420 Vectorization, Interleaving, and Predication
4421 --------------------------------------------
4423 A vectorized loop performs multiple iterations of the original loop
4424 in parallel using vector instructions. The instruction set of the target
4425 processor determines which vector instructions are available and their vector
4426 widths. This restricts the types of loops that can be vectorized. The vectorizer
4427 automatically determines if the loop is safe and profitable to vectorize. A
4428 vector instruction cost model is used to select the vector width.
4430 Interleaving multiple loop iterations allows modern processors to further
4431 improve instruction-level parallelism (ILP) using advanced hardware features,
4432 such as multiple execution units and out-of-order execution. The vectorizer uses
4433 a cost model that depends on the register pressure and generated code size to
4434 select the interleaving count.
4436 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
4437 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
4438 manually enable vectorization or interleaving.
4440 .. code-block:: c++
4442   #pragma clang loop vectorize(enable)
4443   #pragma clang loop interleave(enable)
4444   for(...) {
4445     ...
4446   }
4448 The vector width is specified by
4449 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
4450 integer and the type of vectorization can be specified with an optional
4451 second parameter. The default for the second parameter is 'fixed' and
4452 refers to fixed width vectorization, whereas 'scalable' indicates the
4453 compiler should use scalable vectors instead. Another use of vectorize_width
4454 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
4455 of vectorization to use without specifying the exact width. In both variants
4456 of the pragma the vectorizer may decide to fall back on fixed width
4457 vectorization if the target does not support scalable vectors.
4459 The interleave count is specified by ``interleave_count(_value_)``, where
4460 _value_ is a positive integer. This is useful for specifying the optimal
4461 width/count of the set of target architectures supported by your application.
4463 .. code-block:: c++
4465   #pragma clang loop vectorize_width(2)
4466   #pragma clang loop interleave_count(2)
4467   for(...) {
4468     ...
4469   }
4471 Specifying a width/count of 1 disables the optimization, and is equivalent to
4472 ``vectorize(disable)`` or ``interleave(disable)``.
4474 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
4476 .. code-block:: c++
4478   #pragma clang loop vectorize(enable)
4479   #pragma clang loop vectorize_predicate(enable)
4480   for(...) {
4481     ...
4482   }
4484 This predicates (masks) all instructions in the loop, which allows the scalar
4485 remainder loop (the tail) to be folded into the main vectorized loop. This
4486 might be more efficient when vector predication is efficiently supported by the
4487 target platform.
4489 Loop Unrolling
4490 --------------
4492 Unrolling a loop reduces the loop control overhead and exposes more
4493 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
4494 eliminates the loop and replaces it with an enumerated sequence of loop
4495 iterations. Full unrolling is only possible if the loop trip count is known at
4496 compile time. Partial unrolling replicates the loop body within the loop and
4497 reduces the trip count.
4499 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
4500 loop if the trip count is known at compile time. If the fully unrolled code size
4501 is greater than an internal limit the loop will be partially unrolled up to this
4502 limit. If the trip count is not known at compile time the loop will be partially
4503 unrolled with a heuristically chosen unroll factor.
4505 .. code-block:: c++
4507   #pragma clang loop unroll(enable)
4508   for(...) {
4509     ...
4510   }
4512 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
4513 loop if the trip count is known at compile time identically to
4514 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
4515 if the loop count is not known at compile time.
4517 .. code-block:: c++
4519   #pragma clang loop unroll(full)
4520   for(...) {
4521     ...
4522   }
4524 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
4525 _value_ is a positive integer. If this value is greater than the trip count the
4526 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
4527 to the same code size limit as with ``unroll(enable)``.
4529 .. code-block:: c++
4531   #pragma clang loop unroll_count(8)
4532   for(...) {
4533     ...
4534   }
4536 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4538 Loop unroll parameters can be controlled by options
4539 `-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4541 Loop Distribution
4542 -----------------
4544 Loop Distribution allows splitting a loop into multiple loops.  This is
4545 beneficial for example when the entire loop cannot be vectorized but some of the
4546 resulting loops can.
4548 If ``distribute(enable))`` is specified and the loop has memory dependencies
4549 that inhibit vectorization, the compiler will attempt to isolate the offending
4550 operations into a new loop.  This optimization is not enabled by default, only
4551 loops marked with the pragma are considered.
4553 .. code-block:: c++
4555   #pragma clang loop distribute(enable)
4556   for (i = 0; i < N; ++i) {
4557     S1: A[i + 1] = A[i] + B[i];
4558     S2: C[i] = D[i] * E[i];
4559   }
4561 This loop will be split into two loops between statements S1 and S2.  The
4562 second loop containing S2 will be vectorized.
4564 Loop Distribution is currently not enabled by default in the optimizer because
4565 it can hurt performance in some cases.  For example, instruction-level
4566 parallelism could be reduced by sequentializing the execution of the
4567 statements S1 and S2 above.
4569 If Loop Distribution is turned on globally with
4570 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4571 be used the disable it on a per-loop basis.
4573 Additional Information
4574 ----------------------
4576 For convenience multiple loop hints can be specified on a single line.
4578 .. code-block:: c++
4580   #pragma clang loop vectorize_width(4) interleave_count(8)
4581   for(...) {
4582     ...
4583   }
4585 If an optimization cannot be applied any hints that apply to it will be ignored.
4586 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4587 proven safe to vectorize. To identify and diagnose optimization issues use
4588 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4589 user guide for details.
4591 Extensions to specify floating-point flags
4592 ====================================================
4594 The ``#pragma clang fp`` pragma allows floating-point options to be specified
4595 for a section of the source code. This pragma can only appear at file scope or
4596 at the start of a compound statement (excluding comments). When using within a
4597 compound statement, the pragma is active within the scope of the compound
4598 statement.
4600 Currently, the following settings can be controlled with this pragma:
4602 ``#pragma clang fp reassociate`` allows control over the reassociation
4603 of floating point expressions. When enabled, this pragma allows the expression
4604 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4605 Reassociation can also occur across multiple statements.
4606 This pragma can be used to disable reassociation when it is otherwise
4607 enabled for the translation unit with the ``-fassociative-math`` flag.
4608 The pragma can take two values: ``on`` and ``off``.
4610 .. code-block:: c++
4612   float f(float x, float y, float z)
4613   {
4614     // Enable floating point reassociation across statements
4615     #pragma clang fp reassociate(on)
4616     float t = x + y;
4617     float v = t + z;
4618   }
4621 ``#pragma clang fp contract`` specifies whether the compiler should
4622 contract a multiply and an addition (or subtraction) into a fused FMA
4623 operation when supported by the target.
4625 The pragma can take three values: ``on``, ``fast`` and ``off``.  The ``on``
4626 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4627 fusion as specified the language standard.  The ``fast`` option allows fusion
4628 in cases when the language standard does not make this possible (e.g. across
4629 statements in C).
4631 .. code-block:: c++
4633   for(...) {
4634     #pragma clang fp contract(fast)
4635     a = b[i] * c[i];
4636     d[i] += a;
4637   }
4640 The pragma can also be used with ``off`` which turns FP contraction off for a
4641 section of the code. This can be useful when fast contraction is otherwise
4642 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4643 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4644 addition across statements regardless of any controlling pragmas.
4646 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4647 may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4648 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4650 .. code-block:: c++
4652   {
4653     // Preserve floating point exceptions
4654     #pragma clang fp exceptions(strict)
4655     z = x + y;
4656     if (fetestexcept(FE_OVERFLOW))
4657       ...
4658   }
4660 A ``#pragma clang fp`` pragma may contain any number of options:
4662 .. code-block:: c++
4664   void func(float *dest, float a, float b) {
4665     #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4666     ...
4667   }
4669 ``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4670 for a section of the source code. This pragma can appear at file or namespace
4671 scope, or at the start of a compound statement (excluding comments).
4672 The pragma is active within the scope of the compound statement.
4674 When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4675 governed by the pragma behaves as though the command-line option
4676 ``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4677 source-defined precision.
4679 When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4680 governed by the pragma behaves as though the command-line option
4681 ``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4682 ``double`` precision.
4684 When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4685 governed by the pragma behaves as though the command-line option
4686 ``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4687 target-dependent ``long double`` precision. In Win32 programming, for instance,
4688 the long double data type maps to the double, 64-bit precision data type.
4690 The full syntax this pragma supports is
4691 ``#pragma clang fp eval_method(source|double|extended)``.
4693 .. code-block:: c++
4695   for(...) {
4696     // The compiler will use long double as the floating-point evaluation
4697     // method.
4698     #pragma clang fp eval_method(extended)
4699     a = b[i] * c[i] + e;
4700   }
4702 Note: ``math.h`` defines the typedefs ``float_t`` and ``double_t`` based on the active
4703 evaluation method at the point where the header is included, not where the
4704 typedefs are used.  Because of this, it is unwise to combine these typedefs with
4705 ``#pragma clang fp eval_method``.  To catch obvious bugs, Clang will emit an
4706 error for any references to these typedefs within the scope of this pragma;
4707 however, this is not a fool-proof protection, and programmers must take care.
4709 The ``#pragma float_control`` pragma allows precise floating-point
4710 semantics and floating-point exception behavior to be specified
4711 for a section of the source code. This pragma can only appear at file or
4712 namespace scope, within a language linkage specification or at the start of a
4713 compound statement (excluding comments). When used within a compound statement,
4714 the pragma is active within the scope of the compound statement.  This pragma
4715 is modeled after a Microsoft pragma with the same spelling and syntax.  For
4716 pragmas specified at file or namespace scope, or within a language linkage
4717 specification, a stack is supported so that the ``pragma float_control``
4718 settings can be pushed or popped.
4720 When ``pragma float_control(precise, on)`` is enabled, the section of code
4721 governed by the pragma uses precise floating point semantics, effectively
4722 ``-ffast-math`` is disabled and ``-ffp-contract=on``
4723 (fused multiply add) is enabled. This pragma enables ``-fmath-errno``.
4725 When ``pragma float_control(precise, off)`` is enabled, unsafe-floating point
4726 optimizations are enabled in the section of code governed by the pragma.
4727 Effectively ``-ffast-math`` is enabled and ``-ffp-contract=fast``. This pragma
4728 disables ``-fmath-errno``.
4730 When ``pragma float_control(except, on)`` is enabled, the section of code
4731 governed by the pragma behaves as though the command-line option
4732 ``-ffp-exception-behavior=strict`` is enabled,
4733 when ``pragma float_control(except, off)`` is enabled, the section of code
4734 governed by the pragma behaves as though the command-line option
4735 ``-ffp-exception-behavior=ignore`` is enabled.
4737 The full syntax this pragma supports is
4738 ``float_control(except|precise, on|off [, push])`` and
4739 ``float_control(push|pop)``.
4740 The ``push`` and ``pop`` forms, including using ``push`` as the optional
4741 third argument, can only occur at file scope.
4743 .. code-block:: c++
4745   for(...) {
4746     // This block will be compiled with -fno-fast-math and -ffp-contract=on
4747     #pragma float_control(precise, on)
4748     a = b[i] * c[i] + e;
4749   }
4751 Specifying an attribute for multiple declarations (#pragma clang attribute)
4752 ===========================================================================
4754 The ``#pragma clang attribute`` directive can be used to apply an attribute to
4755 multiple declarations. The ``#pragma clang attribute push`` variation of the
4756 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4757 can be added to. The ``#pragma clang attribute (...)`` variation adds an
4758 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4759 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4760 shorthand for when you want to add one attribute to a new scope. Multiple push
4761 directives can be nested inside each other.
4763 The attributes that are used in the ``#pragma clang attribute`` directives
4764 can be written using the GNU-style syntax:
4766 .. code-block:: c++
4768   #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4770   void function(); // The function now has the annotate("custom") attribute
4772   #pragma clang attribute pop
4774 The attributes can also be written using the C++11 style syntax:
4776 .. code-block:: c++
4778   #pragma clang attribute push ([[noreturn]], apply_to = function)
4780   void function(); // The function now has the [[noreturn]] attribute
4782   #pragma clang attribute pop
4784 The ``__declspec`` style syntax is also supported:
4786 .. code-block:: c++
4788   #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4790   void function(); // The function now has the __declspec(dllexport) attribute
4792   #pragma clang attribute pop
4794 A single push directive can contain multiple attributes, however,
4795 only one syntax style can be used within a single directive:
4797 .. code-block:: c++
4799   #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4801   void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4803   #pragma clang attribute pop
4805   #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4807   void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4809   #pragma clang attribute pop
4811 Because multiple push directives can be nested, if you're writing a macro that
4812 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4813 required) to add a namespace to your push/pop directives. A pop directive with a
4814 namespace will pop the innermost push that has that same namespace. This will
4815 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4816 that an ``pop`` without a namespace will pop the innermost ``push`` without a
4817 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4818 same namespace. For instance:
4820 .. code-block:: c++
4822    #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4823    #define ASSUME_NORETURN_END   _Pragma("clang attribute AssumeNoreturn.pop")
4825    #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
4826    #define ASSUME_UNAVAILABLE_END   _Pragma("clang attribute Unavailable.pop")
4829    ASSUME_NORETURN_BEGIN
4830    ASSUME_UNAVAILABLE_BEGIN
4831    void function(); // function has [[noreturn]] and __attribute__((unavailable))
4832    ASSUME_NORETURN_END
4833    void other_function(); // function has __attribute__((unavailable))
4834    ASSUME_UNAVAILABLE_END
4836 Without the namespaces on the macros, ``other_function`` will be annotated with
4837 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4838 a contrived example, but its very possible for this kind of situation to appear
4839 in real code if the pragmas are spread out across a large file. You can test if
4840 your version of clang supports namespaces on ``#pragma clang attribute`` with
4841 ``__has_extension(pragma_clang_attribute_namespaces)``.
4843 Subject Match Rules
4844 -------------------
4846 The set of declarations that receive a single attribute from the attribute stack
4847 depends on the subject match rules that were specified in the pragma. Subject
4848 match rules are specified after the attribute. The compiler expects an
4849 identifier that corresponds to the subject set specifier. The ``apply_to``
4850 specifier is currently the only supported subject set specifier. It allows you
4851 to specify match rules that form a subset of the attribute's allowed subject
4852 set, i.e. the compiler doesn't require all of the attribute's subjects. For
4853 example, an attribute like ``[[nodiscard]]`` whose subject set includes
4854 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4855 least one of these rules after ``apply_to``:
4857 .. code-block:: c++
4859   #pragma clang attribute push([[nodiscard]], apply_to = enum)
4861   enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4863   struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4865   #pragma clang attribute pop
4867   #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4869   enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4871   struct Record2 { }; // The struct *will* receive [[nodiscard]]
4873   #pragma clang attribute pop
4875   // This is an error, since [[nodiscard]] can't be applied to namespaces:
4876   #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4878   #pragma clang attribute pop
4880 Multiple match rules can be specified using the ``any`` match rule, as shown
4881 in the example above. The ``any`` rule applies attributes to all declarations
4882 that are matched by at least one of the rules in the ``any``. It doesn't nest
4883 and can't be used inside the other match rules. Redundant match rules or rules
4884 that conflict with one another should not be used inside of ``any``. Failing to
4885 specify a rule within the ``any`` rule results in an error.
4887 Clang supports the following match rules:
4889 - ``function``: Can be used to apply attributes to functions. This includes C++
4890   member functions, static functions, operators, and constructors/destructors.
4892 - ``function(is_member)``: Can be used to apply attributes to C++ member
4893   functions. This includes members like static functions, operators, and
4894   constructors/destructors.
4896 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
4897   member functions, and variables/fields whose type is a function pointer. It
4898   does not apply attributes to Objective-C methods or blocks.
4900 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4901   and C++11 type aliases.
4903 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4904   ``union`` declarations.
4906 - ``record(unless(is_union))``: Can be used to apply attributes only to
4907   ``struct`` and ``class`` declarations.
4909 - ``enum``: Can be be used to apply attributes to enumeration declarations.
4911 - ``enum_constant``: Can be used to apply attributes to enumerators.
4913 - ``variable``: Can be used to apply attributes to variables, including
4914   local variables, parameters, global variables, and static member variables.
4915   It does not apply attributes to instance member variables or Objective-C
4916   ivars.
4918 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4919   variables only.
4921 - ``variable(is_global)``: Can be used to apply attributes to global variables
4922   only.
4924 - ``variable(is_local)``: Can be used to apply attributes to local variables
4925   only.
4927 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
4928   only.
4930 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4931   the variables that are not parameters.
4933 - ``field``: Can be used to apply attributes to non-static member variables
4934   in a record. This includes Objective-C ivars.
4936 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4938 - ``objc_interface``: Can be used to apply attributes to ``@interface``
4939   declarations.
4941 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4942   declarations.
4944 - ``objc_category``: Can be used to apply attributes to category declarations,
4945   including class extensions.
4947 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
4948   including instance and class methods. Implicit methods like implicit property
4949   getters and setters do not receive the attribute.
4951 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
4952   instance methods.
4954 - ``objc_property``: Can be used to apply attributes to ``@property``
4955   declarations.
4957 - ``block``: Can be used to apply attributes to block declarations. This does
4958   not include variables/fields of block pointer type.
4960 The use of ``unless`` in match rules is currently restricted to a strict set of
4961 sub-rules that are used by the supported attributes. That means that even though
4962 ``variable(unless(is_parameter))`` is a valid match rule,
4963 ``variable(unless(is_thread_local))`` is not.
4965 Supported Attributes
4966 --------------------
4968 Not all attributes can be used with the ``#pragma clang attribute`` directive.
4969 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
4970 like ``address_space`` aren't supported by this directive. You can determine
4971 whether or not an attribute is supported by the pragma by referring to the
4972 :doc:`individual documentation for that attribute <AttributeReference>`.
4974 The attributes are applied to all matching declarations individually, even when
4975 the attribute is semantically incorrect. The attributes that aren't applied to
4976 any declaration are not verified semantically.
4978 Specifying section names for global objects (#pragma clang section)
4979 ===================================================================
4981 The ``#pragma clang section`` directive provides a means to assign section-names
4982 to global variables, functions and static variables.
4984 The section names can be specified as:
4986 .. code-block:: c++
4988   #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
4990 The section names can be reverted back to default name by supplying an empty
4991 string to the section kind, for example:
4993 .. code-block:: c++
4995   #pragma clang section bss="" data="" text="" rodata="" relro=""
4997 The ``#pragma clang section`` directive obeys the following rules:
4999 * The pragma applies to all global variable, statics and function declarations
5000   from the pragma to the end of the translation unit.
5002 * The pragma clang section is enabled automatically, without need of any flags.
5004 * This feature is only defined to work sensibly for ELF targets.
5006 * If section name is specified through _attribute_((section("myname"))), then
5007   the attribute name gains precedence.
5009 * Global variables that are initialized to zero will be placed in the named
5010   bss section, if one is present.
5012 * The ``#pragma clang section`` directive does not does try to infer section-kind
5013   from the name. For example, naming a section "``.bss.mySec``" does NOT mean
5014   it will be a bss section name.
5016 * The decision about which section-kind applies to each global is taken in the back-end.
5017   Once the section-kind is known, appropriate section name, as specified by the user using
5018   ``#pragma clang section`` directive, is applied to that global.
5020 Specifying Linker Options on ELF Targets
5021 ========================================
5023 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
5024 The second parameter is the library name (without the traditional Unix prefix of
5025 ``lib``).  This allows you to provide an implicit link of dependent libraries.
5027 Evaluating Object Size Dynamically
5028 ==================================
5030 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
5031 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
5032 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
5033 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
5034 for ``__builtin_object_size`` in libraries that support it.
5036 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
5037 safer:
5039 .. code-block:: c
5041   void copy_into_buffer(size_t size) {
5042     char* buffer = malloc(size);
5043     strlcpy(buffer, "some string", strlen("some string"));
5044     // Previous line preprocesses to:
5045     // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
5046   }
5048 Since the size of ``buffer`` can't be known at compile time, Clang will fold
5049 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
5050 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
5051 ``size``, providing some extra runtime safety.
5053 Deprecating Macros
5054 ==================
5056 Clang supports the pragma ``#pragma clang deprecated``, which can be used to
5057 provide deprecation warnings for macro uses. For example:
5059 .. code-block:: c
5061    #define MIN(x, y) x < y ? x : y
5062    #pragma clang deprecated(MIN, "use std::min instead")
5064    int min(int a, int b) {
5065      return MIN(a, b); // warning: MIN is deprecated: use std::min instead
5066    }
5068 ``#pragma clang deprecated`` should be preferred for this purpose over
5069 ``#pragma GCC warning`` because the warning can be controlled with
5070 ``-Wdeprecated``.
5072 Restricted Expansion Macros
5073 ===========================
5075 Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
5076 used restrict macro expansion in headers. This can be valuable when providing
5077 headers with ABI stability requirements. Any expansion of the annotated macro
5078 processed by the preprocessor after the ``#pragma`` annotation will log a
5079 warning. Redefining the macro or undefining the macro will not be diagnosed, nor
5080 will expansion of the macro within the main source file. For example:
5082 .. code-block:: c
5084    #define TARGET_ARM 1
5085    #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
5087    /// Foo.h
5088    struct Foo {
5089    #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
5090      uint32_t X;
5091    #else
5092      uint64_t X;
5093    #endif
5094    };
5096    /// main.c
5097    #include "foo.h"
5098    #if TARGET_ARM // No warning in main source file
5099    X_TYPE uint32_t
5100    #else
5101    X_TYPE uint64_t
5102    #endif
5104 This warning is controlled by ``-Wpedantic-macros``.
5106 Final Macros
5107 ============
5109 Clang supports the pragma ``#pragma clang final``, which can be used to
5110 mark macros as final, meaning they cannot be undef'd or re-defined. For example:
5112 .. code-block:: c
5114    #define FINAL_MACRO 1
5115    #pragma clang final(FINAL_MACRO)
5117    #define FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be redefined
5118    #undef FINAL_MACRO  // warning: FINAL_MACRO is marked final and should not be undefined
5120 This is useful for enforcing system-provided macros that should not be altered
5121 in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
5122 macros will always warn on redefinition, including situations with identical
5123 bodies and in system headers.
5125 Line Control
5126 ============
5128 Clang supports an extension for source line control, which takes the
5129 form of a preprocessor directive starting with an unsigned integral
5130 constant. In addition to the standard ``#line`` directive, this form
5131 allows control of an include stack and header file type, which is used
5132 in issuing diagnostics. These lines are emitted in preprocessed
5133 output.
5135 .. code-block:: c
5137    # <line:number> <filename:string> <header-type:numbers>
5139 The filename is optional, and if unspecified indicates no change in
5140 source filename. The header-type is an optional, whitespace-delimited,
5141 sequence of magic numbers as follows.
5143 * ``1:`` Push the current source file name onto the include stack and
5144   enter a new file.
5146 * ``2``: Pop the include stack and return to the specified file. If
5147   the filename is ``""``, the name popped from the include stack is
5148   used. Otherwise there is no requirement that the specified filename
5149   matches the current source when originally pushed.
5151 * ``3``: Enter a system-header region. System headers often contain
5152   implementation-specific source that would normally emit a diagnostic.
5154 * ``4``: Enter an implicit ``extern "C"`` region. This is not required on
5155   modern systems where system headers are C++-aware.
5157 At most a single ``1`` or ``2`` can be present, and values must be in
5158 ascending order.
5160 Examples are:
5162 .. code-block:: c
5164    # 57 // Advance (or return) to line 57 of the current source file
5165    # 57 "frob" // Set to line 57 of "frob"
5166    # 1 "foo.h" 1 // Enter "foo.h" at line 1
5167    # 59 "main.c" 2 // Leave current include and return to "main.c"
5168    # 1 "/usr/include/stdio.h" 1 3 // Enter a system header
5169    # 60 "" 2 // return to "main.c"
5170    # 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
5172 Extended Integer Types
5173 ======================
5175 Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
5176 and in C++. This type was previously implemented in Clang with the same
5177 semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
5178 favor of the standard type.
5180 Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
5181 so this type should not yet be used in interfaces that require ABI stability.
5183 Intrinsics Support within Constant Expressions
5184 ==============================================
5186 The following builtin intrinsics can be used in constant expressions:
5188 * ``__builtin_bitreverse8``
5189 * ``__builtin_bitreverse16``
5190 * ``__builtin_bitreverse32``
5191 * ``__builtin_bitreverse64``
5192 * ``__builtin_bswap16``
5193 * ``__builtin_bswap32``
5194 * ``__builtin_bswap64``
5195 * ``__builtin_clrsb``
5196 * ``__builtin_clrsbl``
5197 * ``__builtin_clrsbll``
5198 * ``__builtin_clz``
5199 * ``__builtin_clzl``
5200 * ``__builtin_clzll``
5201 * ``__builtin_clzs``
5202 * ``__builtin_ctz``
5203 * ``__builtin_ctzl``
5204 * ``__builtin_ctzll``
5205 * ``__builtin_ctzs``
5206 * ``__builtin_ffs``
5207 * ``__builtin_ffsl``
5208 * ``__builtin_ffsll``
5209 * ``__builtin_fmax``
5210 * ``__builtin_fmin``
5211 * ``__builtin_fpclassify``
5212 * ``__builtin_inf``
5213 * ``__builtin_isinf``
5214 * ``__builtin_isinf_sign``
5215 * ``__builtin_isfinite``
5216 * ``__builtin_isnan``
5217 * ``__builtin_isnormal``
5218 * ``__builtin_nan``
5219 * ``__builtin_nans``
5220 * ``__builtin_parity``
5221 * ``__builtin_parityl``
5222 * ``__builtin_parityll``
5223 * ``__builtin_popcount``
5224 * ``__builtin_popcountl``
5225 * ``__builtin_popcountll``
5226 * ``__builtin_rotateleft8``
5227 * ``__builtin_rotateleft16``
5228 * ``__builtin_rotateleft32``
5229 * ``__builtin_rotateleft64``
5230 * ``__builtin_rotateright8``
5231 * ``__builtin_rotateright16``
5232 * ``__builtin_rotateright32``
5233 * ``__builtin_rotateright64``
5235 The following x86-specific intrinsics can be used in constant expressions:
5237 * ``_bit_scan_forward``
5238 * ``_bit_scan_reverse``
5239 * ``__bsfd``
5240 * ``__bsfq``
5241 * ``__bsrd``
5242 * ``__bsrq``
5243 * ``__bswap``
5244 * ``__bswapd``
5245 * ``__bswap64``
5246 * ``__bswapq``
5247 * ``_castf32_u32``
5248 * ``_castf64_u64``
5249 * ``_castu32_f32``
5250 * ``_castu64_f64``
5251 * ``__lzcnt16``
5252 * ``__lzcnt``
5253 * ``__lzcnt64``
5254 * ``_mm_popcnt_u32``
5255 * ``_mm_popcnt_u64``
5256 * ``_popcnt32``
5257 * ``_popcnt64``
5258 * ``__popcntd``
5259 * ``__popcntq``
5260 * ``__popcnt16``
5261 * ``__popcnt``
5262 * ``__popcnt64``
5263 * ``__rolb``
5264 * ``__rolw``
5265 * ``__rold``
5266 * ``__rolq``
5267 * ``__rorb``
5268 * ``__rorw``
5269 * ``__rord``
5270 * ``__rorq``
5271 * ``_rotl``
5272 * ``_rotr``
5273 * ``_rotwl``
5274 * ``_rotwr``
5275 * ``_lrotl``
5276 * ``_lrotr``
5278 Debugging the Compiler
5279 ======================
5281 Clang supports a number of pragma directives that help debugging the compiler itself.
5282 Syntax is the following: `#pragma clang __debug <command> <arguments>`.
5283 Note, all of debugging pragmas are subject to change.
5285 `dump`
5286 ------
5287 Accepts either a single identifier or an expression. When a single identifier is passed,
5288 the lookup results for the identifier are printed to `stderr`. When an expression is passed,
5289 the AST for the expression is printed to `stderr`. The expression is an unevaluated operand,
5290 so things like overload resolution and template instantiations are performed,
5291 but the expression has no runtime effects.
5292 Type- and value-dependent expressions are not supported yet.
5294 This facility is designed to aid with testing name lookup machinery.