1 =========================
2 Clang Language Extensions
3 =========================
15 AutomaticReferenceCounting
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
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
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:
49 #ifndef __has_builtin // Optional of course.
50 #define __has_builtin(x) 0 // Compatibility with non-clang compilers.
54 #if __has_builtin(__builtin_trap)
63 Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
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:
80 #ifndef __has_constexpr_builtin // Optional of course.
81 #define __has_constexpr_builtin(x) 0 // Compatibility with non-clang compilers.
85 #if __has_constexpr_builtin(__builtin_fmax)
88 double money_fee(double amount) {
89 return __builtin_fmax(amount * 0.03, 10.0);
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:
113 #ifndef __has_feature // Optional of course.
114 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
116 #ifndef __has_extension
117 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
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.
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.
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
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:
169 #ifndef __has_cpp_attribute // For backwards compatibility
170 #define __has_cpp_attribute(x) 0
174 #if __has_cpp_attribute(clang::fallthrough)
175 #define FALLTHROUGH [[clang::fallthrough]]
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:
198 #ifndef __has_c_attribute // Optional of course.
199 #define __has_c_attribute(x) 0 // Compatibility with non-clang compilers.
203 #if __has_c_attribute(fallthrough)
204 #define FALLTHROUGH [[fallthrough]]
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``.
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:
225 #ifndef __has_attribute // Optional of course.
226 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
230 #if __has_attribute(always_inline)
231 #define ALWAYS_INLINE __attribute__((always_inline))
233 #define ALWAYS_INLINE
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:
252 #ifndef __has_declspec_attribute // Optional of course.
253 #define __has_declspec_attribute(x) 0 // Compatibility with non-clang compilers.
257 #if __has_declspec_attribute(dllexport)
258 #define DLLEXPORT __declspec(dllexport)
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``.
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:
280 #ifdef __is_identifier // Compatibility with non-clang compilers.
281 #if __is_identifier(__wchar_t)
282 typedef wchar_t __wchar_t;
286 __wchar_t WideCharacter;
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:
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:
309 // Note the two possible file name string formats.
310 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
311 # include "myinclude.h"
314 To test for this feature, use ``#if defined(__has_include)``:
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"
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,
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"
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"
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.
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.
363 #if __has_warning("-Wformat")
367 .. _languageextensions-builtin-macros:
373 Defined to a string that contains the name of the main input file passed to
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.
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.
390 Defined to the date and time of the last modification of the current source
394 Defined when compiling with Clang
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`.
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.)
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
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) {
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:
457 vector float foo(vector int a) {
459 b = vec_add(a, a) + a;
460 return (vector float)b;
463 NEON vector types are created using ``neon_vector_type`` and
464 ``neon_polyvector_type`` attributes. For example:
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) {
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:
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)));
500 Clang also supports the ext_vector_type attribute with boolean element types in
501 C and C++. For example:
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
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
521 The semantics of boolean vectors borrows from C bit-fields with the following
524 * Distinct boolean vectors are always distinct memory objects (there is no
526 * Only the operators `?:`, `!`, `~`, `|`, `&`, `^` and comparison are allowed on
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
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:
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));
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
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.
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
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
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
656 T __builtin_elementwise_trunc(T x) return the integral value nearest to but no larger in floating point types
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 =========================================== ================================================================ =========================================
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.
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,
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 ======================================= ================================================================ ==================================
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.
730 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
732 m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
736 The matrix type extension also supports operations on a matrix and a scalar.
740 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
743 return (a + 23) * 12;
746 The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
750 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
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.
762 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
764 m4x4_t f(m4x4_t a, m4x4_t b) {
773 The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
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) {
785 template <typename X>
786 using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
789 matrix_5_5<double> d;
791 i = (matrix_5_5<int>)d;
792 i = static_cast<matrix_5_5<int>>(d);
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;
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)
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):
821 * 64-bit ARM (AArch64)
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
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,
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:
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:
918 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
919 [-Wdeprecated-declarations]
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:
939 OM_Terrified __attribute__((deprecated)),
940 OM_AbortOnError __attribute__((deprecated)) = 4
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.
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:
977 .../TestFramework.framework
978 .../TestFramework.framework/.system_framework
979 .../TestFramework.framework/Headers
980 .../TestFramework.framework/Headers/TestFramework.h
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.
1006 The features listed below are part of the C++98 standard. These features are
1007 enabled by default when compiling C++ code.
1012 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
1013 enabled. For example, compiling code with ``-fno-exceptions`` disables C++
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.
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.
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
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
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.
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.
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.
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
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.
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)
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)
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
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
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
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.
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:
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
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 * ``__underlying_type`` (C++, GNU, Microsoft)
1626 In addition, the following expression traits are supported:
1628 * ``__is_lvalue_expr(e)`` (Embarcadero):
1629 Returns true if ``e`` is an lvalue expression.
1630 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1631 * ``__is_rvalue_expr(e)`` (Embarcadero):
1632 Returns true if ``e`` is a prvalue expression.
1633 Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1635 There are multiple ways to detect support for a type trait ``__X`` in the
1636 compiler, depending on the oldest version of Clang you wish to support.
1638 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1639 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1640 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1641 the following traits:
1643 * ``__has_nothrow_assign``
1644 * ``__has_nothrow_copy``
1645 * ``__has_nothrow_constructor``
1646 * ``__has_trivial_assign``
1647 * ``__has_trivial_copy``
1648 * ``__has_trivial_constructor``
1649 * ``__has_trivial_destructor``
1650 * ``__has_virtual_destructor``
1654 * ``__is_constructible``
1655 * ``__is_convertible_to``
1660 * ``__is_standard_layout``
1662 * ``__is_polymorphic``
1665 * ``__is_trivially_assignable``
1666 * ``__is_trivially_constructible``
1667 * ``__is_trivially_copyable``
1669 * ``__underlying_type``
1671 A simplistic usage example as might be seen in standard C++ headers follows:
1675 #if __has_builtin(__is_convertible_to)
1676 template<typename From, typename To>
1677 struct is_convertible_to {
1678 static const bool value = __is_convertible_to(From, To);
1681 // Emulate type trait for compatibility with other compilers.
1687 The syntax and high level language feature description is in
1688 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1689 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1691 Query for this feature with ``__has_extension(blocks)``.
1693 ASM Goto with Output Constraints
1694 ================================
1696 Outputs may be used along any branches from the ``asm goto`` whether the
1697 branches are taken or not.
1699 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1701 Prior to clang-16, the output may only be used safely when the indirect
1702 branches are not taken. Query for this difference with
1703 ``__has_extension(gnu_asm_goto_with_outputs_full)``.
1705 When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1706 outputs) with the `+r` constraint, there is a hidden input that's created
1707 before the label, so numeric references to operands must account for that.
1712 // %0 and %1 both refer to x
1713 // %l2 refers to err
1714 asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1720 This was changed to match GCC in clang-13; for better portability, symbolic
1721 references can be used instead of numeric references.
1726 asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1732 Objective-C Features
1733 ====================
1735 Related result types
1736 --------------------
1738 According to Cocoa conventions, Objective-C methods with certain names
1739 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1740 the receiving class's type. Such methods are said to have a "related result
1741 type", meaning that a message send to one of these methods will have the same
1742 static type as an instance of the receiver class. For example, given the
1745 .. code-block:: objc
1752 @interface NSArray : NSObject
1755 and this common initialization pattern
1757 .. code-block:: objc
1759 NSArray *array = [[NSArray alloc] init];
1761 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1762 ``alloc`` implicitly has a related result type. Similarly, the type of the
1763 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1764 related result type and its receiver is known to have the type ``NSArray *``.
1765 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1766 would have had type ``id``, as declared in the method signature.
1768 A method with a related result type can be declared by using the type
1769 ``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1770 that is only permitted in the result type of an Objective-C method, e.g.
1772 .. code-block:: objc
1775 + (instancetype)constructAnA;
1778 The related result type can also be inferred for some methods. To determine
1779 whether a method has an inferred related result type, the first word in the
1780 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1781 and the method will have a related result type if its return type is compatible
1782 with the type of its class and if:
1784 * the first word is "``alloc``" or "``new``", and the method is a class method,
1787 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1788 and the method is an instance method.
1790 If a method with a related result type is overridden by a subclass method, the
1791 subclass method must also return a type that is compatible with the subclass
1794 .. code-block:: objc
1796 @interface NSString : NSObject
1797 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1800 Related result types only affect the type of a message send or property access
1801 via the given method. In all other respects, a method with a related result
1802 type is treated the same way as method that returns ``id``.
1804 Use ``__has_feature(objc_instancetype)`` to determine whether the
1805 ``instancetype`` contextual keyword is available.
1807 Automatic reference counting
1808 ----------------------------
1810 Clang provides support for :doc:`automated reference counting
1811 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1812 for manual ``retain``/``release``/``autorelease`` message sends. There are three
1813 feature macros associated with automatic reference counting:
1814 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1815 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1816 automated reference counting also includes support for ``__weak`` pointers to
1817 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1818 are allowed to have fields that are pointers to Objective-C objects managed by
1819 automatic reference counting.
1826 Clang supports ARC-style weak and unsafe references in Objective-C even
1827 outside of ARC mode. Weak references must be explicitly enabled with
1828 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1829 to test whether they are enabled. Unsafe references are enabled
1830 unconditionally. ARC-style weak and unsafe references cannot be used
1831 when Objective-C garbage collection is enabled.
1833 Except as noted below, the language rules for the ``__weak`` and
1834 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1835 ``unsafe_unretained`` property attributes) are just as laid out
1836 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1837 In particular, note that some classes do not support forming weak
1838 references to their instances, and note that special care must be
1839 taken when storing weak references in memory where initialization
1840 and deinitialization are outside the responsibility of the compiler
1841 (such as in ``malloc``-ed memory).
1843 Loading from a ``__weak`` variable always implicitly retains the
1844 loaded value. In non-ARC modes, this retain is normally balanced
1845 by an implicit autorelease. This autorelease can be suppressed
1846 by performing the load in the receiver position of a ``-retain``
1847 message send (e.g. ``[weakReference retain]``); note that this performs
1848 only a single retain (the retain done when primitively loading from
1849 the weak reference).
1851 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1852 default behavior of variables and therefore is not needed. However,
1853 it does have an effect on the semantics of block captures: normally,
1854 copying a block which captures an Objective-C object or block pointer
1855 causes the captured pointer to be retained or copied, respectively,
1856 but that behavior is suppressed when the captured variable is qualified
1857 with ``__unsafe_unretained``.
1859 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1860 all non-ARC modes and was silently ignored outside of GC modes. It now
1861 means the ARC-style qualifier in all non-GC modes and is no longer
1862 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1863 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1864 in all non-GC Objective-C modes.
1866 .. _objc-fixed-enum:
1868 Enumerations with a fixed underlying type
1869 -----------------------------------------
1871 Clang provides support for C++11 enumerations with a fixed underlying type
1872 within Objective-C. For example, one can write an enumeration type as:
1876 typedef enum : unsigned char { Red, Green, Blue } Color;
1878 This specifies that the underlying type, which is used to store the enumeration
1879 value, is ``unsigned char``.
1881 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1882 underlying types is available in Objective-C.
1884 Interoperability with C++11 lambdas
1885 -----------------------------------
1887 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1888 permitting a lambda to be implicitly converted to a block pointer with the
1889 corresponding signature. For example, consider an API such as ``NSArray``'s
1890 array-sorting method:
1892 .. code-block:: objc
1894 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1896 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1897 (^)(id, id)``, and parameters of this type are generally provided with block
1898 literals as arguments. However, one can also use a C++11 lambda so long as it
1899 provides the same signature (in this case, accepting two parameters of type
1900 ``id`` and returning an ``NSComparisonResult``):
1902 .. code-block:: objc
1904 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1906 const NSStringCompareOptions comparisonOptions
1907 = NSCaseInsensitiveSearch | NSNumericSearch |
1908 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1909 NSLocale *currentLocale = [NSLocale currentLocale];
1911 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1912 NSRange string1Range = NSMakeRange(0, [s1 length]);
1913 return [s1 compare:s2 options:comparisonOptions
1914 range:string1Range locale:currentLocale];
1916 NSLog(@"sorted: %@", sorted);
1918 This code relies on an implicit conversion from the type of the lambda
1919 expression (an unnamed, local class type called the *closure type*) to the
1920 corresponding block pointer type. The conversion itself is expressed by a
1921 conversion operator in that closure type that produces a block pointer with the
1922 same signature as the lambda itself, e.g.,
1924 .. code-block:: objc
1926 operator NSComparisonResult (^)(id, id)() const;
1928 This conversion function returns a new block that simply forwards the two
1929 parameters to the lambda object (which it captures by copy), then returns the
1930 result. The returned block is first copied (with ``Block_copy``) and then
1931 autoreleased. As an optimization, if a lambda expression is immediately
1932 converted to a block pointer (as in the first example, above), then the block
1933 is not copied and autoreleased: rather, it is given the same lifetime as a
1934 block literal written at that point in the program, which avoids the overhead
1935 of copying a block to the heap in the common case.
1937 The conversion from a lambda to a block pointer is only available in
1938 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1939 management (autorelease).
1941 Object Literals and Subscripting
1942 --------------------------------
1944 Clang provides support for :doc:`Object Literals and Subscripting
1945 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1946 programming patterns, makes programs more concise, and improves the safety of
1947 container creation. There are several feature macros associated with object
1948 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1949 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1950 tests the availability of dictionary literals;
1951 ``__has_feature(objc_subscripting)`` tests the availability of object
1954 Objective-C Autosynthesis of Properties
1955 ---------------------------------------
1957 Clang provides support for autosynthesis of declared properties. Using this
1958 feature, clang provides default synthesis of those properties not declared
1959 @dynamic and not having user provided backing getter and setter methods.
1960 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1961 of this feature in version of clang being used.
1963 .. _langext-objc-retain-release:
1965 Objective-C retaining behavior attributes
1966 -----------------------------------------
1968 In Objective-C, functions and methods are generally assumed to follow the
1969 `Cocoa Memory Management
1970 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1971 conventions for ownership of object arguments and
1972 return values. However, there are exceptions, and so Clang provides attributes
1973 to allow these exceptions to be documented. This are used by ARC and the
1974 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
1975 better described using the ``objc_method_family`` attribute instead.
1977 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1978 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1979 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1980 that return Objective-C or CoreFoundation objects. They are commonly placed at
1981 the end of a function prototype or method declaration:
1983 .. code-block:: objc
1985 id foo() __attribute__((ns_returns_retained));
1987 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1989 The ``*_returns_retained`` attributes specify that the returned object has a +1
1990 retain count. The ``*_returns_not_retained`` attributes specify that the return
1991 object has a +0 retain count, even if the normal convention for its selector
1992 would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
1993 +0, but is guaranteed to live at least as long as the next flush of an
1996 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1997 an parameter declaration; they specify that the argument is expected to have a
1998 +1 retain count, which will be balanced in some way by the function or method.
1999 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
2000 method; it specifies that the method expects its ``self`` parameter to have a
2001 +1 retain count, which it will balance in some way.
2003 .. code-block:: objc
2005 void foo(__attribute__((ns_consumed)) NSString *string);
2007 - (void) bar __attribute__((ns_consumes_self));
2008 - (void) baz:(id) __attribute__((ns_consumed)) x;
2010 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
2011 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
2013 Query for these features with ``__has_attribute(ns_consumed)``,
2014 ``__has_attribute(ns_returns_retained)``, etc.
2016 Objective-C @available
2017 ----------------------
2019 It is possible to use the newest SDK but still build a program that can run on
2020 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
2021 ``-miphoneos-version-min=``.
2023 Before LLVM 5.0, when calling a function that exists only in the OS that's
2024 newer than the target OS (as determined by the minimum deployment version),
2025 programmers had to carefully check if the function exists at runtime, using
2026 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
2027 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
2028 Objective-C methods. If such a check was missed, the program would compile
2029 fine, run fine on newer systems, but crash on older systems.
2031 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
2032 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
2033 with the new ``@available()`` keyword to assist with this issue.
2034 When a method that's introduced in the OS newer than the target OS is called, a
2035 -Wunguarded-availability warning is emitted if that call is not guarded:
2037 .. code-block:: objc
2039 void my_fun(NSSomeClass* var) {
2040 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
2041 // built with -mmacosx-version-min=10.11, then this unconditional call
2042 // will emit a -Wunguarded-availability warning:
2043 [var fancyNewMethod];
2046 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
2047 ``if(@available())``:
2049 .. code-block:: objc
2051 void my_fun(NSSomeClass* var) {
2052 if (@available(macOS 10.12, *)) {
2053 [var fancyNewMethod];
2055 // Put fallback behavior for old macOS versions (and for non-mac
2060 The ``*`` is required and means that platforms not explicitly listed will take
2061 the true branch, and the compiler will emit ``-Wunguarded-availability``
2062 warnings for unlisted platforms based on those platform's deployment target.
2063 More than one platform can be listed in ``@available()``:
2065 .. code-block:: objc
2067 void my_fun(NSSomeClass* var) {
2068 if (@available(macOS 10.12, iOS 10, *)) {
2069 [var fancyNewMethod];
2073 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
2074 on 10.12, then add an `availability attribute
2075 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
2076 which will also suppress the warning and require that calls to my_fun() are
2079 .. code-block:: objc
2081 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
2082 [var fancyNewMethod]; // Now ok.
2085 ``@available()`` is only available in Objective-C code. To use the feature
2086 in C and C++ code, use the ``__builtin_available()`` spelling instead.
2088 If existing code uses null checks or ``-respondsToSelector:``, it should
2089 be changed to use ``@available()`` (or ``__builtin_available``) instead.
2091 ``-Wunguarded-availability`` is disabled by default, but
2092 ``-Wunguarded-availability-new``, which only emits this warning for APIs
2093 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
2094 tvOS >= 11, is enabled by default.
2096 .. _langext-overloading:
2098 Objective-C++ ABI: protocol-qualifier mangling of parameters
2099 ------------------------------------------------------------
2101 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
2102 type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such
2103 parameters to be differentiated from those with the regular unqualified ``id``
2106 This was a non-backward compatible mangling change to the ABI. This change
2107 allows proper overloading, and also prevents mangling conflicts with template
2108 parameters of protocol-qualified type.
2110 Query the presence of this new mangling with
2111 ``__has_feature(objc_protocol_qualifier_mangling)``.
2113 Initializer lists for complex numbers in C
2114 ==========================================
2116 clang supports an extension which allows the following in C:
2121 #include <complex.h>
2122 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
2124 This construct is useful because there is no way to separately initialize the
2125 real and imaginary parts of a complex variable in standard C, given that clang
2126 does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
2127 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
2128 in static initializers.)
2130 Note that this extension does not allow eliding the braces; the meaning of the
2131 following two lines is different:
2135 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
2136 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
2138 This extension also works in C++ mode, as far as that goes, but does not apply
2139 to the C++ ``std::complex``. (In C++11, list initialization allows the same
2140 syntax to be used with ``std::complex`` with the same meaning.)
2142 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2143 construct a complex number from the given real and imaginary components.
2148 Clang supports internal OpenCL extensions documented below.
2150 ``__cl_clang_bitfields``
2151 --------------------------------
2153 With this extension it is possible to enable bitfields in structs
2154 or unions using the OpenCL extension pragma mechanism detailed in
2155 `the OpenCL Extension Specification, section 1.2
2156 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2158 Use of bitfields in OpenCL kernels can result in reduced portability as struct
2159 layout is not guaranteed to be consistent when compiled by different compilers.
2160 If structs with bitfields are used as kernel function parameters, it can result
2161 in incorrect functionality when the layout is different between the host and
2168 #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2169 struct with_bitfield {
2170 unsigned int i : 5; // compiled - no diagnostic generated
2173 #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2174 struct without_bitfield {
2175 unsigned int i : 5; // error - bitfields are not supported
2178 ``__cl_clang_function_pointers``
2179 --------------------------------
2181 With this extension it is possible to enable various language features that
2182 are relying on function pointers using regular OpenCL extension pragma
2183 mechanism detailed in `the OpenCL Extension Specification,
2185 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2187 In C++ for OpenCL this also enables:
2189 - Use of member function pointers;
2191 - Unrestricted use of references to functions;
2193 - Virtual member functions.
2195 Such functionality is not conformant and does not guarantee to compile
2196 correctly in any circumstances. It can be used if:
2198 - the kernel source does not contain call expressions to (member-) function
2199 pointers, or virtual functions. For example this extension can be used in
2200 metaprogramming algorithms to be able to specify/detect types generically.
2202 - the generated kernel binary does not contain indirect calls because they
2203 are eliminated using compiler optimizations e.g. devirtualization.
2205 - the selected target supports the function pointer like functionality e.g.
2212 #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2215 void (*fp)(); // compiled - no diagnostic generated
2218 #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2221 void (*fp)(); // error - pointers to function are not allowed
2224 ``__cl_clang_variadic_functions``
2225 ---------------------------------
2227 With this extension it is possible to enable variadic arguments in functions
2228 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2229 Extension Specification, section 1.2
2230 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2232 This is not conformant behavior and it can only be used portably when the
2233 functions with variadic prototypes do not get generated in binary e.g. the
2234 variadic prototype is used to specify a function type with any number of
2235 arguments in metaprogramming algorithms in C++ for OpenCL.
2237 This extensions can also be used when the kernel code is intended for targets
2238 supporting the variadic arguments e.g. majority of CPU targets.
2244 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2245 void foo(int a, ...); // compiled - no diagnostic generated
2247 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2248 void bar(int a, ...); // error - variadic prototype is not allowed
2250 ``__cl_clang_non_portable_kernel_param_types``
2251 ----------------------------------------------
2253 With this extension it is possible to enable the use of some restricted types
2254 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2255 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2256 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2257 detailed in `the OpenCL Extension Specification, section 1.2
2258 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2260 This is not a conformant behavior and it can only be used when the
2261 kernel arguments are not accessed on the host side or the data layout/size
2262 between the host and device is known to be compatible.
2268 // Plain Old Data type.
2274 // Not POD type because of the constructor.
2275 // Standard layout type because there is only one access control.
2279 OnlySL() : a(0), b(0) {}
2282 // Not standard layout type because of two different access controls.
2289 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2290 kernel void kernel_main(
2297 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2299 Remove address space builtin function
2300 -------------------------------------
2302 ``__remove_address_space`` allows to derive types in C++ for OpenCL
2303 that have address space qualifiers removed. This utility only affects
2304 address space qualifiers, therefore, other type qualifiers such as
2305 ``const`` or ``volatile`` remain unchanged.
2311 template<typename T>
2313 T var1; // error - local function variable with global address space
2314 __private T var2; // error - conflicting address space qualifiers
2315 __private __remove_address_space<T>::type var3; // var3 is __private int
2323 Legacy 1.x atomics with generic address space
2324 ---------------------------------------------
2326 Clang allows use of atomic functions from the OpenCL 1.x standards
2327 with the generic address space pointer in C++ for OpenCL mode.
2329 This is a non-portable feature and might not be supported by all
2336 void foo(__generic volatile unsigned int* a) {
2340 WebAssembly Features
2341 ====================
2343 Clang supports the WebAssembly features documented below. For further
2344 information related to the semantics of the builtins, please refer to the `WebAssembly Specification <https://webassembly.github.io/spec/core/>`_.
2345 In this section, when we refer to reference types, we are referring to
2346 WebAssembly reference types, not C++ reference types unless stated
2349 ``__builtin_wasm_table_set``
2350 ----------------------------
2352 This builtin function stores a value in a WebAssembly table.
2353 It takes three arguments.
2354 The first argument is the table to store a value into, the second
2355 argument is the index to which to store the value into, and the
2356 third argument is a value of reference type to store in the table.
2361 static __externref_t table[0];
2362 extern __externref_t JSObj;
2364 void store(int index) {
2365 __builtin_wasm_table_set(table, index, JSObj);
2368 ``__builtin_wasm_table_get``
2369 ----------------------------
2371 This builtin function is the counterpart to ``__builtin_wasm_table_set``
2372 and loads a value from a WebAssembly table of reference typed values.
2373 It takes 2 arguments.
2374 The first argument is a table of reference typed values and the
2375 second argument is an index from which to load the value. It returns
2376 the loaded reference typed value.
2380 static __externref_t table[0];
2382 __externref_t load(int index) {
2383 __externref_t Obj = __builtin_wasm_table_get(table, index);
2387 ``__builtin_wasm_table_size``
2388 -----------------------------
2390 This builtin function returns the size of the WebAssembly table.
2391 Takes the table as an argument and returns an unsigned integer (``size_t``)
2392 with the current table size.
2396 typedef void (*__funcref funcref_t)();
2397 static __funcref table[0];
2400 return __builtin_wasm_table_size(table);
2403 ``__builtin_wasm_table_grow``
2404 -----------------------------
2406 This builtin function grows the WebAssembly table by a certain amount.
2407 Currently, as all WebAssembly tables created in C/C++ are zero-sized,
2408 this always needs to be called to grow the table.
2410 It takes three arguments. The first argument is the WebAssembly table
2411 to grow. The second argument is the reference typed value to store in
2412 the new table entries (the initialization value), and the third argument
2413 is the amount to grow the table by. It returns the previous table size
2414 or -1. It will return -1 if not enough space could be allocated.
2418 typedef void (*__funcref funcref_t)();
2419 static __funcref table[0];
2421 // grow returns the new table size or -1 on error.
2422 int grow(__funcref fn, int delta) {
2423 int prevSize = __builtin_wasm_table_grow(table, fn, delta);
2426 return prevSize + delta;
2429 ``__builtin_wasm_table_fill``
2430 -----------------------------
2432 This builtin function sets all the entries of a WebAssembly table to a given
2433 reference typed value. It takes four arguments. The first argument is
2434 the WebAssembly table, the second argument is the index that starts the
2435 range, the third argument is the value to set in the new entries, and
2436 the fourth and the last argument is the size of the range. It returns
2441 static __externref_t table[0];
2443 // resets a table by setting all of its entries to a given value.
2444 void reset(__externref_t Obj) {
2445 int Size = __builtin_wasm_table_size(table);
2446 __builtin_wasm_table_fill(table, 0, Obj, Size);
2449 ``__builtin_wasm_table_copy``
2450 -----------------------------
2452 This builtin function copies elements from a source WebAssembly table
2453 to a possibly overlapping destination region. It takes five arguments.
2454 The first argument is the destination WebAssembly table, and the second
2455 argument is the source WebAssembly table. The third argument is the
2456 destination index from where the copy starts, the fourth argument is the
2457 source index from there the copy starts, and the fifth and last argument
2458 is the number of elements to copy. It returns nothing.
2462 static __externref_t tableSrc[0];
2463 static __externref_t tableDst[0];
2465 // Copy nelem elements from [src, src + nelem - 1] in tableSrc to
2466 // [dst, dst + nelem - 1] in tableDst
2467 void copy(int dst, int src, int nelem) {
2468 __builtin_wasm_table_copy(tableDst, tableSrc, dst, src, nelem);
2475 Clang supports a number of builtin library functions with the same syntax as
2476 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
2477 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
2478 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to
2479 the GCC builtins, Clang supports a number of builtins that GCC does not, which
2482 Please note that Clang does not and will not support all of the GCC builtins
2483 for vector operations. Instead of using builtins, you should use the functions
2484 defined in target-specific header files like ``<xmmintrin.h>``, which define
2485 portable wrappers for these. Many of the Clang versions of these functions are
2486 implemented directly in terms of :ref:`extended vector support
2487 <langext-vectors>` instead of builtins, in order to reduce the number of
2488 builtins that we need to implement.
2490 ``__builtin_alloca``
2491 --------------------
2493 ``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2494 is automatically freed upon function termination.
2500 __builtin_alloca(size_t n)
2506 void init(float* data, size_t nbelems);
2507 void process(float* data, size_t nbelems);
2509 auto mem = (float*)__builtin_alloca(n * sizeof(float));
2512 /* mem is automatically freed at this point */
2517 ``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2518 on the stack. This amount is subject to stack allocation limits.
2520 Query for this feature with ``__has_builtin(__builtin_alloca)``.
2522 ``__builtin_alloca_with_align``
2523 -------------------------------
2525 ``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2526 stack while controlling its alignment. Memory is automatically freed upon
2527 function termination.
2534 __builtin_alloca_with_align(size_t n, size_t align)
2540 void init(float* data, size_t nbelems);
2541 void process(float* data, size_t nbelems);
2543 auto mem = (float*)__builtin_alloca_with_align(
2545 CHAR_BIT * alignof(float));
2548 /* mem is automatically freed at this point */
2553 ``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2554 on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2555 argument whose value is the alignment constraint, as a power of 2 in *bits*.
2557 Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2559 .. _langext-__builtin_assume:
2561 ``__builtin_assume``
2562 --------------------
2564 ``__builtin_assume`` is used to provide the optimizer with a boolean
2565 invariant that is defined to be true.
2571 __builtin_assume(bool)
2578 __builtin_assume(x != 0);
2579 // The optimizer may short-circuit this check using the invariant.
2581 return do_something();
2582 return do_something_else();
2587 The boolean argument to this function is defined to be true. The optimizer may
2588 analyze the form of the expression provided as the argument and deduce from
2589 that information used to optimize the program. If the condition is violated
2590 during execution, the behavior is undefined. The argument itself is never
2591 evaluated, so any side effects of the expression will be discarded.
2593 Query for this feature with ``__has_builtin(__builtin_assume)``.
2595 .. _langext-__builtin_assume_separate_storage:
2597 ``__builtin_assume_separate_storage``
2598 -------------------------------------
2600 ``__builtin_assume_separate_storage`` is used to provide the optimizer with the
2601 knowledge that its two arguments point to separately allocated objects.
2607 __builtin_assume_separate_storage(const volatile void *, const volatile void *)
2613 int foo(int *x, int *y) {
2614 __builtin_assume_separate_storage(x, y);
2617 // The optimizer may optimize this to return 0 without reloading from *x.
2623 The arguments to this function are assumed to point into separately allocated
2624 storage (either different variable definitions or different dynamic storage
2625 allocations). The optimizer may use this fact to aid in alias analysis. If the
2626 arguments point into the same storage, the behavior is undefined. Note that the
2627 definition of "storage" here refers to the outermost enclosing allocation of any
2628 particular object (so for example, it's never correct to call this function
2629 passing the addresses of fields in the same struct, elements of the same array,
2632 Query for this feature with ``__has_builtin(__builtin_assume_separate_storage)``.
2635 ``__builtin_offsetof``
2636 ----------------------
2638 ``__builtin_offsetof`` is used to implement the ``offsetof`` macro, which
2639 calculates the offset (in bytes) to a given member of the given type.
2645 __builtin_offsetof(type-name, member-designator)
2659 const int offset_to_i = __builtin_offsetof(struct S, i);
2660 const int ext1 = __builtin_offsetof(struct U { int i; }, i); // C extension
2661 const int offset_to_subobject = __builtin_offsetof(struct S, t.f[1]);
2665 This builtin is usable in an integer constant expression which returns a value
2666 of type ``size_t``. The value returned is the offset in bytes to the subobject
2667 designated by the member-designator from the beginning of an object of type
2668 ``type-name``. Clang extends the required standard functionality in the
2671 * In C language modes, the first argument may be the definition of a new type.
2672 Any type declared this way is scoped to the nearest scope containing the call
2675 Query for this feature with ``__has_builtin(__builtin_offsetof)``.
2677 ``__builtin_call_with_static_chain``
2678 ------------------------------------
2680 ``__builtin_call_with_static_chain`` is used to perform a static call while
2681 setting updating the static chain register.
2687 T __builtin_call_with_static_chain(T expr, void* ptr)
2693 auto v = __builtin_call_with_static_chain(foo(3), foo);
2697 This builtin returns ``expr`` after checking that ``expr`` is a non-member
2698 static call expression. The call to that expression is made while using ``ptr``
2699 as a function pointer stored in a dedicated register to implement *static chain*
2700 calling convention, as used by some language to implement closures or nested
2703 Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2705 ``__builtin_readcyclecounter``
2706 ------------------------------
2708 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2709 a similar low-latency, high-accuracy clock) on those targets that support it.
2715 __builtin_readcyclecounter()
2721 unsigned long long t0 = __builtin_readcyclecounter();
2723 unsigned long long t1 = __builtin_readcyclecounter();
2724 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2728 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2729 which may be either global or process/thread-specific depending on the target.
2730 As the backing counters often overflow quickly (on the order of seconds) this
2731 should only be used for timing small intervals. When not supported by the
2732 target, the return value is always zero. This builtin takes no arguments and
2733 produces an unsigned long long result.
2735 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2736 that even if present, its use may depend on run-time privilege or other OS
2739 ``__builtin_dump_struct``
2740 -------------------------
2746 __builtin_dump_struct(&some_struct, some_printf_func, args...);
2760 void func(struct S *s) {
2761 __builtin_dump_struct(s, printf);
2766 .. code-block:: none
2780 struct T { int a, b; };
2781 constexpr void constexpr_sprintf(std::string &out, const char *format,
2785 constexpr std::string dump_struct(auto &x) {
2787 __builtin_dump_struct(&x, constexpr_sprintf, s);
2790 static_assert(dump_struct(T{1, 2}) == R"(struct T {
2798 The ``__builtin_dump_struct`` function is used to print the fields of a simple
2799 structure and their values for debugging purposes. The first argument of the
2800 builtin should be a pointer to the struct to dump. The second argument ``f``
2801 should be some callable expression, and can be a function object or an overload
2802 set. The builtin calls ``f``, passing any further arguments ``args...``
2803 followed by a ``printf``-compatible format string and the corresponding
2804 arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2805 evaluated once per call. In C++, ``f`` may be a template or overload set and
2806 resolve to different functions for each call.
2808 In the format string, a suitable format specifier will be used for builtin
2809 types that Clang knows how to format. This includes standard builtin types, as
2810 well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2811 char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2812 that Clang doesn't know how to format, and the corresponding argument will be a
2813 pointer to the field. This allows a C++ templated formatting function to detect
2814 this case and implement custom formatting. A ``*`` will otherwise not precede a
2817 This builtin does not return a value.
2819 This builtin can be used in constant expressions.
2821 Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2823 .. _langext-__builtin_shufflevector:
2825 ``__builtin_shufflevector``
2826 ---------------------------
2828 ``__builtin_shufflevector`` is used to express generic vector
2829 permutation/shuffle/swizzle operations. This builtin is also very important
2830 for the implementation of various target-specific header files like
2837 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2843 // identity operation - return 4-element vector v1.
2844 __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2846 // "Splat" element 0 of V1 into a 4-element result.
2847 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2849 // Reverse 4-element vector V1.
2850 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2852 // Concatenate every other element of 4-element vectors V1 and V2.
2853 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2855 // Concatenate every other element of 8-element vectors V1 and V2.
2856 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2858 // Shuffle v1 with some elements being undefined
2859 __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2863 The first two arguments to ``__builtin_shufflevector`` are vectors that have
2864 the same element type. The remaining arguments are a list of integers that
2865 specify the elements indices of the first two vectors that should be extracted
2866 and returned in a new vector. These element indices are numbered sequentially
2867 starting with the first vector, continuing into the second vector. Thus, if
2868 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
2869 ``vec2``. An index of -1 can be used to indicate that the corresponding element
2870 in the returned vector is a don't care and can be optimized by the backend.
2872 The result of ``__builtin_shufflevector`` is a vector with the same element
2873 type as ``vec1``/``vec2`` but that has an element count equal to the number of
2876 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2878 .. _langext-__builtin_convertvector:
2880 ``__builtin_convertvector``
2881 ---------------------------
2883 ``__builtin_convertvector`` is used to express generic vector
2884 type-conversion operations. The input vector and the output vector
2885 type must have the same number of elements.
2891 __builtin_convertvector(src_vec, dst_vec_type)
2897 typedef double vector4double __attribute__((__vector_size__(32)));
2898 typedef float vector4float __attribute__((__vector_size__(16)));
2899 typedef short vector4short __attribute__((__vector_size__(8)));
2900 vector4float vf; vector4short vs;
2902 // convert from a vector of 4 floats to a vector of 4 doubles.
2903 __builtin_convertvector(vf, vector4double)
2905 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2907 // convert from a vector of 4 shorts to a vector of 4 floats.
2908 __builtin_convertvector(vs, vector4float)
2910 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2914 The first argument to ``__builtin_convertvector`` is a vector, and the second
2915 argument is a vector type with the same number of elements as the first
2918 The result of ``__builtin_convertvector`` is a vector with the same element
2919 type as the second argument, with a value defined in terms of the action of a
2920 C-style cast applied to each element of the first argument.
2922 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2924 ``__builtin_bitreverse``
2925 ------------------------
2927 * ``__builtin_bitreverse8``
2928 * ``__builtin_bitreverse16``
2929 * ``__builtin_bitreverse32``
2930 * ``__builtin_bitreverse64``
2936 __builtin_bitreverse32(x)
2942 uint8_t rev_x = __builtin_bitreverse8(x);
2943 uint16_t rev_x = __builtin_bitreverse16(x);
2944 uint32_t rev_y = __builtin_bitreverse32(y);
2945 uint64_t rev_z = __builtin_bitreverse64(z);
2949 The '``__builtin_bitreverse``' family of builtins is used to reverse
2950 the bitpattern of an integer value; for example ``0b10110110`` becomes
2951 ``0b01101101``. These builtins can be used within constant expressions.
2953 ``__builtin_rotateleft``
2954 ------------------------
2956 * ``__builtin_rotateleft8``
2957 * ``__builtin_rotateleft16``
2958 * ``__builtin_rotateleft32``
2959 * ``__builtin_rotateleft64``
2965 __builtin_rotateleft32(x, y)
2971 uint8_t rot_x = __builtin_rotateleft8(x, y);
2972 uint16_t rot_x = __builtin_rotateleft16(x, y);
2973 uint32_t rot_x = __builtin_rotateleft32(x, y);
2974 uint64_t rot_x = __builtin_rotateleft64(x, y);
2978 The '``__builtin_rotateleft``' family of builtins is used to rotate
2979 the bits in the first argument by the amount in the second argument.
2980 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2981 The shift value is treated as an unsigned amount modulo the size of
2982 the arguments. Both arguments and the result have the bitwidth specified
2983 by the name of the builtin. These builtins can be used within constant
2986 ``__builtin_rotateright``
2987 -------------------------
2989 * ``__builtin_rotateright8``
2990 * ``__builtin_rotateright16``
2991 * ``__builtin_rotateright32``
2992 * ``__builtin_rotateright64``
2998 __builtin_rotateright32(x, y)
3004 uint8_t rot_x = __builtin_rotateright8(x, y);
3005 uint16_t rot_x = __builtin_rotateright16(x, y);
3006 uint32_t rot_x = __builtin_rotateright32(x, y);
3007 uint64_t rot_x = __builtin_rotateright64(x, y);
3011 The '``__builtin_rotateright``' family of builtins is used to rotate
3012 the bits in the first argument by the amount in the second argument.
3013 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
3014 The shift value is treated as an unsigned amount modulo the size of
3015 the arguments. Both arguments and the result have the bitwidth specified
3016 by the name of the builtin. These builtins can be used within constant
3019 ``__builtin_unreachable``
3020 -------------------------
3022 ``__builtin_unreachable`` is used to indicate that a specific point in the
3023 program cannot be reached, even if the compiler might otherwise think it can.
3024 This is useful to improve optimization and eliminates certain warnings. For
3025 example, without the ``__builtin_unreachable`` in the example below, the
3026 compiler assumes that the inline asm can fall through and prints a "function
3027 declared '``noreturn``' should not return" warning.
3033 __builtin_unreachable()
3039 void myabort(void) __attribute__((noreturn));
3040 void myabort(void) {
3042 __builtin_unreachable();
3047 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
3048 Since it has undefined behavior, it is a statement that it is never reached and
3049 the optimizer can take advantage of this to produce better code. This builtin
3050 takes no arguments and produces a void result.
3052 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
3054 ``__builtin_unpredictable``
3055 ---------------------------
3057 ``__builtin_unpredictable`` is used to indicate that a branch condition is
3058 unpredictable by hardware mechanisms such as branch prediction logic.
3064 __builtin_unpredictable(long long)
3070 if (__builtin_unpredictable(x > 0)) {
3076 The ``__builtin_unpredictable()`` builtin is expected to be used with control
3077 flow conditions such as in ``if`` and ``switch`` statements.
3079 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
3082 ``__builtin_expect``
3083 --------------------
3085 ``__builtin_expect`` is used to indicate that the value of an expression is
3086 anticipated to be the same as a statically known result.
3092 long __builtin_expect(long expr, long val)
3098 if (__builtin_expect(x, 0)) {
3104 The ``__builtin_expect()`` builtin is typically used with control flow
3105 conditions such as in ``if`` and ``switch`` statements to help branch
3106 prediction. It means that its first argument ``expr`` is expected to take the
3107 value of its second argument ``val``. It always returns ``expr``.
3109 Query for this feature with ``__has_builtin(__builtin_expect)``.
3111 ``__builtin_expect_with_probability``
3112 -------------------------------------
3114 ``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
3115 takes a probability as third argument.
3121 long __builtin_expect_with_probability(long expr, long val, double p)
3127 if (__builtin_expect_with_probability(x, 0, .3)) {
3133 The ``__builtin_expect_with_probability()`` builtin is typically used with
3134 control flow conditions such as in ``if`` and ``switch`` statements to help
3135 branch prediction. It means that its first argument ``expr`` is expected to take
3136 the value of its second argument ``val`` with probability ``p``. ``p`` must be
3137 within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
3139 Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
3141 ``__builtin_prefetch``
3142 ----------------------
3144 ``__builtin_prefetch`` is used to communicate with the cache handler to bring
3145 data into the cache before it gets used.
3151 void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
3157 __builtin_prefetch(a + i);
3161 The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
3162 avoid cache misses when the developer has a good understanding of which data
3163 are going to be used next. ``addr`` is the address that needs to be brought into
3164 the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
3165 for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
3166 indicates the expected persistence of data in cache, from ``0`` which means that
3167 data can be discarded from cache after its next use to ``3`` which means that
3168 data is going to be reused a lot once in cache. ``1`` and ``2`` provide
3169 intermediate behavior between these two extremes.
3171 Query for this feature with ``__has_builtin(__builtin_prefetch)``.
3176 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
3182 type __sync_swap(type *ptr, type value, ...)
3188 int old_value = __sync_swap(&value, new_value);
3192 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
3193 atomic intrinsics to allow code to atomically swap the current value with the
3194 new value. More importantly, it helps developers write more efficient and
3195 correct code by avoiding expensive loops around
3196 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
3197 implementation details of ``__sync_lock_test_and_set()``. The
3198 ``__sync_swap()`` builtin is a full barrier.
3200 ``__builtin_addressof``
3201 -----------------------
3203 ``__builtin_addressof`` performs the functionality of the built-in ``&``
3204 operator, ignoring any ``operator&`` overload. This is useful in constant
3205 expressions in C++11, where there is no other way to take the address of an
3206 object that overloads ``operator&``. Clang automatically adds
3207 ``[[clang::lifetimebound]]`` to the parameter of ``__builtin_addressof``.
3213 template<typename T> constexpr T *addressof(T &value) {
3214 return __builtin_addressof(value);
3217 ``__builtin_function_start``
3218 -----------------------------
3220 ``__builtin_function_start`` returns the address of a function body.
3226 void *__builtin_function_start(function)
3233 void *p = __builtin_function_start(a);
3244 void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
3245 void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
3249 The ``__builtin_function_start`` builtin accepts an argument that can be
3250 constant-evaluated to a function, and returns the address of the function
3251 body. This builtin is not supported on all targets.
3253 The returned pointer may differ from the normally taken function address
3254 and is not safe to call. For example, with ``-fsanitize=cfi``, taking a
3255 function address produces a callable pointer to a CFI jump table, while
3256 ``__builtin_function_start`` returns an address that fails
3257 :doc:`cfi-icall<ControlFlowIntegrity>` checks.
3259 ``__builtin_operator_new`` and ``__builtin_operator_delete``
3260 ------------------------------------------------------------
3262 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
3263 ``::operator new(args)``, except that it allows certain optimizations
3264 that the C++ standard does not permit for a direct function call to
3265 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
3266 merging allocations), and that the call is required to resolve to a
3267 `replaceable global allocation function
3268 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
3270 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
3271 ``::operator delete(args)``, except that it permits optimizations
3272 and that the call is required to resolve to a
3273 `replaceable global deallocation function
3274 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
3276 These builtins are intended for use in the implementation of ``std::allocator``
3277 and other similar allocation libraries, and are only available in C++.
3279 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
3280 ``__has_builtin(__builtin_operator_delete)``:
3282 * If the value is at least ``201802L``, the builtins behave as described above.
3284 * If the value is non-zero, the builtins may not support calling arbitrary
3285 replaceable global (de)allocation functions, but do support calling at least
3286 ``::operator new(size_t)`` and ``::operator delete(void*)``.
3288 ``__builtin_preserve_access_index``
3289 -----------------------------------
3291 ``__builtin_preserve_access_index`` specifies a code section where
3292 array subscript access and structure/union member access are relocatable
3293 under bpf compile-once run-everywhere framework. Debuginfo (typically
3294 with ``-g``) is needed, otherwise, the compiler will exit with an error.
3295 The return type for the intrinsic is the same as the type of the
3302 type __builtin_preserve_access_index(type arg)
3317 int *pb =__builtin_preserve_access_index(&v->c[3].b);
3318 __builtin_preserve_access_index(v->j);
3320 ``__builtin_debugtrap``
3321 -----------------------
3323 ``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
3329 __builtin_debugtrap()
3333 ``__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.
3335 Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
3341 ``__builtin_trap`` causes the program to stop its execution abnormally.
3351 ``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
3353 Query for this feature with ``__has_builtin(__builtin_trap)``.
3355 ``__builtin_nondeterministic_value``
3356 ------------------------------------
3358 ``__builtin_nondeterministic_value`` returns a valid nondeterministic value of the same type as the provided argument.
3364 type __builtin_nondeterministic_value(type x)
3370 int x = __builtin_nondeterministic_value(x);
3371 float y = __builtin_nondeterministic_value(y);
3372 __m256i a = __builtin_nondeterministic_value(a);
3376 Each call to ``__builtin_nondeterministic_value`` returns a valid value of the type given by the argument.
3378 The types currently supported are: integer types, floating-point types, vector types.
3380 Query for this feature with ``__has_builtin(__builtin_nondeterministic_value)``.
3382 ``__builtin_sycl_unique_stable_name``
3383 -------------------------------------
3385 ``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3386 produces a string literal containing a unique name for the type that is stable
3387 across split compilations, mainly to support SYCL/Data Parallel C++ language.
3389 In cases where the split compilation needs to share a unique token for a type
3390 across the boundary (such as in an offloading situation), this name can be used
3391 for lookup purposes, such as in the SYCL Integration Header.
3393 The value of this builtin is computed entirely at compile time, so it can be
3394 used in constant expressions. This value encodes lambda functions based on a
3395 stable numbering order in which they appear in their local declaration contexts.
3396 Once this builtin is evaluated in a constexpr context, it is erroneous to use
3397 it in an instantiation which changes its value.
3399 In order to produce the unique name, the current implementation of the builtin
3400 uses Itanium mangling even if the host compilation uses a different name
3401 mangling scheme at runtime. The mangler marks all the lambdas required to name
3402 the SYCL kernel and emits a stable local ordering of the respective lambdas.
3403 The resulting pattern is demanglable. When non-lambda types are passed to the
3404 builtin, the mangler emits their usual pattern without any special treatment.
3410 // Computes a unique stable name for the given type.
3411 constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3413 Multiprecision Arithmetic Builtins
3414 ----------------------------------
3416 Clang provides a set of builtins which expose multiprecision arithmetic in a
3417 manner amenable to C. They all have the following form:
3421 unsigned x = ..., y = ..., carryin = ..., carryout;
3422 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3424 Thus one can form a multiprecision addition chain in the following manner:
3428 unsigned *x, *y, *z, carryin=0, carryout;
3429 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3431 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3433 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3435 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3437 The complete list of builtins are:
3441 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3442 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3443 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3444 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3445 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3446 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3447 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3448 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3449 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3450 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3452 Checked Arithmetic Builtins
3453 ---------------------------
3455 Clang provides a set of builtins that implement checked arithmetic for security
3456 critical applications in a manner that is fast and easily expressible in C. As
3457 an example of their usage:
3461 errorcode_t security_critical_application(...) {
3462 unsigned x, y, result;
3464 if (__builtin_mul_overflow(x, y, &result))
3465 return kErrorCodeHackers;
3467 use_multiply(result);
3471 Clang provides the following checked arithmetic builtins:
3475 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum);
3476 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff);
3477 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod);
3478 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum);
3479 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
3480 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
3481 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff);
3482 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
3483 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
3484 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod);
3485 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
3486 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
3487 bool __builtin_sadd_overflow (int x, int y, int *sum);
3488 bool __builtin_saddl_overflow (long x, long y, long *sum);
3489 bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
3490 bool __builtin_ssub_overflow (int x, int y, int *diff);
3491 bool __builtin_ssubl_overflow (long x, long y, long *diff);
3492 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
3493 bool __builtin_smul_overflow (int x, int y, int *prod);
3494 bool __builtin_smull_overflow (long x, long y, long *prod);
3495 bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
3497 Each builtin performs the specified mathematical operation on the
3498 first two arguments and stores the result in the third argument. If
3499 possible, the result will be equal to mathematically-correct result
3500 and the builtin will return 0. Otherwise, the builtin will return
3501 1 and the result will be equal to the unique value that is equivalent
3502 to the mathematically-correct result modulo two raised to the *k*
3503 power, where *k* is the number of bits in the result type. The
3504 behavior of these builtins is well-defined for all argument values.
3506 The first three builtins work generically for operands of any integer type,
3507 including boolean types. The operands need not have the same type as each
3508 other, or as the result. The other builtins may implicitly promote or
3509 convert their operands before performing the operation.
3511 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3513 Floating point builtins
3514 ---------------------------------------
3516 ``__builtin_isfpclass``
3517 -----------------------
3519 ``__builtin_isfpclass`` is used to test if the specified floating-point values
3520 fall into one of the specified floating-point classes.
3526 int __builtin_isfpclass(fp_type expr, int mask)
3527 int_vector __builtin_isfpclass(fp_vector expr, int mask)
3533 if (__builtin_isfpclass(x, 448)) {
3534 // `x` is positive finite value
3540 The ``__builtin_isfpclass()`` builtin is a generalization of functions ``isnan``,
3541 ``isinf``, ``isfinite`` and some others defined by the C standard. It tests if
3542 the floating-point value, specified by the first argument, falls into any of data
3543 classes, specified by the second argument. The latter is an integer constant
3544 bitmask expression, in which each data class is represented by a bit
3547 ========== =================== ======================
3548 Mask value Data class Macro
3549 ========== =================== ======================
3550 0x0001 Signaling NaN __FPCLASS_SNAN
3551 0x0002 Quiet NaN __FPCLASS_QNAN
3552 0x0004 Negative infinity __FPCLASS_NEGINF
3553 0x0008 Negative normal __FPCLASS_NEGNORMAL
3554 0x0010 Negative subnormal __FPCLASS_NEGSUBNORMAL
3555 0x0020 Negative zero __FPCLASS_NEGZERO
3556 0x0040 Positive zero __FPCLASS_POSZERO
3557 0x0080 Positive subnormal __FPCLASS_POSSUBNORMAL
3558 0x0100 Positive normal __FPCLASS_POSNORMAL
3559 0x0200 Positive infinity __FPCLASS_POSINF
3560 ========== =================== ======================
3562 For convenience preprocessor defines macros for these values. The function
3563 returns 1 if ``expr`` falls into one of the specified data classes, 0 otherwise.
3565 In the example above the mask value 448 (0x1C0) contains the bits selecting
3566 positive zero, positive subnormal and positive normal classes.
3567 ``__builtin_isfpclass(x, 448)`` would return true only if ``x`` if of any of
3568 these data classes. Using suitable mask value, the function can implement any of
3569 the standard classification functions, for example, ``__builtin_isfpclass(x, 3)``
3570 is identical to ``isnan``,``__builtin_isfpclass(x, 504)`` - to ``isfinite``
3573 If the first argument is a vector, the function is equivalent to the set of
3574 scalar calls of ``__builtin_isfpclass`` applied to the input elementwise.
3576 The result of ``__builtin_isfpclass`` is a boolean value, if the first argument
3577 is a scalar, or an integer vector with the same element count as the first
3578 argument. The element type in this vector has the same bit length as the
3579 element of the the first argument type.
3581 This function never raises floating-point exceptions and does not canonicalize
3582 its input. The floating-point argument is not promoted, its data class is
3583 determined based on its representation in its actual semantic type.
3585 ``__builtin_canonicalize``
3586 --------------------------
3590 double __builtin_canonicalize(double);
3591 float __builtin_canonicalizef(float);
3592 long double __builtin_canonicalizel(long double);
3594 Returns the platform specific canonical encoding of a floating point
3595 number. This canonicalization is useful for implementing certain
3596 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3597 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3598 more information on the semantics.
3600 ``__builtin_flt_rounds`` and ``__builtin_set_flt_rounds``
3601 ---------------------------------------------------------
3605 int __builtin_flt_rounds();
3606 void __builtin_set_flt_rounds(int);
3608 Returns and sets current floating point rounding mode. The encoding of returned
3609 values and input parameters is same as the result of FLT_ROUNDS, specified by C
3611 - ``0`` - toward zero
3612 - ``1`` - to nearest, ties to even
3613 - ``2`` - toward positive infinity
3614 - ``3`` - toward negative infinity
3615 - ``4`` - to nearest, ties away from zero
3616 The effect of passing some other value to ``__builtin_flt_rounds`` is
3617 implementation-defined. ``__builtin_set_flt_rounds`` is currently only supported
3618 to work on x86, x86_64, Arm and AArch64 targets. These builtins read and modify
3619 the floating-point environment, which is not always allowed and may have unexpected
3620 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.
3625 Clang provides constant expression evaluation support for builtins forms of
3626 the following functions from the C standard library headers
3627 ``<string.h>`` and ``<wchar.h>``:
3630 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3642 In each case, the builtin form has the name of the C library function prefixed
3643 by ``__builtin_``. Example:
3647 void *p = __builtin_memchr("foobar", 'b', 5);
3649 In addition to the above, one further builtin is provided:
3653 char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3655 ``__builtin_char_memchr(a, b, c)`` is identical to
3656 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3657 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3658 is disallowed in general).
3660 Constant evaluation support for the ``__builtin_mem*`` functions is provided
3661 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3662 despite these functions accepting an argument of type ``const void*``.
3664 Support for constant expression evaluation for the above builtins can be detected
3665 with ``__has_feature(cxx_constexpr_string_builtins)``.
3667 Variadic function builtins
3668 --------------------------
3670 Clang provides several builtins for working with variadic functions from the C
3671 standard library ``<stdarg.h>`` header:
3673 * ``__builtin_va_list``
3675 A predefined typedef for the target-specific ``va_list`` type.
3677 * ``void __builtin_va_start(__builtin_va_list list, <parameter-name>)``
3679 A builtin function for the target-specific ``va_start`` function-like macro.
3680 The ``parameter-name`` argument is the name of the parameter preceding the
3681 ellipsis (``...``) in the function signature. Alternatively, in C23 mode or
3682 later, it may be the integer literal ``0`` if there is no parameter preceding
3683 the ellipsis. This function initializes the given ``__builtin_va_list`` object.
3684 It is undefined behavior to call this function on an already initialized
3685 ``__builin_va_list`` object.
3687 * ``void __builtin_va_end(__builtin_va_list list)``
3689 A builtin function for the target-specific ``va_end`` function-like macro. This
3690 function finalizes the given ``__builtin_va_list`` object such that it is no
3691 longer usable unless re-initialized with a call to ``__builtin_va_start`` or
3692 ``__builtin_va_copy``. It is undefined behavior to call this function with a
3693 ``list`` that has not been initialized by either ``__builtin_va_start`` or
3694 ``__builtin_va_copy``.
3696 * ``<type-name> __builtin_va_arg(__builtin_va_list list, <type-name>)``
3698 A builtin function for the target-specific ``va_arg`` function-like macro. This
3699 function returns the value of the next variadic argument to the call. It is
3700 undefined behavior to call this builtin when there is no next variadic argument
3701 to retrieve or if the next variadic argument does not have a type compatible
3702 with the given ``type-name``. The return type of the function is the
3703 ``type-name`` given as the second argument. It is undefined behavior to call
3704 this function with a ``list`` that has not been initialized by either
3705 ``__builtin_va_start`` or ``__builtin_va_copy``.
3707 * ``void __builtin_va_copy(__builtin_va_list dest, __builtin_va_list src)``
3709 A builtin function for the target-specific ``va_copy`` function-like macro.
3710 This function initializes ``dest`` as a copy of ``src``. It is undefined
3711 behavior to call this function with an already initialized ``dest`` argument.
3716 Clang provides constant expression evaluation support for builtin forms of the
3717 following functions from the C standard library headers
3718 ``<string.h>`` and ``<wchar.h>``:
3725 In each case, the builtin form has the name of the C library function prefixed
3728 Constant evaluation support is only provided when the source and destination
3729 are pointers to arrays with the same trivially copyable element type, and the
3730 given size is an exact multiple of the element size that is no greater than
3731 the number of elements accessible through the source and destination operands.
3733 Guaranteed inlined copy
3734 ^^^^^^^^^^^^^^^^^^^^^^^
3738 void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3741 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
3742 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3743 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3744 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3745 for more information.
3747 This is useful to implement a custom version of ``memcpy``, implement a
3748 ``libc`` memcpy or work around the absence of a ``libc``.
3750 Note that the `size` argument must be a compile time constant.
3752 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3754 Guaranteed inlined memset
3755 ^^^^^^^^^^^^^^^^^^^^^^^^^
3759 void __builtin_memset_inline(void *dst, int value, size_t size);
3762 ``__builtin_memset_inline`` has been designed as a building block for efficient
3763 ``memset`` implementations. It is identical to ``__builtin_memset`` but also
3764 guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3765 <https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3766 for more information.
3768 This is useful to implement a custom version of ``memset``, implement a
3769 ``libc`` memset or work around the absence of a ``libc``.
3771 Note that the `size` argument must be a compile time constant.
3773 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3775 Atomic Min/Max builtins with memory ordering
3776 --------------------------------------------
3778 There are two atomic builtins with min/max in-memory comparison and swap.
3779 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3781 * ``__atomic_fetch_min``
3782 * ``__atomic_fetch_max``
3784 The builtins work with signed and unsigned integers and require to specify memory ordering.
3785 The return value is the original value that was stored in memory before comparison.
3791 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3793 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
3794 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
3795 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
3797 In terms of acquire-release ordering barriers these two operations are always
3798 considered as operations with *load-store* semantics, even when the original value
3799 is not actually modified after comparison.
3801 .. _langext-__c11_atomic:
3803 __c11_atomic builtins
3804 ---------------------
3806 Clang provides a set of builtins which are intended to be used to implement
3807 C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
3808 ``_explicit`` form of the corresponding C11 operation, and are named with a
3809 ``__c11_`` prefix. The supported operations, and the differences from
3810 the corresponding C11 operations, are:
3812 * ``__c11_atomic_init``
3813 * ``__c11_atomic_thread_fence``
3814 * ``__c11_atomic_signal_fence``
3815 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
3816 ``_Atomic(...)`` object, instead of its address)
3817 * ``__c11_atomic_store``
3818 * ``__c11_atomic_load``
3819 * ``__c11_atomic_exchange``
3820 * ``__c11_atomic_compare_exchange_strong``
3821 * ``__c11_atomic_compare_exchange_weak``
3822 * ``__c11_atomic_fetch_add``
3823 * ``__c11_atomic_fetch_sub``
3824 * ``__c11_atomic_fetch_and``
3825 * ``__c11_atomic_fetch_or``
3826 * ``__c11_atomic_fetch_xor``
3827 * ``__c11_atomic_fetch_nand`` (Nand is not presented in ``<stdatomic.h>``)
3828 * ``__c11_atomic_fetch_max``
3829 * ``__c11_atomic_fetch_min``
3831 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3832 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3833 provided, with values corresponding to the enumerators of C11's
3834 ``memory_order`` enumeration.
3836 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
3837 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3838 atomic builtins are an explicit form of the corresponding OpenCL 2.0
3839 builtin function, and are named with a ``__opencl_`` prefix. The macros
3840 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
3841 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
3842 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3843 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3845 Low-level ARM exclusive memory builtins
3846 ---------------------------------------
3848 Clang provides overloaded builtins giving direct access to the three key ARM
3849 instructions for implementing atomic operations.
3853 T __builtin_arm_ldrex(const volatile T *addr);
3854 T __builtin_arm_ldaex(const volatile T *addr);
3855 int __builtin_arm_strex(T val, volatile T *addr);
3856 int __builtin_arm_stlex(T val, volatile T *addr);
3857 void __builtin_arm_clrex(void);
3859 The types ``T`` currently supported are:
3861 * Integer types with width at most 64 bits (or 128 bits on AArch64).
3862 * Floating-point types
3865 Note that the compiler does not guarantee it will not insert stores which clear
3866 the exclusive monitor in between an ``ldrex`` type operation and its paired
3867 ``strex``. In practice this is only usually a risk when the extra store is on
3868 the same cache line as the variable being modified and Clang will only insert
3869 stack stores on its own, so it is best not to use these operations on variables
3870 with automatic storage duration.
3872 Also, loads and stores may be implicit in code written between the ``ldrex`` and
3873 ``strex``. Clang will not necessarily mitigate the effects of these either, so
3874 care should be exercised.
3876 For these reasons the higher level atomic primitives should be preferred where
3879 Non-temporal load/store builtins
3880 --------------------------------
3882 Clang provides overloaded builtins allowing generation of non-temporal memory
3887 T __builtin_nontemporal_load(T *addr);
3888 void __builtin_nontemporal_store(T value, T *addr);
3890 The types ``T`` currently supported are:
3893 * Floating-point types.
3896 Note that the compiler does not guarantee that non-temporal loads or stores
3899 C++ Coroutines support builtins
3900 --------------------------------
3903 This is a work in progress. Compatibility across Clang/LLVM releases is not
3906 Clang provides experimental builtins to support C++ Coroutines as defined by
3907 https://wg21.link/P0057. The following four are intended to be used by the
3908 standard library to implement the ``std::coroutine_handle`` type.
3914 void __builtin_coro_resume(void *addr);
3915 void __builtin_coro_destroy(void *addr);
3916 bool __builtin_coro_done(void *addr);
3917 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
3923 template <> struct coroutine_handle<void> {
3924 void resume() const { __builtin_coro_resume(ptr); }
3925 void destroy() const { __builtin_coro_destroy(ptr); }
3926 bool done() const { return __builtin_coro_done(ptr); }
3932 template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3934 Promise &promise() const {
3935 return *reinterpret_cast<Promise *>(
3936 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3938 static coroutine_handle from_promise(Promise &promise) {
3940 p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3941 /*from-promise=*/true);
3947 Other coroutine builtins are either for internal clang use or for use during
3948 development of the coroutine feature. See `Coroutines in LLVM
3949 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3950 more information on their semantics. Note that builtins matching the intrinsics
3951 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
3952 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
3953 an appropriate value during the emission.
3959 size_t __builtin_coro_size()
3960 void *__builtin_coro_frame()
3961 void *__builtin_coro_free(void *coro_frame)
3963 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
3964 bool __builtin_coro_alloc()
3965 void *__builtin_coro_begin(void *memory)
3966 void __builtin_coro_end(void *coro_frame, bool unwind)
3967 char __builtin_coro_suspend(bool final)
3969 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
3970 automatically will insert one if the first argument to `llvm.coro.suspend` is
3971 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
3972 as the first argument to the intrinsic.
3974 Source location builtins
3975 ------------------------
3977 Clang provides builtins to support C++ standard library implementation
3978 of ``std::source_location`` as specified in C++20. With the exception
3979 of ``__builtin_COLUMN``, ``__builtin_FILE_NAME`` and ``__builtin_FUNCSIG``,
3980 these builtins are also implemented by GCC.
3986 const char *__builtin_FILE();
3987 const char *__builtin_FILE_NAME(); // Clang only
3988 const char *__builtin_FUNCTION();
3989 const char *__builtin_FUNCSIG(); // Microsoft
3990 unsigned __builtin_LINE();
3991 unsigned __builtin_COLUMN(); // Clang only
3992 const std::source_location::__impl *__builtin_source_location();
3998 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
3999 const char* file = __builtin_FILE(),
4000 const char* function = __builtin_FUNCTION()) {
4002 printf("%s:%d assertion failed in function %s\n", file, line, function);
4006 struct MyAggregateType {
4008 int line = __builtin_LINE(); // captures line where aggregate initialization occurs
4010 static_assert(MyAggregateType{42}.line == __LINE__);
4012 struct MyClassType {
4013 int line = __builtin_LINE(); // captures line of the constructor used during initialization
4014 constexpr MyClassType(int) { assert(line == __LINE__); }
4019 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, ``__builtin_FUNCSIG``,
4020 ``__builtin_FILE`` and ``__builtin_FILE_NAME`` return the values, at the
4021 "invocation point", for ``__LINE__``, ``__FUNCTION__``, ``__FUNCSIG__``,
4022 ``__FILE__`` and ``__FILE_NAME__`` respectively. ``__builtin_COLUMN`` similarly
4023 returns the column, though there is no corresponding macro. These builtins are
4024 constant expressions.
4026 When the builtins appear as part of a default function argument the invocation
4027 point is the location of the caller. When the builtins appear as part of a
4028 default member initializer, the invocation point is the location of the
4029 constructor or aggregate initialization used to create the object. Otherwise
4030 the invocation point is the same as the location of the builtin.
4032 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
4033 empty string is returned.
4035 The builtin ``__builtin_source_location`` returns a pointer to constant static
4036 data of type ``std::source_location::__impl``. This type must have already been
4037 defined, and must contain exactly four fields: ``const char *_M_file_name``,
4038 ``const char *_M_function_name``, ``<any-integral-type> _M_line``, and
4039 ``<any-integral-type> _M_column``. The fields will be populated in the same
4040 manner as the above four builtins, except that ``_M_function_name`` is populated
4041 with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
4046 Clang provides builtins to support checking and adjusting alignment of
4047 pointers and integers.
4048 These builtins can be used to avoid relying on implementation-defined behavior
4049 of arithmetic on integers derived from pointers.
4050 Additionally, these builtins retain type information and, unlike bitwise
4051 arithmetic, they can perform semantic checking on the alignment value.
4057 Type __builtin_align_up(Type value, size_t alignment);
4058 Type __builtin_align_down(Type value, size_t alignment);
4059 bool __builtin_is_aligned(Type value, size_t alignment);
4066 char* global_alloc_buffer;
4067 void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
4068 char* result = __builtin_align_up(global_alloc_buffer, alignment);
4069 // result now contains the value of global_alloc_buffer rounded up to the
4070 // next multiple of alignment.
4071 global_alloc_buffer = result + alloc_size;
4075 void* get_start_of_page(void* ptr) {
4076 return __builtin_align_down(ptr, PAGE_SIZE);
4079 void example(char* buffer) {
4080 if (__builtin_is_aligned(buffer, 64)) {
4081 do_fast_aligned_copy(buffer);
4083 do_unaligned_copy(buffer);
4087 // In addition to pointers, the builtins can also be used on integer types
4088 // and are evaluatable inside constant expressions.
4089 static_assert(__builtin_align_up(123, 64) == 128, "");
4090 static_assert(__builtin_align_down(123u, 64) == 64u, "");
4091 static_assert(!__builtin_is_aligned(123, 64), "");
4096 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
4097 first argument aligned up/down to the next multiple of the second argument.
4098 If the value is already sufficiently aligned, it is returned unchanged.
4099 The builtin ``__builtin_is_aligned`` returns whether the first argument is
4100 aligned to a multiple of the second argument.
4101 All of these builtins expect the alignment to be expressed as a number of bytes.
4103 These builtins can be used for all integer types as well as (non-function)
4104 pointer types. For pointer types, these builtins operate in terms of the integer
4105 address of the pointer and return a new pointer of the same type (including
4106 qualifiers such as ``const``) with an adjusted address.
4107 When aligning pointers up or down, the resulting value must be within the same
4108 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
4109 This means that arbitrary integer values stored in pointer-type variables must
4110 not be passed to these builtins. For those use cases, the builtins can still be
4111 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
4113 If Clang can determine that the alignment is not a power of two at compile time,
4114 it will result in a compilation failure. If the alignment argument is not a
4115 power of two at run time, the behavior of these builtins is undefined.
4117 Non-standard C++11 Attributes
4118 =============================
4120 Clang's non-standard C++11 attributes live in the ``clang`` attribute
4123 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
4124 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
4125 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
4126 (see the list of `GCC function attributes
4127 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
4128 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
4129 `GCC type attributes
4130 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
4131 implementation, these attributes must appertain to the *declarator-id* in a
4132 declaration, which means they must go either at the start of the declaration or
4133 immediately after the name being declared.
4135 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
4136 also applies the GNU ``noreturn`` attribute to ``f``.
4140 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
4142 Target-Specific Extensions
4143 ==========================
4145 Clang supports some language features conditionally on some targets.
4147 ARM/AArch64 Language Extensions
4148 -------------------------------
4150 Memory Barrier Intrinsics
4151 ^^^^^^^^^^^^^^^^^^^^^^^^^
4152 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
4153 in the `Arm C Language Extensions
4154 <https://github.com/ARM-software/acle/releases>`_.
4155 Note that these intrinsics are implemented as motion barriers that block
4156 reordering of memory accesses and side effect instructions. Other instructions
4157 like simple arithmetic may be reordered around the intrinsic. If you expect to
4158 have no reordering at all, use inline assembly instead.
4160 X86/X86-64 Language Extensions
4161 ------------------------------
4163 The X86 backend has these language extensions:
4165 Memory references to specified segments
4166 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4168 Annotating a pointer with address space #256 causes it to be code generated
4169 relative to the X86 GS segment register, address space #257 causes it to be
4170 relative to the X86 FS segment, and address space #258 causes it to be
4171 relative to the X86 SS segment. Note that this is a very very low-level
4172 feature that should only be used if you know what you're doing (for example in
4179 #define GS_RELATIVE __attribute__((address_space(256)))
4180 int foo(int GS_RELATIVE *P) {
4184 Which compiles to (on X86-32):
4190 movl %gs:(%eax), %eax
4193 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
4194 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
4195 indicate their support.
4197 PowerPC Language Extensions
4198 ---------------------------
4200 Set the Floating Point Rounding Mode
4201 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4202 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
4203 the floating point rounding mode. This function will use the least significant
4204 two bits of integer argument to set the floating point rounding mode.
4208 double __builtin_setrnd(int mode);
4210 The effective values for mode are:
4212 - 0 - round to nearest
4214 - 2 - round to +infinity
4215 - 3 - round to -infinity
4217 Note that the mode argument will modulo 4, so if the integer argument is greater
4218 than 3, it will only use the least significant two bits of the mode.
4219 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
4221 PowerPC cache builtins
4222 ^^^^^^^^^^^^^^^^^^^^^^
4224 The PowerPC architecture specifies instructions implementing cache operations.
4225 Clang provides builtins that give direct programmer access to these cache
4228 Currently the following builtins are implemented in clang:
4230 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
4231 to main memory and flushes the copy from the data cache.
4237 void __dcbf(const void* addr); /* Data Cache Block Flush */
4244 __builtin_dcbf (&a);
4246 Extensions for Static Analysis
4247 ==============================
4249 Clang supports additional attributes that are useful for documenting program
4250 invariants and rules for static analysis tools, such as the `Clang Static
4251 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
4252 in the analyzer's `list of source-level annotations
4253 <https://clang-analyzer.llvm.org/annotations.html>`_.
4256 Extensions for Dynamic Analysis
4257 ===============================
4259 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
4260 with :doc:`AddressSanitizer`.
4262 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
4263 with :doc:`ThreadSanitizer`.
4265 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
4266 with :doc:`MemorySanitizer`.
4268 Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
4269 with :doc:`DataFlowSanitizer`.
4271 Use ``__has_feature(safe_stack)`` to check if the code is being built
4272 with :doc:`SafeStack`.
4275 Extensions for selectively disabling optimization
4276 =================================================
4278 Clang provides a mechanism for selectively disabling optimizations in functions
4281 To disable optimizations in a single function definition, the GNU-style or C++11
4282 non-standard attribute ``optnone`` can be used.
4286 // The following functions will not be optimized.
4287 // GNU-style attribute
4288 __attribute__((optnone)) int foo() {
4292 [[clang::optnone]] int bar() {
4296 To facilitate disabling optimization for a range of function definitions, a
4297 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
4298 followed by ``off`` or ``on``.
4300 All function definitions in the region between an ``off`` and the following
4301 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
4302 conflict with explicit attributes already present on the function (e.g. the
4303 ones that control inlining).
4307 #pragma clang optimize off
4308 // This function will be decorated with optnone.
4313 // optnone conflicts with always_inline, so bar() will not be decorated.
4314 __attribute__((always_inline)) int bar() {
4317 #pragma clang optimize on
4319 If no ``on`` is found to close an ``off`` region, the end of the region is the
4320 end of the compilation unit.
4322 Note that a stray ``#pragma clang optimize on`` does not selectively enable
4323 additional optimizations when compiling at low optimization levels. This feature
4324 can only be used to selectively disable optimizations.
4326 The pragma has an effect on functions only at the point of their definition; for
4327 function templates, this means that the state of the pragma at the point of an
4328 instantiation is not necessarily relevant. Consider the following example:
4332 template<typename T> T twice(T t) {
4336 #pragma clang optimize off
4337 template<typename T> T thrice(T t) {
4341 int container(int a, int b) {
4342 return twice(a) + thrice(b);
4344 #pragma clang optimize on
4346 In this example, the definition of the template function ``twice`` is outside
4347 the pragma region, whereas the definition of ``thrice`` is inside the region.
4348 The ``container`` function is also in the region and will not be optimized, but
4349 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
4350 these two instantiations, ``twice`` will be optimized (because its definition
4351 was outside the region) and ``thrice`` will not be optimized.
4353 Clang also implements MSVC's range-based pragma,
4354 ``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
4355 supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
4356 ``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
4357 the same as ``#pragma clang optimize``. All functions
4358 between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
4362 #pragma optimize("", off)
4363 // This function will be decorated with optnone.
4366 #pragma optimize("", on)
4367 // This function will be optimized with whatever was specified on
4371 // This will warn with Clang's current implementation.
4372 #pragma optimize("g", on)
4375 For MSVC, an empty optimization list and ``off`` parameter will turn off
4376 all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
4377 ``on`` parameter will reset the optimizations to the ones specified on the
4380 .. list-table:: Parameters (unsupported by Clang)
4383 - Type of optimization
4387 - Short or fast sequences of machine code
4389 - Enable frame pointers
4391 Extensions for loop hint optimizations
4392 ======================================
4394 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
4395 subsequent for, while, do-while, or c++11 range-based for loop. The directive
4396 provides options for vectorization, interleaving, predication, unrolling and
4397 distribution. Loop hints can be specified before any loop and will be ignored if
4398 the optimization is not safe to apply.
4400 There are loop hints that control transformations (e.g. vectorization, loop
4401 unrolling) and there are loop hints that set transformation options (e.g.
4402 ``vectorize_width``, ``unroll_count``). Pragmas setting transformation options
4403 imply the transformation is enabled, as if it was enabled via the corresponding
4404 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
4405 disabled (e.g. ``vectorize(disable)``), that takes precedence over
4406 transformations option pragmas implying that transformation.
4408 Vectorization, Interleaving, and Predication
4409 --------------------------------------------
4411 A vectorized loop performs multiple iterations of the original loop
4412 in parallel using vector instructions. The instruction set of the target
4413 processor determines which vector instructions are available and their vector
4414 widths. This restricts the types of loops that can be vectorized. The vectorizer
4415 automatically determines if the loop is safe and profitable to vectorize. A
4416 vector instruction cost model is used to select the vector width.
4418 Interleaving multiple loop iterations allows modern processors to further
4419 improve instruction-level parallelism (ILP) using advanced hardware features,
4420 such as multiple execution units and out-of-order execution. The vectorizer uses
4421 a cost model that depends on the register pressure and generated code size to
4422 select the interleaving count.
4424 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
4425 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
4426 manually enable vectorization or interleaving.
4430 #pragma clang loop vectorize(enable)
4431 #pragma clang loop interleave(enable)
4436 The vector width is specified by
4437 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
4438 integer and the type of vectorization can be specified with an optional
4439 second parameter. The default for the second parameter is 'fixed' and
4440 refers to fixed width vectorization, whereas 'scalable' indicates the
4441 compiler should use scalable vectors instead. Another use of vectorize_width
4442 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
4443 of vectorization to use without specifying the exact width. In both variants
4444 of the pragma the vectorizer may decide to fall back on fixed width
4445 vectorization if the target does not support scalable vectors.
4447 The interleave count is specified by ``interleave_count(_value_)``, where
4448 _value_ is a positive integer. This is useful for specifying the optimal
4449 width/count of the set of target architectures supported by your application.
4453 #pragma clang loop vectorize_width(2)
4454 #pragma clang loop interleave_count(2)
4459 Specifying a width/count of 1 disables the optimization, and is equivalent to
4460 ``vectorize(disable)`` or ``interleave(disable)``.
4462 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
4466 #pragma clang loop vectorize(enable)
4467 #pragma clang loop vectorize_predicate(enable)
4472 This predicates (masks) all instructions in the loop, which allows the scalar
4473 remainder loop (the tail) to be folded into the main vectorized loop. This
4474 might be more efficient when vector predication is efficiently supported by the
4480 Unrolling a loop reduces the loop control overhead and exposes more
4481 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
4482 eliminates the loop and replaces it with an enumerated sequence of loop
4483 iterations. Full unrolling is only possible if the loop trip count is known at
4484 compile time. Partial unrolling replicates the loop body within the loop and
4485 reduces the trip count.
4487 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
4488 loop if the trip count is known at compile time. If the fully unrolled code size
4489 is greater than an internal limit the loop will be partially unrolled up to this
4490 limit. If the trip count is not known at compile time the loop will be partially
4491 unrolled with a heuristically chosen unroll factor.
4495 #pragma clang loop unroll(enable)
4500 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
4501 loop if the trip count is known at compile time identically to
4502 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
4503 if the loop count is not known at compile time.
4507 #pragma clang loop unroll(full)
4512 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
4513 _value_ is a positive integer. If this value is greater than the trip count the
4514 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
4515 to the same code size limit as with ``unroll(enable)``.
4519 #pragma clang loop unroll_count(8)
4524 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4526 Loop unroll parameters can be controlled by options
4527 `-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4532 Loop Distribution allows splitting a loop into multiple loops. This is
4533 beneficial for example when the entire loop cannot be vectorized but some of the
4534 resulting loops can.
4536 If ``distribute(enable))`` is specified and the loop has memory dependencies
4537 that inhibit vectorization, the compiler will attempt to isolate the offending
4538 operations into a new loop. This optimization is not enabled by default, only
4539 loops marked with the pragma are considered.
4543 #pragma clang loop distribute(enable)
4544 for (i = 0; i < N; ++i) {
4545 S1: A[i + 1] = A[i] + B[i];
4546 S2: C[i] = D[i] * E[i];
4549 This loop will be split into two loops between statements S1 and S2. The
4550 second loop containing S2 will be vectorized.
4552 Loop Distribution is currently not enabled by default in the optimizer because
4553 it can hurt performance in some cases. For example, instruction-level
4554 parallelism could be reduced by sequentializing the execution of the
4555 statements S1 and S2 above.
4557 If Loop Distribution is turned on globally with
4558 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4559 be used the disable it on a per-loop basis.
4561 Additional Information
4562 ----------------------
4564 For convenience multiple loop hints can be specified on a single line.
4568 #pragma clang loop vectorize_width(4) interleave_count(8)
4573 If an optimization cannot be applied any hints that apply to it will be ignored.
4574 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4575 proven safe to vectorize. To identify and diagnose optimization issues use
4576 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4577 user guide for details.
4579 Extensions to specify floating-point flags
4580 ====================================================
4582 The ``#pragma clang fp`` pragma allows floating-point options to be specified
4583 for a section of the source code. This pragma can only appear at file scope or
4584 at the start of a compound statement (excluding comments). When using within a
4585 compound statement, the pragma is active within the scope of the compound
4588 Currently, the following settings can be controlled with this pragma:
4590 ``#pragma clang fp reassociate`` allows control over the reassociation
4591 of floating point expressions. When enabled, this pragma allows the expression
4592 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4593 Reassociation can also occur across multiple statements.
4594 This pragma can be used to disable reassociation when it is otherwise
4595 enabled for the translation unit with the ``-fassociative-math`` flag.
4596 The pragma can take two values: ``on`` and ``off``.
4600 float f(float x, float y, float z)
4602 // Enable floating point reassociation across statements
4603 #pragma clang fp reassociate(on)
4609 ``#pragma clang fp contract`` specifies whether the compiler should
4610 contract a multiply and an addition (or subtraction) into a fused FMA
4611 operation when supported by the target.
4613 The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on``
4614 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4615 fusion as specified the language standard. The ``fast`` option allows fusion
4616 in cases when the language standard does not make this possible (e.g. across
4622 #pragma clang fp contract(fast)
4628 The pragma can also be used with ``off`` which turns FP contraction off for a
4629 section of the code. This can be useful when fast contraction is otherwise
4630 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4631 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4632 addition across statements regardless of any controlling pragmas.
4634 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4635 may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4636 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4641 // Preserve floating point exceptions
4642 #pragma clang fp exceptions(strict)
4644 if (fetestexcept(FE_OVERFLOW))
4648 A ``#pragma clang fp`` pragma may contain any number of options:
4652 void func(float *dest, float a, float b) {
4653 #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4657 ``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4658 for a section of the source code. This pragma can appear at file or namespace
4659 scope, or at the start of a compound statement (excluding comments).
4660 The pragma is active within the scope of the compound statement.
4662 When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4663 governed by the pragma behaves as though the command-line option
4664 ``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4665 source-defined precision.
4667 When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4668 governed by the pragma behaves as though the command-line option
4669 ``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4670 ``double`` precision.
4672 When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4673 governed by the pragma behaves as though the command-line option
4674 ``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4675 target-dependent ``long double`` precision. In Win32 programming, for instance,
4676 the long double data type maps to the double, 64-bit precision data type.
4678 The full syntax this pragma supports is
4679 ``#pragma clang fp eval_method(source|double|extended)``.
4684 // The compiler will use long double as the floating-point evaluation
4686 #pragma clang fp eval_method(extended)
4687 a = b[i] * c[i] + e;
4690 Note: ``math.h`` defines the typedefs ``float_t`` and ``double_t`` based on the active
4691 evaluation method at the point where the header is included, not where the
4692 typedefs are used. Because of this, it is unwise to combine these typedefs with
4693 ``#pragma clang fp eval_method``. To catch obvious bugs, Clang will emit an
4694 error for any references to these typedefs within the scope of this pragma;
4695 however, this is not a fool-proof protection, and programmers must take care.
4697 The ``#pragma float_control`` pragma allows precise floating-point
4698 semantics and floating-point exception behavior to be specified
4699 for a section of the source code. This pragma can only appear at file or
4700 namespace scope, within a language linkage specification or at the start of a
4701 compound statement (excluding comments). When used within a compound statement,
4702 the pragma is active within the scope of the compound statement. This pragma
4703 is modeled after a Microsoft pragma with the same spelling and syntax. For
4704 pragmas specified at file or namespace scope, or within a language linkage
4705 specification, a stack is supported so that the ``pragma float_control``
4706 settings can be pushed or popped.
4708 When ``pragma float_control(precise, on)`` is enabled, the section of code
4709 governed by the pragma uses precise floating point semantics, effectively
4710 ``-ffast-math`` is disabled and ``-ffp-contract=on``
4711 (fused multiply add) is enabled. This pragma enables ``-fmath-errno``.
4713 When ``pragma float_control(precise, off)`` is enabled, unsafe-floating point
4714 optimizations are enabled in the section of code governed by the pragma.
4715 Effectively ``-ffast-math`` is enabled and ``-ffp-contract=fast``. This pragma
4716 disables ``-fmath-errno``.
4718 When ``pragma float_control(except, on)`` is enabled, the section of code
4719 governed by the pragma behaves as though the command-line option
4720 ``-ffp-exception-behavior=strict`` is enabled,
4721 when ``pragma float_control(except, off)`` is enabled, the section of code
4722 governed by the pragma behaves as though the command-line option
4723 ``-ffp-exception-behavior=ignore`` is enabled.
4725 The full syntax this pragma supports is
4726 ``float_control(except|precise, on|off [, push])`` and
4727 ``float_control(push|pop)``.
4728 The ``push`` and ``pop`` forms, including using ``push`` as the optional
4729 third argument, can only occur at file scope.
4734 // This block will be compiled with -fno-fast-math and -ffp-contract=on
4735 #pragma float_control(precise, on)
4736 a = b[i] * c[i] + e;
4739 Specifying an attribute for multiple declarations (#pragma clang attribute)
4740 ===========================================================================
4742 The ``#pragma clang attribute`` directive can be used to apply an attribute to
4743 multiple declarations. The ``#pragma clang attribute push`` variation of the
4744 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4745 can be added to. The ``#pragma clang attribute (...)`` variation adds an
4746 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4747 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4748 shorthand for when you want to add one attribute to a new scope. Multiple push
4749 directives can be nested inside each other.
4751 The attributes that are used in the ``#pragma clang attribute`` directives
4752 can be written using the GNU-style syntax:
4756 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4758 void function(); // The function now has the annotate("custom") attribute
4760 #pragma clang attribute pop
4762 The attributes can also be written using the C++11 style syntax:
4766 #pragma clang attribute push ([[noreturn]], apply_to = function)
4768 void function(); // The function now has the [[noreturn]] attribute
4770 #pragma clang attribute pop
4772 The ``__declspec`` style syntax is also supported:
4776 #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4778 void function(); // The function now has the __declspec(dllexport) attribute
4780 #pragma clang attribute pop
4782 A single push directive can contain multiple attributes, however,
4783 only one syntax style can be used within a single directive:
4787 #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4789 void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4791 #pragma clang attribute pop
4793 #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4795 void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4797 #pragma clang attribute pop
4799 Because multiple push directives can be nested, if you're writing a macro that
4800 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4801 required) to add a namespace to your push/pop directives. A pop directive with a
4802 namespace will pop the innermost push that has that same namespace. This will
4803 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4804 that an ``pop`` without a namespace will pop the innermost ``push`` without a
4805 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4806 same namespace. For instance:
4810 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4811 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop")
4813 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
4814 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop")
4817 ASSUME_NORETURN_BEGIN
4818 ASSUME_UNAVAILABLE_BEGIN
4819 void function(); // function has [[noreturn]] and __attribute__((unavailable))
4821 void other_function(); // function has __attribute__((unavailable))
4822 ASSUME_UNAVAILABLE_END
4824 Without the namespaces on the macros, ``other_function`` will be annotated with
4825 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4826 a contrived example, but its very possible for this kind of situation to appear
4827 in real code if the pragmas are spread out across a large file. You can test if
4828 your version of clang supports namespaces on ``#pragma clang attribute`` with
4829 ``__has_extension(pragma_clang_attribute_namespaces)``.
4834 The set of declarations that receive a single attribute from the attribute stack
4835 depends on the subject match rules that were specified in the pragma. Subject
4836 match rules are specified after the attribute. The compiler expects an
4837 identifier that corresponds to the subject set specifier. The ``apply_to``
4838 specifier is currently the only supported subject set specifier. It allows you
4839 to specify match rules that form a subset of the attribute's allowed subject
4840 set, i.e. the compiler doesn't require all of the attribute's subjects. For
4841 example, an attribute like ``[[nodiscard]]`` whose subject set includes
4842 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4843 least one of these rules after ``apply_to``:
4847 #pragma clang attribute push([[nodiscard]], apply_to = enum)
4849 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4851 struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4853 #pragma clang attribute pop
4855 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4857 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4859 struct Record2 { }; // The struct *will* receive [[nodiscard]]
4861 #pragma clang attribute pop
4863 // This is an error, since [[nodiscard]] can't be applied to namespaces:
4864 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4866 #pragma clang attribute pop
4868 Multiple match rules can be specified using the ``any`` match rule, as shown
4869 in the example above. The ``any`` rule applies attributes to all declarations
4870 that are matched by at least one of the rules in the ``any``. It doesn't nest
4871 and can't be used inside the other match rules. Redundant match rules or rules
4872 that conflict with one another should not be used inside of ``any``. Failing to
4873 specify a rule within the ``any`` rule results in an error.
4875 Clang supports the following match rules:
4877 - ``function``: Can be used to apply attributes to functions. This includes C++
4878 member functions, static functions, operators, and constructors/destructors.
4880 - ``function(is_member)``: Can be used to apply attributes to C++ member
4881 functions. This includes members like static functions, operators, and
4882 constructors/destructors.
4884 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
4885 member functions, and variables/fields whose type is a function pointer. It
4886 does not apply attributes to Objective-C methods or blocks.
4888 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4889 and C++11 type aliases.
4891 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4892 ``union`` declarations.
4894 - ``record(unless(is_union))``: Can be used to apply attributes only to
4895 ``struct`` and ``class`` declarations.
4897 - ``enum``: Can be be used to apply attributes to enumeration declarations.
4899 - ``enum_constant``: Can be used to apply attributes to enumerators.
4901 - ``variable``: Can be used to apply attributes to variables, including
4902 local variables, parameters, global variables, and static member variables.
4903 It does not apply attributes to instance member variables or Objective-C
4906 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4909 - ``variable(is_global)``: Can be used to apply attributes to global variables
4912 - ``variable(is_local)``: Can be used to apply attributes to local variables
4915 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
4918 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4919 the variables that are not parameters.
4921 - ``field``: Can be used to apply attributes to non-static member variables
4922 in a record. This includes Objective-C ivars.
4924 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4926 - ``objc_interface``: Can be used to apply attributes to ``@interface``
4929 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4932 - ``objc_category``: Can be used to apply attributes to category declarations,
4933 including class extensions.
4935 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
4936 including instance and class methods. Implicit methods like implicit property
4937 getters and setters do not receive the attribute.
4939 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
4942 - ``objc_property``: Can be used to apply attributes to ``@property``
4945 - ``block``: Can be used to apply attributes to block declarations. This does
4946 not include variables/fields of block pointer type.
4948 The use of ``unless`` in match rules is currently restricted to a strict set of
4949 sub-rules that are used by the supported attributes. That means that even though
4950 ``variable(unless(is_parameter))`` is a valid match rule,
4951 ``variable(unless(is_thread_local))`` is not.
4953 Supported Attributes
4954 --------------------
4956 Not all attributes can be used with the ``#pragma clang attribute`` directive.
4957 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
4958 like ``address_space`` aren't supported by this directive. You can determine
4959 whether or not an attribute is supported by the pragma by referring to the
4960 :doc:`individual documentation for that attribute <AttributeReference>`.
4962 The attributes are applied to all matching declarations individually, even when
4963 the attribute is semantically incorrect. The attributes that aren't applied to
4964 any declaration are not verified semantically.
4966 Specifying section names for global objects (#pragma clang section)
4967 ===================================================================
4969 The ``#pragma clang section`` directive provides a means to assign section-names
4970 to global variables, functions and static variables.
4972 The section names can be specified as:
4976 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
4978 The section names can be reverted back to default name by supplying an empty
4979 string to the section kind, for example:
4983 #pragma clang section bss="" data="" text="" rodata="" relro=""
4985 The ``#pragma clang section`` directive obeys the following rules:
4987 * The pragma applies to all global variable, statics and function declarations
4988 from the pragma to the end of the translation unit.
4990 * The pragma clang section is enabled automatically, without need of any flags.
4992 * This feature is only defined to work sensibly for ELF targets.
4994 * If section name is specified through _attribute_((section("myname"))), then
4995 the attribute name gains precedence.
4997 * Global variables that are initialized to zero will be placed in the named
4998 bss section, if one is present.
5000 * The ``#pragma clang section`` directive does not does try to infer section-kind
5001 from the name. For example, naming a section "``.bss.mySec``" does NOT mean
5002 it will be a bss section name.
5004 * The decision about which section-kind applies to each global is taken in the back-end.
5005 Once the section-kind is known, appropriate section name, as specified by the user using
5006 ``#pragma clang section`` directive, is applied to that global.
5008 Specifying Linker Options on ELF Targets
5009 ========================================
5011 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
5012 The second parameter is the library name (without the traditional Unix prefix of
5013 ``lib``). This allows you to provide an implicit link of dependent libraries.
5015 Evaluating Object Size Dynamically
5016 ==================================
5018 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
5019 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
5020 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
5021 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
5022 for ``__builtin_object_size`` in libraries that support it.
5024 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
5029 void copy_into_buffer(size_t size) {
5030 char* buffer = malloc(size);
5031 strlcpy(buffer, "some string", strlen("some string"));
5032 // Previous line preprocesses to:
5033 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
5036 Since the size of ``buffer`` can't be known at compile time, Clang will fold
5037 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
5038 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
5039 ``size``, providing some extra runtime safety.
5044 Clang supports the pragma ``#pragma clang deprecated``, which can be used to
5045 provide deprecation warnings for macro uses. For example:
5049 #define MIN(x, y) x < y ? x : y
5050 #pragma clang deprecated(MIN, "use std::min instead")
5052 int min(int a, int b) {
5053 return MIN(a, b); // warning: MIN is deprecated: use std::min instead
5056 ``#pragma clang deprecated`` should be preferred for this purpose over
5057 ``#pragma GCC warning`` because the warning can be controlled with
5060 Restricted Expansion Macros
5061 ===========================
5063 Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
5064 used restrict macro expansion in headers. This can be valuable when providing
5065 headers with ABI stability requirements. Any expansion of the annotated macro
5066 processed by the preprocessor after the ``#pragma`` annotation will log a
5067 warning. Redefining the macro or undefining the macro will not be diagnosed, nor
5068 will expansion of the macro within the main source file. For example:
5072 #define TARGET_ARM 1
5073 #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
5077 #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
5086 #if TARGET_ARM // No warning in main source file
5092 This warning is controlled by ``-Wpedantic-macros``.
5097 Clang supports the pragma ``#pragma clang final``, which can be used to
5098 mark macros as final, meaning they cannot be undef'd or re-defined. For example:
5102 #define FINAL_MACRO 1
5103 #pragma clang final(FINAL_MACRO)
5105 #define FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be redefined
5106 #undef FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be undefined
5108 This is useful for enforcing system-provided macros that should not be altered
5109 in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
5110 macros will always warn on redefinition, including situations with identical
5111 bodies and in system headers.
5116 Clang supports an extension for source line control, which takes the
5117 form of a preprocessor directive starting with an unsigned integral
5118 constant. In addition to the standard ``#line`` directive, this form
5119 allows control of an include stack and header file type, which is used
5120 in issuing diagnostics. These lines are emitted in preprocessed
5125 # <line:number> <filename:string> <header-type:numbers>
5127 The filename is optional, and if unspecified indicates no change in
5128 source filename. The header-type is an optional, whitespace-delimited,
5129 sequence of magic numbers as follows.
5131 * ``1:`` Push the current source file name onto the include stack and
5134 * ``2``: Pop the include stack and return to the specified file. If
5135 the filename is ``""``, the name popped from the include stack is
5136 used. Otherwise there is no requirement that the specified filename
5137 matches the current source when originally pushed.
5139 * ``3``: Enter a system-header region. System headers often contain
5140 implementation-specific source that would normally emit a diagnostic.
5142 * ``4``: Enter an implicit ``extern "C"`` region. This is not required on
5143 modern systems where system headers are C++-aware.
5145 At most a single ``1`` or ``2`` can be present, and values must be in
5152 # 57 // Advance (or return) to line 57 of the current source file
5153 # 57 "frob" // Set to line 57 of "frob"
5154 # 1 "foo.h" 1 // Enter "foo.h" at line 1
5155 # 59 "main.c" 2 // Leave current include and return to "main.c"
5156 # 1 "/usr/include/stdio.h" 1 3 // Enter a system header
5157 # 60 "" 2 // return to "main.c"
5158 # 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
5160 Extended Integer Types
5161 ======================
5163 Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
5164 and in C++. This type was previously implemented in Clang with the same
5165 semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
5166 favor of the standard type.
5168 Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
5169 so this type should not yet be used in interfaces that require ABI stability.
5171 Intrinsics Support within Constant Expressions
5172 ==============================================
5174 The following builtin intrinsics can be used in constant expressions:
5176 * ``__builtin_bitreverse8``
5177 * ``__builtin_bitreverse16``
5178 * ``__builtin_bitreverse32``
5179 * ``__builtin_bitreverse64``
5180 * ``__builtin_bswap16``
5181 * ``__builtin_bswap32``
5182 * ``__builtin_bswap64``
5183 * ``__builtin_clrsb``
5184 * ``__builtin_clrsbl``
5185 * ``__builtin_clrsbll``
5187 * ``__builtin_clzl``
5188 * ``__builtin_clzll``
5189 * ``__builtin_clzs``
5191 * ``__builtin_ctzl``
5192 * ``__builtin_ctzll``
5193 * ``__builtin_ctzs``
5195 * ``__builtin_ffsl``
5196 * ``__builtin_ffsll``
5197 * ``__builtin_fmax``
5198 * ``__builtin_fmin``
5199 * ``__builtin_fpclassify``
5201 * ``__builtin_isinf``
5202 * ``__builtin_isinf_sign``
5203 * ``__builtin_isfinite``
5204 * ``__builtin_isnan``
5205 * ``__builtin_isnormal``
5207 * ``__builtin_nans``
5208 * ``__builtin_parity``
5209 * ``__builtin_parityl``
5210 * ``__builtin_parityll``
5211 * ``__builtin_popcount``
5212 * ``__builtin_popcountl``
5213 * ``__builtin_popcountll``
5214 * ``__builtin_rotateleft8``
5215 * ``__builtin_rotateleft16``
5216 * ``__builtin_rotateleft32``
5217 * ``__builtin_rotateleft64``
5218 * ``__builtin_rotateright8``
5219 * ``__builtin_rotateright16``
5220 * ``__builtin_rotateright32``
5221 * ``__builtin_rotateright64``
5223 The following x86-specific intrinsics can be used in constant expressions:
5225 * ``_bit_scan_forward``
5226 * ``_bit_scan_reverse``
5242 * ``_mm_popcnt_u32``
5243 * ``_mm_popcnt_u64``
5266 Debugging the Compiler
5267 ======================
5269 Clang supports a number of pragma directives that help debugging the compiler itself.
5270 Syntax is the following: `#pragma clang __debug <command> <arguments>`.
5271 Note, all of debugging pragmas are subject to change.
5275 Accepts either a single identifier or an expression. When a single identifier is passed,
5276 the lookup results for the identifier are printed to `stderr`. When an expression is passed,
5277 the AST for the expression is printed to `stderr`. The expression is an unevaluated operand,
5278 so things like overload resolution and template instantiations are performed,
5279 but the expression has no runtime effects.
5280 Type- and value-dependent expressions are not supported yet.
5282 This facility is designed to aid with testing name lookup machinery.