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.)
427 Implementation-defined keywords
428 ===============================
433 ``__datasizeof`` behaves like ``sizeof``, except that it returns the size of the
434 type ignoring tail padding.
437 FIXME: This should list all the keyword extensions
441 Vectors and Extended Vectors
442 ============================
444 Supports the GCC, OpenCL, AltiVec, NEON and SVE vector extensions.
446 OpenCL vector types are created using the ``ext_vector_type`` attribute. It
447 supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example
452 typedef float float4 __attribute__((ext_vector_type(4)));
453 typedef float float2 __attribute__((ext_vector_type(2)));
455 float4 foo(float2 a, float2 b) {
462 Query for this feature with ``__has_attribute(ext_vector_type)``.
464 Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
465 and functions. For example:
469 vector float foo(vector int a) {
471 b = vec_add(a, a) + a;
472 return (vector float)b;
475 NEON vector types are created using ``neon_vector_type`` and
476 ``neon_polyvector_type`` attributes. For example:
480 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
481 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
483 int8x8_t foo(int8x8_t a) {
489 GCC vector types are created using the ``vector_size(N)`` attribute. The
490 argument ``N`` specifies the number of bytes that will be allocated for an
491 object of this type. The size has to be multiple of the size of the vector
492 element type. For example:
496 // OK: This declares a vector type with four 'int' elements
497 typedef int int4 __attribute__((vector_size(4 * sizeof(int))));
499 // ERROR: '11' is not a multiple of sizeof(int)
500 typedef int int_impossible __attribute__((vector_size(11)));
512 Clang also supports the ext_vector_type attribute with boolean element types in
513 C and C++. For example:
517 // legal for Clang, error for GCC:
518 typedef bool bool4 __attribute__((ext_vector_type(4)));
519 // Objects of bool4 type hold 8 bits, sizeof(bool4) == 1
527 Boolean vectors are a Clang extension of the ext vector type. Boolean vectors
528 are intended, though not guaranteed, to map to vector mask registers. The size
529 parameter of a boolean vector type is the number of bits in the vector. The
530 boolean vector is dense and each bit in the boolean vector is one vector
533 The semantics of boolean vectors borrows from C bit-fields with the following
536 * Distinct boolean vectors are always distinct memory objects (there is no
538 * Only the operators `?:`, `!`, `~`, `|`, `&`, `^` and comparison are allowed on
540 * Casting a scalar bool value to a boolean vector type means broadcasting the
541 scalar value onto all lanes (same as general ext_vector_type).
542 * It is not possible to access or swizzle elements of a boolean vector
543 (different than general ext_vector_type).
545 The size and alignment are both the number of bits rounded up to the next power
546 of two, but the alignment is at most the maximum vector alignment of the
553 Vector literals can be used to create vectors from a set of scalars, or
554 vectors. Either parentheses or braces form can be used. In the parentheses
555 form the number of literal values specified must be one, i.e. referring to a
556 scalar value, or must match the size of the vector type being created. If a
557 single scalar literal value is specified, the scalar literal value will be
558 replicated to all the components of the vector type. In the brackets form any
559 number of literals can be specified. For example:
563 typedef int v4si __attribute__((__vector_size__(16)));
564 typedef float float4 __attribute__((ext_vector_type(4)));
565 typedef float float2 __attribute__((ext_vector_type(2)));
567 v4si vsi = (v4si){1, 2, 3, 4};
568 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
569 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1).
570 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0).
571 vector int vi3 = (vector int)(1, 2); // error
572 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
573 vector int vi5 = (vector int)(1, 2, 3, 4);
574 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
579 The table below shows the support for each operation by vector extension. A
580 dash indicates that an operation is not accepted according to a corresponding
583 ============================== ======= ======= ============= ======= =====
584 Operator OpenCL AltiVec GCC NEON SVE
585 ============================== ======= ======= ============= ======= =====
586 [] yes yes yes yes yes
587 unary operators +, -- yes yes yes yes yes
588 ++, -- -- yes yes yes no no
589 +,--,*,/,% yes yes yes yes yes
590 bitwise operators &,|,^,~ yes yes yes yes yes
591 >>,<< yes yes yes yes yes
592 !, &&, || yes -- yes yes yes
593 ==, !=, >, <, >=, <= yes yes yes yes yes
594 = yes yes yes yes yes
595 ?: [#]_ yes -- yes yes yes
596 sizeof yes yes yes yes yes [#]_
597 C-style cast yes yes yes no no
598 reinterpret_cast yes no yes no no
599 static_cast yes no yes no no
600 const_cast no no no no no
601 address &v[i] no no no [#]_ no no
602 ============================== ======= ======= ============= ======= =====
604 See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
606 .. [#] ternary operator(?:) has different behaviors depending on condition
607 operand's vector type. If the condition is a GNU vector (i.e. __vector_size__),
608 a NEON vector or an SVE vector, it's only available in C++ and uses normal bool
609 conversions (that is, != 0).
610 If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
611 And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
612 .. [#] sizeof can only be used on vector length specific SVE types.
613 .. [#] Clang does not allow the address of an element to be taken while GCC
614 allows this. This is intentional for vectors with a boolean element type and
615 not implemented otherwise.
620 **Note: The implementation of vector builtins is work-in-progress and incomplete.**
622 In addition to the operators mentioned above, Clang provides a set of builtins
623 to perform additional operations on certain scalar and vector types.
625 Let ``T`` be one of the following types:
627 * an integer type (as in C23 6.2.5p22), but excluding enumerated types and ``bool``
628 * the standard floating types float or double
629 * a half-precision floating point type, if one is supported on the target
632 For scalar types, consider the operation applied to a vector with a single element.
635 To determine the number of elements in a vector, use ``__builtin_vectorelements()``.
636 For fixed-sized vectors, e.g., defined via ``__attribute__((vector_size(N)))`` or ARM
637 NEON's vector types (e.g., ``uint16x8_t``), this returns the constant number of
638 elements at compile-time. For scalable vectors, e.g., SVE or RISC-V V, the number of
639 elements is not known at compile-time and is determined at runtime. This builtin can
640 be used, e.g., to increment the loop-counter in vector-type agnostic loops.
642 *Elementwise Builtins*
644 Each builtin returns a vector equivalent to applying the specified operation
645 elementwise to the input.
647 Unless specified otherwise operation(±0) = ±0 and operation(±infinity) = ±infinity
649 =========================================== ================================================================ =========================================
650 Name Operation Supported element types
651 =========================================== ================================================================ =========================================
652 T __builtin_elementwise_abs(T x) return the absolute value of a number x; the absolute value of signed integer and floating point types
653 the most negative integer remains the most negative integer
654 T __builtin_elementwise_fma(T x, T y, T z) fused multiply add, (x * y) + z. floating point types
655 T __builtin_elementwise_ceil(T x) return the smallest integral value greater than or equal to x floating point types
656 T __builtin_elementwise_sin(T x) return the sine of x interpreted as an angle in radians floating point types
657 T __builtin_elementwise_cos(T x) return the cosine of x interpreted as an angle in radians floating point types
658 T __builtin_elementwise_floor(T x) return the largest integral value less than or equal to x floating point types
659 T __builtin_elementwise_log(T x) return the natural logarithm of x floating point types
660 T __builtin_elementwise_log2(T x) return the base 2 logarithm of x floating point types
661 T __builtin_elementwise_log10(T x) return the base 10 logarithm of x floating point types
662 T __builtin_elementwise_pow(T x, T y) return x raised to the power of y floating point types
663 T __builtin_elementwise_bitreverse(T x) return the integer represented after reversing the bits of x integer types
664 T __builtin_elementwise_exp(T x) returns the base-e exponential, e^x, of the specified value floating point types
665 T __builtin_elementwise_exp2(T x) returns the base-2 exponential, 2^x, of the specified value floating point types
667 T __builtin_elementwise_sqrt(T x) return the square root of a floating-point number floating point types
668 T __builtin_elementwise_roundeven(T x) round x to the nearest integer value in floating point format, floating point types
669 rounding halfway cases to even (that is, to the nearest value
670 that is an even integer), regardless of the current rounding
672 T __builtin_elementwise_round(T x) round x to the nearest integer value in floating point format, floating point types
673 rounding halfway cases away from zero, regardless of the
674 current rounding direction. May raise floating-point
676 T __builtin_elementwise_trunc(T x) return the integral value nearest to but no larger in floating point types
679 T __builtin_elementwise_nearbyint(T x) round x to the nearest integer value in floating point format, floating point types
680 rounding according to the current rounding direction.
681 May not raise the inexact floating-point exception. This is
682 treated the same as ``__builtin_elementwise_rint`` unless
683 :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
685 T __builtin_elementwise_rint(T x) round x to the nearest integer value in floating point format, floating point types
686 rounding according to the current rounding
687 direction. May raise floating-point exceptions. This is treated
688 the same as ``__builtin_elementwise_nearbyint`` unless
689 :ref:`FENV_ACCESS is enabled <floating-point-environment>`.
691 T __builtin_elementwise_canonicalize(T x) return the platform specific canonical encoding floating point types
692 of a floating-point number
693 T __builtin_elementwise_copysign(T x, T y) return the magnitude of x with the sign of y. floating point types
694 T __builtin_elementwise_max(T x, T y) return x or y, whichever is larger integer and floating point types
695 T __builtin_elementwise_min(T x, T y) return x or y, whichever is smaller integer and floating point types
696 T __builtin_elementwise_add_sat(T x, T y) return the sum of x and y, clamped to the range of integer types
697 representable values for the signed/unsigned integer type.
698 T __builtin_elementwise_sub_sat(T x, T y) return the difference of x and y, clamped to the range of integer types
699 representable values for the signed/unsigned integer type.
700 =========================================== ================================================================ =========================================
705 Each builtin returns a scalar equivalent to applying the specified
706 operation(x, y) as recursive even-odd pairwise reduction to all vector
707 elements. ``operation(x, y)`` is repeatedly applied to each non-overlapping
708 even-odd element pair with indices ``i * 2`` and ``i * 2 + 1`` with
709 ``i in [0, Number of elements / 2)``. If the numbers of elements is not a
710 power of 2, the vector is widened with neutral elements for the reduction
711 at the end to the next power of 2.
717 __builtin_reduce_add([e3, e2, e1, e0]) = __builtin_reduced_add([e3 + e2, e1 + e0])
718 = (e3 + e2) + (e1 + e0)
721 Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
723 ======================================= ================================================================ ==================================
724 Name Operation Supported element types
725 ======================================= ================================================================ ==================================
726 ET __builtin_reduce_max(VT a) return x or y, whichever is larger; If exactly one argument is integer and floating point types
727 a NaN, return the other argument. If both arguments are NaNs,
729 ET __builtin_reduce_min(VT a) return x or y, whichever is smaller; If exactly one argument integer and floating point types
730 is a NaN, return the other argument. If both arguments are
731 NaNs, fmax() return a NaN.
732 ET __builtin_reduce_add(VT a) \+ integer types
733 ET __builtin_reduce_mul(VT a) \* integer types
734 ET __builtin_reduce_and(VT a) & integer types
735 ET __builtin_reduce_or(VT a) \| integer types
736 ET __builtin_reduce_xor(VT a) ^ integer types
737 ======================================= ================================================================ ==================================
742 Clang provides an extension for matrix types, which is currently being
743 implemented. See :ref:`the draft specification <matrixtypes>` for more details.
745 For example, the code below uses the matrix types extension to multiply two 4x4
746 float matrices and add the result to a third 4x4 matrix.
750 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
752 m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
756 The matrix type extension also supports operations on a matrix and a scalar.
760 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
763 return (a + 23) * 12;
766 The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
770 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
777 The matrix type extension supports compound assignments for addition, subtraction, and multiplication on matrices
778 and on a matrix and a scalar, provided their types are consistent.
782 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
784 m4x4_t f(m4x4_t a, m4x4_t b) {
793 The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
797 typedef int ix5x5 __attribute__((matrix_type(5, 5)));
798 typedef float fx5x5 __attribute__((matrix_type(5, 5)));
800 fx5x5 f1(ix5x5 i, fx5x5 f) {
805 template <typename X>
806 using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
809 matrix_5_5<double> d;
811 i = (matrix_5_5<int>)d;
812 i = static_cast<matrix_5_5<int>>(d);
815 Half-Precision Floating Point
816 =============================
818 Clang supports three half-precision (16-bit) floating point types:
819 ``__fp16``, ``_Float16`` and ``__bf16``. These types are supported
820 in all language modes, but their support differs between targets.
821 A target is said to have "native support" for a type if the target
822 processor offers instructions for directly performing basic arithmetic
823 on that type. In the absence of native support, a type can still be
824 supported if the compiler can emulate arithmetic on the type by promoting
825 to ``float``; see below for more information on this emulation.
827 * ``__fp16`` is supported on all targets. The special semantics of this
828 type mean that no arithmetic is ever performed directly on ``__fp16`` values;
831 * ``_Float16`` is supported on the following targets:
832 * 32-bit ARM (natively on some architecture versions)
833 * 64-bit ARM (AArch64) (natively on ARMv8.2a and above)
836 * X86 (if SSE2 is available; natively if AVX512-FP16 is also available)
837 * RISC-V (natively if Zfh or Zhinx is available)
839 * ``__bf16`` is supported on the following targets (currently never natively):
841 * 64-bit ARM (AArch64)
843 * X86 (when SSE2 is available)
845 (For X86, SSE2 is available on 64-bit and all recent 32-bit processors.)
847 ``__fp16`` and ``_Float16`` both use the binary16 format from IEEE
848 754-2008, which provides a 5-bit exponent and an 11-bit significand
849 (counting the implicit leading 1). ``__bf16`` uses the `bfloat16
850 <https://en.wikipedia.org/wiki/Bfloat16_floating-point_format>`_ format,
851 which provides an 8-bit exponent and an 8-bit significand; this is the same
852 exponent range as `float`, just with greatly reduced precision.
854 ``_Float16`` and ``__bf16`` follow the usual rules for arithmetic
855 floating-point types. Most importantly, this means that arithmetic operations
856 on operands of these types are formally performed in the type and produce
857 values of the type. ``__fp16`` does not follow those rules: most operations
858 immediately promote operands of type ``__fp16`` to ``float``, and so
859 arithmetic operations are defined to be performed in ``float`` and so result in
860 a value of type ``float`` (unless further promoted because of other operands).
861 See below for more information on the exact specifications of these types.
863 When compiling arithmetic on ``_Float16`` and ``__bf16`` for a target without
864 native support, Clang will perform the arithmetic in ``float``, inserting
865 extensions and truncations as necessary. This can be done in a way that
866 exactly matches the operation-by-operation behavior of native support,
867 but that can require many extra truncations and extensions. By default,
868 when emulating ``_Float16`` and ``__bf16`` arithmetic using ``float``, Clang
869 does not truncate intermediate operands back to their true type unless the
870 operand is the result of an explicit cast or assignment. This is generally
871 much faster but can generate different results from strict operation-by-operation
872 emulation. Usually the results are more precise. This is permitted by the
873 C and C++ standards under the rules for excess precision in intermediate operands;
874 see the discussion of evaluation formats in the C standard and [expr.pre] in
877 The use of excess precision can be independently controlled for these two
878 types with the ``-ffloat16-excess-precision=`` and
879 ``-fbfloat16-excess-precision=`` options. Valid values include:
881 * ``none``: meaning to perform strict operation-by-operation emulation
882 * ``standard``: meaning that excess precision is permitted under the rules
883 described in the standard, i.e. never across explicit casts or statements
884 * ``fast``: meaning that excess precision is permitted whenever the
885 optimizer sees an opportunity to avoid truncations; currently this has no
886 effect beyond ``standard``
888 The ``_Float16`` type is an interchange floating type specified in
889 ISO/IEC TS 18661-3:2015 ("Floating-point extensions for C"). It will
890 be supported on more targets as they define ABIs for it.
892 The ``__bf16`` type is a non-standard extension, but it generally follows
893 the rules for arithmetic interchange floating types from ISO/IEC TS
894 18661-3:2015. In previous versions of Clang, it was a storage-only type
895 that forbade arithmetic operations. It will be supported on more targets
896 as they define ABIs for it.
898 The ``__fp16`` type was originally an ARM extension and is specified
899 by the `ARM C Language Extensions <https://github.com/ARM-software/acle/releases>`_.
900 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``,
901 not the ARM alternative format. Operators that expect arithmetic operands
902 immediately promote ``__fp16`` operands to ``float``.
904 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
905 as it has been defined by the C standards committee and has behavior that is
906 more familiar to most programmers.
908 Because ``__fp16`` operands are always immediately promoted to ``float``, the
909 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
910 arithmetic conversions is ``float``.
912 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
915 Because default argument promotion only applies to the standard floating-point
916 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
917 or untyped arguments. As a consequence, some caution must be taken when using
918 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
919 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
920 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
921 ``double`` before using it with an ``%f`` or similar specifier.
923 Messages on ``deprecated`` and ``unavailable`` Attributes
924 =========================================================
926 An optional string message can be added to the ``deprecated`` and
927 ``unavailable`` attributes. For example:
931 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
933 If the deprecated or unavailable declaration is used, the message will be
934 incorporated into the appropriate diagnostic:
938 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
939 [-Wdeprecated-declarations]
943 Query for this feature with
944 ``__has_extension(attribute_deprecated_with_message)`` and
945 ``__has_extension(attribute_unavailable_with_message)``.
947 Attributes on Enumerators
948 =========================
950 Clang allows attributes to be written on individual enumerators. This allows
951 enumerators to be deprecated, made unavailable, etc. The attribute must appear
952 after the enumerator name and before any initializer, like so:
959 OM_Terrified __attribute__((deprecated)),
960 OM_AbortOnError __attribute__((deprecated)) = 4
963 Attributes on the ``enum`` declaration do not apply to individual enumerators.
965 Query for this feature with ``__has_extension(enumerator_attributes)``.
967 C++11 Attributes on using-declarations
968 ======================================
970 Clang allows C++-style ``[[]]`` attributes to be written on using-declarations.
975 [[clang::using_if_exists]] using foo::bar;
976 using foo::baz [[clang::using_if_exists]];
978 You can test for support for this extension with
979 ``__has_extension(cxx_attributes_on_using_declarations)``.
981 'User-Specified' System Frameworks
982 ==================================
984 Clang provides a mechanism by which frameworks can be built in such a way that
985 they will always be treated as being "system frameworks", even if they are not
986 present in a system framework directory. This can be useful to system
987 framework developers who want to be able to test building other applications
988 with development builds of their framework, including the manner in which the
989 compiler changes warning behavior for system headers.
991 Framework developers can opt-in to this mechanism by creating a
992 "``.system_framework``" file at the top-level of their framework. That is, the
993 framework should have contents like:
997 .../TestFramework.framework
998 .../TestFramework.framework/.system_framework
999 .../TestFramework.framework/Headers
1000 .../TestFramework.framework/Headers/TestFramework.h
1003 Clang will treat the presence of this file as an indicator that the framework
1004 should be treated as a system framework, regardless of how it was found in the
1005 framework search path. For consistency, we recommend that such files never be
1006 included in installed versions of the framework.
1008 Checks for Standard Language Features
1009 =====================================
1011 The ``__has_feature`` macro can be used to query if certain standard language
1012 features are enabled. The ``__has_extension`` macro can be used to query if
1013 language features are available as an extension when compiling for a standard
1014 which does not provide them. The features which can be tested are listed here.
1016 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
1017 These are macros with names of the form ``__cpp_<feature_name>``, and are
1018 intended to be a portable way to query the supported features of the compiler.
1019 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
1020 information on the version of SD-6 supported by each Clang release, and the
1021 macros provided by that revision of the recommendations.
1026 The features listed below are part of the C++98 standard. These features are
1027 enabled by default when compiling C++ code.
1032 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
1033 enabled. For example, compiling code with ``-fno-exceptions`` disables C++
1039 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For
1040 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
1045 The features listed below are part of the C++11 standard. As a result, all
1046 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
1047 when compiling C++ code.
1049 C++11 SFINAE includes access control
1050 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1052 Use ``__has_feature(cxx_access_control_sfinae)`` or
1053 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
1054 access-control errors (e.g., calling a private constructor) are considered to
1055 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
1056 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
1058 C++11 alias templates
1059 ^^^^^^^^^^^^^^^^^^^^^
1061 Use ``__has_feature(cxx_alias_templates)`` or
1062 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
1063 alias declarations and alias templates is enabled.
1065 C++11 alignment specifiers
1066 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1068 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
1069 determine if support for alignment specifiers using ``alignas`` is enabled.
1071 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
1072 determine if support for the ``alignof`` keyword is enabled.
1077 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
1078 determine if support for attribute parsing with C++11's square bracket notation
1081 C++11 generalized constant expressions
1082 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1084 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
1085 constant expressions (e.g., ``constexpr``) is enabled.
1087 C++11 ``decltype()``
1088 ^^^^^^^^^^^^^^^^^^^^
1090 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
1091 determine if support for the ``decltype()`` specifier is enabled. C++11's
1092 ``decltype`` does not require type-completeness of a function call expression.
1093 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
1094 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
1095 support for this feature is enabled.
1097 C++11 default template arguments in function templates
1098 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1100 Use ``__has_feature(cxx_default_function_template_args)`` or
1101 ``__has_extension(cxx_default_function_template_args)`` to determine if support
1102 for default template arguments in function templates is enabled.
1104 C++11 ``default``\ ed functions
1105 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1107 Use ``__has_feature(cxx_defaulted_functions)`` or
1108 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
1109 defaulted function definitions (with ``= default``) is enabled.
1111 C++11 delegating constructors
1112 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1114 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
1115 delegating constructors is enabled.
1117 C++11 ``deleted`` functions
1118 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1120 Use ``__has_feature(cxx_deleted_functions)`` or
1121 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
1122 function definitions (with ``= delete``) is enabled.
1124 C++11 explicit conversion functions
1125 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1127 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
1128 ``explicit`` conversion functions is enabled.
1130 C++11 generalized initializers
1131 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1133 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
1134 generalized initializers (using braced lists and ``std::initializer_list``) is
1137 C++11 implicit move constructors/assignment operators
1138 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1140 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
1141 generate move constructors and move assignment operators where needed.
1143 C++11 inheriting constructors
1144 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1146 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
1147 inheriting constructors is enabled.
1149 C++11 inline namespaces
1150 ^^^^^^^^^^^^^^^^^^^^^^^
1152 Use ``__has_feature(cxx_inline_namespaces)`` or
1153 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
1154 namespaces is enabled.
1159 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
1160 determine if support for lambdas is enabled.
1162 C++11 local and unnamed types as template arguments
1163 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1165 Use ``__has_feature(cxx_local_type_template_args)`` or
1166 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
1167 local and unnamed types as template arguments is enabled.
1172 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
1173 determine if support for noexcept exception specifications is enabled.
1175 C++11 in-class non-static data member initialization
1176 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1178 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
1179 initialization of non-static data members is enabled.
1184 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
1185 determine if support for ``nullptr`` is enabled.
1187 C++11 ``override control``
1188 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1190 Use ``__has_feature(cxx_override_control)`` or
1191 ``__has_extension(cxx_override_control)`` to determine if support for the
1192 override control keywords is enabled.
1194 C++11 reference-qualified functions
1195 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1197 Use ``__has_feature(cxx_reference_qualified_functions)`` or
1198 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
1199 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
1200 applied to ``*this``) is enabled.
1202 C++11 range-based ``for`` loop
1203 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1205 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
1206 determine if support for the range-based for loop is enabled.
1208 C++11 raw string literals
1209 ^^^^^^^^^^^^^^^^^^^^^^^^^
1211 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
1212 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
1214 C++11 rvalue references
1215 ^^^^^^^^^^^^^^^^^^^^^^^
1217 Use ``__has_feature(cxx_rvalue_references)`` or
1218 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
1219 references is enabled.
1221 C++11 ``static_assert()``
1222 ^^^^^^^^^^^^^^^^^^^^^^^^^
1224 Use ``__has_feature(cxx_static_assert)`` or
1225 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
1226 assertions using ``static_assert`` is enabled.
1228 C++11 ``thread_local``
1229 ^^^^^^^^^^^^^^^^^^^^^^
1231 Use ``__has_feature(cxx_thread_local)`` to determine if support for
1232 ``thread_local`` variables is enabled.
1234 C++11 type inference
1235 ^^^^^^^^^^^^^^^^^^^^
1237 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
1238 determine C++11 type inference is supported using the ``auto`` specifier. If
1239 this is disabled, ``auto`` will instead be a storage class specifier, as in C
1242 C++11 strongly typed enumerations
1243 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1245 Use ``__has_feature(cxx_strong_enums)`` or
1246 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
1247 typed, scoped enumerations is enabled.
1249 C++11 trailing return type
1250 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1252 Use ``__has_feature(cxx_trailing_return)`` or
1253 ``__has_extension(cxx_trailing_return)`` to determine if support for the
1254 alternate function declaration syntax with trailing return type is enabled.
1256 C++11 Unicode string literals
1257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1259 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
1260 string literals is enabled.
1262 C++11 unrestricted unions
1263 ^^^^^^^^^^^^^^^^^^^^^^^^^
1265 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
1266 unrestricted unions is enabled.
1268 C++11 user-defined literals
1269 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1271 Use ``__has_feature(cxx_user_literals)`` to determine if support for
1272 user-defined literals is enabled.
1274 C++11 variadic templates
1275 ^^^^^^^^^^^^^^^^^^^^^^^^
1277 Use ``__has_feature(cxx_variadic_templates)`` or
1278 ``__has_extension(cxx_variadic_templates)`` to determine if support for
1279 variadic templates is enabled.
1284 The features listed below are part of the C++14 standard. As a result, all
1285 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
1286 when compiling C++ code.
1288 C++14 binary literals
1289 ^^^^^^^^^^^^^^^^^^^^^
1291 Use ``__has_feature(cxx_binary_literals)`` or
1292 ``__has_extension(cxx_binary_literals)`` to determine whether
1293 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
1294 feature as an extension in all language modes.
1296 C++14 contextual conversions
1297 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1299 Use ``__has_feature(cxx_contextual_conversions)`` or
1300 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
1301 are used when performing an implicit conversion for an array bound in a
1302 *new-expression*, the operand of a *delete-expression*, an integral constant
1303 expression, or a condition in a ``switch`` statement.
1305 C++14 decltype(auto)
1306 ^^^^^^^^^^^^^^^^^^^^
1308 Use ``__has_feature(cxx_decltype_auto)`` or
1309 ``__has_extension(cxx_decltype_auto)`` to determine if support
1310 for the ``decltype(auto)`` placeholder type is enabled.
1312 C++14 default initializers for aggregates
1313 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1315 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
1316 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
1317 for default initializers in aggregate members is enabled.
1319 C++14 digit separators
1320 ^^^^^^^^^^^^^^^^^^^^^^
1322 Use ``__cpp_digit_separators`` to determine if support for digit separators
1323 using single quotes (for instance, ``10'000``) is enabled. At this time, there
1324 is no corresponding ``__has_feature`` name
1326 C++14 generalized lambda capture
1327 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1329 Use ``__has_feature(cxx_init_captures)`` or
1330 ``__has_extension(cxx_init_captures)`` to determine if support for
1331 lambda captures with explicit initializers is enabled
1332 (for instance, ``[n(0)] { return ++n; }``).
1334 C++14 generic lambdas
1335 ^^^^^^^^^^^^^^^^^^^^^
1337 Use ``__has_feature(cxx_generic_lambdas)`` or
1338 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
1339 (polymorphic) lambdas is enabled
1340 (for instance, ``[] (auto x) { return x + 1; }``).
1342 C++14 relaxed constexpr
1343 ^^^^^^^^^^^^^^^^^^^^^^^
1345 Use ``__has_feature(cxx_relaxed_constexpr)`` or
1346 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
1347 declarations, local variable modification, and control flow constructs
1348 are permitted in ``constexpr`` functions.
1350 C++14 return type deduction
1351 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1353 Use ``__has_feature(cxx_return_type_deduction)`` or
1354 ``__has_extension(cxx_return_type_deduction)`` to determine if support
1355 for return type deduction for functions (using ``auto`` as a return type)
1358 C++14 runtime-sized arrays
1359 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1361 Use ``__has_feature(cxx_runtime_array)`` or
1362 ``__has_extension(cxx_runtime_array)`` to determine if support
1363 for arrays of runtime bound (a restricted form of variable-length arrays)
1365 Clang's implementation of this feature is incomplete.
1367 C++14 variable templates
1368 ^^^^^^^^^^^^^^^^^^^^^^^^
1370 Use ``__has_feature(cxx_variable_templates)`` or
1371 ``__has_extension(cxx_variable_templates)`` to determine if support for
1372 templated variable declarations is enabled.
1377 The features listed below are part of the C11 standard. As a result, all these
1378 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
1379 compiling C code. Additionally, because these features are all
1380 backward-compatible, they are available as extensions in all language modes.
1382 C11 alignment specifiers
1383 ^^^^^^^^^^^^^^^^^^^^^^^^
1385 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1386 if support for alignment specifiers using ``_Alignas`` is enabled.
1388 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1389 if support for the ``_Alignof`` keyword is enabled.
1391 C11 atomic operations
1392 ^^^^^^^^^^^^^^^^^^^^^
1394 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1395 if support for atomic types using ``_Atomic`` is enabled. Clang also provides
1396 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
1397 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1398 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1401 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1402 will otherwise use its own. When using its own, implementations of the atomic
1403 operations are provided as macros. In the cases where C11 also requires a real
1404 function, this header provides only the declaration of that function (along
1405 with a shadowing macro implementation), and you must link to a library which
1406 provides a definition of the function if you use it instead of the macro.
1408 C11 generic selections
1409 ^^^^^^^^^^^^^^^^^^^^^^
1411 Use ``__has_feature(c_generic_selections)`` or
1412 ``__has_extension(c_generic_selections)`` to determine if support for generic
1413 selections is enabled.
1415 As an extension, the C11 generic selection expression is available in all
1416 languages supported by Clang. The syntax is the same as that given in the C11
1419 In C, type compatibility is decided according to the rules given in the
1420 appropriate standard, but in C++, which lacks the type compatibility rules used
1421 in C, types are considered compatible only if they are equivalent.
1423 Clang also supports an extended form of ``_Generic`` with a controlling type
1424 rather than a controlling expression. Unlike with a controlling expression, a
1425 controlling type argument does not undergo any conversions and thus is suitable
1426 for use when trying to match qualified types, incomplete types, or function
1427 types. Variable-length array types lack the necessary compile-time information
1428 to resolve which association they match with and thus are not allowed as a
1429 controlling type argument.
1431 Use ``__has_extension(c_generic_selection_with_controlling_type)`` to determine
1432 if support for this extension is enabled.
1434 C11 ``_Static_assert()``
1435 ^^^^^^^^^^^^^^^^^^^^^^^^
1437 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1438 to determine if support for compile-time assertions using ``_Static_assert`` is
1441 C11 ``_Thread_local``
1442 ^^^^^^^^^^^^^^^^^^^^^
1444 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1445 to determine if support for ``_Thread_local`` variables is enabled.
1450 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1451 For example, compiling code with ``-fmodules`` enables the use of Modules.
1453 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1455 Language Extensions Back-ported to Previous Standards
1456 =====================================================
1458 ====================================== ================================ ============= =============
1459 Feature Feature Test Macro Introduced In Backported To
1460 ====================================== ================================ ============= =============
1461 variadic templates __cpp_variadic_templates C++11 C++03
1462 Alias templates __cpp_alias_templates C++11 C++03
1463 Non-static data member initializers __cpp_nsdmi C++11 C++03
1464 Range-based ``for`` loop __cpp_range_based_for C++11 C++03
1465 RValue references __cpp_rvalue_references C++11 C++03
1466 Attributes __cpp_attributes C++11 C++03
1467 variable templates __cpp_variable_templates C++14 C++03
1468 Binary literals __cpp_binary_literals C++14 C++03
1469 Relaxed constexpr __cpp_constexpr C++14 C++11
1470 ``if constexpr`` __cpp_if_constexpr C++17 C++11
1471 fold expressions __cpp_fold_expressions C++17 C++03
1472 Lambda capture of \*this by value __cpp_capture_star_this C++17 C++11
1473 Attributes on enums __cpp_enumerator_attributes C++17 C++03
1474 Guaranteed copy elision __cpp_guaranteed_copy_elision C++17 C++03
1475 Hexadecimal floating literals __cpp_hex_float C++17 C++03
1476 ``inline`` variables __cpp_inline_variables C++17 C++03
1477 Attributes on namespaces __cpp_namespace_attributes C++17 C++11
1478 Structured bindings __cpp_structured_bindings C++17 C++03
1479 template template arguments __cpp_template_template_args C++17 C++03
1480 ``static operator[]`` __cpp_multidimensional_subscript C++20 C++03
1481 Designated initializers __cpp_designated_initializers C++20 C++03
1482 Conditional ``explicit`` __cpp_conditional_explicit C++20 C++03
1483 ``using enum`` __cpp_using_enum C++20 C++03
1484 ``if consteval`` __cpp_if_consteval C++23 C++20
1485 ``static operator()`` __cpp_static_call_operator C++23 C++03
1486 Attributes on Lambda-Expressions C++23 C++11
1487 -------------------------------------- -------------------------------- ------------- -------------
1488 Designated initializers (N494) C99 C89
1489 Array & element qualification (N2607) C23 C89
1490 Attributes (N2335) C23 C89
1491 ====================================== ================================ ============= =============
1493 Type Trait Primitives
1494 =====================
1496 Type trait primitives are special builtin constant expressions that can be used
1497 by the standard C++ library to facilitate or simplify the implementation of
1498 user-facing type traits in the <type_traits> header.
1500 They are not intended to be used directly by user code because they are
1501 implementation-defined and subject to change -- as such they're tied closely to
1502 the supported set of system headers, currently:
1506 * The Microsoft standard C++ library
1508 Clang supports the `GNU C++ type traits
1509 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1510 `Microsoft Visual C++ type traits
1511 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1512 as well as nearly all of the
1513 `Embarcadero C++ type traits
1514 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
1516 The following type trait primitives are supported by Clang. Those traits marked
1517 (C++) provide implementations for type traits specified by the C++ standard;
1518 ``__X(...)`` has the same semantics and constraints as the corresponding
1519 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
1521 * ``__array_rank(type)`` (Embarcadero):
1522 Returns the number of levels of array in the type ``type``:
1523 ``0`` if ``type`` is not an array type, and
1524 ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1525 * ``__array_extent(type, dim)`` (Embarcadero):
1526 The ``dim``'th array bound in the type ``type``, or ``0`` if
1527 ``dim >= __array_rank(type)``.
1528 * ``__can_pass_in_regs`` (C++)
1529 Returns whether a class can be passed in registers under the current
1530 ABI. This type can only be applied to unqualified class types.
1531 This is not a portable type trait.
1532 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1533 Deprecated, use ``__is_nothrow_assignable`` instead.
1534 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
1535 Deprecated, use ``__is_nothrow_assignable`` instead.
1536 * ``__has_nothrow_copy`` (GNU, Microsoft):
1537 Deprecated, use ``__is_nothrow_constructible`` instead.
1538 * ``__has_nothrow_constructor`` (GNU, Microsoft):
1539 Deprecated, use ``__is_nothrow_constructible`` instead.
1540 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1541 Deprecated, use ``__is_trivially_assignable`` instead.
1542 * ``__has_trivial_move_assign`` (GNU, Microsoft):
1543 Deprecated, use ``__is_trivially_assignable`` instead.
1544 * ``__has_trivial_copy`` (GNU, Microsoft):
1545 Deprecated, use ``__is_trivially_copyable`` instead.
1546 * ``__has_trivial_constructor`` (GNU, Microsoft):
1547 Deprecated, use ``__is_trivially_constructible`` instead.
1548 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
1549 Deprecated, use ``__is_trivially_constructible`` instead.
1550 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1551 Deprecated, use ``__is_trivially_destructible`` instead.
1552 * ``__has_unique_object_representations`` (C++, GNU)
1553 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1554 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1555 * ``__is_aggregate`` (C++, GNU, Microsoft)
1556 * ``__is_arithmetic`` (C++, Embarcadero)
1557 * ``__is_array`` (C++, Embarcadero)
1558 * ``__is_assignable`` (C++, MSVC 2015)
1559 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1560 * ``__is_bounded_array`` (C++, GNU, Microsoft, Embarcadero)
1561 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1562 * ``__is_complete_type(type)`` (Embarcadero):
1563 Return ``true`` if ``type`` is a complete type.
1564 Warning: this trait is dangerous because it can return different values at
1565 different points in the same program.
1566 * ``__is_compound`` (C++, Embarcadero)
1567 * ``__is_const`` (C++, Embarcadero)
1568 * ``__is_constructible`` (C++, MSVC 2013)
1569 * ``__is_convertible`` (C++, Embarcadero)
1570 * ``__is_convertible_to`` (Microsoft):
1571 Synonym for ``__is_convertible``.
1572 * ``__is_destructible`` (C++, MSVC 2013)
1573 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1574 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1575 * ``__is_final`` (C++, GNU, Microsoft)
1576 * ``__is_floating_point`` (C++, Embarcadero)
1577 * ``__is_function`` (C++, Embarcadero)
1578 * ``__is_fundamental`` (C++, Embarcadero)
1579 * ``__is_integral`` (C++, Embarcadero)
1580 * ``__is_interface_class`` (Microsoft):
1581 Returns ``false``, even for types defined with ``__interface``.
1582 * ``__is_literal`` (Clang):
1583 Synonym for ``__is_literal_type``.
1584 * ``__is_literal_type`` (C++, GNU, Microsoft):
1585 Note, the corresponding standard trait was deprecated in C++17
1586 and removed in C++20.
1587 * ``__is_lvalue_reference`` (C++, Embarcadero)
1588 * ``__is_member_object_pointer`` (C++, Embarcadero)
1589 * ``__is_member_function_pointer`` (C++, Embarcadero)
1590 * ``__is_member_pointer`` (C++, Embarcadero)
1591 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
1592 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
1593 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
1594 * ``__is_nullptr`` (C++, GNU, Microsoft, Embarcadero):
1595 Returns true for ``std::nullptr_t`` and false for everything else. The
1596 corresponding standard library feature is ``std::is_null_pointer``, but
1597 ``__is_null_pointer`` is already in use by some implementations.
1598 * ``__is_object`` (C++, Embarcadero)
1599 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1600 Note, the corresponding standard trait was deprecated in C++20.
1601 * ``__is_pointer`` (C++, Embarcadero)
1602 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1603 * ``__is_reference`` (C++, Embarcadero)
1604 * ``__is_referenceable`` (C++, GNU, Microsoft, Embarcadero):
1605 Returns true if a type is referenceable, and false otherwise. A referenceable
1606 type is a type that's either an object type, a reference type, or an unqualified
1608 * ``__is_rvalue_reference`` (C++, Embarcadero)
1609 * ``__is_same`` (C++, Embarcadero)
1610 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
1611 * ``__is_scalar`` (C++, Embarcadero)
1612 * ``__is_scoped_enum`` (C++, GNU, Microsoft, Embarcadero)
1613 * ``__is_sealed`` (Microsoft):
1614 Synonym for ``__is_final``.
1615 * ``__is_signed`` (C++, Embarcadero):
1616 Returns false for enumeration types, and returns true for floating-point
1617 types. Note, before Clang 10, returned true for enumeration types if the
1618 underlying type was signed, and returned false for floating-point types.
1619 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1620 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1621 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1622 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1623 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1624 * ``__is_trivially_destructible`` (C++, MSVC 2013)
1625 * ``__is_trivially_relocatable`` (Clang): Returns true if moving an object
1626 of the given type, and then destroying the source object, is known to be
1627 functionally equivalent to copying the underlying bytes and then dropping the
1628 source object on the floor. This is true of trivial types and types which
1629 were made trivially relocatable via the ``clang::trivial_abi`` attribute.
1630 * ``__is_trivially_equality_comparable`` (Clang): Returns true if comparing two
1631 objects of the provided type is known to be equivalent to comparing their
1632 value representations.
1633 * ``__is_unbounded_array`` (C++, GNU, Microsoft, Embarcadero)
1634 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1635 * ``__is_unsigned`` (C++, Embarcadero):
1636 Returns false for enumeration types. Note, before Clang 13, returned true for
1637 enumeration types if the underlying type was unsigned.
1638 * ``__is_void`` (C++, Embarcadero)
1639 * ``__is_volatile`` (C++, Embarcadero)
1640 * ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a
1641 reference of type ``T`` bound to an expression of type ``U`` would bind to a
1642 materialized temporary object. If ``T`` is not a reference type the result
1643 is false. Note this trait will also return false when the initialization of
1644 ``T`` from ``U`` is ill-formed.
1645 Deprecated, use ``__reference_constructs_from_temporary``.
1646 * ``__reference_constructs_from_temporary(T, U)`` (C++)
1647 Returns true if a reference ``T`` can be constructed from a temporary of type
1648 a non-cv-qualified ``U``.
1649 * ``__underlying_type`` (C++, GNU, Microsoft)
1651 In addition, the following expression traits are supported:
1653 * ``__is_lvalue_expr(e)`` (Embarcadero):
1654 Returns true if ``e`` is an lvalue expression.
1655 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1656 * ``__is_rvalue_expr(e)`` (Embarcadero):
1657 Returns true if ``e`` is a prvalue expression.
1658 Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1660 There are multiple ways to detect support for a type trait ``__X`` in the
1661 compiler, depending on the oldest version of Clang you wish to support.
1663 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1664 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1665 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1666 the following traits:
1668 * ``__has_nothrow_assign``
1669 * ``__has_nothrow_copy``
1670 * ``__has_nothrow_constructor``
1671 * ``__has_trivial_assign``
1672 * ``__has_trivial_copy``
1673 * ``__has_trivial_constructor``
1674 * ``__has_trivial_destructor``
1675 * ``__has_virtual_destructor``
1679 * ``__is_constructible``
1680 * ``__is_convertible_to``
1685 * ``__is_standard_layout``
1687 * ``__is_polymorphic``
1690 * ``__is_trivially_assignable``
1691 * ``__is_trivially_constructible``
1692 * ``__is_trivially_copyable``
1694 * ``__underlying_type``
1696 A simplistic usage example as might be seen in standard C++ headers follows:
1700 #if __has_builtin(__is_convertible_to)
1701 template<typename From, typename To>
1702 struct is_convertible_to {
1703 static const bool value = __is_convertible_to(From, To);
1706 // Emulate type trait for compatibility with other compilers.
1712 The syntax and high level language feature description is in
1713 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1714 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1716 Query for this feature with ``__has_extension(blocks)``.
1718 ASM Goto with Output Constraints
1719 ================================
1721 Outputs may be used along any branches from the ``asm goto`` whether the
1722 branches are taken or not.
1724 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1726 Prior to clang-16, the output may only be used safely when the indirect
1727 branches are not taken. Query for this difference with
1728 ``__has_extension(gnu_asm_goto_with_outputs_full)``.
1730 When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1731 outputs) with the `+r` constraint, there is a hidden input that's created
1732 before the label, so numeric references to operands must account for that.
1737 // %0 and %1 both refer to x
1738 // %l2 refers to err
1739 asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1745 This was changed to match GCC in clang-13; for better portability, symbolic
1746 references can be used instead of numeric references.
1751 asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1757 Objective-C Features
1758 ====================
1760 Related result types
1761 --------------------
1763 According to Cocoa conventions, Objective-C methods with certain names
1764 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1765 the receiving class's type. Such methods are said to have a "related result
1766 type", meaning that a message send to one of these methods will have the same
1767 static type as an instance of the receiver class. For example, given the
1770 .. code-block:: objc
1777 @interface NSArray : NSObject
1780 and this common initialization pattern
1782 .. code-block:: objc
1784 NSArray *array = [[NSArray alloc] init];
1786 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1787 ``alloc`` implicitly has a related result type. Similarly, the type of the
1788 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1789 related result type and its receiver is known to have the type ``NSArray *``.
1790 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1791 would have had type ``id``, as declared in the method signature.
1793 A method with a related result type can be declared by using the type
1794 ``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1795 that is only permitted in the result type of an Objective-C method, e.g.
1797 .. code-block:: objc
1800 + (instancetype)constructAnA;
1803 The related result type can also be inferred for some methods. To determine
1804 whether a method has an inferred related result type, the first word in the
1805 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1806 and the method will have a related result type if its return type is compatible
1807 with the type of its class and if:
1809 * the first word is "``alloc``" or "``new``", and the method is a class method,
1812 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1813 and the method is an instance method.
1815 If a method with a related result type is overridden by a subclass method, the
1816 subclass method must also return a type that is compatible with the subclass
1819 .. code-block:: objc
1821 @interface NSString : NSObject
1822 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1825 Related result types only affect the type of a message send or property access
1826 via the given method. In all other respects, a method with a related result
1827 type is treated the same way as method that returns ``id``.
1829 Use ``__has_feature(objc_instancetype)`` to determine whether the
1830 ``instancetype`` contextual keyword is available.
1832 Automatic reference counting
1833 ----------------------------
1835 Clang provides support for :doc:`automated reference counting
1836 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1837 for manual ``retain``/``release``/``autorelease`` message sends. There are three
1838 feature macros associated with automatic reference counting:
1839 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1840 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1841 automated reference counting also includes support for ``__weak`` pointers to
1842 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1843 are allowed to have fields that are pointers to Objective-C objects managed by
1844 automatic reference counting.
1851 Clang supports ARC-style weak and unsafe references in Objective-C even
1852 outside of ARC mode. Weak references must be explicitly enabled with
1853 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1854 to test whether they are enabled. Unsafe references are enabled
1855 unconditionally. ARC-style weak and unsafe references cannot be used
1856 when Objective-C garbage collection is enabled.
1858 Except as noted below, the language rules for the ``__weak`` and
1859 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1860 ``unsafe_unretained`` property attributes) are just as laid out
1861 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1862 In particular, note that some classes do not support forming weak
1863 references to their instances, and note that special care must be
1864 taken when storing weak references in memory where initialization
1865 and deinitialization are outside the responsibility of the compiler
1866 (such as in ``malloc``-ed memory).
1868 Loading from a ``__weak`` variable always implicitly retains the
1869 loaded value. In non-ARC modes, this retain is normally balanced
1870 by an implicit autorelease. This autorelease can be suppressed
1871 by performing the load in the receiver position of a ``-retain``
1872 message send (e.g. ``[weakReference retain]``); note that this performs
1873 only a single retain (the retain done when primitively loading from
1874 the weak reference).
1876 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1877 default behavior of variables and therefore is not needed. However,
1878 it does have an effect on the semantics of block captures: normally,
1879 copying a block which captures an Objective-C object or block pointer
1880 causes the captured pointer to be retained or copied, respectively,
1881 but that behavior is suppressed when the captured variable is qualified
1882 with ``__unsafe_unretained``.
1884 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1885 all non-ARC modes and was silently ignored outside of GC modes. It now
1886 means the ARC-style qualifier in all non-GC modes and is no longer
1887 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1888 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1889 in all non-GC Objective-C modes.
1891 .. _objc-fixed-enum:
1893 Enumerations with a fixed underlying type
1894 -----------------------------------------
1896 Clang provides support for C++11 enumerations with a fixed underlying type
1897 within Objective-C. For example, one can write an enumeration type as:
1901 typedef enum : unsigned char { Red, Green, Blue } Color;
1903 This specifies that the underlying type, which is used to store the enumeration
1904 value, is ``unsigned char``.
1906 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1907 underlying types is available in Objective-C.
1909 Interoperability with C++11 lambdas
1910 -----------------------------------
1912 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1913 permitting a lambda to be implicitly converted to a block pointer with the
1914 corresponding signature. For example, consider an API such as ``NSArray``'s
1915 array-sorting method:
1917 .. code-block:: objc
1919 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1921 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1922 (^)(id, id)``, and parameters of this type are generally provided with block
1923 literals as arguments. However, one can also use a C++11 lambda so long as it
1924 provides the same signature (in this case, accepting two parameters of type
1925 ``id`` and returning an ``NSComparisonResult``):
1927 .. code-block:: objc
1929 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1931 const NSStringCompareOptions comparisonOptions
1932 = NSCaseInsensitiveSearch | NSNumericSearch |
1933 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1934 NSLocale *currentLocale = [NSLocale currentLocale];
1936 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1937 NSRange string1Range = NSMakeRange(0, [s1 length]);
1938 return [s1 compare:s2 options:comparisonOptions
1939 range:string1Range locale:currentLocale];
1941 NSLog(@"sorted: %@", sorted);
1943 This code relies on an implicit conversion from the type of the lambda
1944 expression (an unnamed, local class type called the *closure type*) to the
1945 corresponding block pointer type. The conversion itself is expressed by a
1946 conversion operator in that closure type that produces a block pointer with the
1947 same signature as the lambda itself, e.g.,
1949 .. code-block:: objc
1951 operator NSComparisonResult (^)(id, id)() const;
1953 This conversion function returns a new block that simply forwards the two
1954 parameters to the lambda object (which it captures by copy), then returns the
1955 result. The returned block is first copied (with ``Block_copy``) and then
1956 autoreleased. As an optimization, if a lambda expression is immediately
1957 converted to a block pointer (as in the first example, above), then the block
1958 is not copied and autoreleased: rather, it is given the same lifetime as a
1959 block literal written at that point in the program, which avoids the overhead
1960 of copying a block to the heap in the common case.
1962 The conversion from a lambda to a block pointer is only available in
1963 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1964 management (autorelease).
1966 Object Literals and Subscripting
1967 --------------------------------
1969 Clang provides support for :doc:`Object Literals and Subscripting
1970 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1971 programming patterns, makes programs more concise, and improves the safety of
1972 container creation. There are several feature macros associated with object
1973 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1974 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1975 tests the availability of dictionary literals;
1976 ``__has_feature(objc_subscripting)`` tests the availability of object
1979 Objective-C Autosynthesis of Properties
1980 ---------------------------------------
1982 Clang provides support for autosynthesis of declared properties. Using this
1983 feature, clang provides default synthesis of those properties not declared
1984 @dynamic and not having user provided backing getter and setter methods.
1985 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1986 of this feature in version of clang being used.
1988 .. _langext-objc-retain-release:
1990 Objective-C retaining behavior attributes
1991 -----------------------------------------
1993 In Objective-C, functions and methods are generally assumed to follow the
1994 `Cocoa Memory Management
1995 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1996 conventions for ownership of object arguments and
1997 return values. However, there are exceptions, and so Clang provides attributes
1998 to allow these exceptions to be documented. This are used by ARC and the
1999 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
2000 better described using the ``objc_method_family`` attribute instead.
2002 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
2003 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
2004 ``cf_returns_not_retained`` attributes can be placed on methods and functions
2005 that return Objective-C or CoreFoundation objects. They are commonly placed at
2006 the end of a function prototype or method declaration:
2008 .. code-block:: objc
2010 id foo() __attribute__((ns_returns_retained));
2012 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
2014 The ``*_returns_retained`` attributes specify that the returned object has a +1
2015 retain count. The ``*_returns_not_retained`` attributes specify that the return
2016 object has a +0 retain count, even if the normal convention for its selector
2017 would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
2018 +0, but is guaranteed to live at least as long as the next flush of an
2021 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
2022 an parameter declaration; they specify that the argument is expected to have a
2023 +1 retain count, which will be balanced in some way by the function or method.
2024 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
2025 method; it specifies that the method expects its ``self`` parameter to have a
2026 +1 retain count, which it will balance in some way.
2028 .. code-block:: objc
2030 void foo(__attribute__((ns_consumed)) NSString *string);
2032 - (void) bar __attribute__((ns_consumes_self));
2033 - (void) baz:(id) __attribute__((ns_consumed)) x;
2035 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
2036 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
2038 Query for these features with ``__has_attribute(ns_consumed)``,
2039 ``__has_attribute(ns_returns_retained)``, etc.
2041 Objective-C @available
2042 ----------------------
2044 It is possible to use the newest SDK but still build a program that can run on
2045 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
2046 ``-miphoneos-version-min=``.
2048 Before LLVM 5.0, when calling a function that exists only in the OS that's
2049 newer than the target OS (as determined by the minimum deployment version),
2050 programmers had to carefully check if the function exists at runtime, using
2051 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
2052 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
2053 Objective-C methods. If such a check was missed, the program would compile
2054 fine, run fine on newer systems, but crash on older systems.
2056 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
2057 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
2058 with the new ``@available()`` keyword to assist with this issue.
2059 When a method that's introduced in the OS newer than the target OS is called, a
2060 -Wunguarded-availability warning is emitted if that call is not guarded:
2062 .. code-block:: objc
2064 void my_fun(NSSomeClass* var) {
2065 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
2066 // built with -mmacosx-version-min=10.11, then this unconditional call
2067 // will emit a -Wunguarded-availability warning:
2068 [var fancyNewMethod];
2071 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
2072 ``if(@available())``:
2074 .. code-block:: objc
2076 void my_fun(NSSomeClass* var) {
2077 if (@available(macOS 10.12, *)) {
2078 [var fancyNewMethod];
2080 // Put fallback behavior for old macOS versions (and for non-mac
2085 The ``*`` is required and means that platforms not explicitly listed will take
2086 the true branch, and the compiler will emit ``-Wunguarded-availability``
2087 warnings for unlisted platforms based on those platform's deployment target.
2088 More than one platform can be listed in ``@available()``:
2090 .. code-block:: objc
2092 void my_fun(NSSomeClass* var) {
2093 if (@available(macOS 10.12, iOS 10, *)) {
2094 [var fancyNewMethod];
2098 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
2099 on 10.12, then add an `availability attribute
2100 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
2101 which will also suppress the warning and require that calls to my_fun() are
2104 .. code-block:: objc
2106 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
2107 [var fancyNewMethod]; // Now ok.
2110 ``@available()`` is only available in Objective-C code. To use the feature
2111 in C and C++ code, use the ``__builtin_available()`` spelling instead.
2113 If existing code uses null checks or ``-respondsToSelector:``, it should
2114 be changed to use ``@available()`` (or ``__builtin_available``) instead.
2116 ``-Wunguarded-availability`` is disabled by default, but
2117 ``-Wunguarded-availability-new``, which only emits this warning for APIs
2118 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
2119 tvOS >= 11, is enabled by default.
2121 .. _langext-overloading:
2123 Objective-C++ ABI: protocol-qualifier mangling of parameters
2124 ------------------------------------------------------------
2126 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
2127 type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such
2128 parameters to be differentiated from those with the regular unqualified ``id``
2131 This was a non-backward compatible mangling change to the ABI. This change
2132 allows proper overloading, and also prevents mangling conflicts with template
2133 parameters of protocol-qualified type.
2135 Query the presence of this new mangling with
2136 ``__has_feature(objc_protocol_qualifier_mangling)``.
2138 Initializer lists for complex numbers in C
2139 ==========================================
2141 clang supports an extension which allows the following in C:
2146 #include <complex.h>
2147 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
2149 This construct is useful because there is no way to separately initialize the
2150 real and imaginary parts of a complex variable in standard C, given that clang
2151 does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
2152 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
2153 in static initializers.)
2155 Note that this extension does not allow eliding the braces; the meaning of the
2156 following two lines is different:
2160 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
2161 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
2163 This extension also works in C++ mode, as far as that goes, but does not apply
2164 to the C++ ``std::complex``. (In C++11, list initialization allows the same
2165 syntax to be used with ``std::complex`` with the same meaning.)
2167 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2168 construct a complex number from the given real and imaginary components.
2173 Clang supports internal OpenCL extensions documented below.
2175 ``__cl_clang_bitfields``
2176 --------------------------------
2178 With this extension it is possible to enable bitfields in structs
2179 or unions using the OpenCL extension pragma mechanism detailed in
2180 `the OpenCL Extension Specification, section 1.2
2181 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2183 Use of bitfields in OpenCL kernels can result in reduced portability as struct
2184 layout is not guaranteed to be consistent when compiled by different compilers.
2185 If structs with bitfields are used as kernel function parameters, it can result
2186 in incorrect functionality when the layout is different between the host and
2193 #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2194 struct with_bitfield {
2195 unsigned int i : 5; // compiled - no diagnostic generated
2198 #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2199 struct without_bitfield {
2200 unsigned int i : 5; // error - bitfields are not supported
2203 ``__cl_clang_function_pointers``
2204 --------------------------------
2206 With this extension it is possible to enable various language features that
2207 are relying on function pointers using regular OpenCL extension pragma
2208 mechanism detailed in `the OpenCL Extension Specification,
2210 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2212 In C++ for OpenCL this also enables:
2214 - Use of member function pointers;
2216 - Unrestricted use of references to functions;
2218 - Virtual member functions.
2220 Such functionality is not conformant and does not guarantee to compile
2221 correctly in any circumstances. It can be used if:
2223 - the kernel source does not contain call expressions to (member-) function
2224 pointers, or virtual functions. For example this extension can be used in
2225 metaprogramming algorithms to be able to specify/detect types generically.
2227 - the generated kernel binary does not contain indirect calls because they
2228 are eliminated using compiler optimizations e.g. devirtualization.
2230 - the selected target supports the function pointer like functionality e.g.
2237 #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2240 void (*fp)(); // compiled - no diagnostic generated
2243 #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2246 void (*fp)(); // error - pointers to function are not allowed
2249 ``__cl_clang_variadic_functions``
2250 ---------------------------------
2252 With this extension it is possible to enable variadic arguments in functions
2253 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2254 Extension Specification, section 1.2
2255 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2257 This is not conformant behavior and it can only be used portably when the
2258 functions with variadic prototypes do not get generated in binary e.g. the
2259 variadic prototype is used to specify a function type with any number of
2260 arguments in metaprogramming algorithms in C++ for OpenCL.
2262 This extensions can also be used when the kernel code is intended for targets
2263 supporting the variadic arguments e.g. majority of CPU targets.
2269 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2270 void foo(int a, ...); // compiled - no diagnostic generated
2272 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2273 void bar(int a, ...); // error - variadic prototype is not allowed
2275 ``__cl_clang_non_portable_kernel_param_types``
2276 ----------------------------------------------
2278 With this extension it is possible to enable the use of some restricted types
2279 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2280 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2281 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2282 detailed in `the OpenCL Extension Specification, section 1.2
2283 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2285 This is not a conformant behavior and it can only be used when the
2286 kernel arguments are not accessed on the host side or the data layout/size
2287 between the host and device is known to be compatible.
2293 // Plain Old Data type.
2299 // Not POD type because of the constructor.
2300 // Standard layout type because there is only one access control.
2304 OnlySL() : a(0), b(0) {}
2307 // Not standard layout type because of two different access controls.
2314 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2315 kernel void kernel_main(
2322 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2324 Remove address space builtin function
2325 -------------------------------------
2327 ``__remove_address_space`` allows to derive types in C++ for OpenCL
2328 that have address space qualifiers removed. This utility only affects
2329 address space qualifiers, therefore, other type qualifiers such as
2330 ``const`` or ``volatile`` remain unchanged.
2336 template<typename T>
2338 T var1; // error - local function variable with global address space
2339 __private T var2; // error - conflicting address space qualifiers
2340 __private __remove_address_space<T>::type var3; // var3 is __private int
2348 Legacy 1.x atomics with generic address space
2349 ---------------------------------------------
2351 Clang allows use of atomic functions from the OpenCL 1.x standards
2352 with the generic address space pointer in C++ for OpenCL mode.
2354 This is a non-portable feature and might not be supported by all
2361 void foo(__generic volatile unsigned int* a) {
2365 WebAssembly Features
2366 ====================
2368 Clang supports the WebAssembly features documented below. For further
2369 information related to the semantics of the builtins, please refer to the `WebAssembly Specification <https://webassembly.github.io/spec/core/>`_.
2370 In this section, when we refer to reference types, we are referring to
2371 WebAssembly reference types, not C++ reference types unless stated
2374 ``__builtin_wasm_table_set``
2375 ----------------------------
2377 This builtin function stores a value in a WebAssembly table.
2378 It takes three arguments.
2379 The first argument is the table to store a value into, the second
2380 argument is the index to which to store the value into, and the
2381 third argument is a value of reference type to store in the table.
2386 static __externref_t table[0];
2387 extern __externref_t JSObj;
2389 void store(int index) {
2390 __builtin_wasm_table_set(table, index, JSObj);
2393 ``__builtin_wasm_table_get``
2394 ----------------------------
2396 This builtin function is the counterpart to ``__builtin_wasm_table_set``
2397 and loads a value from a WebAssembly table of reference typed values.
2398 It takes 2 arguments.
2399 The first argument is a table of reference typed values and the
2400 second argument is an index from which to load the value. It returns
2401 the loaded reference typed value.
2405 static __externref_t table[0];
2407 __externref_t load(int index) {
2408 __externref_t Obj = __builtin_wasm_table_get(table, index);
2412 ``__builtin_wasm_table_size``
2413 -----------------------------
2415 This builtin function returns the size of the WebAssembly table.
2416 Takes the table as an argument and returns an unsigned integer (``size_t``)
2417 with the current table size.
2421 typedef void (*__funcref funcref_t)();
2422 static __funcref table[0];
2425 return __builtin_wasm_table_size(table);
2428 ``__builtin_wasm_table_grow``
2429 -----------------------------
2431 This builtin function grows the WebAssembly table by a certain amount.
2432 Currently, as all WebAssembly tables created in C/C++ are zero-sized,
2433 this always needs to be called to grow the table.
2435 It takes three arguments. The first argument is the WebAssembly table
2436 to grow. The second argument is the reference typed value to store in
2437 the new table entries (the initialization value), and the third argument
2438 is the amount to grow the table by. It returns the previous table size
2439 or -1. It will return -1 if not enough space could be allocated.
2443 typedef void (*__funcref funcref_t)();
2444 static __funcref table[0];
2446 // grow returns the new table size or -1 on error.
2447 int grow(__funcref fn, int delta) {
2448 int prevSize = __builtin_wasm_table_grow(table, fn, delta);
2451 return prevSize + delta;
2454 ``__builtin_wasm_table_fill``
2455 -----------------------------
2457 This builtin function sets all the entries of a WebAssembly table to a given
2458 reference typed value. It takes four arguments. The first argument is
2459 the WebAssembly table, the second argument is the index that starts the
2460 range, the third argument is the value to set in the new entries, and
2461 the fourth and the last argument is the size of the range. It returns
2466 static __externref_t table[0];
2468 // resets a table by setting all of its entries to a given value.
2469 void reset(__externref_t Obj) {
2470 int Size = __builtin_wasm_table_size(table);
2471 __builtin_wasm_table_fill(table, 0, Obj, Size);
2474 ``__builtin_wasm_table_copy``
2475 -----------------------------
2477 This builtin function copies elements from a source WebAssembly table
2478 to a possibly overlapping destination region. It takes five arguments.
2479 The first argument is the destination WebAssembly table, and the second
2480 argument is the source WebAssembly table. The third argument is the
2481 destination index from where the copy starts, the fourth argument is the
2482 source index from there the copy starts, and the fifth and last argument
2483 is the number of elements to copy. It returns nothing.
2487 static __externref_t tableSrc[0];
2488 static __externref_t tableDst[0];
2490 // Copy nelem elements from [src, src + nelem - 1] in tableSrc to
2491 // [dst, dst + nelem - 1] in tableDst
2492 void copy(int dst, int src, int nelem) {
2493 __builtin_wasm_table_copy(tableDst, tableSrc, dst, src, nelem);
2500 Clang supports a number of builtin library functions with the same syntax as
2501 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
2502 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
2503 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to
2504 the GCC builtins, Clang supports a number of builtins that GCC does not, which
2507 Please note that Clang does not and will not support all of the GCC builtins
2508 for vector operations. Instead of using builtins, you should use the functions
2509 defined in target-specific header files like ``<xmmintrin.h>``, which define
2510 portable wrappers for these. Many of the Clang versions of these functions are
2511 implemented directly in terms of :ref:`extended vector support
2512 <langext-vectors>` instead of builtins, in order to reduce the number of
2513 builtins that we need to implement.
2515 ``__builtin_alloca``
2516 --------------------
2518 ``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2519 is automatically freed upon function termination.
2525 __builtin_alloca(size_t n)
2531 void init(float* data, size_t nbelems);
2532 void process(float* data, size_t nbelems);
2534 auto mem = (float*)__builtin_alloca(n * sizeof(float));
2537 /* mem is automatically freed at this point */
2542 ``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2543 on the stack. This amount is subject to stack allocation limits.
2545 Query for this feature with ``__has_builtin(__builtin_alloca)``.
2547 ``__builtin_alloca_with_align``
2548 -------------------------------
2550 ``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2551 stack while controlling its alignment. Memory is automatically freed upon
2552 function termination.
2559 __builtin_alloca_with_align(size_t n, size_t align)
2565 void init(float* data, size_t nbelems);
2566 void process(float* data, size_t nbelems);
2568 auto mem = (float*)__builtin_alloca_with_align(
2570 CHAR_BIT * alignof(float));
2573 /* mem is automatically freed at this point */
2578 ``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2579 on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2580 argument whose value is the alignment constraint, as a power of 2 in *bits*.
2582 Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2584 .. _langext-__builtin_assume:
2586 ``__builtin_assume``
2587 --------------------
2589 ``__builtin_assume`` is used to provide the optimizer with a boolean
2590 invariant that is defined to be true.
2596 __builtin_assume(bool)
2603 __builtin_assume(x != 0);
2604 // The optimizer may short-circuit this check using the invariant.
2606 return do_something();
2607 return do_something_else();
2612 The boolean argument to this function is defined to be true. The optimizer may
2613 analyze the form of the expression provided as the argument and deduce from
2614 that information used to optimize the program. If the condition is violated
2615 during execution, the behavior is undefined. The argument itself is never
2616 evaluated, so any side effects of the expression will be discarded.
2618 Query for this feature with ``__has_builtin(__builtin_assume)``.
2620 .. _langext-__builtin_assume_separate_storage:
2622 ``__builtin_assume_separate_storage``
2623 -------------------------------------
2625 ``__builtin_assume_separate_storage`` is used to provide the optimizer with the
2626 knowledge that its two arguments point to separately allocated objects.
2632 __builtin_assume_separate_storage(const volatile void *, const volatile void *)
2638 int foo(int *x, int *y) {
2639 __builtin_assume_separate_storage(x, y);
2642 // The optimizer may optimize this to return 0 without reloading from *x.
2648 The arguments to this function are assumed to point into separately allocated
2649 storage (either different variable definitions or different dynamic storage
2650 allocations). The optimizer may use this fact to aid in alias analysis. If the
2651 arguments point into the same storage, the behavior is undefined. Note that the
2652 definition of "storage" here refers to the outermost enclosing allocation of any
2653 particular object (so for example, it's never correct to call this function
2654 passing the addresses of fields in the same struct, elements of the same array,
2657 Query for this feature with ``__has_builtin(__builtin_assume_separate_storage)``.
2660 ``__builtin_offsetof``
2661 ----------------------
2663 ``__builtin_offsetof`` is used to implement the ``offsetof`` macro, which
2664 calculates the offset (in bytes) to a given member of the given type.
2670 __builtin_offsetof(type-name, member-designator)
2684 const int offset_to_i = __builtin_offsetof(struct S, i);
2685 const int ext1 = __builtin_offsetof(struct U { int i; }, i); // C extension
2686 const int offset_to_subobject = __builtin_offsetof(struct S, t.f[1]);
2690 This builtin is usable in an integer constant expression which returns a value
2691 of type ``size_t``. The value returned is the offset in bytes to the subobject
2692 designated by the member-designator from the beginning of an object of type
2693 ``type-name``. Clang extends the required standard functionality in the
2696 * In C language modes, the first argument may be the definition of a new type.
2697 Any type declared this way is scoped to the nearest scope containing the call
2700 Query for this feature with ``__has_builtin(__builtin_offsetof)``.
2702 ``__builtin_call_with_static_chain``
2703 ------------------------------------
2705 ``__builtin_call_with_static_chain`` is used to perform a static call while
2706 setting updating the static chain register.
2712 T __builtin_call_with_static_chain(T expr, void* ptr)
2718 auto v = __builtin_call_with_static_chain(foo(3), foo);
2722 This builtin returns ``expr`` after checking that ``expr`` is a non-member
2723 static call expression. The call to that expression is made while using ``ptr``
2724 as a function pointer stored in a dedicated register to implement *static chain*
2725 calling convention, as used by some language to implement closures or nested
2728 Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2730 ``__builtin_readcyclecounter``
2731 ------------------------------
2733 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2734 a similar low-latency, high-accuracy clock) on those targets that support it.
2740 __builtin_readcyclecounter()
2746 unsigned long long t0 = __builtin_readcyclecounter();
2748 unsigned long long t1 = __builtin_readcyclecounter();
2749 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2753 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2754 which may be either global or process/thread-specific depending on the target.
2755 As the backing counters often overflow quickly (on the order of seconds) this
2756 should only be used for timing small intervals. When not supported by the
2757 target, the return value is always zero. This builtin takes no arguments and
2758 produces an unsigned long long result.
2760 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2761 that even if present, its use may depend on run-time privilege or other OS
2764 ``__builtin_dump_struct``
2765 -------------------------
2771 __builtin_dump_struct(&some_struct, some_printf_func, args...);
2785 void func(struct S *s) {
2786 __builtin_dump_struct(s, printf);
2791 .. code-block:: none
2805 struct T { int a, b; };
2806 constexpr void constexpr_sprintf(std::string &out, const char *format,
2810 constexpr std::string dump_struct(auto &x) {
2812 __builtin_dump_struct(&x, constexpr_sprintf, s);
2815 static_assert(dump_struct(T{1, 2}) == R"(struct T {
2823 The ``__builtin_dump_struct`` function is used to print the fields of a simple
2824 structure and their values for debugging purposes. The first argument of the
2825 builtin should be a pointer to a complete record type to dump. The second argument ``f``
2826 should be some callable expression, and can be a function object or an overload
2827 set. The builtin calls ``f``, passing any further arguments ``args...``
2828 followed by a ``printf``-compatible format string and the corresponding
2829 arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2830 evaluated once per call. In C++, ``f`` may be a template or overload set and
2831 resolve to different functions for each call.
2833 In the format string, a suitable format specifier will be used for builtin
2834 types that Clang knows how to format. This includes standard builtin types, as
2835 well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2836 char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2837 that Clang doesn't know how to format, and the corresponding argument will be a
2838 pointer to the field. This allows a C++ templated formatting function to detect
2839 this case and implement custom formatting. A ``*`` will otherwise not precede a
2842 This builtin does not return a value.
2844 This builtin can be used in constant expressions.
2846 Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2848 .. _langext-__builtin_shufflevector:
2850 ``__builtin_shufflevector``
2851 ---------------------------
2853 ``__builtin_shufflevector`` is used to express generic vector
2854 permutation/shuffle/swizzle operations. This builtin is also very important
2855 for the implementation of various target-specific header files like
2862 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2868 // identity operation - return 4-element vector v1.
2869 __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2871 // "Splat" element 0 of V1 into a 4-element result.
2872 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2874 // Reverse 4-element vector V1.
2875 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2877 // Concatenate every other element of 4-element vectors V1 and V2.
2878 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2880 // Concatenate every other element of 8-element vectors V1 and V2.
2881 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2883 // Shuffle v1 with some elements being undefined
2884 __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2888 The first two arguments to ``__builtin_shufflevector`` are vectors that have
2889 the same element type. The remaining arguments are a list of integers that
2890 specify the elements indices of the first two vectors that should be extracted
2891 and returned in a new vector. These element indices are numbered sequentially
2892 starting with the first vector, continuing into the second vector. Thus, if
2893 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
2894 ``vec2``. An index of -1 can be used to indicate that the corresponding element
2895 in the returned vector is a don't care and can be optimized by the backend.
2897 The result of ``__builtin_shufflevector`` is a vector with the same element
2898 type as ``vec1``/``vec2`` but that has an element count equal to the number of
2901 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2903 .. _langext-__builtin_convertvector:
2905 ``__builtin_convertvector``
2906 ---------------------------
2908 ``__builtin_convertvector`` is used to express generic vector
2909 type-conversion operations. The input vector and the output vector
2910 type must have the same number of elements.
2916 __builtin_convertvector(src_vec, dst_vec_type)
2922 typedef double vector4double __attribute__((__vector_size__(32)));
2923 typedef float vector4float __attribute__((__vector_size__(16)));
2924 typedef short vector4short __attribute__((__vector_size__(8)));
2925 vector4float vf; vector4short vs;
2927 // convert from a vector of 4 floats to a vector of 4 doubles.
2928 __builtin_convertvector(vf, vector4double)
2930 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2932 // convert from a vector of 4 shorts to a vector of 4 floats.
2933 __builtin_convertvector(vs, vector4float)
2935 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2939 The first argument to ``__builtin_convertvector`` is a vector, and the second
2940 argument is a vector type with the same number of elements as the first
2943 The result of ``__builtin_convertvector`` is a vector with the same element
2944 type as the second argument, with a value defined in terms of the action of a
2945 C-style cast applied to each element of the first argument.
2947 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2949 ``__builtin_bitreverse``
2950 ------------------------
2952 * ``__builtin_bitreverse8``
2953 * ``__builtin_bitreverse16``
2954 * ``__builtin_bitreverse32``
2955 * ``__builtin_bitreverse64``
2961 __builtin_bitreverse32(x)
2967 uint8_t rev_x = __builtin_bitreverse8(x);
2968 uint16_t rev_x = __builtin_bitreverse16(x);
2969 uint32_t rev_y = __builtin_bitreverse32(y);
2970 uint64_t rev_z = __builtin_bitreverse64(z);
2974 The '``__builtin_bitreverse``' family of builtins is used to reverse
2975 the bitpattern of an integer value; for example ``0b10110110`` becomes
2976 ``0b01101101``. These builtins can be used within constant expressions.
2978 ``__builtin_rotateleft``
2979 ------------------------
2981 * ``__builtin_rotateleft8``
2982 * ``__builtin_rotateleft16``
2983 * ``__builtin_rotateleft32``
2984 * ``__builtin_rotateleft64``
2990 __builtin_rotateleft32(x, y)
2996 uint8_t rot_x = __builtin_rotateleft8(x, y);
2997 uint16_t rot_x = __builtin_rotateleft16(x, y);
2998 uint32_t rot_x = __builtin_rotateleft32(x, y);
2999 uint64_t rot_x = __builtin_rotateleft64(x, y);
3003 The '``__builtin_rotateleft``' family of builtins is used to rotate
3004 the bits in the first argument by the amount in the second argument.
3005 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
3006 The shift value is treated as an unsigned amount modulo the size of
3007 the arguments. Both arguments and the result have the bitwidth specified
3008 by the name of the builtin. These builtins can be used within constant
3011 ``__builtin_rotateright``
3012 -------------------------
3014 * ``__builtin_rotateright8``
3015 * ``__builtin_rotateright16``
3016 * ``__builtin_rotateright32``
3017 * ``__builtin_rotateright64``
3023 __builtin_rotateright32(x, y)
3029 uint8_t rot_x = __builtin_rotateright8(x, y);
3030 uint16_t rot_x = __builtin_rotateright16(x, y);
3031 uint32_t rot_x = __builtin_rotateright32(x, y);
3032 uint64_t rot_x = __builtin_rotateright64(x, y);
3036 The '``__builtin_rotateright``' family of builtins is used to rotate
3037 the bits in the first argument by the amount in the second argument.
3038 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
3039 The shift value is treated as an unsigned amount modulo the size of
3040 the arguments. Both arguments and the result have the bitwidth specified
3041 by the name of the builtin. These builtins can be used within constant
3044 ``__builtin_unreachable``
3045 -------------------------
3047 ``__builtin_unreachable`` is used to indicate that a specific point in the
3048 program cannot be reached, even if the compiler might otherwise think it can.
3049 This is useful to improve optimization and eliminates certain warnings. For
3050 example, without the ``__builtin_unreachable`` in the example below, the
3051 compiler assumes that the inline asm can fall through and prints a "function
3052 declared '``noreturn``' should not return" warning.
3058 __builtin_unreachable()
3064 void myabort(void) __attribute__((noreturn));
3065 void myabort(void) {
3067 __builtin_unreachable();
3072 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
3073 Since it has undefined behavior, it is a statement that it is never reached and
3074 the optimizer can take advantage of this to produce better code. This builtin
3075 takes no arguments and produces a void result.
3077 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
3079 ``__builtin_unpredictable``
3080 ---------------------------
3082 ``__builtin_unpredictable`` is used to indicate that a branch condition is
3083 unpredictable by hardware mechanisms such as branch prediction logic.
3089 __builtin_unpredictable(long long)
3095 if (__builtin_unpredictable(x > 0)) {
3101 The ``__builtin_unpredictable()`` builtin is expected to be used with control
3102 flow conditions such as in ``if`` and ``switch`` statements.
3104 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
3107 ``__builtin_expect``
3108 --------------------
3110 ``__builtin_expect`` is used to indicate that the value of an expression is
3111 anticipated to be the same as a statically known result.
3117 long __builtin_expect(long expr, long val)
3123 if (__builtin_expect(x, 0)) {
3129 The ``__builtin_expect()`` builtin is typically used with control flow
3130 conditions such as in ``if`` and ``switch`` statements to help branch
3131 prediction. It means that its first argument ``expr`` is expected to take the
3132 value of its second argument ``val``. It always returns ``expr``.
3134 Query for this feature with ``__has_builtin(__builtin_expect)``.
3136 ``__builtin_expect_with_probability``
3137 -------------------------------------
3139 ``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
3140 takes a probability as third argument.
3146 long __builtin_expect_with_probability(long expr, long val, double p)
3152 if (__builtin_expect_with_probability(x, 0, .3)) {
3158 The ``__builtin_expect_with_probability()`` builtin is typically used with
3159 control flow conditions such as in ``if`` and ``switch`` statements to help
3160 branch prediction. It means that its first argument ``expr`` is expected to take
3161 the value of its second argument ``val`` with probability ``p``. ``p`` must be
3162 within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
3164 Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
3166 ``__builtin_prefetch``
3167 ----------------------
3169 ``__builtin_prefetch`` is used to communicate with the cache handler to bring
3170 data into the cache before it gets used.
3176 void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
3182 __builtin_prefetch(a + i);
3186 The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
3187 avoid cache misses when the developer has a good understanding of which data
3188 are going to be used next. ``addr`` is the address that needs to be brought into
3189 the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
3190 for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
3191 indicates the expected persistence of data in cache, from ``0`` which means that
3192 data can be discarded from cache after its next use to ``3`` which means that
3193 data is going to be reused a lot once in cache. ``1`` and ``2`` provide
3194 intermediate behavior between these two extremes.
3196 Query for this feature with ``__has_builtin(__builtin_prefetch)``.
3201 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
3207 type __sync_swap(type *ptr, type value, ...)
3213 int old_value = __sync_swap(&value, new_value);
3217 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
3218 atomic intrinsics to allow code to atomically swap the current value with the
3219 new value. More importantly, it helps developers write more efficient and
3220 correct code by avoiding expensive loops around
3221 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
3222 implementation details of ``__sync_lock_test_and_set()``. The
3223 ``__sync_swap()`` builtin is a full barrier.
3225 ``__builtin_addressof``
3226 -----------------------
3228 ``__builtin_addressof`` performs the functionality of the built-in ``&``
3229 operator, ignoring any ``operator&`` overload. This is useful in constant
3230 expressions in C++11, where there is no other way to take the address of an
3231 object that overloads ``operator&``. Clang automatically adds
3232 ``[[clang::lifetimebound]]`` to the parameter of ``__builtin_addressof``.
3238 template<typename T> constexpr T *addressof(T &value) {
3239 return __builtin_addressof(value);
3242 ``__builtin_function_start``
3243 -----------------------------
3245 ``__builtin_function_start`` returns the address of a function body.
3251 void *__builtin_function_start(function)
3258 void *p = __builtin_function_start(a);
3269 void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
3270 void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
3274 The ``__builtin_function_start`` builtin accepts an argument that can be
3275 constant-evaluated to a function, and returns the address of the function
3276 body. This builtin is not supported on all targets.
3278 The returned pointer may differ from the normally taken function address
3279 and is not safe to call. For example, with ``-fsanitize=cfi``, taking a
3280 function address produces a callable pointer to a CFI jump table, while
3281 ``__builtin_function_start`` returns an address that fails
3282 :doc:`cfi-icall<ControlFlowIntegrity>` checks.
3284 ``__builtin_operator_new`` and ``__builtin_operator_delete``
3285 ------------------------------------------------------------
3287 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
3288 ``::operator new(args)``, except that it allows certain optimizations
3289 that the C++ standard does not permit for a direct function call to
3290 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
3291 merging allocations), and that the call is required to resolve to a
3292 `replaceable global allocation function
3293 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
3295 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
3296 ``::operator delete(args)``, except that it permits optimizations
3297 and that the call is required to resolve to a
3298 `replaceable global deallocation function
3299 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
3301 These builtins are intended for use in the implementation of ``std::allocator``
3302 and other similar allocation libraries, and are only available in C++.
3304 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
3305 ``__has_builtin(__builtin_operator_delete)``:
3307 * If the value is at least ``201802L``, the builtins behave as described above.
3309 * If the value is non-zero, the builtins may not support calling arbitrary
3310 replaceable global (de)allocation functions, but do support calling at least
3311 ``::operator new(size_t)`` and ``::operator delete(void*)``.
3313 ``__builtin_preserve_access_index``
3314 -----------------------------------
3316 ``__builtin_preserve_access_index`` specifies a code section where
3317 array subscript access and structure/union member access are relocatable
3318 under bpf compile-once run-everywhere framework. Debuginfo (typically
3319 with ``-g``) is needed, otherwise, the compiler will exit with an error.
3320 The return type for the intrinsic is the same as the type of the
3327 type __builtin_preserve_access_index(type arg)
3342 int *pb =__builtin_preserve_access_index(&v->c[3].b);
3343 __builtin_preserve_access_index(v->j);
3345 ``__builtin_debugtrap``
3346 -----------------------
3348 ``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
3354 __builtin_debugtrap()
3358 ``__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.
3360 Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
3366 ``__builtin_trap`` causes the program to stop its execution abnormally.
3376 ``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
3378 Query for this feature with ``__has_builtin(__builtin_trap)``.
3380 ``__builtin_nondeterministic_value``
3381 ------------------------------------
3383 ``__builtin_nondeterministic_value`` returns a valid nondeterministic value of the same type as the provided argument.
3389 type __builtin_nondeterministic_value(type x)
3395 int x = __builtin_nondeterministic_value(x);
3396 float y = __builtin_nondeterministic_value(y);
3397 __m256i a = __builtin_nondeterministic_value(a);
3401 Each call to ``__builtin_nondeterministic_value`` returns a valid value of the type given by the argument.
3403 The types currently supported are: integer types, floating-point types, vector types.
3405 Query for this feature with ``__has_builtin(__builtin_nondeterministic_value)``.
3407 ``__builtin_sycl_unique_stable_name``
3408 -------------------------------------
3410 ``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3411 produces a string literal containing a unique name for the type that is stable
3412 across split compilations, mainly to support SYCL/Data Parallel C++ language.
3414 In cases where the split compilation needs to share a unique token for a type
3415 across the boundary (such as in an offloading situation), this name can be used
3416 for lookup purposes, such as in the SYCL Integration Header.
3418 The value of this builtin is computed entirely at compile time, so it can be
3419 used in constant expressions. This value encodes lambda functions based on a
3420 stable numbering order in which they appear in their local declaration contexts.
3421 Once this builtin is evaluated in a constexpr context, it is erroneous to use
3422 it in an instantiation which changes its value.
3424 In order to produce the unique name, the current implementation of the builtin
3425 uses Itanium mangling even if the host compilation uses a different name
3426 mangling scheme at runtime. The mangler marks all the lambdas required to name
3427 the SYCL kernel and emits a stable local ordering of the respective lambdas.
3428 The resulting pattern is demanglable. When non-lambda types are passed to the
3429 builtin, the mangler emits their usual pattern without any special treatment.
3435 // Computes a unique stable name for the given type.
3436 constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3438 Multiprecision Arithmetic Builtins
3439 ----------------------------------
3441 Clang provides a set of builtins which expose multiprecision arithmetic in a
3442 manner amenable to C. They all have the following form:
3446 unsigned x = ..., y = ..., carryin = ..., carryout;
3447 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3449 Thus one can form a multiprecision addition chain in the following manner:
3453 unsigned *x, *y, *z, carryin=0, carryout;
3454 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3456 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3458 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3460 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3462 The complete list of builtins are:
3466 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3467 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3468 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3469 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3470 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3471 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3472 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3473 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3474 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3475 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3477 Checked Arithmetic Builtins
3478 ---------------------------
3480 Clang provides a set of builtins that implement checked arithmetic for security
3481 critical applications in a manner that is fast and easily expressible in C. As
3482 an example of their usage:
3486 errorcode_t security_critical_application(...) {
3487 unsigned x, y, result;
3489 if (__builtin_mul_overflow(x, y, &result))
3490 return kErrorCodeHackers;
3492 use_multiply(result);
3496 Clang provides the following checked arithmetic builtins:
3500 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum);
3501 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff);
3502 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod);
3503 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum);
3504 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
3505 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
3506 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff);
3507 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
3508 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
3509 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod);
3510 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
3511 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
3512 bool __builtin_sadd_overflow (int x, int y, int *sum);
3513 bool __builtin_saddl_overflow (long x, long y, long *sum);
3514 bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
3515 bool __builtin_ssub_overflow (int x, int y, int *diff);
3516 bool __builtin_ssubl_overflow (long x, long y, long *diff);
3517 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
3518 bool __builtin_smul_overflow (int x, int y, int *prod);
3519 bool __builtin_smull_overflow (long x, long y, long *prod);
3520 bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
3522 Each builtin performs the specified mathematical operation on the
3523 first two arguments and stores the result in the third argument. If
3524 possible, the result will be equal to mathematically-correct result
3525 and the builtin will return 0. Otherwise, the builtin will return
3526 1 and the result will be equal to the unique value that is equivalent
3527 to the mathematically-correct result modulo two raised to the *k*
3528 power, where *k* is the number of bits in the result type. The
3529 behavior of these builtins is well-defined for all argument values.
3531 The first three builtins work generically for operands of any integer type,
3532 including boolean types. The operands need not have the same type as each
3533 other, or as the result. The other builtins may implicitly promote or
3534 convert their operands before performing the operation.
3536 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3538 Floating point builtins
3539 ---------------------------------------
3541 ``__builtin_isfpclass``
3542 -----------------------
3544 ``__builtin_isfpclass`` is used to test if the specified floating-point values
3545 fall into one of the specified floating-point classes.
3551 int __builtin_isfpclass(fp_type expr, int mask)
3552 int_vector __builtin_isfpclass(fp_vector expr, int mask)
3558 if (__builtin_isfpclass(x, 448)) {
3559 // `x` is positive finite value
3565 The ``__builtin_isfpclass()`` builtin is a generalization of functions ``isnan``,
3566 ``isinf``, ``isfinite`` and some others defined by the C standard. It tests if
3567 the floating-point value, specified by the first argument, falls into any of data
3568 classes, specified by the second argument. The latter is an integer constant
3569 bitmask expression, in which each data class is represented by a bit
3572 ========== =================== ======================
3573 Mask value Data class Macro
3574 ========== =================== ======================
3575 0x0001 Signaling NaN __FPCLASS_SNAN
3576 0x0002 Quiet NaN __FPCLASS_QNAN
3577 0x0004 Negative infinity __FPCLASS_NEGINF
3578 0x0008 Negative normal __FPCLASS_NEGNORMAL
3579 0x0010 Negative subnormal __FPCLASS_NEGSUBNORMAL
3580 0x0020 Negative zero __FPCLASS_NEGZERO
3581 0x0040 Positive zero __FPCLASS_POSZERO
3582 0x0080 Positive subnormal __FPCLASS_POSSUBNORMAL
3583 0x0100 Positive normal __FPCLASS_POSNORMAL
3584 0x0200 Positive infinity __FPCLASS_POSINF
3585 ========== =================== ======================
3587 For convenience preprocessor defines macros for these values. The function
3588 returns 1 if ``expr`` falls into one of the specified data classes, 0 otherwise.
3590 In the example above the mask value 448 (0x1C0) contains the bits selecting
3591 positive zero, positive subnormal and positive normal classes.
3592 ``__builtin_isfpclass(x, 448)`` would return true only if ``x`` if of any of
3593 these data classes. Using suitable mask value, the function can implement any of
3594 the standard classification functions, for example, ``__builtin_isfpclass(x, 3)``
3595 is identical to ``isnan``,``__builtin_isfpclass(x, 504)`` - to ``isfinite``
3598 If the first argument is a vector, the function is equivalent to the set of
3599 scalar calls of ``__builtin_isfpclass`` applied to the input elementwise.
3601 The result of ``__builtin_isfpclass`` is a boolean value, if the first argument
3602 is a scalar, or an integer vector with the same element count as the first
3603 argument. The element type in this vector has the same bit length as the
3604 element of the the first argument type.
3606 This function never raises floating-point exceptions and does not canonicalize
3607 its input. The floating-point argument is not promoted, its data class is
3608 determined based on its representation in its actual semantic type.
3610 ``__builtin_canonicalize``
3611 --------------------------
3615 double __builtin_canonicalize(double);
3616 float __builtin_canonicalizef(float);
3617 long double __builtin_canonicalizel(long double);
3619 Returns the platform specific canonical encoding of a floating point
3620 number. This canonicalization is useful for implementing certain
3621 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3622 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3623 more information on the semantics.
3625 ``__builtin_flt_rounds`` and ``__builtin_set_flt_rounds``
3626 ---------------------------------------------------------
3630 int __builtin_flt_rounds();
3631 void __builtin_set_flt_rounds(int);
3633 Returns and sets current floating point rounding mode. The encoding of returned
3634 values and input parameters is same as the result of FLT_ROUNDS, specified by C
3636 - ``0`` - toward zero
3637 - ``1`` - to nearest, ties to even
3638 - ``2`` - toward positive infinity
3639 - ``3`` - toward negative infinity
3640 - ``4`` - to nearest, ties away from zero
3641 The effect of passing some other value to ``__builtin_flt_rounds`` is
3642 implementation-defined. ``__builtin_set_flt_rounds`` is currently only supported
3643 to work on x86, x86_64, Arm and AArch64 targets. These builtins read and modify
3644 the floating-point environment, which is not always allowed and may have unexpected
3645 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.
3650 Clang provides constant expression evaluation support for builtins forms of
3651 the following functions from the C standard library headers
3652 ``<string.h>`` and ``<wchar.h>``:
3655 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3667 In each case, the builtin form has the name of the C library function prefixed
3668 by ``__builtin_``. Example:
3672 void *p = __builtin_memchr("foobar", 'b', 5);
3674 In addition to the above, one further builtin is provided:
3678 char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3680 ``__builtin_char_memchr(a, b, c)`` is identical to
3681 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3682 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3683 is disallowed in general).
3685 Constant evaluation support for the ``__builtin_mem*`` functions is provided
3686 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3687 despite these functions accepting an argument of type ``const void*``.
3689 Support for constant expression evaluation for the above builtins can be detected
3690 with ``__has_feature(cxx_constexpr_string_builtins)``.
3692 Variadic function builtins
3693 --------------------------
3695 Clang provides several builtins for working with variadic functions from the C
3696 standard library ``<stdarg.h>`` header:
3698 * ``__builtin_va_list``
3700 A predefined typedef for the target-specific ``va_list`` type.
3702 * ``void __builtin_va_start(__builtin_va_list list, <parameter-name>)``
3704 A builtin function for the target-specific ``va_start`` function-like macro.
3705 The ``parameter-name`` argument is the name of the parameter preceding the
3706 ellipsis (``...``) in the function signature. Alternatively, in C23 mode or
3707 later, it may be the integer literal ``0`` if there is no parameter preceding
3708 the ellipsis. This function initializes the given ``__builtin_va_list`` object.
3709 It is undefined behavior to call this function on an already initialized
3710 ``__builin_va_list`` object.
3712 * ``void __builtin_va_end(__builtin_va_list list)``
3714 A builtin function for the target-specific ``va_end`` function-like macro. This
3715 function finalizes the given ``__builtin_va_list`` object such that it is no
3716 longer usable unless re-initialized with a call to ``__builtin_va_start`` or
3717 ``__builtin_va_copy``. It is undefined behavior to call this function with a
3718 ``list`` that has not been initialized by either ``__builtin_va_start`` or
3719 ``__builtin_va_copy``.
3721 * ``<type-name> __builtin_va_arg(__builtin_va_list list, <type-name>)``
3723 A builtin function for the target-specific ``va_arg`` function-like macro. This
3724 function returns the value of the next variadic argument to the call. It is
3725 undefined behavior to call this builtin when there is no next variadic argument
3726 to retrieve or if the next variadic argument does not have a type compatible
3727 with the given ``type-name``. The return type of the function is the
3728 ``type-name`` given as the second argument. It is undefined behavior to call
3729 this function with a ``list`` that has not been initialized by either
3730 ``__builtin_va_start`` or ``__builtin_va_copy``.
3732 * ``void __builtin_va_copy(__builtin_va_list dest, __builtin_va_list src)``
3734 A builtin function for the target-specific ``va_copy`` function-like macro.
3735 This function initializes ``dest`` as a copy of ``src``. It is undefined
3736 behavior to call this function with an already initialized ``dest`` argument.
3741 Clang provides constant expression evaluation support for builtin forms of the
3742 following functions from the C standard library headers
3743 ``<string.h>`` and ``<wchar.h>``:
3750 In each case, the builtin form has the name of the C library function prefixed
3753 Constant evaluation support is only provided when the source and destination
3754 are pointers to arrays with the same trivially copyable element type, and the
3755 given size is an exact multiple of the element size that is no greater than
3756 the number of elements accessible through the source and destination operands.
3758 Guaranteed inlined copy
3759 ^^^^^^^^^^^^^^^^^^^^^^^
3763 void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3766 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
3767 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3768 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3769 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3770 for more information.
3772 This is useful to implement a custom version of ``memcpy``, implement a
3773 ``libc`` memcpy or work around the absence of a ``libc``.
3775 Note that the `size` argument must be a compile time constant.
3777 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3779 Guaranteed inlined memset
3780 ^^^^^^^^^^^^^^^^^^^^^^^^^
3784 void __builtin_memset_inline(void *dst, int value, size_t size);
3787 ``__builtin_memset_inline`` has been designed as a building block for efficient
3788 ``memset`` implementations. It is identical to ``__builtin_memset`` but also
3789 guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3790 <https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3791 for more information.
3793 This is useful to implement a custom version of ``memset``, implement a
3794 ``libc`` memset or work around the absence of a ``libc``.
3796 Note that the `size` argument must be a compile time constant.
3798 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3800 Atomic Min/Max builtins with memory ordering
3801 --------------------------------------------
3803 There are two atomic builtins with min/max in-memory comparison and swap.
3804 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3806 * ``__atomic_fetch_min``
3807 * ``__atomic_fetch_max``
3809 The builtins work with signed and unsigned integers and require to specify memory ordering.
3810 The return value is the original value that was stored in memory before comparison.
3816 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3818 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
3819 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
3820 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
3822 In terms of acquire-release ordering barriers these two operations are always
3823 considered as operations with *load-store* semantics, even when the original value
3824 is not actually modified after comparison.
3826 .. _langext-__c11_atomic:
3828 __c11_atomic builtins
3829 ---------------------
3831 Clang provides a set of builtins which are intended to be used to implement
3832 C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
3833 ``_explicit`` form of the corresponding C11 operation, and are named with a
3834 ``__c11_`` prefix. The supported operations, and the differences from
3835 the corresponding C11 operations, are:
3837 * ``__c11_atomic_init``
3838 * ``__c11_atomic_thread_fence``
3839 * ``__c11_atomic_signal_fence``
3840 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
3841 ``_Atomic(...)`` object, instead of its address)
3842 * ``__c11_atomic_store``
3843 * ``__c11_atomic_load``
3844 * ``__c11_atomic_exchange``
3845 * ``__c11_atomic_compare_exchange_strong``
3846 * ``__c11_atomic_compare_exchange_weak``
3847 * ``__c11_atomic_fetch_add``
3848 * ``__c11_atomic_fetch_sub``
3849 * ``__c11_atomic_fetch_and``
3850 * ``__c11_atomic_fetch_or``
3851 * ``__c11_atomic_fetch_xor``
3852 * ``__c11_atomic_fetch_nand`` (Nand is not presented in ``<stdatomic.h>``)
3853 * ``__c11_atomic_fetch_max``
3854 * ``__c11_atomic_fetch_min``
3856 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3857 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3858 provided, with values corresponding to the enumerators of C11's
3859 ``memory_order`` enumeration.
3861 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
3862 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3863 atomic builtins are an explicit form of the corresponding OpenCL 2.0
3864 builtin function, and are named with a ``__opencl_`` prefix. The macros
3865 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
3866 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
3867 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3868 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3870 __scoped_atomic builtins
3871 ------------------------
3873 Clang provides a set of atomics taking a memory scope argument. These atomics
3874 are identical to the standard GNU / GCC atomic builtins but taking an extra
3875 memory scope argument. These are designed to be a generic alternative to the
3876 ``__opencl_atomic_*`` builtin functions for targets that support atomic memory
3879 Atomic memory scopes are designed to assist optimizations for systems with
3880 several levels of memory hierarchy like GPUs. The following memory scopes are
3881 currently supported:
3883 * ``__MEMORY_SCOPE_SYSTEM``
3884 * ``__MEMORY_SCOPE_DEVICE``
3885 * ``__MEMORY_SCOPE_WRKGRP``
3886 * ``__MEMORY_SCOPE_WVFRNT``
3887 * ``__MEMORY_SCOPE_SINGLE``
3889 This controls whether or not the atomic operation is ordered with respect to the
3890 whole system, the current device, an OpenCL workgroup, wavefront, or just a
3891 single thread. If these are used on a target that does not support atomic
3892 scopes, then they will behave exactly as the standard GNU atomic builtins.
3894 Low-level ARM exclusive memory builtins
3895 ---------------------------------------
3897 Clang provides overloaded builtins giving direct access to the three key ARM
3898 instructions for implementing atomic operations.
3902 T __builtin_arm_ldrex(const volatile T *addr);
3903 T __builtin_arm_ldaex(const volatile T *addr);
3904 int __builtin_arm_strex(T val, volatile T *addr);
3905 int __builtin_arm_stlex(T val, volatile T *addr);
3906 void __builtin_arm_clrex(void);
3908 The types ``T`` currently supported are:
3910 * Integer types with width at most 64 bits (or 128 bits on AArch64).
3911 * Floating-point types
3914 Note that the compiler does not guarantee it will not insert stores which clear
3915 the exclusive monitor in between an ``ldrex`` type operation and its paired
3916 ``strex``. In practice this is only usually a risk when the extra store is on
3917 the same cache line as the variable being modified and Clang will only insert
3918 stack stores on its own, so it is best not to use these operations on variables
3919 with automatic storage duration.
3921 Also, loads and stores may be implicit in code written between the ``ldrex`` and
3922 ``strex``. Clang will not necessarily mitigate the effects of these either, so
3923 care should be exercised.
3925 For these reasons the higher level atomic primitives should be preferred where
3928 Non-temporal load/store builtins
3929 --------------------------------
3931 Clang provides overloaded builtins allowing generation of non-temporal memory
3936 T __builtin_nontemporal_load(T *addr);
3937 void __builtin_nontemporal_store(T value, T *addr);
3939 The types ``T`` currently supported are:
3942 * Floating-point types.
3945 Note that the compiler does not guarantee that non-temporal loads or stores
3948 C++ Coroutines support builtins
3949 --------------------------------
3952 This is a work in progress. Compatibility across Clang/LLVM releases is not
3955 Clang provides experimental builtins to support C++ Coroutines as defined by
3956 https://wg21.link/P0057. The following four are intended to be used by the
3957 standard library to implement the ``std::coroutine_handle`` type.
3963 void __builtin_coro_resume(void *addr);
3964 void __builtin_coro_destroy(void *addr);
3965 bool __builtin_coro_done(void *addr);
3966 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
3972 template <> struct coroutine_handle<void> {
3973 void resume() const { __builtin_coro_resume(ptr); }
3974 void destroy() const { __builtin_coro_destroy(ptr); }
3975 bool done() const { return __builtin_coro_done(ptr); }
3981 template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3983 Promise &promise() const {
3984 return *reinterpret_cast<Promise *>(
3985 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3987 static coroutine_handle from_promise(Promise &promise) {
3989 p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3990 /*from-promise=*/true);
3996 Other coroutine builtins are either for internal clang use or for use during
3997 development of the coroutine feature. See `Coroutines in LLVM
3998 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3999 more information on their semantics. Note that builtins matching the intrinsics
4000 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
4001 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
4002 an appropriate value during the emission.
4008 size_t __builtin_coro_size()
4009 void *__builtin_coro_frame()
4010 void *__builtin_coro_free(void *coro_frame)
4012 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
4013 bool __builtin_coro_alloc()
4014 void *__builtin_coro_begin(void *memory)
4015 void __builtin_coro_end(void *coro_frame, bool unwind)
4016 char __builtin_coro_suspend(bool final)
4018 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
4019 automatically will insert one if the first argument to `llvm.coro.suspend` is
4020 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
4021 as the first argument to the intrinsic.
4023 Source location builtins
4024 ------------------------
4026 Clang provides builtins to support C++ standard library implementation
4027 of ``std::source_location`` as specified in C++20. With the exception
4028 of ``__builtin_COLUMN``, ``__builtin_FILE_NAME`` and ``__builtin_FUNCSIG``,
4029 these builtins are also implemented by GCC.
4035 const char *__builtin_FILE();
4036 const char *__builtin_FILE_NAME(); // Clang only
4037 const char *__builtin_FUNCTION();
4038 const char *__builtin_FUNCSIG(); // Microsoft
4039 unsigned __builtin_LINE();
4040 unsigned __builtin_COLUMN(); // Clang only
4041 const std::source_location::__impl *__builtin_source_location();
4047 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
4048 const char* file = __builtin_FILE(),
4049 const char* function = __builtin_FUNCTION()) {
4051 printf("%s:%d assertion failed in function %s\n", file, line, function);
4055 struct MyAggregateType {
4057 int line = __builtin_LINE(); // captures line where aggregate initialization occurs
4059 static_assert(MyAggregateType{42}.line == __LINE__);
4061 struct MyClassType {
4062 int line = __builtin_LINE(); // captures line of the constructor used during initialization
4063 constexpr MyClassType(int) { assert(line == __LINE__); }
4068 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, ``__builtin_FUNCSIG``,
4069 ``__builtin_FILE`` and ``__builtin_FILE_NAME`` return the values, at the
4070 "invocation point", for ``__LINE__``, ``__FUNCTION__``, ``__FUNCSIG__``,
4071 ``__FILE__`` and ``__FILE_NAME__`` respectively. ``__builtin_COLUMN`` similarly
4072 returns the column, though there is no corresponding macro. These builtins are
4073 constant expressions.
4075 When the builtins appear as part of a default function argument the invocation
4076 point is the location of the caller. When the builtins appear as part of a
4077 default member initializer, the invocation point is the location of the
4078 constructor or aggregate initialization used to create the object. Otherwise
4079 the invocation point is the same as the location of the builtin.
4081 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
4082 empty string is returned.
4084 The builtin ``__builtin_source_location`` returns a pointer to constant static
4085 data of type ``std::source_location::__impl``. This type must have already been
4086 defined, and must contain exactly four fields: ``const char *_M_file_name``,
4087 ``const char *_M_function_name``, ``<any-integral-type> _M_line``, and
4088 ``<any-integral-type> _M_column``. The fields will be populated in the same
4089 manner as the above four builtins, except that ``_M_function_name`` is populated
4090 with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
4095 Clang provides builtins to support checking and adjusting alignment of
4096 pointers and integers.
4097 These builtins can be used to avoid relying on implementation-defined behavior
4098 of arithmetic on integers derived from pointers.
4099 Additionally, these builtins retain type information and, unlike bitwise
4100 arithmetic, they can perform semantic checking on the alignment value.
4106 Type __builtin_align_up(Type value, size_t alignment);
4107 Type __builtin_align_down(Type value, size_t alignment);
4108 bool __builtin_is_aligned(Type value, size_t alignment);
4115 char* global_alloc_buffer;
4116 void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
4117 char* result = __builtin_align_up(global_alloc_buffer, alignment);
4118 // result now contains the value of global_alloc_buffer rounded up to the
4119 // next multiple of alignment.
4120 global_alloc_buffer = result + alloc_size;
4124 void* get_start_of_page(void* ptr) {
4125 return __builtin_align_down(ptr, PAGE_SIZE);
4128 void example(char* buffer) {
4129 if (__builtin_is_aligned(buffer, 64)) {
4130 do_fast_aligned_copy(buffer);
4132 do_unaligned_copy(buffer);
4136 // In addition to pointers, the builtins can also be used on integer types
4137 // and are evaluatable inside constant expressions.
4138 static_assert(__builtin_align_up(123, 64) == 128, "");
4139 static_assert(__builtin_align_down(123u, 64) == 64u, "");
4140 static_assert(!__builtin_is_aligned(123, 64), "");
4145 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
4146 first argument aligned up/down to the next multiple of the second argument.
4147 If the value is already sufficiently aligned, it is returned unchanged.
4148 The builtin ``__builtin_is_aligned`` returns whether the first argument is
4149 aligned to a multiple of the second argument.
4150 All of these builtins expect the alignment to be expressed as a number of bytes.
4152 These builtins can be used for all integer types as well as (non-function)
4153 pointer types. For pointer types, these builtins operate in terms of the integer
4154 address of the pointer and return a new pointer of the same type (including
4155 qualifiers such as ``const``) with an adjusted address.
4156 When aligning pointers up or down, the resulting value must be within the same
4157 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
4158 This means that arbitrary integer values stored in pointer-type variables must
4159 not be passed to these builtins. For those use cases, the builtins can still be
4160 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
4162 If Clang can determine that the alignment is not a power of two at compile time,
4163 it will result in a compilation failure. If the alignment argument is not a
4164 power of two at run time, the behavior of these builtins is undefined.
4166 Non-standard C++11 Attributes
4167 =============================
4169 Clang's non-standard C++11 attributes live in the ``clang`` attribute
4172 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
4173 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
4174 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
4175 (see the list of `GCC function attributes
4176 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
4177 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
4178 `GCC type attributes
4179 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
4180 implementation, these attributes must appertain to the *declarator-id* in a
4181 declaration, which means they must go either at the start of the declaration or
4182 immediately after the name being declared.
4184 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
4185 also applies the GNU ``noreturn`` attribute to ``f``.
4189 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
4191 Target-Specific Extensions
4192 ==========================
4194 Clang supports some language features conditionally on some targets.
4196 ARM/AArch64 Language Extensions
4197 -------------------------------
4199 Memory Barrier Intrinsics
4200 ^^^^^^^^^^^^^^^^^^^^^^^^^
4201 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
4202 in the `Arm C Language Extensions
4203 <https://github.com/ARM-software/acle/releases>`_.
4204 Note that these intrinsics are implemented as motion barriers that block
4205 reordering of memory accesses and side effect instructions. Other instructions
4206 like simple arithmetic may be reordered around the intrinsic. If you expect to
4207 have no reordering at all, use inline assembly instead.
4209 X86/X86-64 Language Extensions
4210 ------------------------------
4212 The X86 backend has these language extensions:
4214 Memory references to specified segments
4215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4217 Annotating a pointer with address space #256 causes it to be code generated
4218 relative to the X86 GS segment register, address space #257 causes it to be
4219 relative to the X86 FS segment, and address space #258 causes it to be
4220 relative to the X86 SS segment. Note that this is a very very low-level
4221 feature that should only be used if you know what you're doing (for example in
4228 #define GS_RELATIVE __attribute__((address_space(256)))
4229 int foo(int GS_RELATIVE *P) {
4233 Which compiles to (on X86-32):
4239 movl %gs:(%eax), %eax
4242 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
4243 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
4244 indicate their support.
4246 PowerPC Language Extensions
4247 ---------------------------
4249 Set the Floating Point Rounding Mode
4250 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4251 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
4252 the floating point rounding mode. This function will use the least significant
4253 two bits of integer argument to set the floating point rounding mode.
4257 double __builtin_setrnd(int mode);
4259 The effective values for mode are:
4261 - 0 - round to nearest
4263 - 2 - round to +infinity
4264 - 3 - round to -infinity
4266 Note that the mode argument will modulo 4, so if the integer argument is greater
4267 than 3, it will only use the least significant two bits of the mode.
4268 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
4270 PowerPC cache builtins
4271 ^^^^^^^^^^^^^^^^^^^^^^
4273 The PowerPC architecture specifies instructions implementing cache operations.
4274 Clang provides builtins that give direct programmer access to these cache
4277 Currently the following builtins are implemented in clang:
4279 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
4280 to main memory and flushes the copy from the data cache.
4286 void __dcbf(const void* addr); /* Data Cache Block Flush */
4293 __builtin_dcbf (&a);
4295 Extensions for Static Analysis
4296 ==============================
4298 Clang supports additional attributes that are useful for documenting program
4299 invariants and rules for static analysis tools, such as the `Clang Static
4300 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
4301 in the analyzer's `list of source-level annotations
4302 <https://clang-analyzer.llvm.org/annotations.html>`_.
4305 Extensions for Dynamic Analysis
4306 ===============================
4308 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
4309 with :doc:`AddressSanitizer`.
4311 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
4312 with :doc:`ThreadSanitizer`.
4314 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
4315 with :doc:`MemorySanitizer`.
4317 Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
4318 with :doc:`DataFlowSanitizer`.
4320 Use ``__has_feature(safe_stack)`` to check if the code is being built
4321 with :doc:`SafeStack`.
4324 Extensions for selectively disabling optimization
4325 =================================================
4327 Clang provides a mechanism for selectively disabling optimizations in functions
4330 To disable optimizations in a single function definition, the GNU-style or C++11
4331 non-standard attribute ``optnone`` can be used.
4335 // The following functions will not be optimized.
4336 // GNU-style attribute
4337 __attribute__((optnone)) int foo() {
4341 [[clang::optnone]] int bar() {
4345 To facilitate disabling optimization for a range of function definitions, a
4346 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
4347 followed by ``off`` or ``on``.
4349 All function definitions in the region between an ``off`` and the following
4350 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
4351 conflict with explicit attributes already present on the function (e.g. the
4352 ones that control inlining).
4356 #pragma clang optimize off
4357 // This function will be decorated with optnone.
4362 // optnone conflicts with always_inline, so bar() will not be decorated.
4363 __attribute__((always_inline)) int bar() {
4366 #pragma clang optimize on
4368 If no ``on`` is found to close an ``off`` region, the end of the region is the
4369 end of the compilation unit.
4371 Note that a stray ``#pragma clang optimize on`` does not selectively enable
4372 additional optimizations when compiling at low optimization levels. This feature
4373 can only be used to selectively disable optimizations.
4375 The pragma has an effect on functions only at the point of their definition; for
4376 function templates, this means that the state of the pragma at the point of an
4377 instantiation is not necessarily relevant. Consider the following example:
4381 template<typename T> T twice(T t) {
4385 #pragma clang optimize off
4386 template<typename T> T thrice(T t) {
4390 int container(int a, int b) {
4391 return twice(a) + thrice(b);
4393 #pragma clang optimize on
4395 In this example, the definition of the template function ``twice`` is outside
4396 the pragma region, whereas the definition of ``thrice`` is inside the region.
4397 The ``container`` function is also in the region and will not be optimized, but
4398 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
4399 these two instantiations, ``twice`` will be optimized (because its definition
4400 was outside the region) and ``thrice`` will not be optimized.
4402 Clang also implements MSVC's range-based pragma,
4403 ``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
4404 supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
4405 ``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
4406 the same as ``#pragma clang optimize``. All functions
4407 between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
4411 #pragma optimize("", off)
4412 // This function will be decorated with optnone.
4415 #pragma optimize("", on)
4416 // This function will be optimized with whatever was specified on
4420 // This will warn with Clang's current implementation.
4421 #pragma optimize("g", on)
4424 For MSVC, an empty optimization list and ``off`` parameter will turn off
4425 all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
4426 ``on`` parameter will reset the optimizations to the ones specified on the
4429 .. list-table:: Parameters (unsupported by Clang)
4432 - Type of optimization
4436 - Short or fast sequences of machine code
4438 - Enable frame pointers
4440 Extensions for loop hint optimizations
4441 ======================================
4443 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
4444 subsequent for, while, do-while, or c++11 range-based for loop. The directive
4445 provides options for vectorization, interleaving, predication, unrolling and
4446 distribution. Loop hints can be specified before any loop and will be ignored if
4447 the optimization is not safe to apply.
4449 There are loop hints that control transformations (e.g. vectorization, loop
4450 unrolling) and there are loop hints that set transformation options (e.g.
4451 ``vectorize_width``, ``unroll_count``). Pragmas setting transformation options
4452 imply the transformation is enabled, as if it was enabled via the corresponding
4453 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
4454 disabled (e.g. ``vectorize(disable)``), that takes precedence over
4455 transformations option pragmas implying that transformation.
4457 Vectorization, Interleaving, and Predication
4458 --------------------------------------------
4460 A vectorized loop performs multiple iterations of the original loop
4461 in parallel using vector instructions. The instruction set of the target
4462 processor determines which vector instructions are available and their vector
4463 widths. This restricts the types of loops that can be vectorized. The vectorizer
4464 automatically determines if the loop is safe and profitable to vectorize. A
4465 vector instruction cost model is used to select the vector width.
4467 Interleaving multiple loop iterations allows modern processors to further
4468 improve instruction-level parallelism (ILP) using advanced hardware features,
4469 such as multiple execution units and out-of-order execution. The vectorizer uses
4470 a cost model that depends on the register pressure and generated code size to
4471 select the interleaving count.
4473 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
4474 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
4475 manually enable vectorization or interleaving.
4479 #pragma clang loop vectorize(enable)
4480 #pragma clang loop interleave(enable)
4485 The vector width is specified by
4486 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
4487 integer and the type of vectorization can be specified with an optional
4488 second parameter. The default for the second parameter is 'fixed' and
4489 refers to fixed width vectorization, whereas 'scalable' indicates the
4490 compiler should use scalable vectors instead. Another use of vectorize_width
4491 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
4492 of vectorization to use without specifying the exact width. In both variants
4493 of the pragma the vectorizer may decide to fall back on fixed width
4494 vectorization if the target does not support scalable vectors.
4496 The interleave count is specified by ``interleave_count(_value_)``, where
4497 _value_ is a positive integer. This is useful for specifying the optimal
4498 width/count of the set of target architectures supported by your application.
4502 #pragma clang loop vectorize_width(2)
4503 #pragma clang loop interleave_count(2)
4508 Specifying a width/count of 1 disables the optimization, and is equivalent to
4509 ``vectorize(disable)`` or ``interleave(disable)``.
4511 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
4515 #pragma clang loop vectorize(enable)
4516 #pragma clang loop vectorize_predicate(enable)
4521 This predicates (masks) all instructions in the loop, which allows the scalar
4522 remainder loop (the tail) to be folded into the main vectorized loop. This
4523 might be more efficient when vector predication is efficiently supported by the
4529 Unrolling a loop reduces the loop control overhead and exposes more
4530 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
4531 eliminates the loop and replaces it with an enumerated sequence of loop
4532 iterations. Full unrolling is only possible if the loop trip count is known at
4533 compile time. Partial unrolling replicates the loop body within the loop and
4534 reduces the trip count.
4536 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
4537 loop if the trip count is known at compile time. If the fully unrolled code size
4538 is greater than an internal limit the loop will be partially unrolled up to this
4539 limit. If the trip count is not known at compile time the loop will be partially
4540 unrolled with a heuristically chosen unroll factor.
4544 #pragma clang loop unroll(enable)
4549 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
4550 loop if the trip count is known at compile time identically to
4551 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
4552 if the loop count is not known at compile time.
4556 #pragma clang loop unroll(full)
4561 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
4562 _value_ is a positive integer. If this value is greater than the trip count the
4563 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
4564 to the same code size limit as with ``unroll(enable)``.
4568 #pragma clang loop unroll_count(8)
4573 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4575 Loop unroll parameters can be controlled by options
4576 `-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4581 Loop Distribution allows splitting a loop into multiple loops. This is
4582 beneficial for example when the entire loop cannot be vectorized but some of the
4583 resulting loops can.
4585 If ``distribute(enable))`` is specified and the loop has memory dependencies
4586 that inhibit vectorization, the compiler will attempt to isolate the offending
4587 operations into a new loop. This optimization is not enabled by default, only
4588 loops marked with the pragma are considered.
4592 #pragma clang loop distribute(enable)
4593 for (i = 0; i < N; ++i) {
4594 S1: A[i + 1] = A[i] + B[i];
4595 S2: C[i] = D[i] * E[i];
4598 This loop will be split into two loops between statements S1 and S2. The
4599 second loop containing S2 will be vectorized.
4601 Loop Distribution is currently not enabled by default in the optimizer because
4602 it can hurt performance in some cases. For example, instruction-level
4603 parallelism could be reduced by sequentializing the execution of the
4604 statements S1 and S2 above.
4606 If Loop Distribution is turned on globally with
4607 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4608 be used the disable it on a per-loop basis.
4610 Additional Information
4611 ----------------------
4613 For convenience multiple loop hints can be specified on a single line.
4617 #pragma clang loop vectorize_width(4) interleave_count(8)
4622 If an optimization cannot be applied any hints that apply to it will be ignored.
4623 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4624 proven safe to vectorize. To identify and diagnose optimization issues use
4625 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4626 user guide for details.
4628 Extensions to specify floating-point flags
4629 ====================================================
4631 The ``#pragma clang fp`` pragma allows floating-point options to be specified
4632 for a section of the source code. This pragma can only appear at file scope or
4633 at the start of a compound statement (excluding comments). When using within a
4634 compound statement, the pragma is active within the scope of the compound
4637 Currently, the following settings can be controlled with this pragma:
4639 ``#pragma clang fp reassociate`` allows control over the reassociation
4640 of floating point expressions. When enabled, this pragma allows the expression
4641 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4642 Reassociation can also occur across multiple statements.
4643 This pragma can be used to disable reassociation when it is otherwise
4644 enabled for the translation unit with the ``-fassociative-math`` flag.
4645 The pragma can take two values: ``on`` and ``off``.
4649 float f(float x, float y, float z)
4651 // Enable floating point reassociation across statements
4652 #pragma clang fp reassociate(on)
4657 ``#pragma clang fp reciprocal`` allows control over using reciprocal
4658 approximations in floating point expressions. When enabled, this
4659 pragma allows the expression ``x / y`` to be approximated as ``x *
4660 (1.0 / y)``. This pragma can be used to disable reciprocal
4661 approximation when it is otherwise enabled for the translation unit
4662 with the ``-freciprocal-math`` flag or other fast-math options. The
4663 pragma can take two values: ``on`` and ``off``.
4667 float f(float x, float y)
4669 // Enable floating point reciprocal approximation
4670 #pragma clang fp reciprocal(on)
4674 ``#pragma clang fp contract`` specifies whether the compiler should
4675 contract a multiply and an addition (or subtraction) into a fused FMA
4676 operation when supported by the target.
4678 The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on``
4679 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4680 fusion as specified the language standard. The ``fast`` option allows fusion
4681 in cases when the language standard does not make this possible (e.g. across
4687 #pragma clang fp contract(fast)
4693 The pragma can also be used with ``off`` which turns FP contraction off for a
4694 section of the code. This can be useful when fast contraction is otherwise
4695 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4696 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4697 addition across statements regardless of any controlling pragmas.
4699 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4700 may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4701 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4706 // Preserve floating point exceptions
4707 #pragma clang fp exceptions(strict)
4709 if (fetestexcept(FE_OVERFLOW))
4713 A ``#pragma clang fp`` pragma may contain any number of options:
4717 void func(float *dest, float a, float b) {
4718 #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4722 ``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4723 for a section of the source code. This pragma can appear at file or namespace
4724 scope, or at the start of a compound statement (excluding comments).
4725 The pragma is active within the scope of the compound statement.
4727 When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4728 governed by the pragma behaves as though the command-line option
4729 ``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4730 source-defined precision.
4732 When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4733 governed by the pragma behaves as though the command-line option
4734 ``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4735 ``double`` precision.
4737 When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4738 governed by the pragma behaves as though the command-line option
4739 ``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4740 target-dependent ``long double`` precision. In Win32 programming, for instance,
4741 the long double data type maps to the double, 64-bit precision data type.
4743 The full syntax this pragma supports is
4744 ``#pragma clang fp eval_method(source|double|extended)``.
4749 // The compiler will use long double as the floating-point evaluation
4751 #pragma clang fp eval_method(extended)
4752 a = b[i] * c[i] + e;
4755 Note: ``math.h`` defines the typedefs ``float_t`` and ``double_t`` based on the active
4756 evaluation method at the point where the header is included, not where the
4757 typedefs are used. Because of this, it is unwise to combine these typedefs with
4758 ``#pragma clang fp eval_method``. To catch obvious bugs, Clang will emit an
4759 error for any references to these typedefs within the scope of this pragma;
4760 however, this is not a fool-proof protection, and programmers must take care.
4762 The ``#pragma float_control`` pragma allows precise floating-point
4763 semantics and floating-point exception behavior to be specified
4764 for a section of the source code. This pragma can only appear at file or
4765 namespace scope, within a language linkage specification or at the start of a
4766 compound statement (excluding comments). When used within a compound statement,
4767 the pragma is active within the scope of the compound statement. This pragma
4768 is modeled after a Microsoft pragma with the same spelling and syntax. For
4769 pragmas specified at file or namespace scope, or within a language linkage
4770 specification, a stack is supported so that the ``pragma float_control``
4771 settings can be pushed or popped.
4773 When ``pragma float_control(precise, on)`` is enabled, the section of code
4774 governed by the pragma uses precise floating point semantics, effectively
4775 ``-ffast-math`` is disabled and ``-ffp-contract=on``
4776 (fused multiply add) is enabled. This pragma enables ``-fmath-errno``.
4778 When ``pragma float_control(precise, off)`` is enabled, unsafe-floating point
4779 optimizations are enabled in the section of code governed by the pragma.
4780 Effectively ``-ffast-math`` is enabled and ``-ffp-contract=fast``. This pragma
4781 disables ``-fmath-errno``.
4783 When ``pragma float_control(except, on)`` is enabled, the section of code
4784 governed by the pragma behaves as though the command-line option
4785 ``-ffp-exception-behavior=strict`` is enabled,
4786 when ``pragma float_control(except, off)`` is enabled, the section of code
4787 governed by the pragma behaves as though the command-line option
4788 ``-ffp-exception-behavior=ignore`` is enabled.
4790 The full syntax this pragma supports is
4791 ``float_control(except|precise, on|off [, push])`` and
4792 ``float_control(push|pop)``.
4793 The ``push`` and ``pop`` forms, including using ``push`` as the optional
4794 third argument, can only occur at file scope.
4799 // This block will be compiled with -fno-fast-math and -ffp-contract=on
4800 #pragma float_control(precise, on)
4801 a = b[i] * c[i] + e;
4804 Specifying an attribute for multiple declarations (#pragma clang attribute)
4805 ===========================================================================
4807 The ``#pragma clang attribute`` directive can be used to apply an attribute to
4808 multiple declarations. The ``#pragma clang attribute push`` variation of the
4809 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4810 can be added to. The ``#pragma clang attribute (...)`` variation adds an
4811 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4812 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4813 shorthand for when you want to add one attribute to a new scope. Multiple push
4814 directives can be nested inside each other.
4816 The attributes that are used in the ``#pragma clang attribute`` directives
4817 can be written using the GNU-style syntax:
4821 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4823 void function(); // The function now has the annotate("custom") attribute
4825 #pragma clang attribute pop
4827 The attributes can also be written using the C++11 style syntax:
4831 #pragma clang attribute push ([[noreturn]], apply_to = function)
4833 void function(); // The function now has the [[noreturn]] attribute
4835 #pragma clang attribute pop
4837 The ``__declspec`` style syntax is also supported:
4841 #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4843 void function(); // The function now has the __declspec(dllexport) attribute
4845 #pragma clang attribute pop
4847 A single push directive can contain multiple attributes, however,
4848 only one syntax style can be used within a single directive:
4852 #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4854 void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4856 #pragma clang attribute pop
4858 #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4860 void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4862 #pragma clang attribute pop
4864 Because multiple push directives can be nested, if you're writing a macro that
4865 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4866 required) to add a namespace to your push/pop directives. A pop directive with a
4867 namespace will pop the innermost push that has that same namespace. This will
4868 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4869 that an ``pop`` without a namespace will pop the innermost ``push`` without a
4870 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4871 same namespace. For instance:
4875 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4876 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop")
4878 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
4879 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop")
4882 ASSUME_NORETURN_BEGIN
4883 ASSUME_UNAVAILABLE_BEGIN
4884 void function(); // function has [[noreturn]] and __attribute__((unavailable))
4886 void other_function(); // function has __attribute__((unavailable))
4887 ASSUME_UNAVAILABLE_END
4889 Without the namespaces on the macros, ``other_function`` will be annotated with
4890 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4891 a contrived example, but its very possible for this kind of situation to appear
4892 in real code if the pragmas are spread out across a large file. You can test if
4893 your version of clang supports namespaces on ``#pragma clang attribute`` with
4894 ``__has_extension(pragma_clang_attribute_namespaces)``.
4899 The set of declarations that receive a single attribute from the attribute stack
4900 depends on the subject match rules that were specified in the pragma. Subject
4901 match rules are specified after the attribute. The compiler expects an
4902 identifier that corresponds to the subject set specifier. The ``apply_to``
4903 specifier is currently the only supported subject set specifier. It allows you
4904 to specify match rules that form a subset of the attribute's allowed subject
4905 set, i.e. the compiler doesn't require all of the attribute's subjects. For
4906 example, an attribute like ``[[nodiscard]]`` whose subject set includes
4907 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4908 least one of these rules after ``apply_to``:
4912 #pragma clang attribute push([[nodiscard]], apply_to = enum)
4914 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4916 struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4918 #pragma clang attribute pop
4920 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4922 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4924 struct Record2 { }; // The struct *will* receive [[nodiscard]]
4926 #pragma clang attribute pop
4928 // This is an error, since [[nodiscard]] can't be applied to namespaces:
4929 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4931 #pragma clang attribute pop
4933 Multiple match rules can be specified using the ``any`` match rule, as shown
4934 in the example above. The ``any`` rule applies attributes to all declarations
4935 that are matched by at least one of the rules in the ``any``. It doesn't nest
4936 and can't be used inside the other match rules. Redundant match rules or rules
4937 that conflict with one another should not be used inside of ``any``. Failing to
4938 specify a rule within the ``any`` rule results in an error.
4940 Clang supports the following match rules:
4942 - ``function``: Can be used to apply attributes to functions. This includes C++
4943 member functions, static functions, operators, and constructors/destructors.
4945 - ``function(is_member)``: Can be used to apply attributes to C++ member
4946 functions. This includes members like static functions, operators, and
4947 constructors/destructors.
4949 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
4950 member functions, and variables/fields whose type is a function pointer. It
4951 does not apply attributes to Objective-C methods or blocks.
4953 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4954 and C++11 type aliases.
4956 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4957 ``union`` declarations.
4959 - ``record(unless(is_union))``: Can be used to apply attributes only to
4960 ``struct`` and ``class`` declarations.
4962 - ``enum``: Can be be used to apply attributes to enumeration declarations.
4964 - ``enum_constant``: Can be used to apply attributes to enumerators.
4966 - ``variable``: Can be used to apply attributes to variables, including
4967 local variables, parameters, global variables, and static member variables.
4968 It does not apply attributes to instance member variables or Objective-C
4971 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4974 - ``variable(is_global)``: Can be used to apply attributes to global variables
4977 - ``variable(is_local)``: Can be used to apply attributes to local variables
4980 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
4983 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4984 the variables that are not parameters.
4986 - ``field``: Can be used to apply attributes to non-static member variables
4987 in a record. This includes Objective-C ivars.
4989 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4991 - ``objc_interface``: Can be used to apply attributes to ``@interface``
4994 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4997 - ``objc_category``: Can be used to apply attributes to category declarations,
4998 including class extensions.
5000 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
5001 including instance and class methods. Implicit methods like implicit property
5002 getters and setters do not receive the attribute.
5004 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
5007 - ``objc_property``: Can be used to apply attributes to ``@property``
5010 - ``block``: Can be used to apply attributes to block declarations. This does
5011 not include variables/fields of block pointer type.
5013 The use of ``unless`` in match rules is currently restricted to a strict set of
5014 sub-rules that are used by the supported attributes. That means that even though
5015 ``variable(unless(is_parameter))`` is a valid match rule,
5016 ``variable(unless(is_thread_local))`` is not.
5018 Supported Attributes
5019 --------------------
5021 Not all attributes can be used with the ``#pragma clang attribute`` directive.
5022 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
5023 like ``address_space`` aren't supported by this directive. You can determine
5024 whether or not an attribute is supported by the pragma by referring to the
5025 :doc:`individual documentation for that attribute <AttributeReference>`.
5027 The attributes are applied to all matching declarations individually, even when
5028 the attribute is semantically incorrect. The attributes that aren't applied to
5029 any declaration are not verified semantically.
5031 Specifying section names for global objects (#pragma clang section)
5032 ===================================================================
5034 The ``#pragma clang section`` directive provides a means to assign section-names
5035 to global variables, functions and static variables.
5037 The section names can be specified as:
5041 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
5043 The section names can be reverted back to default name by supplying an empty
5044 string to the section kind, for example:
5048 #pragma clang section bss="" data="" text="" rodata="" relro=""
5050 The ``#pragma clang section`` directive obeys the following rules:
5052 * The pragma applies to all global variable, statics and function declarations
5053 from the pragma to the end of the translation unit.
5055 * The pragma clang section is enabled automatically, without need of any flags.
5057 * This feature is only defined to work sensibly for ELF targets.
5059 * If section name is specified through _attribute_((section("myname"))), then
5060 the attribute name gains precedence.
5062 * Global variables that are initialized to zero will be placed in the named
5063 bss section, if one is present.
5065 * The ``#pragma clang section`` directive does not does try to infer section-kind
5066 from the name. For example, naming a section "``.bss.mySec``" does NOT mean
5067 it will be a bss section name.
5069 * The decision about which section-kind applies to each global is taken in the back-end.
5070 Once the section-kind is known, appropriate section name, as specified by the user using
5071 ``#pragma clang section`` directive, is applied to that global.
5073 Specifying Linker Options on ELF Targets
5074 ========================================
5076 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
5077 The second parameter is the library name (without the traditional Unix prefix of
5078 ``lib``). This allows you to provide an implicit link of dependent libraries.
5080 Evaluating Object Size Dynamically
5081 ==================================
5083 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
5084 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
5085 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
5086 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
5087 for ``__builtin_object_size`` in libraries that support it.
5089 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
5094 void copy_into_buffer(size_t size) {
5095 char* buffer = malloc(size);
5096 strlcpy(buffer, "some string", strlen("some string"));
5097 // Previous line preprocesses to:
5098 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
5101 Since the size of ``buffer`` can't be known at compile time, Clang will fold
5102 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
5103 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
5104 ``size``, providing some extra runtime safety.
5109 Clang supports the pragma ``#pragma clang deprecated``, which can be used to
5110 provide deprecation warnings for macro uses. For example:
5114 #define MIN(x, y) x < y ? x : y
5115 #pragma clang deprecated(MIN, "use std::min instead")
5117 int min(int a, int b) {
5118 return MIN(a, b); // warning: MIN is deprecated: use std::min instead
5121 ``#pragma clang deprecated`` should be preferred for this purpose over
5122 ``#pragma GCC warning`` because the warning can be controlled with
5125 Restricted Expansion Macros
5126 ===========================
5128 Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
5129 used restrict macro expansion in headers. This can be valuable when providing
5130 headers with ABI stability requirements. Any expansion of the annotated macro
5131 processed by the preprocessor after the ``#pragma`` annotation will log a
5132 warning. Redefining the macro or undefining the macro will not be diagnosed, nor
5133 will expansion of the macro within the main source file. For example:
5137 #define TARGET_ARM 1
5138 #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
5142 #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
5151 #if TARGET_ARM // No warning in main source file
5157 This warning is controlled by ``-Wpedantic-macros``.
5162 Clang supports the pragma ``#pragma clang final``, which can be used to
5163 mark macros as final, meaning they cannot be undef'd or re-defined. For example:
5167 #define FINAL_MACRO 1
5168 #pragma clang final(FINAL_MACRO)
5170 #define FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be redefined
5171 #undef FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be undefined
5173 This is useful for enforcing system-provided macros that should not be altered
5174 in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
5175 macros will always warn on redefinition, including situations with identical
5176 bodies and in system headers.
5181 Clang supports an extension for source line control, which takes the
5182 form of a preprocessor directive starting with an unsigned integral
5183 constant. In addition to the standard ``#line`` directive, this form
5184 allows control of an include stack and header file type, which is used
5185 in issuing diagnostics. These lines are emitted in preprocessed
5190 # <line:number> <filename:string> <header-type:numbers>
5192 The filename is optional, and if unspecified indicates no change in
5193 source filename. The header-type is an optional, whitespace-delimited,
5194 sequence of magic numbers as follows.
5196 * ``1:`` Push the current source file name onto the include stack and
5199 * ``2``: Pop the include stack and return to the specified file. If
5200 the filename is ``""``, the name popped from the include stack is
5201 used. Otherwise there is no requirement that the specified filename
5202 matches the current source when originally pushed.
5204 * ``3``: Enter a system-header region. System headers often contain
5205 implementation-specific source that would normally emit a diagnostic.
5207 * ``4``: Enter an implicit ``extern "C"`` region. This is not required on
5208 modern systems where system headers are C++-aware.
5210 At most a single ``1`` or ``2`` can be present, and values must be in
5217 # 57 // Advance (or return) to line 57 of the current source file
5218 # 57 "frob" // Set to line 57 of "frob"
5219 # 1 "foo.h" 1 // Enter "foo.h" at line 1
5220 # 59 "main.c" 2 // Leave current include and return to "main.c"
5221 # 1 "/usr/include/stdio.h" 1 3 // Enter a system header
5222 # 60 "" 2 // return to "main.c"
5223 # 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
5225 Extended Integer Types
5226 ======================
5228 Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
5229 and in C++. This type was previously implemented in Clang with the same
5230 semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
5231 favor of the standard type.
5233 Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
5234 so this type should not yet be used in interfaces that require ABI stability.
5236 Intrinsics Support within Constant Expressions
5237 ==============================================
5239 The following builtin intrinsics can be used in constant expressions:
5241 * ``__builtin_bitreverse8``
5242 * ``__builtin_bitreverse16``
5243 * ``__builtin_bitreverse32``
5244 * ``__builtin_bitreverse64``
5245 * ``__builtin_bswap16``
5246 * ``__builtin_bswap32``
5247 * ``__builtin_bswap64``
5248 * ``__builtin_clrsb``
5249 * ``__builtin_clrsbl``
5250 * ``__builtin_clrsbll``
5252 * ``__builtin_clzl``
5253 * ``__builtin_clzll``
5254 * ``__builtin_clzs``
5256 * ``__builtin_ctzl``
5257 * ``__builtin_ctzll``
5258 * ``__builtin_ctzs``
5260 * ``__builtin_ffsl``
5261 * ``__builtin_ffsll``
5262 * ``__builtin_fmax``
5263 * ``__builtin_fmin``
5264 * ``__builtin_fpclassify``
5266 * ``__builtin_isinf``
5267 * ``__builtin_isinf_sign``
5268 * ``__builtin_isfinite``
5269 * ``__builtin_isnan``
5270 * ``__builtin_isnormal``
5272 * ``__builtin_nans``
5273 * ``__builtin_parity``
5274 * ``__builtin_parityl``
5275 * ``__builtin_parityll``
5276 * ``__builtin_popcount``
5277 * ``__builtin_popcountl``
5278 * ``__builtin_popcountll``
5279 * ``__builtin_rotateleft8``
5280 * ``__builtin_rotateleft16``
5281 * ``__builtin_rotateleft32``
5282 * ``__builtin_rotateleft64``
5283 * ``__builtin_rotateright8``
5284 * ``__builtin_rotateright16``
5285 * ``__builtin_rotateright32``
5286 * ``__builtin_rotateright64``
5288 The following x86-specific intrinsics can be used in constant expressions:
5290 * ``_bit_scan_forward``
5291 * ``_bit_scan_reverse``
5307 * ``_mm_popcnt_u32``
5308 * ``_mm_popcnt_u64``
5331 Debugging the Compiler
5332 ======================
5334 Clang supports a number of pragma directives that help debugging the compiler itself.
5335 Syntax is the following: `#pragma clang __debug <command> <arguments>`.
5336 Note, all of debugging pragmas are subject to change.
5340 Accepts either a single identifier or an expression. When a single identifier is passed,
5341 the lookup results for the identifier are printed to `stderr`. When an expression is passed,
5342 the AST for the expression is printed to `stderr`. The expression is an unevaluated operand,
5343 so things like overload resolution and template instantiations are performed,
5344 but the expression has no runtime effects.
5345 Type- and value-dependent expressions are not supported yet.
5347 This facility is designed to aid with testing name lookup machinery.