[flang] Use object before converts in fir.dispatch (#68589)
[llvm-project.git] / clang / docs / LanguageExtensions.rst
blobb9466b5a0bc2087cb973252ae53248eacd7feca3
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 *Elementwise Builtins*
624 Each builtin returns a vector equivalent to applying the specified operation
625 elementwise to the input.
627 Unless specified otherwise operation(±0) = Â±0 and operation(±infinity) = Â±infinity
629 =========================================== ================================================================ =========================================
630          Name                                Operation                                                        Supported element types
631 =========================================== ================================================================ =========================================
632  T __builtin_elementwise_abs(T x)            return the absolute value of a number x; the absolute value of   signed integer and floating point types
633                                              the most negative integer remains the most negative integer
634  T __builtin_elementwise_fma(T x, T y, T z)  fused multiply add, (x * y) +  z.                                floating point types
635  T __builtin_elementwise_ceil(T x)           return the smallest integral value greater than or equal to x    floating point types
636  T __builtin_elementwise_sin(T x)            return the sine of x interpreted as an angle in radians          floating point types
637  T __builtin_elementwise_cos(T x)            return the cosine of x interpreted as an angle in radians        floating point types
638  T __builtin_elementwise_floor(T x)          return the largest integral value less than or equal to x        floating point types
639  T __builtin_elementwise_log(T x)            return the natural logarithm of x                                floating point types
640  T __builtin_elementwise_log2(T x)           return the base 2 logarithm of x                                 floating point types
641  T __builtin_elementwise_log10(T x)          return the base 10 logarithm of x                                floating point types
642  T __builtin_elementwise_pow(T x, T y)       return x raised to the power of y                                floating point types
643  T __builtin_elementwise_bitreverse(T x)     return the integer represented after reversing the bits of x     integer types
644  T __builtin_elementwise_exp(T x)            returns the base-e exponential, e^x, of the specified value      floating point types
645  T __builtin_elementwise_exp2(T x)           returns the base-2 exponential, 2^x, of the specified value      floating point types
647  T __builtin_elementwise_sqrt(T x)           return the square root of a floating-point number                floating point types
648  T __builtin_elementwise_roundeven(T x)      round x to the nearest integer value in floating point format,   floating point types
649                                              rounding halfway cases to even (that is, to the nearest value
650                                              that is an even integer), regardless of the current rounding
651                                              direction.
652  T __builtin_elementwise_round(T x)          round x to the nearest  integer value in floating point format,      floating point types
653                                              rounding halfway cases away from zero, regardless of the
654                                              current rounding direction. May raise floating-point
655                                              exceptions.
656  T __builtin_elementwise_trunc(T x)          return the integral value nearest to but no larger in            floating point types
657                                              magnitude than x
659   T __builtin_elementwise_nearbyint(T x)     round x to the nearest  integer value in floating point format,      floating point types
660                                              rounding according to the current rounding direction.
661                                              May not raise the inexact floating-point exception. This is
662                                              treated the same as ``__builtin_elementwise_rint`` unless
663                                              :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
665  T __builtin_elementwise_rint(T x)           round x to the nearest  integer value in floating point format,      floating point types
666                                              rounding according to the current rounding
667                                              direction. May raise floating-point exceptions. This is treated
668                                              the same as ``__builtin_elementwise_nearbyint`` unless
669                                              :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
671  T __builtin_elementwise_canonicalize(T x)   return the platform specific canonical encoding                  floating point types
672                                              of a floating-point number
673  T __builtin_elementwise_copysign(T x, T y)  return the magnitude of x with the sign of y.                    floating point types
674  T __builtin_elementwise_max(T x, T y)       return x or y, whichever is larger                               integer and floating point types
675  T __builtin_elementwise_min(T x, T y)       return x or y, whichever is smaller                              integer and floating point types
676  T __builtin_elementwise_add_sat(T x, T y)   return the sum of x and y, clamped to the range of               integer types
677                                              representable values for the signed/unsigned integer type.
678  T __builtin_elementwise_sub_sat(T x, T y)   return the difference of x and y, clamped to the range of        integer types
679                                              representable values for the signed/unsigned integer type.
680 =========================================== ================================================================ =========================================
683 *Reduction Builtins*
685 Each builtin returns a scalar equivalent to applying the specified
686 operation(x, y) as recursive even-odd pairwise reduction to all vector
687 elements. ``operation(x, y)`` is repeatedly applied to each non-overlapping
688 even-odd element pair with indices ``i * 2`` and ``i * 2 + 1`` with
689 ``i in [0, Number of elements / 2)``. If the numbers of elements is not a
690 power of 2, the vector is widened with neutral elements for the reduction
691 at the end to the next power of 2.
693 Example:
695 .. code-block:: c++
697     __builtin_reduce_add([e3, e2, e1, e0]) = __builtin_reduced_add([e3 + e2, e1 + e0])
698                                            = (e3 + e2) + (e1 + e0)
701 Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
703 ======================================= ================================================================ ==================================
704          Name                            Operation                                                        Supported element types
705 ======================================= ================================================================ ==================================
706  ET __builtin_reduce_max(VT a)           return x or y, whichever is larger; If exactly one argument is   integer and floating point types
707                                          a NaN, return the other argument. If both arguments are NaNs,
708                                          fmax() return a NaN.
709  ET __builtin_reduce_min(VT a)           return x or y, whichever is smaller; If exactly one argument     integer and floating point types
710                                          is a NaN, return the other argument. If both arguments are
711                                          NaNs, fmax() return a NaN.
712  ET __builtin_reduce_add(VT a)           \+                                                               integer types
713  ET __builtin_reduce_mul(VT a)           \*                                                               integer types
714  ET __builtin_reduce_and(VT a)           &                                                                integer types
715  ET __builtin_reduce_or(VT a)            \|                                                               integer types
716  ET __builtin_reduce_xor(VT a)           ^                                                                integer types
717 ======================================= ================================================================ ==================================
719 Matrix Types
720 ============
722 Clang provides an extension for matrix types, which is currently being
723 implemented. See :ref:`the draft specification <matrixtypes>` for more details.
725 For example, the code below uses the matrix types extension to multiply two 4x4
726 float matrices and add the result to a third 4x4 matrix.
728 .. code-block:: c++
730   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
732   m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
733     return a + b * c;
734   }
736 The matrix type extension also supports operations on a matrix and a scalar.
738 .. code-block:: c++
740   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
742   m4x4_t f(m4x4_t a) {
743     return (a + 23) * 12;
744   }
746 The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
748 .. code-block:: c++
750   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
752   m4x4_t f(m4x4_t a) {
753     a = a / 3.0;
754     return a;
755   }
757 The matrix type extension supports compound assignments for addition, subtraction, and multiplication on matrices
758 and on a matrix and a scalar, provided their types are consistent.
760 .. code-block:: c++
762   typedef float m4x4_t __attribute__((matrix_type(4, 4)));
764   m4x4_t f(m4x4_t a, m4x4_t b) {
765     a += b;
766     a -= b;
767     a *= b;
768     a += 23;
769     a -= 12;
770     return a;
771   }
773 The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
775 .. code-block:: c++
777   typedef int ix5x5 __attribute__((matrix_type(5, 5)));
778   typedef float fx5x5 __attribute__((matrix_type(5, 5)));
780   fx5x5 f1(ix5x5 i, fx5x5 f) {
781     return (fx5x5) i;
782   }
785   template <typename X>
786   using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
788   void f2() {
789     matrix_5_5<double> d;
790     matrix_5_5<int> i;
791     i = (matrix_5_5<int>)d;
792     i = static_cast<matrix_5_5<int>>(d);
793   }
795 Half-Precision Floating Point
796 =============================
798 Clang supports three half-precision (16-bit) floating point types:
799 ``__fp16``, ``_Float16`` and ``__bf16``. These types are supported
800 in all language modes, but their support differs between targets.
801 A target is said to have "native support" for a type if the target
802 processor offers instructions for directly performing basic arithmetic
803 on that type.  In the absence of native support, a type can still be
804 supported if the compiler can emulate arithmetic on the type by promoting
805 to ``float``; see below for more information on this emulation.
807 * ``__fp16`` is supported on all targets. The special semantics of this
808   type mean that no arithmetic is ever performed directly on ``__fp16`` values;
809   see below.
811 * ``_Float16`` is supported on the following targets:
812   * 32-bit ARM (natively on some architecture versions)
813   * 64-bit ARM (AArch64) (natively on ARMv8.2a and above)
814   * AMDGPU (natively)
815   * SPIR (natively)
816   * X86 (if SSE2 is available; natively if AVX512-FP16 is also available)
817   * RISC-V (natively if Zfh or Zhinx is available)
819 * ``__bf16`` is supported on the following targets (currently never natively):
820   * 32-bit ARM
821   * 64-bit ARM (AArch64)
822   * RISC-V
823   * X86 (when SSE2 is available)
825 (For X86, SSE2 is available on 64-bit and all recent 32-bit processors.)
827 ``__fp16`` and ``_Float16`` both use the binary16 format from IEEE
828 754-2008, which provides a 5-bit exponent and an 11-bit significand
829 (counting the implicit leading 1). ``__bf16`` uses the `bfloat16
830 <https://en.wikipedia.org/wiki/Bfloat16_floating-point_format>`_ format,
831 which provides an 8-bit exponent and an 8-bit significand; this is the same
832 exponent range as `float`, just with greatly reduced precision.
834 ``_Float16`` and ``__bf16`` follow the usual rules for arithmetic
835 floating-point types. Most importantly, this means that arithmetic operations
836 on operands of these types are formally performed in the type and produce
837 values of the type. ``__fp16`` does not follow those rules: most operations
838 immediately promote operands of type ``__fp16`` to ``float``, and so
839 arithmetic operations are defined to be performed in ``float`` and so result in
840 a value of type ``float`` (unless further promoted because of other operands).
841 See below for more information on the exact specifications of these types.
843 When compiling arithmetic on ``_Float16`` and ``__bf16`` for a target without
844 native support, Clang will perform the arithmetic in ``float``, inserting
845 extensions and truncations as necessary. This can be done in a way that
846 exactly matches the operation-by-operation behavior of native support,
847 but that can require many extra truncations and extensions. By default,
848 when emulating ``_Float16`` and ``__bf16`` arithmetic using ``float``, Clang
849 does not truncate intermediate operands back to their true type unless the
850 operand is the result of an explicit cast or assignment. This is generally
851 much faster but can generate different results from strict operation-by-operation
852 emulation. Usually the results are more precise. This is permitted by the
853 C and C++ standards under the rules for excess precision in intermediate operands;
854 see the discussion of evaluation formats in the C standard and [expr.pre] in
855 the C++ standard.
857 The use of excess precision can be independently controlled for these two
858 types with the ``-ffloat16-excess-precision=`` and
859 ``-fbfloat16-excess-precision=`` options. Valid values include:
861 * ``none``: meaning to perform strict operation-by-operation emulation
862 * ``standard``: meaning that excess precision is permitted under the rules
863   described in the standard, i.e. never across explicit casts or statements
864 * ``fast``: meaning that excess precision is permitted whenever the
865   optimizer sees an opportunity to avoid truncations; currently this has no
866   effect beyond ``standard``
868 The ``_Float16`` type is an interchange floating type specified in
869 ISO/IEC TS 18661-3:2015 ("Floating-point extensions for C"). It will
870 be supported on more targets as they define ABIs for it.
872 The ``__bf16`` type is a non-standard extension, but it generally follows
873 the rules for arithmetic interchange floating types from ISO/IEC TS
874 18661-3:2015. In previous versions of Clang, it was a storage-only type
875 that forbade arithmetic operations. It will be supported on more targets
876 as they define ABIs for it.
878 The ``__fp16`` type was originally an ARM extension and is specified
879 by the `ARM C Language Extensions <https://github.com/ARM-software/acle/releases>`_.
880 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``,
881 not the ARM alternative format. Operators that expect arithmetic operands
882 immediately promote ``__fp16`` operands to ``float``.
884 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
885 as it has been defined by the C standards committee and has behavior that is
886 more familiar to most programmers.
888 Because ``__fp16`` operands are always immediately promoted to ``float``, the
889 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
890 arithmetic conversions is ``float``.
892 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
893 ``3.14f16``.
895 Because default argument promotion only applies to the standard floating-point
896 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
897 or untyped arguments. As a consequence, some caution must be taken when using
898 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
899 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
900 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
901 ``double`` before using it with an ``%f`` or similar specifier.
903 Messages on ``deprecated`` and ``unavailable`` Attributes
904 =========================================================
906 An optional string message can be added to the ``deprecated`` and
907 ``unavailable`` attributes.  For example:
909 .. code-block:: c++
911   void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
913 If the deprecated or unavailable declaration is used, the message will be
914 incorporated into the appropriate diagnostic:
916 .. code-block:: none
918   harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
919         [-Wdeprecated-declarations]
920     explode();
921     ^
923 Query for this feature with
924 ``__has_extension(attribute_deprecated_with_message)`` and
925 ``__has_extension(attribute_unavailable_with_message)``.
927 Attributes on Enumerators
928 =========================
930 Clang allows attributes to be written on individual enumerators.  This allows
931 enumerators to be deprecated, made unavailable, etc.  The attribute must appear
932 after the enumerator name and before any initializer, like so:
934 .. code-block:: c++
936   enum OperationMode {
937     OM_Invalid,
938     OM_Normal,
939     OM_Terrified __attribute__((deprecated)),
940     OM_AbortOnError __attribute__((deprecated)) = 4
941   };
943 Attributes on the ``enum`` declaration do not apply to individual enumerators.
945 Query for this feature with ``__has_extension(enumerator_attributes)``.
947 C++11 Attributes on using-declarations
948 ======================================
950 Clang allows C++-style ``[[]]`` attributes to be written on using-declarations.
951 For instance:
953 .. code-block:: c++
955   [[clang::using_if_exists]] using foo::bar;
956   using foo::baz [[clang::using_if_exists]];
958 You can test for support for this extension with
959 ``__has_extension(cxx_attributes_on_using_declarations)``.
961 'User-Specified' System Frameworks
962 ==================================
964 Clang provides a mechanism by which frameworks can be built in such a way that
965 they will always be treated as being "system frameworks", even if they are not
966 present in a system framework directory.  This can be useful to system
967 framework developers who want to be able to test building other applications
968 with development builds of their framework, including the manner in which the
969 compiler changes warning behavior for system headers.
971 Framework developers can opt-in to this mechanism by creating a
972 "``.system_framework``" file at the top-level of their framework.  That is, the
973 framework should have contents like:
975 .. code-block:: none
977   .../TestFramework.framework
978   .../TestFramework.framework/.system_framework
979   .../TestFramework.framework/Headers
980   .../TestFramework.framework/Headers/TestFramework.h
981   ...
983 Clang will treat the presence of this file as an indicator that the framework
984 should be treated as a system framework, regardless of how it was found in the
985 framework search path.  For consistency, we recommend that such files never be
986 included in installed versions of the framework.
988 Checks for Standard Language Features
989 =====================================
991 The ``__has_feature`` macro can be used to query if certain standard language
992 features are enabled.  The ``__has_extension`` macro can be used to query if
993 language features are available as an extension when compiling for a standard
994 which does not provide them.  The features which can be tested are listed here.
996 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
997 These are macros with names of the form ``__cpp_<feature_name>``, and are
998 intended to be a portable way to query the supported features of the compiler.
999 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
1000 information on the version of SD-6 supported by each Clang release, and the
1001 macros provided by that revision of the recommendations.
1003 C++98
1004 -----
1006 The features listed below are part of the C++98 standard.  These features are
1007 enabled by default when compiling C++ code.
1009 C++ exceptions
1010 ^^^^^^^^^^^^^^
1012 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
1013 enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
1014 exceptions.
1016 C++ RTTI
1017 ^^^^^^^^
1019 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
1020 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
1022 C++11
1023 -----
1025 The features listed below are part of the C++11 standard.  As a result, all
1026 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
1027 when compiling C++ code.
1029 C++11 SFINAE includes access control
1030 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1032 Use ``__has_feature(cxx_access_control_sfinae)`` or
1033 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
1034 access-control errors (e.g., calling a private constructor) are considered to
1035 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
1036 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
1038 C++11 alias templates
1039 ^^^^^^^^^^^^^^^^^^^^^
1041 Use ``__has_feature(cxx_alias_templates)`` or
1042 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
1043 alias declarations and alias templates is enabled.
1045 C++11 alignment specifiers
1046 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1048 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
1049 determine if support for alignment specifiers using ``alignas`` is enabled.
1051 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
1052 determine if support for the ``alignof`` keyword is enabled.
1054 C++11 attributes
1055 ^^^^^^^^^^^^^^^^
1057 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
1058 determine if support for attribute parsing with C++11's square bracket notation
1059 is enabled.
1061 C++11 generalized constant expressions
1062 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1064 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
1065 constant expressions (e.g., ``constexpr``) is enabled.
1067 C++11 ``decltype()``
1068 ^^^^^^^^^^^^^^^^^^^^
1070 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
1071 determine if support for the ``decltype()`` specifier is enabled.  C++11's
1072 ``decltype`` does not require type-completeness of a function call expression.
1073 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
1074 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
1075 support for this feature is enabled.
1077 C++11 default template arguments in function templates
1078 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1080 Use ``__has_feature(cxx_default_function_template_args)`` or
1081 ``__has_extension(cxx_default_function_template_args)`` to determine if support
1082 for default template arguments in function templates is enabled.
1084 C++11 ``default``\ ed functions
1085 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1087 Use ``__has_feature(cxx_defaulted_functions)`` or
1088 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
1089 defaulted function definitions (with ``= default``) is enabled.
1091 C++11 delegating constructors
1092 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1094 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
1095 delegating constructors is enabled.
1097 C++11 ``deleted`` functions
1098 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1100 Use ``__has_feature(cxx_deleted_functions)`` or
1101 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
1102 function definitions (with ``= delete``) is enabled.
1104 C++11 explicit conversion functions
1105 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1107 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
1108 ``explicit`` conversion functions is enabled.
1110 C++11 generalized initializers
1111 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1113 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
1114 generalized initializers (using braced lists and ``std::initializer_list``) is
1115 enabled.
1117 C++11 implicit move constructors/assignment operators
1118 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1120 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
1121 generate move constructors and move assignment operators where needed.
1123 C++11 inheriting constructors
1124 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1126 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
1127 inheriting constructors is enabled.
1129 C++11 inline namespaces
1130 ^^^^^^^^^^^^^^^^^^^^^^^
1132 Use ``__has_feature(cxx_inline_namespaces)`` or
1133 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
1134 namespaces is enabled.
1136 C++11 lambdas
1137 ^^^^^^^^^^^^^
1139 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
1140 determine if support for lambdas is enabled.
1142 C++11 local and unnamed types as template arguments
1143 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1145 Use ``__has_feature(cxx_local_type_template_args)`` or
1146 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
1147 local and unnamed types as template arguments is enabled.
1149 C++11 noexcept
1150 ^^^^^^^^^^^^^^
1152 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
1153 determine if support for noexcept exception specifications is enabled.
1155 C++11 in-class non-static data member initialization
1156 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1158 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
1159 initialization of non-static data members is enabled.
1161 C++11 ``nullptr``
1162 ^^^^^^^^^^^^^^^^^
1164 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
1165 determine if support for ``nullptr`` is enabled.
1167 C++11 ``override control``
1168 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1170 Use ``__has_feature(cxx_override_control)`` or
1171 ``__has_extension(cxx_override_control)`` to determine if support for the
1172 override control keywords is enabled.
1174 C++11 reference-qualified functions
1175 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1177 Use ``__has_feature(cxx_reference_qualified_functions)`` or
1178 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
1179 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
1180 applied to ``*this``) is enabled.
1182 C++11 range-based ``for`` loop
1183 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1185 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
1186 determine if support for the range-based for loop is enabled.
1188 C++11 raw string literals
1189 ^^^^^^^^^^^^^^^^^^^^^^^^^
1191 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
1192 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
1194 C++11 rvalue references
1195 ^^^^^^^^^^^^^^^^^^^^^^^
1197 Use ``__has_feature(cxx_rvalue_references)`` or
1198 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
1199 references is enabled.
1201 C++11 ``static_assert()``
1202 ^^^^^^^^^^^^^^^^^^^^^^^^^
1204 Use ``__has_feature(cxx_static_assert)`` or
1205 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
1206 assertions using ``static_assert`` is enabled.
1208 C++11 ``thread_local``
1209 ^^^^^^^^^^^^^^^^^^^^^^
1211 Use ``__has_feature(cxx_thread_local)`` to determine if support for
1212 ``thread_local`` variables is enabled.
1214 C++11 type inference
1215 ^^^^^^^^^^^^^^^^^^^^
1217 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
1218 determine C++11 type inference is supported using the ``auto`` specifier.  If
1219 this is disabled, ``auto`` will instead be a storage class specifier, as in C
1220 or C++98.
1222 C++11 strongly typed enumerations
1223 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1225 Use ``__has_feature(cxx_strong_enums)`` or
1226 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
1227 typed, scoped enumerations is enabled.
1229 C++11 trailing return type
1230 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1232 Use ``__has_feature(cxx_trailing_return)`` or
1233 ``__has_extension(cxx_trailing_return)`` to determine if support for the
1234 alternate function declaration syntax with trailing return type is enabled.
1236 C++11 Unicode string literals
1237 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1239 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
1240 string literals is enabled.
1242 C++11 unrestricted unions
1243 ^^^^^^^^^^^^^^^^^^^^^^^^^
1245 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
1246 unrestricted unions is enabled.
1248 C++11 user-defined literals
1249 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1251 Use ``__has_feature(cxx_user_literals)`` to determine if support for
1252 user-defined literals is enabled.
1254 C++11 variadic templates
1255 ^^^^^^^^^^^^^^^^^^^^^^^^
1257 Use ``__has_feature(cxx_variadic_templates)`` or
1258 ``__has_extension(cxx_variadic_templates)`` to determine if support for
1259 variadic templates is enabled.
1261 C++14
1262 -----
1264 The features listed below are part of the C++14 standard.  As a result, all
1265 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
1266 when compiling C++ code.
1268 C++14 binary literals
1269 ^^^^^^^^^^^^^^^^^^^^^
1271 Use ``__has_feature(cxx_binary_literals)`` or
1272 ``__has_extension(cxx_binary_literals)`` to determine whether
1273 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
1274 feature as an extension in all language modes.
1276 C++14 contextual conversions
1277 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1279 Use ``__has_feature(cxx_contextual_conversions)`` or
1280 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
1281 are used when performing an implicit conversion for an array bound in a
1282 *new-expression*, the operand of a *delete-expression*, an integral constant
1283 expression, or a condition in a ``switch`` statement.
1285 C++14 decltype(auto)
1286 ^^^^^^^^^^^^^^^^^^^^
1288 Use ``__has_feature(cxx_decltype_auto)`` or
1289 ``__has_extension(cxx_decltype_auto)`` to determine if support
1290 for the ``decltype(auto)`` placeholder type is enabled.
1292 C++14 default initializers for aggregates
1293 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1295 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
1296 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
1297 for default initializers in aggregate members is enabled.
1299 C++14 digit separators
1300 ^^^^^^^^^^^^^^^^^^^^^^
1302 Use ``__cpp_digit_separators`` to determine if support for digit separators
1303 using single quotes (for instance, ``10'000``) is enabled. At this time, there
1304 is no corresponding ``__has_feature`` name
1306 C++14 generalized lambda capture
1307 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1309 Use ``__has_feature(cxx_init_captures)`` or
1310 ``__has_extension(cxx_init_captures)`` to determine if support for
1311 lambda captures with explicit initializers is enabled
1312 (for instance, ``[n(0)] { return ++n; }``).
1314 C++14 generic lambdas
1315 ^^^^^^^^^^^^^^^^^^^^^
1317 Use ``__has_feature(cxx_generic_lambdas)`` or
1318 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
1319 (polymorphic) lambdas is enabled
1320 (for instance, ``[] (auto x) { return x + 1; }``).
1322 C++14 relaxed constexpr
1323 ^^^^^^^^^^^^^^^^^^^^^^^
1325 Use ``__has_feature(cxx_relaxed_constexpr)`` or
1326 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
1327 declarations, local variable modification, and control flow constructs
1328 are permitted in ``constexpr`` functions.
1330 C++14 return type deduction
1331 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1333 Use ``__has_feature(cxx_return_type_deduction)`` or
1334 ``__has_extension(cxx_return_type_deduction)`` to determine if support
1335 for return type deduction for functions (using ``auto`` as a return type)
1336 is enabled.
1338 C++14 runtime-sized arrays
1339 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1341 Use ``__has_feature(cxx_runtime_array)`` or
1342 ``__has_extension(cxx_runtime_array)`` to determine if support
1343 for arrays of runtime bound (a restricted form of variable-length arrays)
1344 is enabled.
1345 Clang's implementation of this feature is incomplete.
1347 C++14 variable templates
1348 ^^^^^^^^^^^^^^^^^^^^^^^^
1350 Use ``__has_feature(cxx_variable_templates)`` or
1351 ``__has_extension(cxx_variable_templates)`` to determine if support for
1352 templated variable declarations is enabled.
1357 The features listed below are part of the C11 standard.  As a result, all these
1358 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
1359 compiling C code.  Additionally, because these features are all
1360 backward-compatible, they are available as extensions in all language modes.
1362 C11 alignment specifiers
1363 ^^^^^^^^^^^^^^^^^^^^^^^^
1365 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1366 if support for alignment specifiers using ``_Alignas`` is enabled.
1368 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1369 if support for the ``_Alignof`` keyword is enabled.
1371 C11 atomic operations
1372 ^^^^^^^^^^^^^^^^^^^^^
1374 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1375 if support for atomic types using ``_Atomic`` is enabled.  Clang also provides
1376 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
1377 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1378 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1379 is available.
1381 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1382 will otherwise use its own. When using its own, implementations of the atomic
1383 operations are provided as macros. In the cases where C11 also requires a real
1384 function, this header provides only the declaration of that function (along
1385 with a shadowing macro implementation), and you must link to a library which
1386 provides a definition of the function if you use it instead of the macro.
1388 C11 generic selections
1389 ^^^^^^^^^^^^^^^^^^^^^^
1391 Use ``__has_feature(c_generic_selections)`` or
1392 ``__has_extension(c_generic_selections)`` to determine if support for generic
1393 selections is enabled.
1395 As an extension, the C11 generic selection expression is available in all
1396 languages supported by Clang.  The syntax is the same as that given in the C11
1397 standard.
1399 In C, type compatibility is decided according to the rules given in the
1400 appropriate standard, but in C++, which lacks the type compatibility rules used
1401 in C, types are considered compatible only if they are equivalent.
1403 Clang also supports an extended form of ``_Generic`` with a controlling type
1404 rather than a controlling expression. Unlike with a controlling expression, a
1405 controlling type argument does not undergo any conversions and thus is suitable
1406 for use when trying to match qualified types, incomplete types, or function
1407 types. Variable-length array types lack the necessary compile-time information
1408 to resolve which association they match with and thus are not allowed as a
1409 controlling type argument.
1411 Use ``__has_extension(c_generic_selection_with_controlling_type)`` to determine
1412 if support for this extension is enabled.
1414 C11 ``_Static_assert()``
1415 ^^^^^^^^^^^^^^^^^^^^^^^^
1417 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1418 to determine if support for compile-time assertions using ``_Static_assert`` is
1419 enabled.
1421 C11 ``_Thread_local``
1422 ^^^^^^^^^^^^^^^^^^^^^
1424 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1425 to determine if support for ``_Thread_local`` variables is enabled.
1427 Modules
1428 -------
1430 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1431 For example, compiling code with ``-fmodules`` enables the use of Modules.
1433 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1435 Language Extensions Back-ported to Previous Standards
1436 =====================================================
1438 ====================================== ================================ ============= =============
1439 Feature                                Feature Test Macro               Introduced In Backported To
1440 ====================================== ================================ ============= =============
1441 variadic templates                     __cpp_variadic_templates         C++11         C++03
1442 Alias templates                        __cpp_alias_templates            C++11         C++03
1443 Non-static data member initializers    __cpp_nsdmi                      C++11         C++03
1444 Range-based ``for`` loop               __cpp_range_based_for            C++11         C++03
1445 RValue references                      __cpp_rvalue_references          C++11         C++03
1446 Attributes                             __cpp_attributes                 C++11         C++03
1447 variable templates                     __cpp_variable_templates         C++14         C++03
1448 Binary literals                        __cpp_binary_literals            C++14         C++03
1449 Relaxed constexpr                      __cpp_constexpr                  C++14         C++11
1450 ``if constexpr``                       __cpp_if_constexpr               C++17         C++11
1451 fold expressions                       __cpp_fold_expressions           C++17         C++03
1452 Lambda capture of \*this by value      __cpp_capture_star_this          C++17         C++11
1453 Attributes on enums                    __cpp_enumerator_attributes      C++17         C++11
1454 Guaranteed copy elision                __cpp_guaranteed_copy_elision    C++17         C++03
1455 Hexadecimal floating literals          __cpp_hex_float                  C++17         C++03
1456 ``inline`` variables                   __cpp_inline_variables           C++17         C++03
1457 Attributes on namespaces               __cpp_namespace_attributes       C++17         C++11
1458 Structured bindings                    __cpp_structured_bindings        C++17         C++03
1459 template template arguments            __cpp_template_template_args     C++17         C++03
1460 ``static operator[]``                  __cpp_multidimensional_subscript C++20         C++03
1461 Designated initializers                __cpp_designated_initializers    C++20         C++03
1462 Conditional ``explicit``               __cpp_conditional_explicit       C++20         C++03
1463 ``using enum``                         __cpp_using_enum                 C++20         C++03
1464 ``if consteval``                       __cpp_if_consteval               C++23         C++20
1465 ``static operator()``                  __cpp_static_call_operator       C++23         C++03
1466 -------------------------------------- -------------------------------- ------------- -------------
1467 Designated initializers (N494)                                          C99           C89
1468 Array & element qualification (N2607)                                   C23           C89
1469 Attributes (N2335)                                                      C23           C89
1470 ====================================== ================================ ============= =============
1472 Type Trait Primitives
1473 =====================
1475 Type trait primitives are special builtin constant expressions that can be used
1476 by the standard C++ library to facilitate or simplify the implementation of
1477 user-facing type traits in the <type_traits> header.
1479 They are not intended to be used directly by user code because they are
1480 implementation-defined and subject to change -- as such they're tied closely to
1481 the supported set of system headers, currently:
1483 * LLVM's own libc++
1484 * GNU libstdc++
1485 * The Microsoft standard C++ library
1487 Clang supports the `GNU C++ type traits
1488 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1489 `Microsoft Visual C++ type traits
1490 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1491 as well as nearly all of the
1492 `Embarcadero C++ type traits
1493 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
1495 The following type trait primitives are supported by Clang. Those traits marked
1496 (C++) provide implementations for type traits specified by the C++ standard;
1497 ``__X(...)`` has the same semantics and constraints as the corresponding
1498 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
1500 * ``__array_rank(type)`` (Embarcadero):
1501   Returns the number of levels of array in the type ``type``:
1502   ``0`` if ``type`` is not an array type, and
1503   ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1504 * ``__array_extent(type, dim)`` (Embarcadero):
1505   The ``dim``'th array bound in the type ``type``, or ``0`` if
1506   ``dim >= __array_rank(type)``.
1507 * ``__can_pass_in_regs`` (C++)
1508   Returns whether a class can be passed in registers under the current
1509   ABI. This type can only be applied to unqualified class types.
1510   This is not a portable type trait.
1511 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1512   Deprecated, use ``__is_nothrow_assignable`` instead.
1513 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
1514   Deprecated, use ``__is_nothrow_assignable`` instead.
1515 * ``__has_nothrow_copy`` (GNU, Microsoft):
1516   Deprecated, use ``__is_nothrow_constructible`` instead.
1517 * ``__has_nothrow_constructor`` (GNU, Microsoft):
1518   Deprecated, use ``__is_nothrow_constructible`` instead.
1519 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1520   Deprecated, use ``__is_trivially_assignable`` instead.
1521 * ``__has_trivial_move_assign`` (GNU, Microsoft):
1522   Deprecated, use ``__is_trivially_assignable`` instead.
1523 * ``__has_trivial_copy`` (GNU, Microsoft):
1524   Deprecated, use ``__is_trivially_copyable`` instead.
1525 * ``__has_trivial_constructor`` (GNU, Microsoft):
1526   Deprecated, use ``__is_trivially_constructible`` instead.
1527 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
1528   Deprecated, use ``__is_trivially_constructible`` instead.
1529 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1530   Deprecated, use ``__is_trivially_destructible`` instead.
1531 * ``__has_unique_object_representations`` (C++, GNU)
1532 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1533 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1534 * ``__is_aggregate`` (C++, GNU, Microsoft)
1535 * ``__is_arithmetic`` (C++, Embarcadero)
1536 * ``__is_array`` (C++, Embarcadero)
1537 * ``__is_assignable`` (C++, MSVC 2015)
1538 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1539 * ``__is_bounded_array`` (C++, GNU, Microsoft, Embarcadero)
1540 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1541 * ``__is_complete_type(type)`` (Embarcadero):
1542   Return ``true`` if ``type`` is a complete type.
1543   Warning: this trait is dangerous because it can return different values at
1544   different points in the same program.
1545 * ``__is_compound`` (C++, Embarcadero)
1546 * ``__is_const`` (C++, Embarcadero)
1547 * ``__is_constructible`` (C++, MSVC 2013)
1548 * ``__is_convertible`` (C++, Embarcadero)
1549 * ``__is_convertible_to`` (Microsoft):
1550   Synonym for ``__is_convertible``.
1551 * ``__is_destructible`` (C++, MSVC 2013)
1552 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1553 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1554 * ``__is_final`` (C++, GNU, Microsoft)
1555 * ``__is_floating_point`` (C++, Embarcadero)
1556 * ``__is_function`` (C++, Embarcadero)
1557 * ``__is_fundamental`` (C++, Embarcadero)
1558 * ``__is_integral`` (C++, Embarcadero)
1559 * ``__is_interface_class`` (Microsoft):
1560   Returns ``false``, even for types defined with ``__interface``.
1561 * ``__is_literal`` (Clang):
1562   Synonym for ``__is_literal_type``.
1563 * ``__is_literal_type`` (C++, GNU, Microsoft):
1564   Note, the corresponding standard trait was deprecated in C++17
1565   and removed in C++20.
1566 * ``__is_lvalue_reference`` (C++, Embarcadero)
1567 * ``__is_member_object_pointer`` (C++, Embarcadero)
1568 * ``__is_member_function_pointer`` (C++, Embarcadero)
1569 * ``__is_member_pointer`` (C++, Embarcadero)
1570 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
1571 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
1572 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
1573 * ``__is_nullptr`` (C++, GNU, Microsoft, Embarcadero):
1574   Returns true for ``std::nullptr_t`` and false for everything else. The
1575   corresponding standard library feature is ``std::is_null_pointer``, but
1576   ``__is_null_pointer`` is already in use by some implementations.
1577 * ``__is_object`` (C++, Embarcadero)
1578 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1579   Note, the corresponding standard trait was deprecated in C++20.
1580 * ``__is_pointer`` (C++, Embarcadero)
1581 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1582 * ``__is_reference`` (C++, Embarcadero)
1583 * ``__is_referenceable`` (C++, GNU, Microsoft, Embarcadero):
1584   Returns true if a type is referenceable, and false otherwise. A referenceable
1585   type is a type that's either an object type, a reference type, or an unqualified
1586   function type.
1587 * ``__is_rvalue_reference`` (C++, Embarcadero)
1588 * ``__is_same`` (C++, Embarcadero)
1589 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
1590 * ``__is_scalar`` (C++, Embarcadero)
1591 * ``__is_scoped_enum`` (C++, GNU, Microsoft, Embarcadero)
1592 * ``__is_sealed`` (Microsoft):
1593   Synonym for ``__is_final``.
1594 * ``__is_signed`` (C++, Embarcadero):
1595   Returns false for enumeration types, and returns true for floating-point
1596   types. Note, before Clang 10, returned true for enumeration types if the
1597   underlying type was signed, and returned false for floating-point types.
1598 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1599 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1600 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1601 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1602 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1603 * ``__is_trivially_destructible`` (C++, MSVC 2013)
1604 * ``__is_trivially_relocatable`` (Clang): Returns true if moving an object
1605   of the given type, and then destroying the source object, is known to be
1606   functionally equivalent to copying the underlying bytes and then dropping the
1607   source object on the floor. This is true of trivial types and types which
1608   were made trivially relocatable via the ``clang::trivial_abi`` attribute.
1609 * ``__is_trivially_equality_comparable`` (Clang): Returns true if comparing two
1610   objects of the provided type is known to be equivalent to comparing their
1611   value representations.
1612 * ``__is_unbounded_array`` (C++, GNU, Microsoft, Embarcadero)
1613 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1614 * ``__is_unsigned`` (C++, Embarcadero):
1615   Returns false for enumeration types. Note, before Clang 13, returned true for
1616   enumeration types if the underlying type was unsigned.
1617 * ``__is_void`` (C++, Embarcadero)
1618 * ``__is_volatile`` (C++, Embarcadero)
1619 * ``__reference_binds_to_temporary(T, U)`` (Clang):  Determines whether a
1620   reference of type ``T`` bound to an expression of type ``U`` would bind to a
1621   materialized temporary object. If ``T`` is not a reference type the result
1622   is false. Note this trait will also return false when the initialization of
1623   ``T`` from ``U`` is ill-formed.
1624   Deprecated, use ``__reference_constructs_from_temporary``.
1625 * ``__reference_constructs_from_temporary(T, U)`` (C++)
1626   Returns true if a reference ``T`` can be constructed from a temporary of type
1627   a non-cv-qualified ``U``.
1628 * ``__underlying_type`` (C++, GNU, Microsoft)
1630 In addition, the following expression traits are supported:
1632 * ``__is_lvalue_expr(e)`` (Embarcadero):
1633   Returns true if ``e`` is an lvalue expression.
1634   Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1635 * ``__is_rvalue_expr(e)`` (Embarcadero):
1636   Returns true if ``e`` is a prvalue expression.
1637   Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1639 There are multiple ways to detect support for a type trait ``__X`` in the
1640 compiler, depending on the oldest version of Clang you wish to support.
1642 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1643 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1644 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1645   the following traits:
1647   * ``__has_nothrow_assign``
1648   * ``__has_nothrow_copy``
1649   * ``__has_nothrow_constructor``
1650   * ``__has_trivial_assign``
1651   * ``__has_trivial_copy``
1652   * ``__has_trivial_constructor``
1653   * ``__has_trivial_destructor``
1654   * ``__has_virtual_destructor``
1655   * ``__is_abstract``
1656   * ``__is_base_of``
1657   * ``__is_class``
1658   * ``__is_constructible``
1659   * ``__is_convertible_to``
1660   * ``__is_empty``
1661   * ``__is_enum``
1662   * ``__is_final``
1663   * ``__is_literal``
1664   * ``__is_standard_layout``
1665   * ``__is_pod``
1666   * ``__is_polymorphic``
1667   * ``__is_sealed``
1668   * ``__is_trivial``
1669   * ``__is_trivially_assignable``
1670   * ``__is_trivially_constructible``
1671   * ``__is_trivially_copyable``
1672   * ``__is_union``
1673   * ``__underlying_type``
1675 A simplistic usage example as might be seen in standard C++ headers follows:
1677 .. code-block:: c++
1679   #if __has_builtin(__is_convertible_to)
1680   template<typename From, typename To>
1681   struct is_convertible_to {
1682     static const bool value = __is_convertible_to(From, To);
1683   };
1684   #else
1685   // Emulate type trait for compatibility with other compilers.
1686   #endif
1688 Blocks
1689 ======
1691 The syntax and high level language feature description is in
1692 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1693 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1695 Query for this feature with ``__has_extension(blocks)``.
1697 ASM Goto with Output Constraints
1698 ================================
1700 Outputs may be used along any branches from the ``asm goto`` whether the
1701 branches are taken or not.
1703 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1705 Prior to clang-16, the output may only be used safely when the indirect
1706 branches are not taken.  Query for this difference with
1707 ``__has_extension(gnu_asm_goto_with_outputs_full)``.
1709 When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1710 outputs) with the `+r` constraint, there is a hidden input that's created
1711 before the label, so numeric references to operands must account for that.
1713 .. code-block:: c++
1715   int foo(int x) {
1716       // %0 and %1 both refer to x
1717       // %l2 refers to err
1718       asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1719       return x;
1720     err:
1721       return -1;
1722   }
1724 This was changed to match GCC in clang-13; for better portability, symbolic
1725 references can be used instead of numeric references.
1727 .. code-block:: c++
1729   int foo(int x) {
1730       asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1731       return x;
1732     err:
1733       return -1;
1734   }
1736 Objective-C Features
1737 ====================
1739 Related result types
1740 --------------------
1742 According to Cocoa conventions, Objective-C methods with certain names
1743 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1744 the receiving class's type.  Such methods are said to have a "related result
1745 type", meaning that a message send to one of these methods will have the same
1746 static type as an instance of the receiver class.  For example, given the
1747 following classes:
1749 .. code-block:: objc
1751   @interface NSObject
1752   + (id)alloc;
1753   - (id)init;
1754   @end
1756   @interface NSArray : NSObject
1757   @end
1759 and this common initialization pattern
1761 .. code-block:: objc
1763   NSArray *array = [[NSArray alloc] init];
1765 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1766 ``alloc`` implicitly has a related result type.  Similarly, the type of the
1767 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1768 related result type and its receiver is known to have the type ``NSArray *``.
1769 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1770 would have had type ``id``, as declared in the method signature.
1772 A method with a related result type can be declared by using the type
1773 ``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
1774 that is only permitted in the result type of an Objective-C method, e.g.
1776 .. code-block:: objc
1778   @interface A
1779   + (instancetype)constructAnA;
1780   @end
1782 The related result type can also be inferred for some methods.  To determine
1783 whether a method has an inferred related result type, the first word in the
1784 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1785 and the method will have a related result type if its return type is compatible
1786 with the type of its class and if:
1788 * the first word is "``alloc``" or "``new``", and the method is a class method,
1789   or
1791 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1792   and the method is an instance method.
1794 If a method with a related result type is overridden by a subclass method, the
1795 subclass method must also return a type that is compatible with the subclass
1796 type.  For example:
1798 .. code-block:: objc
1800   @interface NSString : NSObject
1801   - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1802   @end
1804 Related result types only affect the type of a message send or property access
1805 via the given method.  In all other respects, a method with a related result
1806 type is treated the same way as method that returns ``id``.
1808 Use ``__has_feature(objc_instancetype)`` to determine whether the
1809 ``instancetype`` contextual keyword is available.
1811 Automatic reference counting
1812 ----------------------------
1814 Clang provides support for :doc:`automated reference counting
1815 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1816 for manual ``retain``/``release``/``autorelease`` message sends.  There are three
1817 feature macros associated with automatic reference counting:
1818 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1819 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1820 automated reference counting also includes support for ``__weak`` pointers to
1821 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1822 are allowed to have fields that are pointers to Objective-C objects managed by
1823 automatic reference counting.
1825 .. _objc-weak:
1827 Weak references
1828 ---------------
1830 Clang supports ARC-style weak and unsafe references in Objective-C even
1831 outside of ARC mode.  Weak references must be explicitly enabled with
1832 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1833 to test whether they are enabled.  Unsafe references are enabled
1834 unconditionally.  ARC-style weak and unsafe references cannot be used
1835 when Objective-C garbage collection is enabled.
1837 Except as noted below, the language rules for the ``__weak`` and
1838 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1839 ``unsafe_unretained`` property attributes) are just as laid out
1840 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1841 In particular, note that some classes do not support forming weak
1842 references to their instances, and note that special care must be
1843 taken when storing weak references in memory where initialization
1844 and deinitialization are outside the responsibility of the compiler
1845 (such as in ``malloc``-ed memory).
1847 Loading from a ``__weak`` variable always implicitly retains the
1848 loaded value.  In non-ARC modes, this retain is normally balanced
1849 by an implicit autorelease.  This autorelease can be suppressed
1850 by performing the load in the receiver position of a ``-retain``
1851 message send (e.g. ``[weakReference retain]``); note that this performs
1852 only a single retain (the retain done when primitively loading from
1853 the weak reference).
1855 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1856 default behavior of variables and therefore is not needed.  However,
1857 it does have an effect on the semantics of block captures: normally,
1858 copying a block which captures an Objective-C object or block pointer
1859 causes the captured pointer to be retained or copied, respectively,
1860 but that behavior is suppressed when the captured variable is qualified
1861 with ``__unsafe_unretained``.
1863 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1864 all non-ARC modes and was silently ignored outside of GC modes.  It now
1865 means the ARC-style qualifier in all non-GC modes and is no longer
1866 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1867 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1868 in all non-GC Objective-C modes.
1870 .. _objc-fixed-enum:
1872 Enumerations with a fixed underlying type
1873 -----------------------------------------
1875 Clang provides support for C++11 enumerations with a fixed underlying type
1876 within Objective-C.  For example, one can write an enumeration type as:
1878 .. code-block:: c++
1880   typedef enum : unsigned char { Red, Green, Blue } Color;
1882 This specifies that the underlying type, which is used to store the enumeration
1883 value, is ``unsigned char``.
1885 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1886 underlying types is available in Objective-C.
1888 Interoperability with C++11 lambdas
1889 -----------------------------------
1891 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1892 permitting a lambda to be implicitly converted to a block pointer with the
1893 corresponding signature.  For example, consider an API such as ``NSArray``'s
1894 array-sorting method:
1896 .. code-block:: objc
1898   - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1900 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1901 (^)(id, id)``, and parameters of this type are generally provided with block
1902 literals as arguments.  However, one can also use a C++11 lambda so long as it
1903 provides the same signature (in this case, accepting two parameters of type
1904 ``id`` and returning an ``NSComparisonResult``):
1906 .. code-block:: objc
1908   NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1909                      @"String 02"];
1910   const NSStringCompareOptions comparisonOptions
1911     = NSCaseInsensitiveSearch | NSNumericSearch |
1912       NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1913   NSLocale *currentLocale = [NSLocale currentLocale];
1914   NSArray *sorted
1915     = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1916                NSRange string1Range = NSMakeRange(0, [s1 length]);
1917                return [s1 compare:s2 options:comparisonOptions
1918                range:string1Range locale:currentLocale];
1919        }];
1920   NSLog(@"sorted: %@", sorted);
1922 This code relies on an implicit conversion from the type of the lambda
1923 expression (an unnamed, local class type called the *closure type*) to the
1924 corresponding block pointer type.  The conversion itself is expressed by a
1925 conversion operator in that closure type that produces a block pointer with the
1926 same signature as the lambda itself, e.g.,
1928 .. code-block:: objc
1930   operator NSComparisonResult (^)(id, id)() const;
1932 This conversion function returns a new block that simply forwards the two
1933 parameters to the lambda object (which it captures by copy), then returns the
1934 result.  The returned block is first copied (with ``Block_copy``) and then
1935 autoreleased.  As an optimization, if a lambda expression is immediately
1936 converted to a block pointer (as in the first example, above), then the block
1937 is not copied and autoreleased: rather, it is given the same lifetime as a
1938 block literal written at that point in the program, which avoids the overhead
1939 of copying a block to the heap in the common case.
1941 The conversion from a lambda to a block pointer is only available in
1942 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1943 management (autorelease).
1945 Object Literals and Subscripting
1946 --------------------------------
1948 Clang provides support for :doc:`Object Literals and Subscripting
1949 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1950 programming patterns, makes programs more concise, and improves the safety of
1951 container creation.  There are several feature macros associated with object
1952 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1953 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1954 tests the availability of dictionary literals;
1955 ``__has_feature(objc_subscripting)`` tests the availability of object
1956 subscripting.
1958 Objective-C Autosynthesis of Properties
1959 ---------------------------------------
1961 Clang provides support for autosynthesis of declared properties.  Using this
1962 feature, clang provides default synthesis of those properties not declared
1963 @dynamic and not having user provided backing getter and setter methods.
1964 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1965 of this feature in version of clang being used.
1967 .. _langext-objc-retain-release:
1969 Objective-C retaining behavior attributes
1970 -----------------------------------------
1972 In Objective-C, functions and methods are generally assumed to follow the
1973 `Cocoa Memory Management
1974 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1975 conventions for ownership of object arguments and
1976 return values. However, there are exceptions, and so Clang provides attributes
1977 to allow these exceptions to be documented. This are used by ARC and the
1978 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
1979 better described using the ``objc_method_family`` attribute instead.
1981 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1982 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1983 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1984 that return Objective-C or CoreFoundation objects. They are commonly placed at
1985 the end of a function prototype or method declaration:
1987 .. code-block:: objc
1989   id foo() __attribute__((ns_returns_retained));
1991   - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1993 The ``*_returns_retained`` attributes specify that the returned object has a +1
1994 retain count.  The ``*_returns_not_retained`` attributes specify that the return
1995 object has a +0 retain count, even if the normal convention for its selector
1996 would be +1.  ``ns_returns_autoreleased`` specifies that the returned object is
1997 +0, but is guaranteed to live at least as long as the next flush of an
1998 autorelease pool.
2000 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
2001 an parameter declaration; they specify that the argument is expected to have a
2002 +1 retain count, which will be balanced in some way by the function or method.
2003 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
2004 method; it specifies that the method expects its ``self`` parameter to have a
2005 +1 retain count, which it will balance in some way.
2007 .. code-block:: objc
2009   void foo(__attribute__((ns_consumed)) NSString *string);
2011   - (void) bar __attribute__((ns_consumes_self));
2012   - (void) baz:(id) __attribute__((ns_consumed)) x;
2014 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
2015 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
2017 Query for these features with ``__has_attribute(ns_consumed)``,
2018 ``__has_attribute(ns_returns_retained)``, etc.
2020 Objective-C @available
2021 ----------------------
2023 It is possible to use the newest SDK but still build a program that can run on
2024 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
2025 ``-miphoneos-version-min=``.
2027 Before LLVM 5.0, when calling a function that exists only in the OS that's
2028 newer than the target OS (as determined by the minimum deployment version),
2029 programmers had to carefully check if the function exists at runtime, using
2030 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
2031 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
2032 Objective-C methods.  If such a check was missed, the program would compile
2033 fine, run fine on newer systems, but crash on older systems.
2035 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
2036 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
2037 with the new ``@available()`` keyword to assist with this issue.
2038 When a method that's introduced in the OS newer than the target OS is called, a
2039 -Wunguarded-availability warning is emitted if that call is not guarded:
2041 .. code-block:: objc
2043   void my_fun(NSSomeClass* var) {
2044     // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
2045     // built with -mmacosx-version-min=10.11, then this unconditional call
2046     // will emit a -Wunguarded-availability warning:
2047     [var fancyNewMethod];
2048   }
2050 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
2051 ``if(@available())``:
2053 .. code-block:: objc
2055   void my_fun(NSSomeClass* var) {
2056     if (@available(macOS 10.12, *)) {
2057       [var fancyNewMethod];
2058     } else {
2059       // Put fallback behavior for old macOS versions (and for non-mac
2060       // platforms) here.
2061     }
2062   }
2064 The ``*`` is required and means that platforms not explicitly listed will take
2065 the true branch, and the compiler will emit ``-Wunguarded-availability``
2066 warnings for unlisted platforms based on those platform's deployment target.
2067 More than one platform can be listed in ``@available()``:
2069 .. code-block:: objc
2071   void my_fun(NSSomeClass* var) {
2072     if (@available(macOS 10.12, iOS 10, *)) {
2073       [var fancyNewMethod];
2074     }
2075   }
2077 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
2078 on 10.12, then add an `availability attribute
2079 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
2080 which will also suppress the warning and require that calls to my_fun() are
2081 checked:
2083 .. code-block:: objc
2085   API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
2086     [var fancyNewMethod];  // Now ok.
2087   }
2089 ``@available()`` is only available in Objective-C code.  To use the feature
2090 in C and C++ code, use the ``__builtin_available()`` spelling instead.
2092 If existing code uses null checks or ``-respondsToSelector:``, it should
2093 be changed to use ``@available()`` (or ``__builtin_available``) instead.
2095 ``-Wunguarded-availability`` is disabled by default, but
2096 ``-Wunguarded-availability-new``, which only emits this warning for APIs
2097 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
2098 tvOS >= 11, is enabled by default.
2100 .. _langext-overloading:
2102 Objective-C++ ABI: protocol-qualifier mangling of parameters
2103 ------------------------------------------------------------
2105 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
2106 type is a qualified-``id`` (e.g., ``id<Foo>``).  This mangling allows such
2107 parameters to be differentiated from those with the regular unqualified ``id``
2108 type.
2110 This was a non-backward compatible mangling change to the ABI.  This change
2111 allows proper overloading, and also prevents mangling conflicts with template
2112 parameters of protocol-qualified type.
2114 Query the presence of this new mangling with
2115 ``__has_feature(objc_protocol_qualifier_mangling)``.
2117 Initializer lists for complex numbers in C
2118 ==========================================
2120 clang supports an extension which allows the following in C:
2122 .. code-block:: c++
2124   #include <math.h>
2125   #include <complex.h>
2126   complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
2128 This construct is useful because there is no way to separately initialize the
2129 real and imaginary parts of a complex variable in standard C, given that clang
2130 does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
2131 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
2132 in static initializers.)
2134 Note that this extension does not allow eliding the braces; the meaning of the
2135 following two lines is different:
2137 .. code-block:: c++
2139   complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
2140   complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
2142 This extension also works in C++ mode, as far as that goes, but does not apply
2143 to the C++ ``std::complex``.  (In C++11, list initialization allows the same
2144 syntax to be used with ``std::complex`` with the same meaning.)
2146 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2147 construct a complex number from the given real and imaginary components.
2149 OpenCL Features
2150 ===============
2152 Clang supports internal OpenCL extensions documented below.
2154 ``__cl_clang_bitfields``
2155 --------------------------------
2157 With this extension it is possible to enable bitfields in structs
2158 or unions using the OpenCL extension pragma mechanism detailed in
2159 `the OpenCL Extension Specification, section 1.2
2160 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2162 Use of bitfields in OpenCL kernels can result in reduced portability as struct
2163 layout is not guaranteed to be consistent when compiled by different compilers.
2164 If structs with bitfields are used as kernel function parameters, it can result
2165 in incorrect functionality when the layout is different between the host and
2166 device code.
2168 **Example of Use**:
2170 .. code-block:: c++
2172   #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2173   struct with_bitfield {
2174     unsigned int i : 5; // compiled - no diagnostic generated
2175   };
2177   #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2178   struct without_bitfield {
2179     unsigned int i : 5; // error - bitfields are not supported
2180   };
2182 ``__cl_clang_function_pointers``
2183 --------------------------------
2185 With this extension it is possible to enable various language features that
2186 are relying on function pointers using regular OpenCL extension pragma
2187 mechanism detailed in `the OpenCL Extension Specification,
2188 section 1.2
2189 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2191 In C++ for OpenCL this also enables:
2193 - Use of member function pointers;
2195 - Unrestricted use of references to functions;
2197 - Virtual member functions.
2199 Such functionality is not conformant and does not guarantee to compile
2200 correctly in any circumstances. It can be used if:
2202 - the kernel source does not contain call expressions to (member-) function
2203   pointers, or virtual functions. For example this extension can be used in
2204   metaprogramming algorithms to be able to specify/detect types generically.
2206 - the generated kernel binary does not contain indirect calls because they
2207   are eliminated using compiler optimizations e.g. devirtualization.
2209 - the selected target supports the function pointer like functionality e.g.
2210   most CPU targets.
2212 **Example of Use**:
2214 .. code-block:: c++
2216   #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2217   void foo()
2218   {
2219     void (*fp)(); // compiled - no diagnostic generated
2220   }
2222   #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2223   void bar()
2224   {
2225     void (*fp)(); // error - pointers to function are not allowed
2226   }
2228 ``__cl_clang_variadic_functions``
2229 ---------------------------------
2231 With this extension it is possible to enable variadic arguments in functions
2232 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2233 Extension Specification, section 1.2
2234 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2236 This is not conformant behavior and it can only be used portably when the
2237 functions with variadic prototypes do not get generated in binary e.g. the
2238 variadic prototype is used to specify a function type with any number of
2239 arguments in metaprogramming algorithms in C++ for OpenCL.
2241 This extensions can also be used when the kernel code is intended for targets
2242 supporting the variadic arguments e.g. majority of CPU targets.
2244 **Example of Use**:
2246 .. code-block:: c++
2248   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2249   void foo(int a, ...); // compiled - no diagnostic generated
2251   #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2252   void bar(int a, ...); // error - variadic prototype is not allowed
2254 ``__cl_clang_non_portable_kernel_param_types``
2255 ----------------------------------------------
2257 With this extension it is possible to enable the use of some restricted types
2258 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2259 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2260 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2261 detailed in `the OpenCL Extension Specification, section 1.2
2262 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2264 This is not a conformant behavior and it can only be used when the
2265 kernel arguments are not accessed on the host side or the data layout/size
2266 between the host and device is known to be compatible.
2268 **Example of Use**:
2270 .. code-block:: c++
2272   // Plain Old Data type.
2273   struct Pod {
2274     int a;
2275     int b;
2276   };
2278   // Not POD type because of the constructor.
2279   // Standard layout type because there is only one access control.
2280   struct OnlySL {
2281     int a;
2282     int b;
2283     OnlySL() : a(0), b(0) {}
2284   };
2286   // Not standard layout type because of two different access controls.
2287   struct NotSL {
2288     int a;
2289   private:
2290     int b;
2291   };
2293   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2294   kernel void kernel_main(
2295     Pod a,
2297     OnlySL b,
2298     global NotSL *c,
2299     global OnlySL *d
2300   );
2301   #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2303 Remove address space builtin function
2304 -------------------------------------
2306 ``__remove_address_space`` allows to derive types in C++ for OpenCL
2307 that have address space qualifiers removed. This utility only affects
2308 address space qualifiers, therefore, other type qualifiers such as
2309 ``const`` or ``volatile`` remain unchanged.
2311 **Example of Use**:
2313 .. code-block:: c++
2315   template<typename T>
2316   void foo(T *par){
2317     T var1; // error - local function variable with global address space
2318     __private T var2; // error - conflicting address space qualifiers
2319     __private __remove_address_space<T>::type var3; // var3 is __private int
2320   }
2322   void bar(){
2323     __global int* ptr;
2324     foo(ptr);
2325   }
2327 Legacy 1.x atomics with generic address space
2328 ---------------------------------------------
2330 Clang allows use of atomic functions from the OpenCL 1.x standards
2331 with the generic address space pointer in C++ for OpenCL mode.
2333 This is a non-portable feature and might not be supported by all
2334 targets.
2336 **Example of Use**:
2338 .. code-block:: c++
2340   void foo(__generic volatile unsigned int* a) {
2341     atomic_add(a, 1);
2342   }
2344 WebAssembly Features
2345 ====================
2347 Clang supports the WebAssembly features documented below. For further
2348 information related to the semantics of the builtins, please refer to the `WebAssembly Specification <https://webassembly.github.io/spec/core/>`_.
2349 In this section, when we refer to reference types, we are referring to
2350 WebAssembly reference types, not C++ reference types unless stated
2351 otherwise.
2353 ``__builtin_wasm_table_set``
2354 ----------------------------
2356 This builtin function stores a value in a WebAssembly table.
2357 It takes three arguments.
2358 The first argument is the table to store a value into, the second
2359 argument is the index to which to store the value into, and the
2360 third argument is a value of reference type to store in the table.
2361 It returns nothing.
2363 .. code-block:: c++
2365   static __externref_t table[0];
2366   extern __externref_t JSObj;
2368   void store(int index) {
2369     __builtin_wasm_table_set(table, index, JSObj);
2370   }
2372 ``__builtin_wasm_table_get``
2373 ----------------------------
2375 This builtin function is the counterpart to ``__builtin_wasm_table_set``
2376 and loads a value from a WebAssembly table of reference typed values.
2377 It takes 2 arguments.
2378 The first argument is a table of reference typed values and the
2379 second argument is an index from which to load the value. It returns
2380 the loaded reference typed value.
2382 .. code-block:: c++
2384   static __externref_t table[0];
2386   __externref_t load(int index) {
2387     __externref_t Obj = __builtin_wasm_table_get(table, index);
2388     return Obj;
2389   }
2391 ``__builtin_wasm_table_size``
2392 -----------------------------
2394 This builtin function returns the size of the WebAssembly table.
2395 Takes the table as an argument and returns an unsigned integer (``size_t``)
2396 with the current table size.
2398 .. code-block:: c++
2400   typedef void (*__funcref funcref_t)();
2401   static __funcref table[0];
2403   size_t getSize() {
2404     return __builtin_wasm_table_size(table);
2405   }
2407 ``__builtin_wasm_table_grow``
2408 -----------------------------
2410 This builtin function grows the WebAssembly table by a certain amount.
2411 Currently, as all WebAssembly tables created in C/C++ are zero-sized,
2412 this always needs to be called to grow the table.
2414 It takes three arguments. The first argument is the WebAssembly table
2415 to grow. The second argument is the reference typed value to store in
2416 the new table entries (the initialization value), and the third argument
2417 is the amount to grow the table by. It returns the previous table size
2418 or -1. It will return -1 if not enough space could be allocated.
2420 .. code-block:: c++
2422   typedef void (*__funcref funcref_t)();
2423   static __funcref table[0];
2425   // grow returns the new table size or -1 on error.
2426   int grow(__funcref fn, int delta) {
2427     int prevSize = __builtin_wasm_table_grow(table, fn, delta);
2428     if (prevSize == -1)
2429       return -1;
2430     return prevSize + delta;
2431   }
2433 ``__builtin_wasm_table_fill``
2434 -----------------------------
2436 This builtin function sets all the entries of a WebAssembly table to a given
2437 reference typed value. It takes four arguments. The first argument is
2438 the WebAssembly table, the second argument is the index that starts the
2439 range, the third argument is the value to set in the new entries, and
2440 the fourth and the last argument is the size of the range. It returns
2441 nothing.
2443 .. code-block:: c++
2445   static __externref_t table[0];
2447   // resets a table by setting all of its entries to a given value.
2448   void reset(__externref_t Obj) {
2449     int Size = __builtin_wasm_table_size(table);
2450     __builtin_wasm_table_fill(table, 0, Obj, Size);
2451   }
2453 ``__builtin_wasm_table_copy``
2454 -----------------------------
2456 This builtin function copies elements from a source WebAssembly table
2457 to a possibly overlapping destination region. It takes five arguments.
2458 The first argument is the destination WebAssembly table, and the second
2459 argument is the source WebAssembly table. The third argument is the
2460 destination index from where the copy starts, the fourth argument is the
2461 source index from there the copy starts, and the fifth and last argument
2462 is the number of elements to copy. It returns nothing.
2464 .. code-block:: c++
2466   static __externref_t tableSrc[0];
2467   static __externref_t tableDst[0];
2469   // Copy nelem elements from [src, src + nelem - 1] in tableSrc to
2470   // [dst, dst + nelem - 1] in tableDst
2471   void copy(int dst, int src, int nelem) {
2472     __builtin_wasm_table_copy(tableDst, tableSrc, dst, src, nelem);
2473   }
2476 Builtin Functions
2477 =================
2479 Clang supports a number of builtin library functions with the same syntax as
2480 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
2481 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
2482 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc.  In addition to
2483 the GCC builtins, Clang supports a number of builtins that GCC does not, which
2484 are listed here.
2486 Please note that Clang does not and will not support all of the GCC builtins
2487 for vector operations.  Instead of using builtins, you should use the functions
2488 defined in target-specific header files like ``<xmmintrin.h>``, which define
2489 portable wrappers for these.  Many of the Clang versions of these functions are
2490 implemented directly in terms of :ref:`extended vector support
2491 <langext-vectors>` instead of builtins, in order to reduce the number of
2492 builtins that we need to implement.
2494 ``__builtin_alloca``
2495 --------------------
2497 ``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2498 is automatically freed upon function termination.
2500 **Syntax**:
2502 .. code-block:: c++
2504   __builtin_alloca(size_t n)
2506 **Example of Use**:
2508 .. code-block:: c++
2510   void init(float* data, size_t nbelems);
2511   void process(float* data, size_t nbelems);
2512   int foo(size_t n) {
2513     auto mem = (float*)__builtin_alloca(n * sizeof(float));
2514     init(mem, n);
2515     process(mem, n);
2516     /* mem is automatically freed at this point */
2517   }
2519 **Description**:
2521 ``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2522 on the stack. This amount is subject to stack allocation limits.
2524 Query for this feature with ``__has_builtin(__builtin_alloca)``.
2526 ``__builtin_alloca_with_align``
2527 -------------------------------
2529 ``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2530 stack while controlling its alignment. Memory is automatically freed upon
2531 function termination.
2534 **Syntax**:
2536 .. code-block:: c++
2538   __builtin_alloca_with_align(size_t n, size_t align)
2540 **Example of Use**:
2542 .. code-block:: c++
2544   void init(float* data, size_t nbelems);
2545   void process(float* data, size_t nbelems);
2546   int foo(size_t n) {
2547     auto mem = (float*)__builtin_alloca_with_align(
2548                         n * sizeof(float),
2549                         CHAR_BIT * alignof(float));
2550     init(mem, n);
2551     process(mem, n);
2552     /* mem is automatically freed at this point */
2553   }
2555 **Description**:
2557 ``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2558 on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2559 argument whose value is the alignment constraint, as a power of 2 in *bits*.
2561 Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2563 .. _langext-__builtin_assume:
2565 ``__builtin_assume``
2566 --------------------
2568 ``__builtin_assume`` is used to provide the optimizer with a boolean
2569 invariant that is defined to be true.
2571 **Syntax**:
2573 .. code-block:: c++
2575     __builtin_assume(bool)
2577 **Example of Use**:
2579 .. code-block:: c++
2581   int foo(int x) {
2582       __builtin_assume(x != 0);
2583       // The optimizer may short-circuit this check using the invariant.
2584       if (x == 0)
2585             return do_something();
2586       return do_something_else();
2587   }
2589 **Description**:
2591 The boolean argument to this function is defined to be true. The optimizer may
2592 analyze the form of the expression provided as the argument and deduce from
2593 that information used to optimize the program. If the condition is violated
2594 during execution, the behavior is undefined. The argument itself is never
2595 evaluated, so any side effects of the expression will be discarded.
2597 Query for this feature with ``__has_builtin(__builtin_assume)``.
2599 .. _langext-__builtin_assume_separate_storage:
2601 ``__builtin_assume_separate_storage``
2602 -------------------------------------
2604 ``__builtin_assume_separate_storage`` is used to provide the optimizer with the
2605 knowledge that its two arguments point to separately allocated objects.
2607 **Syntax**:
2609 .. code-block:: c++
2611     __builtin_assume_separate_storage(const volatile void *, const volatile void *)
2613 **Example of Use**:
2615 .. code-block:: c++
2617   int foo(int *x, int *y) {
2618       __builtin_assume_separate_storage(x, y);
2619       *x = 0;
2620       *y = 1;
2621       // The optimizer may optimize this to return 0 without reloading from *x.
2622       return *x;
2623   }
2625 **Description**:
2627 The arguments to this function are assumed to point into separately allocated
2628 storage (either different variable definitions or different dynamic storage
2629 allocations). The optimizer may use this fact to aid in alias analysis. If the
2630 arguments point into the same storage, the behavior is undefined. Note that the
2631 definition of "storage" here refers to the outermost enclosing allocation of any
2632 particular object (so for example, it's never correct to call this function
2633 passing the addresses of fields in the same struct, elements of the same array,
2634 etc.).
2636 Query for this feature with ``__has_builtin(__builtin_assume_separate_storage)``.
2639 ``__builtin_offsetof``
2640 ----------------------
2642 ``__builtin_offsetof`` is used to implement the ``offsetof`` macro, which
2643 calculates the offset (in bytes) to a given member of the given type.
2645 **Syntax**:
2647 .. code-block:: c++
2649     __builtin_offsetof(type-name, member-designator)
2651 **Example of Use**:
2653 .. code-block:: c++
2655   struct S {
2656     char c;
2657     int i;
2658     struct T {
2659       float f[2];
2660     } t;
2661   };
2663   const int offset_to_i = __builtin_offsetof(struct S, i);
2664   const int ext1 = __builtin_offsetof(struct U { int i; }, i); // C extension
2665   const int offset_to_subobject = __builtin_offsetof(struct S, t.f[1]);
2667 **Description**:
2669 This builtin is usable in an integer constant expression which returns a value
2670 of type ``size_t``. The value returned is the offset in bytes to the subobject
2671 designated by the member-designator from the beginning of an object of type
2672 ``type-name``. Clang extends the required standard functionality in the
2673 following way:
2675 * In C language modes, the first argument may be the definition of a new type.
2676   Any type declared this way is scoped to the nearest scope containing the call
2677   to the builtin.
2679 Query for this feature with ``__has_builtin(__builtin_offsetof)``.
2681 ``__builtin_call_with_static_chain``
2682 ------------------------------------
2684 ``__builtin_call_with_static_chain`` is used to perform a static call while
2685 setting updating the static chain register.
2687 **Syntax**:
2689 .. code-block:: c++
2691   T __builtin_call_with_static_chain(T expr, void* ptr)
2693 **Example of Use**:
2695 .. code-block:: c++
2697   auto v = __builtin_call_with_static_chain(foo(3), foo);
2699 **Description**:
2701 This builtin returns ``expr`` after checking that ``expr`` is a non-member
2702 static call expression. The call to that expression is made while using ``ptr``
2703 as a function pointer stored in a dedicated register to implement *static chain*
2704 calling convention, as used by some language to implement closures or nested
2705 functions.
2707 Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2709 ``__builtin_readcyclecounter``
2710 ------------------------------
2712 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2713 a similar low-latency, high-accuracy clock) on those targets that support it.
2715 **Syntax**:
2717 .. code-block:: c++
2719   __builtin_readcyclecounter()
2721 **Example of Use**:
2723 .. code-block:: c++
2725   unsigned long long t0 = __builtin_readcyclecounter();
2726   do_something();
2727   unsigned long long t1 = __builtin_readcyclecounter();
2728   unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2730 **Description**:
2732 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2733 which may be either global or process/thread-specific depending on the target.
2734 As the backing counters often overflow quickly (on the order of seconds) this
2735 should only be used for timing small intervals.  When not supported by the
2736 target, the return value is always zero.  This builtin takes no arguments and
2737 produces an unsigned long long result.
2739 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2740 that even if present, its use may depend on run-time privilege or other OS
2741 controlled state.
2743 ``__builtin_dump_struct``
2744 -------------------------
2746 **Syntax**:
2748 .. code-block:: c++
2750     __builtin_dump_struct(&some_struct, some_printf_func, args...);
2752 **Examples**:
2754 .. code-block:: c++
2756     struct S {
2757       int x, y;
2758       float f;
2759       struct T {
2760         int i;
2761       } t;
2762     };
2764     void func(struct S *s) {
2765       __builtin_dump_struct(s, printf);
2766     }
2768 Example output:
2770 .. code-block:: none
2772     struct S {
2773       int x = 100
2774       int y = 42
2775       float f = 3.141593
2776       struct T t = {
2777         int i = 1997
2778       }
2779     }
2781 .. code-block:: c++
2783     #include <string>
2784     struct T { int a, b; };
2785     constexpr void constexpr_sprintf(std::string &out, const char *format,
2786                                      auto ...args) {
2787       // ...
2788     }
2789     constexpr std::string dump_struct(auto &x) {
2790       std::string s;
2791       __builtin_dump_struct(&x, constexpr_sprintf, s);
2792       return s;
2793     }
2794     static_assert(dump_struct(T{1, 2}) == R"(struct T {
2795       int a = 1
2796       int b = 2
2797     }
2798     )");
2800 **Description**:
2802 The ``__builtin_dump_struct`` function is used to print the fields of a simple
2803 structure and their values for debugging purposes. The first argument of the
2804 builtin should be a pointer to the struct to dump. The second argument ``f``
2805 should be some callable expression, and can be a function object or an overload
2806 set. The builtin calls ``f``, passing any further arguments ``args...``
2807 followed by a ``printf``-compatible format string and the corresponding
2808 arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2809 evaluated once per call. In C++, ``f`` may be a template or overload set and
2810 resolve to different functions for each call.
2812 In the format string, a suitable format specifier will be used for builtin
2813 types that Clang knows how to format. This includes standard builtin types, as
2814 well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2815 char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2816 that Clang doesn't know how to format, and the corresponding argument will be a
2817 pointer to the field. This allows a C++ templated formatting function to detect
2818 this case and implement custom formatting. A ``*`` will otherwise not precede a
2819 format specifier.
2821 This builtin does not return a value.
2823 This builtin can be used in constant expressions.
2825 Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2827 .. _langext-__builtin_shufflevector:
2829 ``__builtin_shufflevector``
2830 ---------------------------
2832 ``__builtin_shufflevector`` is used to express generic vector
2833 permutation/shuffle/swizzle operations.  This builtin is also very important
2834 for the implementation of various target-specific header files like
2835 ``<xmmintrin.h>``.
2837 **Syntax**:
2839 .. code-block:: c++
2841   __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2843 **Examples**:
2845 .. code-block:: c++
2847   // identity operation - return 4-element vector v1.
2848   __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2850   // "Splat" element 0 of V1 into a 4-element result.
2851   __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2853   // Reverse 4-element vector V1.
2854   __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2856   // Concatenate every other element of 4-element vectors V1 and V2.
2857   __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2859   // Concatenate every other element of 8-element vectors V1 and V2.
2860   __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2862   // Shuffle v1 with some elements being undefined
2863   __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2865 **Description**:
2867 The first two arguments to ``__builtin_shufflevector`` are vectors that have
2868 the same element type.  The remaining arguments are a list of integers that
2869 specify the elements indices of the first two vectors that should be extracted
2870 and returned in a new vector.  These element indices are numbered sequentially
2871 starting with the first vector, continuing into the second vector.  Thus, if
2872 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
2873 ``vec2``. An index of -1 can be used to indicate that the corresponding element
2874 in the returned vector is a don't care and can be optimized by the backend.
2876 The result of ``__builtin_shufflevector`` is a vector with the same element
2877 type as ``vec1``/``vec2`` but that has an element count equal to the number of
2878 indices specified.
2880 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2882 .. _langext-__builtin_convertvector:
2884 ``__builtin_convertvector``
2885 ---------------------------
2887 ``__builtin_convertvector`` is used to express generic vector
2888 type-conversion operations. The input vector and the output vector
2889 type must have the same number of elements.
2891 **Syntax**:
2893 .. code-block:: c++
2895   __builtin_convertvector(src_vec, dst_vec_type)
2897 **Examples**:
2899 .. code-block:: c++
2901   typedef double vector4double __attribute__((__vector_size__(32)));
2902   typedef float  vector4float  __attribute__((__vector_size__(16)));
2903   typedef short  vector4short  __attribute__((__vector_size__(8)));
2904   vector4float vf; vector4short vs;
2906   // convert from a vector of 4 floats to a vector of 4 doubles.
2907   __builtin_convertvector(vf, vector4double)
2908   // equivalent to:
2909   (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2911   // convert from a vector of 4 shorts to a vector of 4 floats.
2912   __builtin_convertvector(vs, vector4float)
2913   // equivalent to:
2914   (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2916 **Description**:
2918 The first argument to ``__builtin_convertvector`` is a vector, and the second
2919 argument is a vector type with the same number of elements as the first
2920 argument.
2922 The result of ``__builtin_convertvector`` is a vector with the same element
2923 type as the second argument, with a value defined in terms of the action of a
2924 C-style cast applied to each element of the first argument.
2926 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2928 ``__builtin_bitreverse``
2929 ------------------------
2931 * ``__builtin_bitreverse8``
2932 * ``__builtin_bitreverse16``
2933 * ``__builtin_bitreverse32``
2934 * ``__builtin_bitreverse64``
2936 **Syntax**:
2938 .. code-block:: c++
2940      __builtin_bitreverse32(x)
2942 **Examples**:
2944 .. code-block:: c++
2946       uint8_t rev_x = __builtin_bitreverse8(x);
2947       uint16_t rev_x = __builtin_bitreverse16(x);
2948       uint32_t rev_y = __builtin_bitreverse32(y);
2949       uint64_t rev_z = __builtin_bitreverse64(z);
2951 **Description**:
2953 The '``__builtin_bitreverse``' family of builtins is used to reverse
2954 the bitpattern of an integer value; for example ``0b10110110`` becomes
2955 ``0b01101101``. These builtins can be used within constant expressions.
2957 ``__builtin_rotateleft``
2958 ------------------------
2960 * ``__builtin_rotateleft8``
2961 * ``__builtin_rotateleft16``
2962 * ``__builtin_rotateleft32``
2963 * ``__builtin_rotateleft64``
2965 **Syntax**:
2967 .. code-block:: c++
2969      __builtin_rotateleft32(x, y)
2971 **Examples**:
2973 .. code-block:: c++
2975       uint8_t rot_x = __builtin_rotateleft8(x, y);
2976       uint16_t rot_x = __builtin_rotateleft16(x, y);
2977       uint32_t rot_x = __builtin_rotateleft32(x, y);
2978       uint64_t rot_x = __builtin_rotateleft64(x, y);
2980 **Description**:
2982 The '``__builtin_rotateleft``' family of builtins is used to rotate
2983 the bits in the first argument by the amount in the second argument.
2984 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2985 The shift value is treated as an unsigned amount modulo the size of
2986 the arguments. Both arguments and the result have the bitwidth specified
2987 by the name of the builtin. These builtins can be used within constant
2988 expressions.
2990 ``__builtin_rotateright``
2991 -------------------------
2993 * ``__builtin_rotateright8``
2994 * ``__builtin_rotateright16``
2995 * ``__builtin_rotateright32``
2996 * ``__builtin_rotateright64``
2998 **Syntax**:
3000 .. code-block:: c++
3002      __builtin_rotateright32(x, y)
3004 **Examples**:
3006 .. code-block:: c++
3008       uint8_t rot_x = __builtin_rotateright8(x, y);
3009       uint16_t rot_x = __builtin_rotateright16(x, y);
3010       uint32_t rot_x = __builtin_rotateright32(x, y);
3011       uint64_t rot_x = __builtin_rotateright64(x, y);
3013 **Description**:
3015 The '``__builtin_rotateright``' family of builtins is used to rotate
3016 the bits in the first argument by the amount in the second argument.
3017 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
3018 The shift value is treated as an unsigned amount modulo the size of
3019 the arguments. Both arguments and the result have the bitwidth specified
3020 by the name of the builtin. These builtins can be used within constant
3021 expressions.
3023 ``__builtin_unreachable``
3024 -------------------------
3026 ``__builtin_unreachable`` is used to indicate that a specific point in the
3027 program cannot be reached, even if the compiler might otherwise think it can.
3028 This is useful to improve optimization and eliminates certain warnings.  For
3029 example, without the ``__builtin_unreachable`` in the example below, the
3030 compiler assumes that the inline asm can fall through and prints a "function
3031 declared '``noreturn``' should not return" warning.
3033 **Syntax**:
3035 .. code-block:: c++
3037     __builtin_unreachable()
3039 **Example of use**:
3041 .. code-block:: c++
3043   void myabort(void) __attribute__((noreturn));
3044   void myabort(void) {
3045     asm("int3");
3046     __builtin_unreachable();
3047   }
3049 **Description**:
3051 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
3052 Since it has undefined behavior, it is a statement that it is never reached and
3053 the optimizer can take advantage of this to produce better code.  This builtin
3054 takes no arguments and produces a void result.
3056 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
3058 ``__builtin_unpredictable``
3059 ---------------------------
3061 ``__builtin_unpredictable`` is used to indicate that a branch condition is
3062 unpredictable by hardware mechanisms such as branch prediction logic.
3064 **Syntax**:
3066 .. code-block:: c++
3068     __builtin_unpredictable(long long)
3070 **Example of use**:
3072 .. code-block:: c++
3074   if (__builtin_unpredictable(x > 0)) {
3075      foo();
3076   }
3078 **Description**:
3080 The ``__builtin_unpredictable()`` builtin is expected to be used with control
3081 flow conditions such as in ``if`` and ``switch`` statements.
3083 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
3086 ``__builtin_expect``
3087 --------------------
3089 ``__builtin_expect`` is used to indicate that the value of an expression is
3090 anticipated to be the same as a statically known result.
3092 **Syntax**:
3094 .. code-block:: c++
3096     long __builtin_expect(long expr, long val)
3098 **Example of use**:
3100 .. code-block:: c++
3102   if (__builtin_expect(x, 0)) {
3103      bar();
3104   }
3106 **Description**:
3108 The ``__builtin_expect()`` builtin is typically used with control flow
3109 conditions such as in ``if`` and ``switch`` statements to help branch
3110 prediction. It means that its first argument ``expr`` is expected to take the
3111 value of its second argument ``val``. It always returns ``expr``.
3113 Query for this feature with ``__has_builtin(__builtin_expect)``.
3115 ``__builtin_expect_with_probability``
3116 -------------------------------------
3118 ``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
3119 takes a probability as third argument.
3121 **Syntax**:
3123 .. code-block:: c++
3125     long __builtin_expect_with_probability(long expr, long val, double p)
3127 **Example of use**:
3129 .. code-block:: c++
3131   if (__builtin_expect_with_probability(x, 0, .3)) {
3132      bar();
3133   }
3135 **Description**:
3137 The ``__builtin_expect_with_probability()`` builtin is typically used with
3138 control flow conditions such as in ``if`` and ``switch`` statements to help
3139 branch prediction. It means that its first argument ``expr`` is expected to take
3140 the value of its second argument ``val`` with probability ``p``. ``p`` must be
3141 within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
3143 Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
3145 ``__builtin_prefetch``
3146 ----------------------
3148 ``__builtin_prefetch`` is used to communicate with the cache handler to bring
3149 data into the cache before it gets used.
3151 **Syntax**:
3153 .. code-block:: c++
3155     void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
3157 **Example of use**:
3159 .. code-block:: c++
3161     __builtin_prefetch(a + i);
3163 **Description**:
3165 The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
3166 avoid cache misses when the developer has a good understanding of which data
3167 are going to be used next. ``addr`` is the address that needs to be brought into
3168 the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
3169 for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
3170 indicates the expected persistence of data in cache, from ``0`` which means that
3171 data can be discarded from cache after its next use to ``3`` which means that
3172 data is going to be reused a lot once in cache. ``1`` and ``2`` provide
3173 intermediate behavior between these two extremes.
3175 Query for this feature with ``__has_builtin(__builtin_prefetch)``.
3177 ``__sync_swap``
3178 ---------------
3180 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
3182 **Syntax**:
3184 .. code-block:: c++
3186   type __sync_swap(type *ptr, type value, ...)
3188 **Example of Use**:
3190 .. code-block:: c++
3192   int old_value = __sync_swap(&value, new_value);
3194 **Description**:
3196 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
3197 atomic intrinsics to allow code to atomically swap the current value with the
3198 new value.  More importantly, it helps developers write more efficient and
3199 correct code by avoiding expensive loops around
3200 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
3201 implementation details of ``__sync_lock_test_and_set()``.  The
3202 ``__sync_swap()`` builtin is a full barrier.
3204 ``__builtin_addressof``
3205 -----------------------
3207 ``__builtin_addressof`` performs the functionality of the built-in ``&``
3208 operator, ignoring any ``operator&`` overload.  This is useful in constant
3209 expressions in C++11, where there is no other way to take the address of an
3210 object that overloads ``operator&``. Clang automatically adds
3211 ``[[clang::lifetimebound]]`` to the parameter of ``__builtin_addressof``.
3213 **Example of use**:
3215 .. code-block:: c++
3217   template<typename T> constexpr T *addressof(T &value) {
3218     return __builtin_addressof(value);
3219   }
3221 ``__builtin_function_start``
3222 -----------------------------
3224 ``__builtin_function_start`` returns the address of a function body.
3226 **Syntax**:
3228 .. code-block:: c++
3230   void *__builtin_function_start(function)
3232 **Example of use**:
3234 .. code-block:: c++
3236   void a() {}
3237   void *p = __builtin_function_start(a);
3239   class A {
3240   public:
3241     void a(int n);
3242     void a();
3243   };
3245   void A::a(int n) {}
3246   void A::a() {}
3248   void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
3249   void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
3251 **Description**:
3253 The ``__builtin_function_start`` builtin accepts an argument that can be
3254 constant-evaluated to a function, and returns the address of the function
3255 body.  This builtin is not supported on all targets.
3257 The returned pointer may differ from the normally taken function address
3258 and is not safe to call.  For example, with ``-fsanitize=cfi``, taking a
3259 function address produces a callable pointer to a CFI jump table, while
3260 ``__builtin_function_start`` returns an address that fails
3261 :doc:`cfi-icall<ControlFlowIntegrity>` checks.
3263 ``__builtin_operator_new`` and ``__builtin_operator_delete``
3264 ------------------------------------------------------------
3266 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
3267 ``::operator new(args)``, except that it allows certain optimizations
3268 that the C++ standard does not permit for a direct function call to
3269 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
3270 merging allocations), and that the call is required to resolve to a
3271 `replaceable global allocation function
3272 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
3274 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
3275 ``::operator delete(args)``, except that it permits optimizations
3276 and that the call is required to resolve to a
3277 `replaceable global deallocation function
3278 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
3280 These builtins are intended for use in the implementation of ``std::allocator``
3281 and other similar allocation libraries, and are only available in C++.
3283 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
3284 ``__has_builtin(__builtin_operator_delete)``:
3286   * If the value is at least ``201802L``, the builtins behave as described above.
3288   * If the value is non-zero, the builtins may not support calling arbitrary
3289     replaceable global (de)allocation functions, but do support calling at least
3290     ``::operator new(size_t)`` and ``::operator delete(void*)``.
3292 ``__builtin_preserve_access_index``
3293 -----------------------------------
3295 ``__builtin_preserve_access_index`` specifies a code section where
3296 array subscript access and structure/union member access are relocatable
3297 under bpf compile-once run-everywhere framework. Debuginfo (typically
3298 with ``-g``) is needed, otherwise, the compiler will exit with an error.
3299 The return type for the intrinsic is the same as the type of the
3300 argument.
3302 **Syntax**:
3304 .. code-block:: c
3306   type __builtin_preserve_access_index(type arg)
3308 **Example of Use**:
3310 .. code-block:: c
3312   struct t {
3313     int i;
3314     int j;
3315     union {
3316       int a;
3317       int b;
3318     } c[4];
3319   };
3320   struct t *v = ...;
3321   int *pb =__builtin_preserve_access_index(&v->c[3].b);
3322   __builtin_preserve_access_index(v->j);
3324 ``__builtin_debugtrap``
3325 -----------------------
3327 ``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
3329 **Syntax**:
3331 .. code-block:: c++
3333     __builtin_debugtrap()
3335 **Description**
3337 ``__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.
3339 Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
3342 ``__builtin_trap``
3343 ------------------
3345 ``__builtin_trap`` causes the program to stop its execution abnormally.
3347 **Syntax**:
3349 .. code-block:: c++
3351     __builtin_trap()
3353 **Description**
3355 ``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
3357 Query for this feature with ``__has_builtin(__builtin_trap)``.
3359 ``__builtin_nondeterministic_value``
3360 ------------------------------------
3362 ``__builtin_nondeterministic_value`` returns a valid nondeterministic value of the same type as the provided argument.
3364 **Syntax**:
3366 .. code-block:: c++
3368     type __builtin_nondeterministic_value(type x)
3370 **Examples**:
3372 .. code-block:: c++
3374     int x = __builtin_nondeterministic_value(x);
3375     float y = __builtin_nondeterministic_value(y);
3376     __m256i a = __builtin_nondeterministic_value(a);
3378 **Description**
3380 Each call to ``__builtin_nondeterministic_value`` returns a valid value of the type given by the argument.
3382 The types currently supported are: integer types, floating-point types, vector types.
3384 Query for this feature with ``__has_builtin(__builtin_nondeterministic_value)``.
3386 ``__builtin_sycl_unique_stable_name``
3387 -------------------------------------
3389 ``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3390 produces a string literal containing a unique name for the type that is stable
3391 across split compilations, mainly to support SYCL/Data Parallel C++ language.
3393 In cases where the split compilation needs to share a unique token for a type
3394 across the boundary (such as in an offloading situation), this name can be used
3395 for lookup purposes, such as in the SYCL Integration Header.
3397 The value of this builtin is computed entirely at compile time, so it can be
3398 used in constant expressions. This value encodes lambda functions based on a
3399 stable numbering order in which they appear in their local declaration contexts.
3400 Once this builtin is evaluated in a constexpr context, it is erroneous to use
3401 it in an instantiation which changes its value.
3403 In order to produce the unique name, the current implementation of the builtin
3404 uses Itanium mangling even if the host compilation uses a different name
3405 mangling scheme at runtime. The mangler marks all the lambdas required to name
3406 the SYCL kernel and emits a stable local ordering of the respective lambdas.
3407 The resulting pattern is demanglable.  When non-lambda types are passed to the
3408 builtin, the mangler emits their usual pattern without any special treatment.
3410 **Syntax**:
3412 .. code-block:: c
3414   // Computes a unique stable name for the given type.
3415   constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3417 Multiprecision Arithmetic Builtins
3418 ----------------------------------
3420 Clang provides a set of builtins which expose multiprecision arithmetic in a
3421 manner amenable to C. They all have the following form:
3423 .. code-block:: c
3425   unsigned x = ..., y = ..., carryin = ..., carryout;
3426   unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3428 Thus one can form a multiprecision addition chain in the following manner:
3430 .. code-block:: c
3432   unsigned *x, *y, *z, carryin=0, carryout;
3433   z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3434   carryin = carryout;
3435   z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3436   carryin = carryout;
3437   z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3438   carryin = carryout;
3439   z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3441 The complete list of builtins are:
3443 .. code-block:: c
3445   unsigned char      __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3446   unsigned short     __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3447   unsigned           __builtin_addc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3448   unsigned long      __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3449   unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3450   unsigned char      __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3451   unsigned short     __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3452   unsigned           __builtin_subc  (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3453   unsigned long      __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3454   unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3456 Checked Arithmetic Builtins
3457 ---------------------------
3459 Clang provides a set of builtins that implement checked arithmetic for security
3460 critical applications in a manner that is fast and easily expressible in C. As
3461 an example of their usage:
3463 .. code-block:: c
3465   errorcode_t security_critical_application(...) {
3466     unsigned x, y, result;
3467     ...
3468     if (__builtin_mul_overflow(x, y, &result))
3469       return kErrorCodeHackers;
3470     ...
3471     use_multiply(result);
3472     ...
3473   }
3475 Clang provides the following checked arithmetic builtins:
3477 .. code-block:: c
3479   bool __builtin_add_overflow   (type1 x, type2 y, type3 *sum);
3480   bool __builtin_sub_overflow   (type1 x, type2 y, type3 *diff);
3481   bool __builtin_mul_overflow   (type1 x, type2 y, type3 *prod);
3482   bool __builtin_uadd_overflow  (unsigned x, unsigned y, unsigned *sum);
3483   bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
3484   bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
3485   bool __builtin_usub_overflow  (unsigned x, unsigned y, unsigned *diff);
3486   bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
3487   bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
3488   bool __builtin_umul_overflow  (unsigned x, unsigned y, unsigned *prod);
3489   bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
3490   bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
3491   bool __builtin_sadd_overflow  (int x, int y, int *sum);
3492   bool __builtin_saddl_overflow (long x, long y, long *sum);
3493   bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
3494   bool __builtin_ssub_overflow  (int x, int y, int *diff);
3495   bool __builtin_ssubl_overflow (long x, long y, long *diff);
3496   bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
3497   bool __builtin_smul_overflow  (int x, int y, int *prod);
3498   bool __builtin_smull_overflow (long x, long y, long *prod);
3499   bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
3501 Each builtin performs the specified mathematical operation on the
3502 first two arguments and stores the result in the third argument.  If
3503 possible, the result will be equal to mathematically-correct result
3504 and the builtin will return 0.  Otherwise, the builtin will return
3505 1 and the result will be equal to the unique value that is equivalent
3506 to the mathematically-correct result modulo two raised to the *k*
3507 power, where *k* is the number of bits in the result type.  The
3508 behavior of these builtins is well-defined for all argument values.
3510 The first three builtins work generically for operands of any integer type,
3511 including boolean types.  The operands need not have the same type as each
3512 other, or as the result.  The other builtins may implicitly promote or
3513 convert their operands before performing the operation.
3515 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3517 Floating point builtins
3518 ---------------------------------------
3520 ``__builtin_isfpclass``
3521 -----------------------
3523 ``__builtin_isfpclass`` is used to test if the specified floating-point values
3524 fall into one of the specified floating-point classes.
3526 **Syntax**:
3528 .. code-block:: c++
3530     int __builtin_isfpclass(fp_type expr, int mask)
3531     int_vector __builtin_isfpclass(fp_vector expr, int mask)
3533 **Example of use**:
3535 .. code-block:: c++
3537   if (__builtin_isfpclass(x, 448)) {
3538      // `x` is positive finite value
3539          ...
3540   }
3542 **Description**:
3544 The ``__builtin_isfpclass()`` builtin is a generalization of functions ``isnan``,
3545 ``isinf``, ``isfinite`` and some others defined by the C standard. It tests if
3546 the floating-point value, specified by the first argument, falls into any of data
3547 classes, specified by the second argument. The latter is an integer constant
3548 bitmask expression, in which each data class is represented by a bit
3549 using the encoding:
3551 ========== =================== ======================
3552 Mask value Data class          Macro
3553 ========== =================== ======================
3554 0x0001     Signaling NaN       __FPCLASS_SNAN
3555 0x0002     Quiet NaN           __FPCLASS_QNAN
3556 0x0004     Negative infinity   __FPCLASS_NEGINF
3557 0x0008     Negative normal     __FPCLASS_NEGNORMAL
3558 0x0010     Negative subnormal  __FPCLASS_NEGSUBNORMAL
3559 0x0020     Negative zero       __FPCLASS_NEGZERO
3560 0x0040     Positive zero       __FPCLASS_POSZERO
3561 0x0080     Positive subnormal  __FPCLASS_POSSUBNORMAL
3562 0x0100     Positive normal     __FPCLASS_POSNORMAL
3563 0x0200     Positive infinity   __FPCLASS_POSINF
3564 ========== =================== ======================
3566 For convenience preprocessor defines macros for these values. The function
3567 returns 1 if ``expr`` falls into one of the specified data classes, 0 otherwise.
3569 In the example above the mask value 448 (0x1C0) contains the bits selecting
3570 positive zero, positive subnormal and positive normal classes.
3571 ``__builtin_isfpclass(x, 448)`` would return true only if ``x`` if of any of
3572 these data classes. Using suitable mask value, the function can implement any of
3573 the standard classification functions, for example, ``__builtin_isfpclass(x, 3)``
3574 is identical to ``isnan``,``__builtin_isfpclass(x, 504)`` - to ``isfinite``
3575 and so on.
3577 If the first argument is a vector, the function is equivalent to the set of
3578 scalar calls of ``__builtin_isfpclass`` applied to the input elementwise.
3580 The result of ``__builtin_isfpclass`` is a boolean value, if the first argument
3581 is a scalar, or an integer vector with the same element count as the first
3582 argument. The element type in this vector has the same bit length as the
3583 element of the the first argument type.
3585 This function never raises floating-point exceptions and does not canonicalize
3586 its input. The floating-point argument is not promoted, its data class is
3587 determined based on its representation in its actual semantic type.
3589 ``__builtin_canonicalize``
3590 --------------------------
3592 .. code-block:: c
3594    double __builtin_canonicalize(double);
3595    float __builtin_canonicalizef(float);
3596    long double __builtin_canonicalizel(long double);
3598 Returns the platform specific canonical encoding of a floating point
3599 number. This canonicalization is useful for implementing certain
3600 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3601 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3602 more information on the semantics.
3604 ``__builtin_flt_rounds`` and ``__builtin_set_flt_rounds``
3605 ---------------------------------------------------------
3607 .. code-block:: c
3609    int __builtin_flt_rounds();
3610    void __builtin_set_flt_rounds(int);
3612 Returns and sets current floating point rounding mode. The encoding of returned
3613 values and input parameters is same as the result of FLT_ROUNDS, specified by C
3614 standard:
3615 - ``0``  - toward zero
3616 - ``1``  - to nearest, ties to even
3617 - ``2``  - toward positive infinity
3618 - ``3``  - toward negative infinity
3619 - ``4``  - to nearest, ties away from zero
3620 The effect of passing some other value to ``__builtin_flt_rounds`` is
3621 implementation-defined. ``__builtin_set_flt_rounds`` is currently only supported
3622 to work on x86, x86_64, Arm and AArch64 targets. These builtins read and modify
3623 the floating-point environment, which is not always allowed and may have unexpected
3624 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.
3626 String builtins
3627 ---------------
3629 Clang provides constant expression evaluation support for builtins forms of
3630 the following functions from the C standard library headers
3631 ``<string.h>`` and ``<wchar.h>``:
3633 * ``memchr``
3634 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3635 * ``strchr``
3636 * ``strcmp``
3637 * ``strlen``
3638 * ``strncmp``
3639 * ``wcschr``
3640 * ``wcscmp``
3641 * ``wcslen``
3642 * ``wcsncmp``
3643 * ``wmemchr``
3644 * ``wmemcmp``
3646 In each case, the builtin form has the name of the C library function prefixed
3647 by ``__builtin_``. Example:
3649 .. code-block:: c
3651   void *p = __builtin_memchr("foobar", 'b', 5);
3653 In addition to the above, one further builtin is provided:
3655 .. code-block:: c
3657   char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3659 ``__builtin_char_memchr(a, b, c)`` is identical to
3660 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3661 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3662 is disallowed in general).
3664 Constant evaluation support for the ``__builtin_mem*`` functions is provided
3665 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3666 despite these functions accepting an argument of type ``const void*``.
3668 Support for constant expression evaluation for the above builtins can be detected
3669 with ``__has_feature(cxx_constexpr_string_builtins)``.
3671 Variadic function builtins
3672 --------------------------
3674 Clang provides several builtins for working with variadic functions from the C
3675 standard library ``<stdarg.h>`` header:
3677 * ``__builtin_va_list``
3679 A predefined typedef for the target-specific ``va_list`` type.
3681 * ``void __builtin_va_start(__builtin_va_list list, <parameter-name>)``
3683 A builtin function for the target-specific ``va_start`` function-like macro.
3684 The ``parameter-name`` argument is the name of the parameter preceding the
3685 ellipsis (``...``) in the function signature. Alternatively, in C23 mode or
3686 later, it may be the integer literal ``0`` if there is no parameter preceding
3687 the ellipsis. This function initializes the given ``__builtin_va_list`` object.
3688 It is undefined behavior to call this function on an already initialized
3689 ``__builin_va_list`` object.
3691 * ``void __builtin_va_end(__builtin_va_list list)``
3693 A builtin function for the target-specific ``va_end`` function-like macro. This
3694 function finalizes the given ``__builtin_va_list`` object such that it is no
3695 longer usable unless re-initialized with a call to ``__builtin_va_start`` or
3696 ``__builtin_va_copy``. It is undefined behavior to call this function with a
3697 ``list`` that has not been initialized by either ``__builtin_va_start`` or
3698 ``__builtin_va_copy``.
3700 * ``<type-name> __builtin_va_arg(__builtin_va_list list, <type-name>)``
3702 A builtin function for the target-specific ``va_arg`` function-like macro. This
3703 function returns the value of the next variadic argument to the call. It is
3704 undefined behavior to call this builtin when there is no next variadic argument
3705 to retrieve or if the next variadic argument does not have a type compatible
3706 with the given ``type-name``. The return type of the function is the
3707 ``type-name`` given as the second argument. It is undefined behavior to call
3708 this function with a ``list`` that has not been initialized by either
3709 ``__builtin_va_start`` or ``__builtin_va_copy``.
3711 * ``void __builtin_va_copy(__builtin_va_list dest, __builtin_va_list src)``
3713 A builtin function for the target-specific ``va_copy`` function-like macro.
3714 This function initializes ``dest`` as a copy of ``src``. It is undefined
3715 behavior to call this function with an already initialized ``dest`` argument.
3717 Memory builtins
3718 ---------------
3720 Clang provides constant expression evaluation support for builtin forms of the
3721 following functions from the C standard library headers
3722 ``<string.h>`` and ``<wchar.h>``:
3724 * ``memcpy``
3725 * ``memmove``
3726 * ``wmemcpy``
3727 * ``wmemmove``
3729 In each case, the builtin form has the name of the C library function prefixed
3730 by ``__builtin_``.
3732 Constant evaluation support is only provided when the source and destination
3733 are pointers to arrays with the same trivially copyable element type, and the
3734 given size is an exact multiple of the element size that is no greater than
3735 the number of elements accessible through the source and destination operands.
3737 Guaranteed inlined copy
3738 ^^^^^^^^^^^^^^^^^^^^^^^
3740 .. code-block:: c
3742   void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3745 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
3746 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3747 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3748 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3749 for more information.
3751 This is useful to implement a custom version of ``memcpy``, implement a
3752 ``libc`` memcpy or work around the absence of a ``libc``.
3754 Note that the `size` argument must be a compile time constant.
3756 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3758 Guaranteed inlined memset
3759 ^^^^^^^^^^^^^^^^^^^^^^^^^
3761 .. code-block:: c
3763   void __builtin_memset_inline(void *dst, int value, size_t size);
3766 ``__builtin_memset_inline`` has been designed as a building block for efficient
3767 ``memset`` implementations. It is identical to ``__builtin_memset`` but also
3768 guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3769 <https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3770 for more information.
3772 This is useful to implement a custom version of ``memset``, implement a
3773 ``libc`` memset or work around the absence of a ``libc``.
3775 Note that the `size` argument must be a compile time constant.
3777 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3779 Atomic Min/Max builtins with memory ordering
3780 --------------------------------------------
3782 There are two atomic builtins with min/max in-memory comparison and swap.
3783 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3785 * ``__atomic_fetch_min``
3786 * ``__atomic_fetch_max``
3788 The builtins work with signed and unsigned integers and require to specify memory ordering.
3789 The return value is the original value that was stored in memory before comparison.
3791 Example:
3793 .. code-block:: c
3795   unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3797 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
3798 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
3799 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
3801 In terms of acquire-release ordering barriers these two operations are always
3802 considered as operations with *load-store* semantics, even when the original value
3803 is not actually modified after comparison.
3805 .. _langext-__c11_atomic:
3807 __c11_atomic builtins
3808 ---------------------
3810 Clang provides a set of builtins which are intended to be used to implement
3811 C11's ``<stdatomic.h>`` header.  These builtins provide the semantics of the
3812 ``_explicit`` form of the corresponding C11 operation, and are named with a
3813 ``__c11_`` prefix.  The supported operations, and the differences from
3814 the corresponding C11 operations, are:
3816 * ``__c11_atomic_init``
3817 * ``__c11_atomic_thread_fence``
3818 * ``__c11_atomic_signal_fence``
3819 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
3820   ``_Atomic(...)`` object, instead of its address)
3821 * ``__c11_atomic_store``
3822 * ``__c11_atomic_load``
3823 * ``__c11_atomic_exchange``
3824 * ``__c11_atomic_compare_exchange_strong``
3825 * ``__c11_atomic_compare_exchange_weak``
3826 * ``__c11_atomic_fetch_add``
3827 * ``__c11_atomic_fetch_sub``
3828 * ``__c11_atomic_fetch_and``
3829 * ``__c11_atomic_fetch_or``
3830 * ``__c11_atomic_fetch_xor``
3831 * ``__c11_atomic_fetch_nand`` (Nand is not presented in ``<stdatomic.h>``)
3832 * ``__c11_atomic_fetch_max``
3833 * ``__c11_atomic_fetch_min``
3835 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3836 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3837 provided, with values corresponding to the enumerators of C11's
3838 ``memory_order`` enumeration.
3840 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
3841 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3842 atomic builtins are an explicit form of the corresponding OpenCL 2.0
3843 builtin function, and are named with a ``__opencl_`` prefix. The macros
3844 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
3845 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
3846 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3847 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3849 Low-level ARM exclusive memory builtins
3850 ---------------------------------------
3852 Clang provides overloaded builtins giving direct access to the three key ARM
3853 instructions for implementing atomic operations.
3855 .. code-block:: c
3857   T __builtin_arm_ldrex(const volatile T *addr);
3858   T __builtin_arm_ldaex(const volatile T *addr);
3859   int __builtin_arm_strex(T val, volatile T *addr);
3860   int __builtin_arm_stlex(T val, volatile T *addr);
3861   void __builtin_arm_clrex(void);
3863 The types ``T`` currently supported are:
3865 * Integer types with width at most 64 bits (or 128 bits on AArch64).
3866 * Floating-point types
3867 * Pointer types.
3869 Note that the compiler does not guarantee it will not insert stores which clear
3870 the exclusive monitor in between an ``ldrex`` type operation and its paired
3871 ``strex``. In practice this is only usually a risk when the extra store is on
3872 the same cache line as the variable being modified and Clang will only insert
3873 stack stores on its own, so it is best not to use these operations on variables
3874 with automatic storage duration.
3876 Also, loads and stores may be implicit in code written between the ``ldrex`` and
3877 ``strex``. Clang will not necessarily mitigate the effects of these either, so
3878 care should be exercised.
3880 For these reasons the higher level atomic primitives should be preferred where
3881 possible.
3883 Non-temporal load/store builtins
3884 --------------------------------
3886 Clang provides overloaded builtins allowing generation of non-temporal memory
3887 accesses.
3889 .. code-block:: c
3891   T __builtin_nontemporal_load(T *addr);
3892   void __builtin_nontemporal_store(T value, T *addr);
3894 The types ``T`` currently supported are:
3896 * Integer types.
3897 * Floating-point types.
3898 * Vector types.
3900 Note that the compiler does not guarantee that non-temporal loads or stores
3901 will be used.
3903 C++ Coroutines support builtins
3904 --------------------------------
3906 .. warning::
3907   This is a work in progress. Compatibility across Clang/LLVM releases is not
3908   guaranteed.
3910 Clang provides experimental builtins to support C++ Coroutines as defined by
3911 https://wg21.link/P0057. The following four are intended to be used by the
3912 standard library to implement the ``std::coroutine_handle`` type.
3914 **Syntax**:
3916 .. code-block:: c
3918   void  __builtin_coro_resume(void *addr);
3919   void  __builtin_coro_destroy(void *addr);
3920   bool  __builtin_coro_done(void *addr);
3921   void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
3923 **Example of use**:
3925 .. code-block:: c++
3927   template <> struct coroutine_handle<void> {
3928     void resume() const { __builtin_coro_resume(ptr); }
3929     void destroy() const { __builtin_coro_destroy(ptr); }
3930     bool done() const { return __builtin_coro_done(ptr); }
3931     // ...
3932   protected:
3933     void *ptr;
3934   };
3936   template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3937     // ...
3938     Promise &promise() const {
3939       return *reinterpret_cast<Promise *>(
3940         __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3941     }
3942     static coroutine_handle from_promise(Promise &promise) {
3943       coroutine_handle p;
3944       p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3945                                                       /*from-promise=*/true);
3946       return p;
3947     }
3948   };
3951 Other coroutine builtins are either for internal clang use or for use during
3952 development of the coroutine feature. See `Coroutines in LLVM
3953 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3954 more information on their semantics. Note that builtins matching the intrinsics
3955 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
3956 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
3957 an appropriate value during the emission.
3959 **Syntax**:
3961 .. code-block:: c
3963   size_t __builtin_coro_size()
3964   void  *__builtin_coro_frame()
3965   void  *__builtin_coro_free(void *coro_frame)
3967   void  *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
3968   bool   __builtin_coro_alloc()
3969   void  *__builtin_coro_begin(void *memory)
3970   void   __builtin_coro_end(void *coro_frame, bool unwind)
3971   char   __builtin_coro_suspend(bool final)
3973 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
3974 automatically will insert one if the first argument to `llvm.coro.suspend` is
3975 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
3976 as the first argument to the intrinsic.
3978 Source location builtins
3979 ------------------------
3981 Clang provides builtins to support C++ standard library implementation
3982 of ``std::source_location`` as specified in C++20.  With the exception
3983 of ``__builtin_COLUMN``, ``__builtin_FILE_NAME`` and ``__builtin_FUNCSIG``,
3984 these builtins are also implemented by GCC.
3986 **Syntax**:
3988 .. code-block:: c
3990   const char *__builtin_FILE();
3991   const char *__builtin_FILE_NAME(); // Clang only
3992   const char *__builtin_FUNCTION();
3993   const char *__builtin_FUNCSIG(); // Microsoft
3994   unsigned    __builtin_LINE();
3995   unsigned    __builtin_COLUMN(); // Clang only
3996   const std::source_location::__impl *__builtin_source_location();
3998 **Example of use**:
4000 .. code-block:: c++
4002   void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
4003                  const char* file = __builtin_FILE(),
4004                  const char* function = __builtin_FUNCTION()) {
4005     if (pred) return;
4006     printf("%s:%d assertion failed in function %s\n", file, line, function);
4007     std::abort();
4008   }
4010   struct MyAggregateType {
4011     int x;
4012     int line = __builtin_LINE(); // captures line where aggregate initialization occurs
4013   };
4014   static_assert(MyAggregateType{42}.line == __LINE__);
4016   struct MyClassType {
4017     int line = __builtin_LINE(); // captures line of the constructor used during initialization
4018     constexpr MyClassType(int) { assert(line == __LINE__); }
4019   };
4021 **Description**:
4023 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, ``__builtin_FUNCSIG``,
4024 ``__builtin_FILE`` and ``__builtin_FILE_NAME`` return the values, at the
4025 "invocation point", for ``__LINE__``, ``__FUNCTION__``, ``__FUNCSIG__``,
4026 ``__FILE__`` and ``__FILE_NAME__`` respectively. ``__builtin_COLUMN`` similarly
4027 returns the column, though there is no corresponding macro. These builtins are
4028 constant expressions.
4030 When the builtins appear as part of a default function argument the invocation
4031 point is the location of the caller. When the builtins appear as part of a
4032 default member initializer, the invocation point is the location of the
4033 constructor or aggregate initialization used to create the object. Otherwise
4034 the invocation point is the same as the location of the builtin.
4036 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
4037 empty string is returned.
4039 The builtin ``__builtin_source_location`` returns a pointer to constant static
4040 data of type ``std::source_location::__impl``. This type must have already been
4041 defined, and must contain exactly four fields: ``const char *_M_file_name``,
4042 ``const char *_M_function_name``, ``<any-integral-type> _M_line``, and
4043 ``<any-integral-type> _M_column``. The fields will be populated in the same
4044 manner as the above four builtins, except that ``_M_function_name`` is populated
4045 with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
4048 Alignment builtins
4049 ------------------
4050 Clang provides builtins to support checking and adjusting alignment of
4051 pointers and integers.
4052 These builtins can be used to avoid relying on implementation-defined behavior
4053 of arithmetic on integers derived from pointers.
4054 Additionally, these builtins retain type information and, unlike bitwise
4055 arithmetic, they can perform semantic checking on the alignment value.
4057 **Syntax**:
4059 .. code-block:: c
4061   Type __builtin_align_up(Type value, size_t alignment);
4062   Type __builtin_align_down(Type value, size_t alignment);
4063   bool __builtin_is_aligned(Type value, size_t alignment);
4066 **Example of use**:
4068 .. code-block:: c++
4070   char* global_alloc_buffer;
4071   void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
4072     char* result = __builtin_align_up(global_alloc_buffer, alignment);
4073     // result now contains the value of global_alloc_buffer rounded up to the
4074     // next multiple of alignment.
4075     global_alloc_buffer = result + alloc_size;
4076     return result;
4077   }
4079   void* get_start_of_page(void* ptr) {
4080     return __builtin_align_down(ptr, PAGE_SIZE);
4081   }
4083   void example(char* buffer) {
4084      if (__builtin_is_aligned(buffer, 64)) {
4085        do_fast_aligned_copy(buffer);
4086      } else {
4087        do_unaligned_copy(buffer);
4088      }
4089   }
4091   // In addition to pointers, the builtins can also be used on integer types
4092   // and are evaluatable inside constant expressions.
4093   static_assert(__builtin_align_up(123, 64) == 128, "");
4094   static_assert(__builtin_align_down(123u, 64) == 64u, "");
4095   static_assert(!__builtin_is_aligned(123, 64), "");
4098 **Description**:
4100 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
4101 first argument aligned up/down to the next multiple of the second argument.
4102 If the value is already sufficiently aligned, it is returned unchanged.
4103 The builtin ``__builtin_is_aligned`` returns whether the first argument is
4104 aligned to a multiple of the second argument.
4105 All of these builtins expect the alignment to be expressed as a number of bytes.
4107 These builtins can be used for all integer types as well as (non-function)
4108 pointer types. For pointer types, these builtins operate in terms of the integer
4109 address of the pointer and return a new pointer of the same type (including
4110 qualifiers such as ``const``) with an adjusted address.
4111 When aligning pointers up or down, the resulting value must be within the same
4112 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
4113 This means that arbitrary integer values stored in pointer-type variables must
4114 not be passed to these builtins. For those use cases, the builtins can still be
4115 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
4117 If Clang can determine that the alignment is not a power of two at compile time,
4118 it will result in a compilation failure. If the alignment argument is not a
4119 power of two at run time, the behavior of these builtins is undefined.
4121 Non-standard C++11 Attributes
4122 =============================
4124 Clang's non-standard C++11 attributes live in the ``clang`` attribute
4125 namespace.
4127 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
4128 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
4129 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
4130 (see the list of `GCC function attributes
4131 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
4132 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
4133 `GCC type attributes
4134 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
4135 implementation, these attributes must appertain to the *declarator-id* in a
4136 declaration, which means they must go either at the start of the declaration or
4137 immediately after the name being declared.
4139 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
4140 also applies the GNU ``noreturn`` attribute to ``f``.
4142 .. code-block:: c++
4144   [[gnu::unused]] int a, f [[gnu::noreturn]] ();
4146 Target-Specific Extensions
4147 ==========================
4149 Clang supports some language features conditionally on some targets.
4151 ARM/AArch64 Language Extensions
4152 -------------------------------
4154 Memory Barrier Intrinsics
4155 ^^^^^^^^^^^^^^^^^^^^^^^^^
4156 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
4157 in the `Arm C Language Extensions
4158 <https://github.com/ARM-software/acle/releases>`_.
4159 Note that these intrinsics are implemented as motion barriers that block
4160 reordering of memory accesses and side effect instructions. Other instructions
4161 like simple arithmetic may be reordered around the intrinsic. If you expect to
4162 have no reordering at all, use inline assembly instead.
4164 X86/X86-64 Language Extensions
4165 ------------------------------
4167 The X86 backend has these language extensions:
4169 Memory references to specified segments
4170 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4172 Annotating a pointer with address space #256 causes it to be code generated
4173 relative to the X86 GS segment register, address space #257 causes it to be
4174 relative to the X86 FS segment, and address space #258 causes it to be
4175 relative to the X86 SS segment.  Note that this is a very very low-level
4176 feature that should only be used if you know what you're doing (for example in
4177 an OS kernel).
4179 Here is an example:
4181 .. code-block:: c++
4183   #define GS_RELATIVE __attribute__((address_space(256)))
4184   int foo(int GS_RELATIVE *P) {
4185     return *P;
4186   }
4188 Which compiles to (on X86-32):
4190 .. code-block:: gas
4192   _foo:
4193           movl    4(%esp), %eax
4194           movl    %gs:(%eax), %eax
4195           ret
4197 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
4198 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
4199 indicate their support.
4201 PowerPC Language Extensions
4202 ---------------------------
4204 Set the Floating Point Rounding Mode
4205 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4206 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
4207 the floating point rounding mode. This function will use the least significant
4208 two bits of integer argument to set the floating point rounding mode.
4210 .. code-block:: c++
4212   double __builtin_setrnd(int mode);
4214 The effective values for mode are:
4216     - 0 - round to nearest
4217     - 1 - round to zero
4218     - 2 - round to +infinity
4219     - 3 - round to -infinity
4221 Note that the mode argument will modulo 4, so if the integer argument is greater
4222 than 3, it will only use the least significant two bits of the mode.
4223 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
4225 PowerPC cache builtins
4226 ^^^^^^^^^^^^^^^^^^^^^^
4228 The PowerPC architecture specifies instructions implementing cache operations.
4229 Clang provides builtins that give direct programmer access to these cache
4230 instructions.
4232 Currently the following builtins are implemented in clang:
4234 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
4235 to main memory and flushes the copy from the data cache.
4237 **Syntax**:
4239 .. code-block:: c
4241   void __dcbf(const void* addr); /* Data Cache Block Flush */
4243 **Example of Use**:
4245 .. code-block:: c
4247   int a = 1;
4248   __builtin_dcbf (&a);
4250 Extensions for Static Analysis
4251 ==============================
4253 Clang supports additional attributes that are useful for documenting program
4254 invariants and rules for static analysis tools, such as the `Clang Static
4255 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
4256 in the analyzer's `list of source-level annotations
4257 <https://clang-analyzer.llvm.org/annotations.html>`_.
4260 Extensions for Dynamic Analysis
4261 ===============================
4263 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
4264 with :doc:`AddressSanitizer`.
4266 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
4267 with :doc:`ThreadSanitizer`.
4269 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
4270 with :doc:`MemorySanitizer`.
4272 Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
4273 with :doc:`DataFlowSanitizer`.
4275 Use ``__has_feature(safe_stack)`` to check if the code is being built
4276 with :doc:`SafeStack`.
4279 Extensions for selectively disabling optimization
4280 =================================================
4282 Clang provides a mechanism for selectively disabling optimizations in functions
4283 and methods.
4285 To disable optimizations in a single function definition, the GNU-style or C++11
4286 non-standard attribute ``optnone`` can be used.
4288 .. code-block:: c++
4290   // The following functions will not be optimized.
4291   // GNU-style attribute
4292   __attribute__((optnone)) int foo() {
4293     // ... code
4294   }
4295   // C++11 attribute
4296   [[clang::optnone]] int bar() {
4297     // ... code
4298   }
4300 To facilitate disabling optimization for a range of function definitions, a
4301 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
4302 followed by ``off`` or ``on``.
4304 All function definitions in the region between an ``off`` and the following
4305 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
4306 conflict with explicit attributes already present on the function (e.g. the
4307 ones that control inlining).
4309 .. code-block:: c++
4311   #pragma clang optimize off
4312   // This function will be decorated with optnone.
4313   int foo() {
4314     // ... code
4315   }
4317   // optnone conflicts with always_inline, so bar() will not be decorated.
4318   __attribute__((always_inline)) int bar() {
4319     // ... code
4320   }
4321   #pragma clang optimize on
4323 If no ``on`` is found to close an ``off`` region, the end of the region is the
4324 end of the compilation unit.
4326 Note that a stray ``#pragma clang optimize on`` does not selectively enable
4327 additional optimizations when compiling at low optimization levels. This feature
4328 can only be used to selectively disable optimizations.
4330 The pragma has an effect on functions only at the point of their definition; for
4331 function templates, this means that the state of the pragma at the point of an
4332 instantiation is not necessarily relevant. Consider the following example:
4334 .. code-block:: c++
4336   template<typename T> T twice(T t) {
4337     return 2 * t;
4338   }
4340   #pragma clang optimize off
4341   template<typename T> T thrice(T t) {
4342     return 3 * t;
4343   }
4345   int container(int a, int b) {
4346     return twice(a) + thrice(b);
4347   }
4348   #pragma clang optimize on
4350 In this example, the definition of the template function ``twice`` is outside
4351 the pragma region, whereas the definition of ``thrice`` is inside the region.
4352 The ``container`` function is also in the region and will not be optimized, but
4353 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
4354 these two instantiations, ``twice`` will be optimized (because its definition
4355 was outside the region) and ``thrice`` will not be optimized.
4357 Clang also implements MSVC's range-based pragma,
4358 ``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
4359 supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
4360 ``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
4361 the same as ``#pragma clang optimize``. All functions
4362 between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
4364 .. code-block:: c++
4366   #pragma optimize("", off)
4367   // This function will be decorated with optnone.
4368   void f1() {}
4370   #pragma optimize("", on)
4371   // This function will be optimized with whatever was specified on
4372   // the commandline.
4373   void f2() {}
4375   // This will warn with Clang's current implementation.
4376   #pragma optimize("g", on)
4377   void f3() {}
4379 For MSVC, an empty optimization list and ``off`` parameter will turn off
4380 all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
4381 ``on`` parameter will reset the optimizations to the ones specified on the
4382 commandline.
4384 .. list-table:: Parameters (unsupported by Clang)
4386    * - Parameter
4387      - Type of optimization
4388    * - g
4389      - Deprecated
4390    * - s or t
4391      - Short or fast sequences of machine code
4392    * - y
4393      - Enable frame pointers
4395 Extensions for loop hint optimizations
4396 ======================================
4398 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
4399 subsequent for, while, do-while, or c++11 range-based for loop. The directive
4400 provides options for vectorization, interleaving, predication, unrolling and
4401 distribution. Loop hints can be specified before any loop and will be ignored if
4402 the optimization is not safe to apply.
4404 There are loop hints that control transformations (e.g. vectorization, loop
4405 unrolling) and there are loop hints that set transformation options (e.g.
4406 ``vectorize_width``, ``unroll_count``).  Pragmas setting transformation options
4407 imply the transformation is enabled, as if it was enabled via the corresponding
4408 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
4409 disabled  (e.g. ``vectorize(disable)``), that takes precedence over
4410 transformations option pragmas implying that transformation.
4412 Vectorization, Interleaving, and Predication
4413 --------------------------------------------
4415 A vectorized loop performs multiple iterations of the original loop
4416 in parallel using vector instructions. The instruction set of the target
4417 processor determines which vector instructions are available and their vector
4418 widths. This restricts the types of loops that can be vectorized. The vectorizer
4419 automatically determines if the loop is safe and profitable to vectorize. A
4420 vector instruction cost model is used to select the vector width.
4422 Interleaving multiple loop iterations allows modern processors to further
4423 improve instruction-level parallelism (ILP) using advanced hardware features,
4424 such as multiple execution units and out-of-order execution. The vectorizer uses
4425 a cost model that depends on the register pressure and generated code size to
4426 select the interleaving count.
4428 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
4429 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
4430 manually enable vectorization or interleaving.
4432 .. code-block:: c++
4434   #pragma clang loop vectorize(enable)
4435   #pragma clang loop interleave(enable)
4436   for(...) {
4437     ...
4438   }
4440 The vector width is specified by
4441 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
4442 integer and the type of vectorization can be specified with an optional
4443 second parameter. The default for the second parameter is 'fixed' and
4444 refers to fixed width vectorization, whereas 'scalable' indicates the
4445 compiler should use scalable vectors instead. Another use of vectorize_width
4446 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
4447 of vectorization to use without specifying the exact width. In both variants
4448 of the pragma the vectorizer may decide to fall back on fixed width
4449 vectorization if the target does not support scalable vectors.
4451 The interleave count is specified by ``interleave_count(_value_)``, where
4452 _value_ is a positive integer. This is useful for specifying the optimal
4453 width/count of the set of target architectures supported by your application.
4455 .. code-block:: c++
4457   #pragma clang loop vectorize_width(2)
4458   #pragma clang loop interleave_count(2)
4459   for(...) {
4460     ...
4461   }
4463 Specifying a width/count of 1 disables the optimization, and is equivalent to
4464 ``vectorize(disable)`` or ``interleave(disable)``.
4466 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
4468 .. code-block:: c++
4470   #pragma clang loop vectorize(enable)
4471   #pragma clang loop vectorize_predicate(enable)
4472   for(...) {
4473     ...
4474   }
4476 This predicates (masks) all instructions in the loop, which allows the scalar
4477 remainder loop (the tail) to be folded into the main vectorized loop. This
4478 might be more efficient when vector predication is efficiently supported by the
4479 target platform.
4481 Loop Unrolling
4482 --------------
4484 Unrolling a loop reduces the loop control overhead and exposes more
4485 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
4486 eliminates the loop and replaces it with an enumerated sequence of loop
4487 iterations. Full unrolling is only possible if the loop trip count is known at
4488 compile time. Partial unrolling replicates the loop body within the loop and
4489 reduces the trip count.
4491 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
4492 loop if the trip count is known at compile time. If the fully unrolled code size
4493 is greater than an internal limit the loop will be partially unrolled up to this
4494 limit. If the trip count is not known at compile time the loop will be partially
4495 unrolled with a heuristically chosen unroll factor.
4497 .. code-block:: c++
4499   #pragma clang loop unroll(enable)
4500   for(...) {
4501     ...
4502   }
4504 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
4505 loop if the trip count is known at compile time identically to
4506 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
4507 if the loop count is not known at compile time.
4509 .. code-block:: c++
4511   #pragma clang loop unroll(full)
4512   for(...) {
4513     ...
4514   }
4516 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
4517 _value_ is a positive integer. If this value is greater than the trip count the
4518 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
4519 to the same code size limit as with ``unroll(enable)``.
4521 .. code-block:: c++
4523   #pragma clang loop unroll_count(8)
4524   for(...) {
4525     ...
4526   }
4528 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4530 Loop unroll parameters can be controlled by options
4531 `-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4533 Loop Distribution
4534 -----------------
4536 Loop Distribution allows splitting a loop into multiple loops.  This is
4537 beneficial for example when the entire loop cannot be vectorized but some of the
4538 resulting loops can.
4540 If ``distribute(enable))`` is specified and the loop has memory dependencies
4541 that inhibit vectorization, the compiler will attempt to isolate the offending
4542 operations into a new loop.  This optimization is not enabled by default, only
4543 loops marked with the pragma are considered.
4545 .. code-block:: c++
4547   #pragma clang loop distribute(enable)
4548   for (i = 0; i < N; ++i) {
4549     S1: A[i + 1] = A[i] + B[i];
4550     S2: C[i] = D[i] * E[i];
4551   }
4553 This loop will be split into two loops between statements S1 and S2.  The
4554 second loop containing S2 will be vectorized.
4556 Loop Distribution is currently not enabled by default in the optimizer because
4557 it can hurt performance in some cases.  For example, instruction-level
4558 parallelism could be reduced by sequentializing the execution of the
4559 statements S1 and S2 above.
4561 If Loop Distribution is turned on globally with
4562 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4563 be used the disable it on a per-loop basis.
4565 Additional Information
4566 ----------------------
4568 For convenience multiple loop hints can be specified on a single line.
4570 .. code-block:: c++
4572   #pragma clang loop vectorize_width(4) interleave_count(8)
4573   for(...) {
4574     ...
4575   }
4577 If an optimization cannot be applied any hints that apply to it will be ignored.
4578 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4579 proven safe to vectorize. To identify and diagnose optimization issues use
4580 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4581 user guide for details.
4583 Extensions to specify floating-point flags
4584 ====================================================
4586 The ``#pragma clang fp`` pragma allows floating-point options to be specified
4587 for a section of the source code. This pragma can only appear at file scope or
4588 at the start of a compound statement (excluding comments). When using within a
4589 compound statement, the pragma is active within the scope of the compound
4590 statement.
4592 Currently, the following settings can be controlled with this pragma:
4594 ``#pragma clang fp reassociate`` allows control over the reassociation
4595 of floating point expressions. When enabled, this pragma allows the expression
4596 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4597 Reassociation can also occur across multiple statements.
4598 This pragma can be used to disable reassociation when it is otherwise
4599 enabled for the translation unit with the ``-fassociative-math`` flag.
4600 The pragma can take two values: ``on`` and ``off``.
4602 .. code-block:: c++
4604   float f(float x, float y, float z)
4605   {
4606     // Enable floating point reassociation across statements
4607     #pragma clang fp reassociate(on)
4608     float t = x + y;
4609     float v = t + z;
4610   }
4613 ``#pragma clang fp contract`` specifies whether the compiler should
4614 contract a multiply and an addition (or subtraction) into a fused FMA
4615 operation when supported by the target.
4617 The pragma can take three values: ``on``, ``fast`` and ``off``.  The ``on``
4618 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4619 fusion as specified the language standard.  The ``fast`` option allows fusion
4620 in cases when the language standard does not make this possible (e.g. across
4621 statements in C).
4623 .. code-block:: c++
4625   for(...) {
4626     #pragma clang fp contract(fast)
4627     a = b[i] * c[i];
4628     d[i] += a;
4629   }
4632 The pragma can also be used with ``off`` which turns FP contraction off for a
4633 section of the code. This can be useful when fast contraction is otherwise
4634 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4635 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4636 addition across statements regardless of any controlling pragmas.
4638 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4639 may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4640 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4642 .. code-block:: c++
4644   {
4645     // Preserve floating point exceptions
4646     #pragma clang fp exceptions(strict)
4647     z = x + y;
4648     if (fetestexcept(FE_OVERFLOW))
4649       ...
4650   }
4652 A ``#pragma clang fp`` pragma may contain any number of options:
4654 .. code-block:: c++
4656   void func(float *dest, float a, float b) {
4657     #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4658     ...
4659   }
4661 ``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4662 for a section of the source code. This pragma can appear at file or namespace
4663 scope, or at the start of a compound statement (excluding comments).
4664 The pragma is active within the scope of the compound statement.
4666 When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4667 governed by the pragma behaves as though the command-line option
4668 ``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4669 source-defined precision.
4671 When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4672 governed by the pragma behaves as though the command-line option
4673 ``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4674 ``double`` precision.
4676 When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4677 governed by the pragma behaves as though the command-line option
4678 ``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4679 target-dependent ``long double`` precision. In Win32 programming, for instance,
4680 the long double data type maps to the double, 64-bit precision data type.
4682 The full syntax this pragma supports is
4683 ``#pragma clang fp eval_method(source|double|extended)``.
4685 .. code-block:: c++
4687   for(...) {
4688     // The compiler will use long double as the floating-point evaluation
4689     // method.
4690     #pragma clang fp eval_method(extended)
4691     a = b[i] * c[i] + e;
4692   }
4694 Note: ``math.h`` defines the typedefs ``float_t`` and ``double_t`` based on the active
4695 evaluation method at the point where the header is included, not where the
4696 typedefs are used.  Because of this, it is unwise to combine these typedefs with
4697 ``#pragma clang fp eval_method``.  To catch obvious bugs, Clang will emit an
4698 error for any references to these typedefs within the scope of this pragma;
4699 however, this is not a fool-proof protection, and programmers must take care.
4701 The ``#pragma float_control`` pragma allows precise floating-point
4702 semantics and floating-point exception behavior to be specified
4703 for a section of the source code. This pragma can only appear at file or
4704 namespace scope, within a language linkage specification or at the start of a
4705 compound statement (excluding comments). When used within a compound statement,
4706 the pragma is active within the scope of the compound statement.  This pragma
4707 is modeled after a Microsoft pragma with the same spelling and syntax.  For
4708 pragmas specified at file or namespace scope, or within a language linkage
4709 specification, a stack is supported so that the ``pragma float_control``
4710 settings can be pushed or popped.
4712 When ``pragma float_control(precise, on)`` is enabled, the section of code
4713 governed by the pragma uses precise floating point semantics, effectively
4714 ``-ffast-math`` is disabled and ``-ffp-contract=on``
4715 (fused multiply add) is enabled. This pragma enables ``-fmath-errno``.
4717 When ``pragma float_control(precise, off)`` is enabled, unsafe-floating point
4718 optimizations are enabled in the section of code governed by the pragma.
4719 Effectively ``-ffast-math`` is enabled and ``-ffp-contract=fast``. This pragma
4720 disables ``-fmath-errno``.
4722 When ``pragma float_control(except, on)`` is enabled, the section of code
4723 governed by the pragma behaves as though the command-line option
4724 ``-ffp-exception-behavior=strict`` is enabled,
4725 when ``pragma float_control(except, off)`` is enabled, the section of code
4726 governed by the pragma behaves as though the command-line option
4727 ``-ffp-exception-behavior=ignore`` is enabled.
4729 The full syntax this pragma supports is
4730 ``float_control(except|precise, on|off [, push])`` and
4731 ``float_control(push|pop)``.
4732 The ``push`` and ``pop`` forms, including using ``push`` as the optional
4733 third argument, can only occur at file scope.
4735 .. code-block:: c++
4737   for(...) {
4738     // This block will be compiled with -fno-fast-math and -ffp-contract=on
4739     #pragma float_control(precise, on)
4740     a = b[i] * c[i] + e;
4741   }
4743 Specifying an attribute for multiple declarations (#pragma clang attribute)
4744 ===========================================================================
4746 The ``#pragma clang attribute`` directive can be used to apply an attribute to
4747 multiple declarations. The ``#pragma clang attribute push`` variation of the
4748 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4749 can be added to. The ``#pragma clang attribute (...)`` variation adds an
4750 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4751 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4752 shorthand for when you want to add one attribute to a new scope. Multiple push
4753 directives can be nested inside each other.
4755 The attributes that are used in the ``#pragma clang attribute`` directives
4756 can be written using the GNU-style syntax:
4758 .. code-block:: c++
4760   #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4762   void function(); // The function now has the annotate("custom") attribute
4764   #pragma clang attribute pop
4766 The attributes can also be written using the C++11 style syntax:
4768 .. code-block:: c++
4770   #pragma clang attribute push ([[noreturn]], apply_to = function)
4772   void function(); // The function now has the [[noreturn]] attribute
4774   #pragma clang attribute pop
4776 The ``__declspec`` style syntax is also supported:
4778 .. code-block:: c++
4780   #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4782   void function(); // The function now has the __declspec(dllexport) attribute
4784   #pragma clang attribute pop
4786 A single push directive can contain multiple attributes, however,
4787 only one syntax style can be used within a single directive:
4789 .. code-block:: c++
4791   #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4793   void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4795   #pragma clang attribute pop
4797   #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4799   void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4801   #pragma clang attribute pop
4803 Because multiple push directives can be nested, if you're writing a macro that
4804 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4805 required) to add a namespace to your push/pop directives. A pop directive with a
4806 namespace will pop the innermost push that has that same namespace. This will
4807 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4808 that an ``pop`` without a namespace will pop the innermost ``push`` without a
4809 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4810 same namespace. For instance:
4812 .. code-block:: c++
4814    #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4815    #define ASSUME_NORETURN_END   _Pragma("clang attribute AssumeNoreturn.pop")
4817    #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
4818    #define ASSUME_UNAVAILABLE_END   _Pragma("clang attribute Unavailable.pop")
4821    ASSUME_NORETURN_BEGIN
4822    ASSUME_UNAVAILABLE_BEGIN
4823    void function(); // function has [[noreturn]] and __attribute__((unavailable))
4824    ASSUME_NORETURN_END
4825    void other_function(); // function has __attribute__((unavailable))
4826    ASSUME_UNAVAILABLE_END
4828 Without the namespaces on the macros, ``other_function`` will be annotated with
4829 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4830 a contrived example, but its very possible for this kind of situation to appear
4831 in real code if the pragmas are spread out across a large file. You can test if
4832 your version of clang supports namespaces on ``#pragma clang attribute`` with
4833 ``__has_extension(pragma_clang_attribute_namespaces)``.
4835 Subject Match Rules
4836 -------------------
4838 The set of declarations that receive a single attribute from the attribute stack
4839 depends on the subject match rules that were specified in the pragma. Subject
4840 match rules are specified after the attribute. The compiler expects an
4841 identifier that corresponds to the subject set specifier. The ``apply_to``
4842 specifier is currently the only supported subject set specifier. It allows you
4843 to specify match rules that form a subset of the attribute's allowed subject
4844 set, i.e. the compiler doesn't require all of the attribute's subjects. For
4845 example, an attribute like ``[[nodiscard]]`` whose subject set includes
4846 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4847 least one of these rules after ``apply_to``:
4849 .. code-block:: c++
4851   #pragma clang attribute push([[nodiscard]], apply_to = enum)
4853   enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4855   struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4857   #pragma clang attribute pop
4859   #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4861   enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4863   struct Record2 { }; // The struct *will* receive [[nodiscard]]
4865   #pragma clang attribute pop
4867   // This is an error, since [[nodiscard]] can't be applied to namespaces:
4868   #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4870   #pragma clang attribute pop
4872 Multiple match rules can be specified using the ``any`` match rule, as shown
4873 in the example above. The ``any`` rule applies attributes to all declarations
4874 that are matched by at least one of the rules in the ``any``. It doesn't nest
4875 and can't be used inside the other match rules. Redundant match rules or rules
4876 that conflict with one another should not be used inside of ``any``. Failing to
4877 specify a rule within the ``any`` rule results in an error.
4879 Clang supports the following match rules:
4881 - ``function``: Can be used to apply attributes to functions. This includes C++
4882   member functions, static functions, operators, and constructors/destructors.
4884 - ``function(is_member)``: Can be used to apply attributes to C++ member
4885   functions. This includes members like static functions, operators, and
4886   constructors/destructors.
4888 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
4889   member functions, and variables/fields whose type is a function pointer. It
4890   does not apply attributes to Objective-C methods or blocks.
4892 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4893   and C++11 type aliases.
4895 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4896   ``union`` declarations.
4898 - ``record(unless(is_union))``: Can be used to apply attributes only to
4899   ``struct`` and ``class`` declarations.
4901 - ``enum``: Can be be used to apply attributes to enumeration declarations.
4903 - ``enum_constant``: Can be used to apply attributes to enumerators.
4905 - ``variable``: Can be used to apply attributes to variables, including
4906   local variables, parameters, global variables, and static member variables.
4907   It does not apply attributes to instance member variables or Objective-C
4908   ivars.
4910 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4911   variables only.
4913 - ``variable(is_global)``: Can be used to apply attributes to global variables
4914   only.
4916 - ``variable(is_local)``: Can be used to apply attributes to local variables
4917   only.
4919 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
4920   only.
4922 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4923   the variables that are not parameters.
4925 - ``field``: Can be used to apply attributes to non-static member variables
4926   in a record. This includes Objective-C ivars.
4928 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4930 - ``objc_interface``: Can be used to apply attributes to ``@interface``
4931   declarations.
4933 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4934   declarations.
4936 - ``objc_category``: Can be used to apply attributes to category declarations,
4937   including class extensions.
4939 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
4940   including instance and class methods. Implicit methods like implicit property
4941   getters and setters do not receive the attribute.
4943 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
4944   instance methods.
4946 - ``objc_property``: Can be used to apply attributes to ``@property``
4947   declarations.
4949 - ``block``: Can be used to apply attributes to block declarations. This does
4950   not include variables/fields of block pointer type.
4952 The use of ``unless`` in match rules is currently restricted to a strict set of
4953 sub-rules that are used by the supported attributes. That means that even though
4954 ``variable(unless(is_parameter))`` is a valid match rule,
4955 ``variable(unless(is_thread_local))`` is not.
4957 Supported Attributes
4958 --------------------
4960 Not all attributes can be used with the ``#pragma clang attribute`` directive.
4961 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
4962 like ``address_space`` aren't supported by this directive. You can determine
4963 whether or not an attribute is supported by the pragma by referring to the
4964 :doc:`individual documentation for that attribute <AttributeReference>`.
4966 The attributes are applied to all matching declarations individually, even when
4967 the attribute is semantically incorrect. The attributes that aren't applied to
4968 any declaration are not verified semantically.
4970 Specifying section names for global objects (#pragma clang section)
4971 ===================================================================
4973 The ``#pragma clang section`` directive provides a means to assign section-names
4974 to global variables, functions and static variables.
4976 The section names can be specified as:
4978 .. code-block:: c++
4980   #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
4982 The section names can be reverted back to default name by supplying an empty
4983 string to the section kind, for example:
4985 .. code-block:: c++
4987   #pragma clang section bss="" data="" text="" rodata="" relro=""
4989 The ``#pragma clang section`` directive obeys the following rules:
4991 * The pragma applies to all global variable, statics and function declarations
4992   from the pragma to the end of the translation unit.
4994 * The pragma clang section is enabled automatically, without need of any flags.
4996 * This feature is only defined to work sensibly for ELF targets.
4998 * If section name is specified through _attribute_((section("myname"))), then
4999   the attribute name gains precedence.
5001 * Global variables that are initialized to zero will be placed in the named
5002   bss section, if one is present.
5004 * The ``#pragma clang section`` directive does not does try to infer section-kind
5005   from the name. For example, naming a section "``.bss.mySec``" does NOT mean
5006   it will be a bss section name.
5008 * The decision about which section-kind applies to each global is taken in the back-end.
5009   Once the section-kind is known, appropriate section name, as specified by the user using
5010   ``#pragma clang section`` directive, is applied to that global.
5012 Specifying Linker Options on ELF Targets
5013 ========================================
5015 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
5016 The second parameter is the library name (without the traditional Unix prefix of
5017 ``lib``).  This allows you to provide an implicit link of dependent libraries.
5019 Evaluating Object Size Dynamically
5020 ==================================
5022 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
5023 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
5024 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
5025 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
5026 for ``__builtin_object_size`` in libraries that support it.
5028 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
5029 safer:
5031 .. code-block:: c
5033   void copy_into_buffer(size_t size) {
5034     char* buffer = malloc(size);
5035     strlcpy(buffer, "some string", strlen("some string"));
5036     // Previous line preprocesses to:
5037     // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
5038   }
5040 Since the size of ``buffer`` can't be known at compile time, Clang will fold
5041 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
5042 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
5043 ``size``, providing some extra runtime safety.
5045 Deprecating Macros
5046 ==================
5048 Clang supports the pragma ``#pragma clang deprecated``, which can be used to
5049 provide deprecation warnings for macro uses. For example:
5051 .. code-block:: c
5053    #define MIN(x, y) x < y ? x : y
5054    #pragma clang deprecated(MIN, "use std::min instead")
5056    int min(int a, int b) {
5057      return MIN(a, b); // warning: MIN is deprecated: use std::min instead
5058    }
5060 ``#pragma clang deprecated`` should be preferred for this purpose over
5061 ``#pragma GCC warning`` because the warning can be controlled with
5062 ``-Wdeprecated``.
5064 Restricted Expansion Macros
5065 ===========================
5067 Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
5068 used restrict macro expansion in headers. This can be valuable when providing
5069 headers with ABI stability requirements. Any expansion of the annotated macro
5070 processed by the preprocessor after the ``#pragma`` annotation will log a
5071 warning. Redefining the macro or undefining the macro will not be diagnosed, nor
5072 will expansion of the macro within the main source file. For example:
5074 .. code-block:: c
5076    #define TARGET_ARM 1
5077    #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
5079    /// Foo.h
5080    struct Foo {
5081    #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
5082      uint32_t X;
5083    #else
5084      uint64_t X;
5085    #endif
5086    };
5088    /// main.c
5089    #include "foo.h"
5090    #if TARGET_ARM // No warning in main source file
5091    X_TYPE uint32_t
5092    #else
5093    X_TYPE uint64_t
5094    #endif
5096 This warning is controlled by ``-Wpedantic-macros``.
5098 Final Macros
5099 ============
5101 Clang supports the pragma ``#pragma clang final``, which can be used to
5102 mark macros as final, meaning they cannot be undef'd or re-defined. For example:
5104 .. code-block:: c
5106    #define FINAL_MACRO 1
5107    #pragma clang final(FINAL_MACRO)
5109    #define FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be redefined
5110    #undef FINAL_MACRO  // warning: FINAL_MACRO is marked final and should not be undefined
5112 This is useful for enforcing system-provided macros that should not be altered
5113 in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
5114 macros will always warn on redefinition, including situations with identical
5115 bodies and in system headers.
5117 Line Control
5118 ============
5120 Clang supports an extension for source line control, which takes the
5121 form of a preprocessor directive starting with an unsigned integral
5122 constant. In addition to the standard ``#line`` directive, this form
5123 allows control of an include stack and header file type, which is used
5124 in issuing diagnostics. These lines are emitted in preprocessed
5125 output.
5127 .. code-block:: c
5129    # <line:number> <filename:string> <header-type:numbers>
5131 The filename is optional, and if unspecified indicates no change in
5132 source filename. The header-type is an optional, whitespace-delimited,
5133 sequence of magic numbers as follows.
5135 * ``1:`` Push the current source file name onto the include stack and
5136   enter a new file.
5138 * ``2``: Pop the include stack and return to the specified file. If
5139   the filename is ``""``, the name popped from the include stack is
5140   used. Otherwise there is no requirement that the specified filename
5141   matches the current source when originally pushed.
5143 * ``3``: Enter a system-header region. System headers often contain
5144   implementation-specific source that would normally emit a diagnostic.
5146 * ``4``: Enter an implicit ``extern "C"`` region. This is not required on
5147   modern systems where system headers are C++-aware.
5149 At most a single ``1`` or ``2`` can be present, and values must be in
5150 ascending order.
5152 Examples are:
5154 .. code-block:: c
5156    # 57 // Advance (or return) to line 57 of the current source file
5157    # 57 "frob" // Set to line 57 of "frob"
5158    # 1 "foo.h" 1 // Enter "foo.h" at line 1
5159    # 59 "main.c" 2 // Leave current include and return to "main.c"
5160    # 1 "/usr/include/stdio.h" 1 3 // Enter a system header
5161    # 60 "" 2 // return to "main.c"
5162    # 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
5164 Extended Integer Types
5165 ======================
5167 Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
5168 and in C++. This type was previously implemented in Clang with the same
5169 semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
5170 favor of the standard type.
5172 Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
5173 so this type should not yet be used in interfaces that require ABI stability.
5175 Intrinsics Support within Constant Expressions
5176 ==============================================
5178 The following builtin intrinsics can be used in constant expressions:
5180 * ``__builtin_bitreverse8``
5181 * ``__builtin_bitreverse16``
5182 * ``__builtin_bitreverse32``
5183 * ``__builtin_bitreverse64``
5184 * ``__builtin_bswap16``
5185 * ``__builtin_bswap32``
5186 * ``__builtin_bswap64``
5187 * ``__builtin_clrsb``
5188 * ``__builtin_clrsbl``
5189 * ``__builtin_clrsbll``
5190 * ``__builtin_clz``
5191 * ``__builtin_clzl``
5192 * ``__builtin_clzll``
5193 * ``__builtin_clzs``
5194 * ``__builtin_ctz``
5195 * ``__builtin_ctzl``
5196 * ``__builtin_ctzll``
5197 * ``__builtin_ctzs``
5198 * ``__builtin_ffs``
5199 * ``__builtin_ffsl``
5200 * ``__builtin_ffsll``
5201 * ``__builtin_fmax``
5202 * ``__builtin_fmin``
5203 * ``__builtin_fpclassify``
5204 * ``__builtin_inf``
5205 * ``__builtin_isinf``
5206 * ``__builtin_isinf_sign``
5207 * ``__builtin_isfinite``
5208 * ``__builtin_isnan``
5209 * ``__builtin_isnormal``
5210 * ``__builtin_nan``
5211 * ``__builtin_nans``
5212 * ``__builtin_parity``
5213 * ``__builtin_parityl``
5214 * ``__builtin_parityll``
5215 * ``__builtin_popcount``
5216 * ``__builtin_popcountl``
5217 * ``__builtin_popcountll``
5218 * ``__builtin_rotateleft8``
5219 * ``__builtin_rotateleft16``
5220 * ``__builtin_rotateleft32``
5221 * ``__builtin_rotateleft64``
5222 * ``__builtin_rotateright8``
5223 * ``__builtin_rotateright16``
5224 * ``__builtin_rotateright32``
5225 * ``__builtin_rotateright64``
5227 The following x86-specific intrinsics can be used in constant expressions:
5229 * ``_bit_scan_forward``
5230 * ``_bit_scan_reverse``
5231 * ``__bsfd``
5232 * ``__bsfq``
5233 * ``__bsrd``
5234 * ``__bsrq``
5235 * ``__bswap``
5236 * ``__bswapd``
5237 * ``__bswap64``
5238 * ``__bswapq``
5239 * ``_castf32_u32``
5240 * ``_castf64_u64``
5241 * ``_castu32_f32``
5242 * ``_castu64_f64``
5243 * ``__lzcnt16``
5244 * ``__lzcnt``
5245 * ``__lzcnt64``
5246 * ``_mm_popcnt_u32``
5247 * ``_mm_popcnt_u64``
5248 * ``_popcnt32``
5249 * ``_popcnt64``
5250 * ``__popcntd``
5251 * ``__popcntq``
5252 * ``__popcnt16``
5253 * ``__popcnt``
5254 * ``__popcnt64``
5255 * ``__rolb``
5256 * ``__rolw``
5257 * ``__rold``
5258 * ``__rolq``
5259 * ``__rorb``
5260 * ``__rorw``
5261 * ``__rord``
5262 * ``__rorq``
5263 * ``_rotl``
5264 * ``_rotr``
5265 * ``_rotwl``
5266 * ``_rotwr``
5267 * ``_lrotl``
5268 * ``_lrotr``
5270 Debugging the Compiler
5271 ======================
5273 Clang supports a number of pragma directives that help debugging the compiler itself.
5274 Syntax is the following: `#pragma clang __debug <command> <arguments>`.
5275 Note, all of debugging pragmas are subject to change.
5277 `dump`
5278 ------
5279 Accepts either a single identifier or an expression. When a single identifier is passed,
5280 the lookup results for the identifier are printed to `stderr`. When an expression is passed,
5281 the AST for the expression is printed to `stderr`. The expression is an unevaluated operand,
5282 so things like overload resolution and template instantiations are performed,
5283 but the expression has no runtime effects.
5284 Type- and value-dependent expressions are not supported yet.
5286 This facility is designed to aid with testing name lookup machinery.