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 .. _langext-__has_feature-__has_extension:
71 ``__has_feature`` and ``__has_extension``
72 -----------------------------------------
74 These function-like macros take a single identifier argument that is the name
75 of a feature. ``__has_feature`` evaluates to 1 if the feature is both
76 supported by Clang and standardized in the current language standard or 0 if
77 not (but see :ref:`below <langext-has-feature-back-compat>`), while
78 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
79 current language (either as a language extension or a standard language
80 feature) or 0 if not. They can be used like this:
84 #ifndef __has_feature // Optional of course.
85 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
87 #ifndef __has_extension
88 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
92 #if __has_feature(cxx_rvalue_references)
93 // This code will only be compiled with the -std=c++11 and -std=gnu++11
94 // options, because rvalue references are only standardized in C++11.
97 #if __has_extension(cxx_rvalue_references)
98 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
99 // and -std=gnu++98 options, because rvalue references are supported as a
100 // language extension in C++98.
103 .. _langext-has-feature-back-compat:
105 For backward compatibility, ``__has_feature`` can also be used to test
106 for support for non-standardized features, i.e. features not prefixed ``c_``,
107 ``cxx_`` or ``objc_``.
109 Another use of ``__has_feature`` is to check for compiler features not related
110 to the language standard, such as e.g. :doc:`AddressSanitizer
113 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
114 to ``__has_feature``.
116 The feature tag is described along with the language feature below.
118 The feature name or extension name can also be specified with a preceding and
119 following ``__`` (double underscore) to avoid interference from a macro with
120 the same name. For instance, ``__cxx_rvalue_references__`` can be used instead
121 of ``cxx_rvalue_references``.
123 ``__has_cpp_attribute``
124 -----------------------
126 This function-like macro is available in C++20 by default, and is provided as an
127 extension in earlier language standards. It takes a single argument that is the
128 name of a double-square-bracket-style attribute. The argument can either be a
129 single identifier or a scoped identifier. If the attribute is supported, a
130 nonzero value is returned. If the attribute is a standards-based attribute, this
131 macro returns a nonzero value based on the year and month in which the attribute
132 was voted into the working draft. See `WG21 SD-6
133 <https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
134 for the list of values returned for standards-based attributes. If the attribute
135 is not supported by the current compilation target, this macro evaluates to 0.
136 It can be used like this:
140 #ifndef __has_cpp_attribute // For backwards compatibility
141 #define __has_cpp_attribute(x) 0
145 #if __has_cpp_attribute(clang::fallthrough)
146 #define FALLTHROUGH [[clang::fallthrough]]
152 The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
153 the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
154 of these namespaces can be specified with a preceding and following ``__``
155 (double underscore) to avoid interference from a macro with the same name. For
156 instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
158 ``__has_c_attribute``
159 ---------------------
161 This function-like macro takes a single argument that is the name of an
162 attribute exposed with the double square-bracket syntax in C mode. The argument
163 can either be a single identifier or a scoped identifier. If the attribute is
164 supported, a nonzero value is returned. If the attribute is not supported by the
165 current compilation target, this macro evaluates to 0. It can be used like this:
169 #ifndef __has_c_attribute // Optional of course.
170 #define __has_c_attribute(x) 0 // Compatibility with non-clang compilers.
174 #if __has_c_attribute(fallthrough)
175 #define FALLTHROUGH [[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``.
190 This function-like macro takes a single identifier argument that is the name of
191 a GNU-style attribute. It evaluates to 1 if the attribute is supported by the
192 current compilation target, or 0 if not. It can be used like this:
196 #ifndef __has_attribute // Optional of course.
197 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
201 #if __has_attribute(always_inline)
202 #define ALWAYS_INLINE __attribute__((always_inline))
204 #define ALWAYS_INLINE
208 The attribute name can also be specified with a preceding and following ``__``
209 (double underscore) to avoid interference from a macro with the same name. For
210 instance, ``__always_inline__`` can be used instead of ``always_inline``.
213 ``__has_declspec_attribute``
214 ----------------------------
216 This function-like macro takes a single identifier argument that is the name of
217 an attribute implemented as a Microsoft-style ``__declspec`` attribute. It
218 evaluates to 1 if the attribute is supported by the current compilation target,
219 or 0 if not. It can be used like this:
223 #ifndef __has_declspec_attribute // Optional of course.
224 #define __has_declspec_attribute(x) 0 // Compatibility with non-clang compilers.
228 #if __has_declspec_attribute(dllexport)
229 #define DLLEXPORT __declspec(dllexport)
235 The attribute name can also be specified with a preceding and following ``__``
236 (double underscore) to avoid interference from a macro with the same name. For
237 instance, ``__dllexport__`` can be used instead of ``dllexport``.
242 This function-like macro takes a single identifier argument that might be either
243 a reserved word or a regular identifier. It evaluates to 1 if the argument is just
244 a regular identifier and not a reserved word, in the sense that it can then be
245 used as the name of a user-defined function or variable. Otherwise it evaluates
246 to 0. It can be used like this:
251 #ifdef __is_identifier // Compatibility with non-clang compilers.
252 #if __is_identifier(__wchar_t)
253 typedef wchar_t __wchar_t;
257 __wchar_t WideCharacter;
260 Include File Checking Macros
261 ============================
263 Not all developments systems have the same include files. The
264 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
265 you to check for the existence of an include file before doing a possibly
266 failing ``#include`` directive. Include file checking macros must be used
267 as expressions in ``#if`` or ``#elif`` preprocessing directives.
269 .. _langext-__has_include:
274 This function-like macro takes a single file name string argument that is the
275 name of an include file. It evaluates to 1 if the file can be found using the
276 include paths, or 0 otherwise:
280 // Note the two possible file name string formats.
281 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
282 # include "myinclude.h"
285 To test for this feature, use ``#if defined(__has_include)``:
289 // To avoid problem with non-clang compilers not having this macro.
290 #if defined(__has_include)
291 #if __has_include("myinclude.h")
292 # include "myinclude.h"
296 .. _langext-__has_include_next:
298 ``__has_include_next``
299 ----------------------
301 This function-like macro takes a single file name string argument that is the
302 name of an include file. It is like ``__has_include`` except that it looks for
303 the second instance of the given file found in the include paths. It evaluates
304 to 1 if the second instance of the file can be found using the include paths,
309 // Note the two possible file name string formats.
310 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
311 # include_next "myinclude.h"
314 // To avoid problem with non-clang compilers not having this macro.
315 #if defined(__has_include_next)
316 #if __has_include_next("myinclude.h")
317 # include_next "myinclude.h"
321 Note that ``__has_include_next``, like the GNU extension ``#include_next``
322 directive, is intended for use in headers only, and will issue a warning if
323 used in the top-level compilation file. A warning will also be issued if an
324 absolute path is used in the file argument.
329 This function-like macro takes a string literal that represents a command line
330 option for a warning and returns true if that is a valid warning option.
334 #if __has_warning("-Wformat")
338 .. _languageextensions-builtin-macros:
344 Defined to a string that contains the name of the main input file passed to
348 Clang-specific extension that functions similar to ``__FILE__`` but only
349 renders the last path component (the filename) instead of an invocation
350 dependent full path to that file.
353 Defined to an integer value that starts at zero and is incremented each time
354 the ``__COUNTER__`` macro is expanded.
356 ``__INCLUDE_LEVEL__``
357 Defined to an integral value that is the include depth of the file currently
358 being translated. For the main file, this value is zero.
361 Defined to the date and time of the last modification of the current source
365 Defined when compiling with Clang
368 Defined to the major marketing version number of Clang (e.g., the 2 in
369 2.0.1). Note that marketing version numbers should not be used to check for
370 language features, as different vendors use different numbering schemes.
371 Instead, use the :ref:`langext-feature_check`.
374 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note
375 that marketing version numbers should not be used to check for language
376 features, as different vendors use different numbering schemes. Instead, use
377 the :ref:`langext-feature_check`.
379 ``__clang_patchlevel__``
380 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
382 ``__clang_version__``
383 Defined to a string that captures the Clang marketing version, including the
384 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
386 ``__clang_literal_encoding__``
387 Defined to a narrow string literal that represents the current encoding of
388 narrow string literals, e.g., ``"hello"``. This macro typically expands to
389 "UTF-8" (but may change in the future if the
390 ``-fexec-charset="Encoding-Name"`` option is implemented.)
392 ``__clang_wide_literal_encoding__``
393 Defined to a narrow string literal that represents the current encoding of
394 wide string literals, e.g., ``L"hello"``. This macro typically expands to
395 "UTF-16" or "UTF-32" (but may change in the future if the
396 ``-fwide-exec-charset="Encoding-Name"`` option is implemented.)
400 Vectors and Extended Vectors
401 ============================
403 Supports the GCC, OpenCL, AltiVec, NEON and SVE vector extensions.
405 OpenCL vector types are created using the ``ext_vector_type`` attribute. It
406 supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example
411 typedef float float4 __attribute__((ext_vector_type(4)));
412 typedef float float2 __attribute__((ext_vector_type(2)));
414 float4 foo(float2 a, float2 b) {
421 Query for this feature with ``__has_attribute(ext_vector_type)``.
423 Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
424 and functions. For example:
428 vector float foo(vector int a) {
430 b = vec_add(a, a) + a;
431 return (vector float)b;
434 NEON vector types are created using ``neon_vector_type`` and
435 ``neon_polyvector_type`` attributes. For example:
439 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
440 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
442 int8x8_t foo(int8x8_t a) {
448 GCC vector types are created using the ``vector_size(N)`` attribute. The
449 argument ``N`` specifies the number of bytes that will be allocated for an
450 object of this type. The size has to be multiple of the size of the vector
451 element type. For example:
455 // OK: This declares a vector type with four 'int' elements
456 typedef int int4 __attribute__((vector_size(4 * sizeof(int))));
458 // ERROR: '11' is not a multiple of sizeof(int)
459 typedef int int_impossible __attribute__((vector_size(11)));
471 Clang also supports the ext_vector_type attribute with boolean element types in
472 C and C++. For example:
476 // legal for Clang, error for GCC:
477 typedef bool bool4 __attribute__((ext_vector_type(4)));
478 // Objects of bool4 type hold 8 bits, sizeof(bool4) == 1
486 Boolean vectors are a Clang extension of the ext vector type. Boolean vectors
487 are intended, though not guaranteed, to map to vector mask registers. The size
488 parameter of a boolean vector type is the number of bits in the vector. The
489 boolean vector is dense and each bit in the boolean vector is one vector
492 The semantics of boolean vectors borrows from C bit-fields with the following
495 * Distinct boolean vectors are always distinct memory objects (there is no
497 * Only the operators `?:`, `!`, `~`, `|`, `&`, `^` and comparison are allowed on
499 * Casting a scalar bool value to a boolean vector type means broadcasting the
500 scalar value onto all lanes (same as general ext_vector_type).
501 * It is not possible to access or swizzle elements of a boolean vector
502 (different than general ext_vector_type).
504 The size and alignment are both the number of bits rounded up to the next power
505 of two, but the alignment is at most the maximum vector alignment of the
512 Vector literals can be used to create vectors from a set of scalars, or
513 vectors. Either parentheses or braces form can be used. In the parentheses
514 form the number of literal values specified must be one, i.e. referring to a
515 scalar value, or must match the size of the vector type being created. If a
516 single scalar literal value is specified, the scalar literal value will be
517 replicated to all the components of the vector type. In the brackets form any
518 number of literals can be specified. For example:
522 typedef int v4si __attribute__((__vector_size__(16)));
523 typedef float float4 __attribute__((ext_vector_type(4)));
524 typedef float float2 __attribute__((ext_vector_type(2)));
526 v4si vsi = (v4si){1, 2, 3, 4};
527 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
528 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1).
529 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0).
530 vector int vi3 = (vector int)(1, 2); // error
531 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
532 vector int vi5 = (vector int)(1, 2, 3, 4);
533 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
538 The table below shows the support for each operation by vector extension. A
539 dash indicates that an operation is not accepted according to a corresponding
542 ============================== ======= ======= ============= ======= =====
543 Operator OpenCL AltiVec GCC NEON SVE
544 ============================== ======= ======= ============= ======= =====
545 [] yes yes yes yes yes
546 unary operators +, -- yes yes yes yes yes
547 ++, -- -- yes yes yes no no
548 +,--,*,/,% yes yes yes yes yes
549 bitwise operators &,|,^,~ yes yes yes yes yes
550 >>,<< yes yes yes yes yes
551 !, &&, || yes -- yes yes yes
552 ==, !=, >, <, >=, <= yes yes yes yes yes
553 = yes yes yes yes yes
554 ?: [#]_ yes -- yes yes yes
555 sizeof yes yes yes yes yes [#]_
556 C-style cast yes yes yes no no
557 reinterpret_cast yes no yes no no
558 static_cast yes no yes no no
559 const_cast no no no no no
560 address &v[i] no no no [#]_ no no
561 ============================== ======= ======= ============= ======= =====
563 See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
565 .. [#] ternary operator(?:) has different behaviors depending on condition
566 operand's vector type. If the condition is a GNU vector (i.e. __vector_size__),
567 a NEON vector or an SVE vector, it's only available in C++ and uses normal bool
568 conversions (that is, != 0).
569 If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
570 And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
571 .. [#] sizeof can only be used on vector length specific SVE types.
572 .. [#] Clang does not allow the address of an element to be taken while GCC
573 allows this. This is intentional for vectors with a boolean element type and
574 not implemented otherwise.
579 **Note: The implementation of vector builtins is work-in-progress and incomplete.**
581 In addition to the operators mentioned above, Clang provides a set of builtins
582 to perform additional operations on certain scalar and vector types.
584 Let ``T`` be one of the following types:
586 * an integer type (as in C2x 6.2.5p19), but excluding enumerated types and _Bool
587 * the standard floating types float or double
588 * a half-precision floating point type, if one is supported on the target
591 For scalar types, consider the operation applied to a vector with a single element.
593 *Elementwise Builtins*
595 Each builtin returns a vector equivalent to applying the specified operation
596 elementwise to the input.
598 Unless specified otherwise operation(±0) = ±0 and operation(±infinity) = ±infinity
600 =========================================== ================================================================ =========================================
601 Name Operation Supported element types
602 =========================================== ================================================================ =========================================
603 T __builtin_elementwise_abs(T x) return the absolute value of a number x; the absolute value of signed integer and floating point types
604 the most negative integer remains the most negative integer
605 T __builtin_elementwise_ceil(T x) return the smallest integral value greater than or equal to x floating point types
606 T __builtin_elementwise_floor(T x) return the largest integral value less than or equal to x floating point types
607 T __builtin_elementwise_roundeven(T x) round x to the nearest integer value in floating point format, floating point types
608 rounding halfway cases to even (that is, to the nearest value
609 that is an even integer), regardless of the current rounding
611 T__builtin_elementwise_trunc(T x) return the integral value nearest to but no larger in floating point types
613 T __builtin_elementwise_max(T x, T y) return x or y, whichever is larger integer and floating point types
614 T __builtin_elementwise_min(T x, T y) return x or y, whichever is smaller integer and floating point types
615 T __builtin_elementwise_add_sat(T x, T y) return the sum of x and y, clamped to the range of integer types
616 representable values for the signed/unsigned integer type.
617 T __builtin_elementwise_sub_sat(T x, T y) return the difference of x and y, clamped to the range of integer types
618 representable values for the signed/unsigned integer type.
619 =========================================== ================================================================ =========================================
624 Each builtin returns a scalar equivalent to applying the specified
625 operation(x, y) as recursive even-odd pairwise reduction to all vector
626 elements. ``operation(x, y)`` is repeatedly applied to each non-overlapping
627 even-odd element pair with indices ``i * 2`` and ``i * 2 + 1`` with
628 ``i in [0, Number of elements / 2)``. If the numbers of elements is not a
629 power of 2, the vector is widened with neutral elements for the reduction
630 at the end to the next power of 2.
636 __builtin_reduce_add([e3, e2, e1, e0]) = __builtin_reduced_add([e3 + e2, e1 + e0])
637 = (e3 + e2) + (e1 + e0)
640 Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
642 ======================================= ================================================================ ==================================
643 Name Operation Supported element types
644 ======================================= ================================================================ ==================================
645 ET __builtin_reduce_max(VT a) return x or y, whichever is larger; If exactly one argument is integer and floating point types
646 a NaN, return the other argument. If both arguments are NaNs,
648 ET __builtin_reduce_min(VT a) return x or y, whichever is smaller; If exactly one argument integer and floating point types
649 is a NaN, return the other argument. If both arguments are
650 NaNs, fmax() return a NaN.
651 ET __builtin_reduce_add(VT a) \+ integer and floating point types
652 ET __builtin_reduce_mul(VT a) \* integer and floating point types
653 ET __builtin_reduce_and(VT a) & integer types
654 ET __builtin_reduce_or(VT a) \| integer types
655 ET __builtin_reduce_xor(VT a) ^ integer types
656 ======================================= ================================================================ ==================================
661 Clang provides an extension for matrix types, which is currently being
662 implemented. See :ref:`the draft specification <matrixtypes>` for more details.
664 For example, the code below uses the matrix types extension to multiply two 4x4
665 float matrices and add the result to a third 4x4 matrix.
669 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
671 m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
675 The matrix type extension also supports operations on a matrix and a scalar.
679 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
682 return (a + 23) * 12;
685 The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
689 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
696 The matrix type extension supports compound assignments for addition, subtraction, and multiplication on matrices
697 and on a matrix and a scalar, provided their types are consistent.
701 typedef float m4x4_t __attribute__((matrix_type(4, 4)));
703 m4x4_t f(m4x4_t a, m4x4_t b) {
712 The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
716 typedef int ix5x5 __attribute__((matrix_type(5, 5)));
717 typedef float fx5x5 __attribute__((matrix_type(5, 5)));
719 fx5x5 f1(ix5x5 i, fx5x5 f) {
724 template <typename X>
725 using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
728 matrix_5_5<double> d;
730 i = (matrix_5_5<int>)d;
731 i = static_cast<matrix_5_5<int>>(d);
734 Half-Precision Floating Point
735 =============================
737 Clang supports three half-precision (16-bit) floating point types: ``__fp16``,
738 ``_Float16`` and ``__bf16``. These types are supported in all language modes.
740 ``__fp16`` is supported on every target, as it is purely a storage format; see below.
741 ``_Float16`` is currently only supported on the following targets, with further
742 targets pending ABI standardization:
745 * 64-bit ARM (AArch64)
750 On X86 targets, ``_Float16`` is supported as long as SSE2 is available, which
751 includes all 64-bit and all recent 32-bit processors. When the target supports
752 AVX512-FP16, ``_Float16`` arithmetic is performed using that native support.
753 Otherwise, ``_Float16`` arithmetic is performed by promoting to ``float``,
754 performing the operation, and then truncating to ``_Float16``. When doing this
755 emulation, Clang defaults to following the C standard's rules for excess
756 precision arithmetic, which avoids intermediate truncations within statements
757 and may generate different results from a strict operation-by-operation
760 ``_Float16`` will be supported on more targets as they define ABIs for it.
762 ``__bf16`` is purely a storage format; it is currently only supported on the following targets:
764 * 64-bit ARM (AArch64)
767 On X86 targets, ``__bf16`` is supported as long as SSE2 is available, which
768 includes all 64-bit and all recent 32-bit processors.
770 ``__fp16`` is a storage and interchange format only. This means that values of
771 ``__fp16`` are immediately promoted to (at least) ``float`` when used in arithmetic
772 operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``.
773 The behavior of ``__fp16`` is specified by the ARM C Language Extensions (`ACLE <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053d/IHI0053D_acle_2_1.pdf>`_).
774 Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM
777 ``_Float16`` is an interchange floating-point type. This means that, just like arithmetic on
778 ``float`` or ``double``, arithmetic on ``_Float16`` operands is formally performed in the
779 ``_Float16`` type, so that e.g. the result of adding two ``_Float16`` values has type
780 ``_Float16``. The behavior of ``_Float16`` is specified by ISO/IEC TS 18661-3:2015
781 ("Floating-point extensions for C"). As with ``__fp16``, Clang uses the ``binary16``
782 format from IEEE 754-2008 for ``_Float16``.
784 ``_Float16`` arithmetic will be performed using native half-precision support
785 when available on the target (e.g. on ARMv8.2a); otherwise it will be performed
786 at a higher precision (currently always ``float``) and then truncated down to
787 ``_Float16``. Note that C and C++ allow intermediate floating-point operands
788 of an expression to be computed with greater precision than is expressible in
789 their type, so Clang may avoid intermediate truncations in certain cases; this may
790 lead to results that are inconsistent with native arithmetic.
792 It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
793 as it has been defined by the C standards committee and has behavior that is
794 more familiar to most programmers.
796 Because ``__fp16`` operands are always immediately promoted to ``float``, the
797 common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
798 arithmetic conversions is ``float``.
800 A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
803 Because default argument promotion only applies to the standard floating-point
804 types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
805 or untyped arguments. As a consequence, some caution must be taken when using
806 certain library facilities with ``_Float16``; for example, there is no ``printf`` format
807 specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
808 ``double`` when passed to ``printf``, so the programmer must explicitly cast it to
809 ``double`` before using it with an ``%f`` or similar specifier.
811 Messages on ``deprecated`` and ``unavailable`` Attributes
812 =========================================================
814 An optional string message can be added to the ``deprecated`` and
815 ``unavailable`` attributes. For example:
819 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
821 If the deprecated or unavailable declaration is used, the message will be
822 incorporated into the appropriate diagnostic:
826 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
827 [-Wdeprecated-declarations]
831 Query for this feature with
832 ``__has_extension(attribute_deprecated_with_message)`` and
833 ``__has_extension(attribute_unavailable_with_message)``.
835 Attributes on Enumerators
836 =========================
838 Clang allows attributes to be written on individual enumerators. This allows
839 enumerators to be deprecated, made unavailable, etc. The attribute must appear
840 after the enumerator name and before any initializer, like so:
847 OM_Terrified __attribute__((deprecated)),
848 OM_AbortOnError __attribute__((deprecated)) = 4
851 Attributes on the ``enum`` declaration do not apply to individual enumerators.
853 Query for this feature with ``__has_extension(enumerator_attributes)``.
855 C++11 Attributes on using-declarations
856 ======================================
858 Clang allows C++-style ``[[]]`` attributes to be written on using-declarations.
863 [[clang::using_if_exists]] using foo::bar;
864 using foo::baz [[clang::using_if_exists]];
866 You can test for support for this extension with
867 ``__has_extension(cxx_attributes_on_using_declarations)``.
869 'User-Specified' System Frameworks
870 ==================================
872 Clang provides a mechanism by which frameworks can be built in such a way that
873 they will always be treated as being "system frameworks", even if they are not
874 present in a system framework directory. This can be useful to system
875 framework developers who want to be able to test building other applications
876 with development builds of their framework, including the manner in which the
877 compiler changes warning behavior for system headers.
879 Framework developers can opt-in to this mechanism by creating a
880 "``.system_framework``" file at the top-level of their framework. That is, the
881 framework should have contents like:
885 .../TestFramework.framework
886 .../TestFramework.framework/.system_framework
887 .../TestFramework.framework/Headers
888 .../TestFramework.framework/Headers/TestFramework.h
891 Clang will treat the presence of this file as an indicator that the framework
892 should be treated as a system framework, regardless of how it was found in the
893 framework search path. For consistency, we recommend that such files never be
894 included in installed versions of the framework.
896 Checks for Standard Language Features
897 =====================================
899 The ``__has_feature`` macro can be used to query if certain standard language
900 features are enabled. The ``__has_extension`` macro can be used to query if
901 language features are available as an extension when compiling for a standard
902 which does not provide them. The features which can be tested are listed here.
904 Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
905 These are macros with names of the form ``__cpp_<feature_name>``, and are
906 intended to be a portable way to query the supported features of the compiler.
907 See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
908 information on the version of SD-6 supported by each Clang release, and the
909 macros provided by that revision of the recommendations.
914 The features listed below are part of the C++98 standard. These features are
915 enabled by default when compiling C++ code.
920 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
921 enabled. For example, compiling code with ``-fno-exceptions`` disables C++
927 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For
928 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
933 The features listed below are part of the C++11 standard. As a result, all
934 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
935 when compiling C++ code.
937 C++11 SFINAE includes access control
938 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
940 Use ``__has_feature(cxx_access_control_sfinae)`` or
941 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
942 access-control errors (e.g., calling a private constructor) are considered to
943 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
944 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
946 C++11 alias templates
947 ^^^^^^^^^^^^^^^^^^^^^
949 Use ``__has_feature(cxx_alias_templates)`` or
950 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
951 alias declarations and alias templates is enabled.
953 C++11 alignment specifiers
954 ^^^^^^^^^^^^^^^^^^^^^^^^^^
956 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
957 determine if support for alignment specifiers using ``alignas`` is enabled.
959 Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
960 determine if support for the ``alignof`` keyword is enabled.
965 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
966 determine if support for attribute parsing with C++11's square bracket notation
969 C++11 generalized constant expressions
970 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
972 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
973 constant expressions (e.g., ``constexpr``) is enabled.
978 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
979 determine if support for the ``decltype()`` specifier is enabled. C++11's
980 ``decltype`` does not require type-completeness of a function call expression.
981 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
982 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
983 support for this feature is enabled.
985 C++11 default template arguments in function templates
986 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
988 Use ``__has_feature(cxx_default_function_template_args)`` or
989 ``__has_extension(cxx_default_function_template_args)`` to determine if support
990 for default template arguments in function templates is enabled.
992 C++11 ``default``\ ed functions
993 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
995 Use ``__has_feature(cxx_defaulted_functions)`` or
996 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
997 defaulted function definitions (with ``= default``) is enabled.
999 C++11 delegating constructors
1000 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1002 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
1003 delegating constructors is enabled.
1005 C++11 ``deleted`` functions
1006 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1008 Use ``__has_feature(cxx_deleted_functions)`` or
1009 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
1010 function definitions (with ``= delete``) is enabled.
1012 C++11 explicit conversion functions
1013 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1015 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
1016 ``explicit`` conversion functions is enabled.
1018 C++11 generalized initializers
1019 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1021 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
1022 generalized initializers (using braced lists and ``std::initializer_list``) is
1025 C++11 implicit move constructors/assignment operators
1026 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1028 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
1029 generate move constructors and move assignment operators where needed.
1031 C++11 inheriting constructors
1032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1034 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
1035 inheriting constructors is enabled.
1037 C++11 inline namespaces
1038 ^^^^^^^^^^^^^^^^^^^^^^^
1040 Use ``__has_feature(cxx_inline_namespaces)`` or
1041 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
1042 namespaces is enabled.
1047 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
1048 determine if support for lambdas is enabled.
1050 C++11 local and unnamed types as template arguments
1051 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1053 Use ``__has_feature(cxx_local_type_template_args)`` or
1054 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
1055 local and unnamed types as template arguments is enabled.
1060 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
1061 determine if support for noexcept exception specifications is enabled.
1063 C++11 in-class non-static data member initialization
1064 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1066 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
1067 initialization of non-static data members is enabled.
1072 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
1073 determine if support for ``nullptr`` is enabled.
1075 C++11 ``override control``
1076 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1078 Use ``__has_feature(cxx_override_control)`` or
1079 ``__has_extension(cxx_override_control)`` to determine if support for the
1080 override control keywords is enabled.
1082 C++11 reference-qualified functions
1083 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1085 Use ``__has_feature(cxx_reference_qualified_functions)`` or
1086 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
1087 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
1088 applied to ``*this``) is enabled.
1090 C++11 range-based ``for`` loop
1091 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1093 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
1094 determine if support for the range-based for loop is enabled.
1096 C++11 raw string literals
1097 ^^^^^^^^^^^^^^^^^^^^^^^^^
1099 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
1100 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
1102 C++11 rvalue references
1103 ^^^^^^^^^^^^^^^^^^^^^^^
1105 Use ``__has_feature(cxx_rvalue_references)`` or
1106 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
1107 references is enabled.
1109 C++11 ``static_assert()``
1110 ^^^^^^^^^^^^^^^^^^^^^^^^^
1112 Use ``__has_feature(cxx_static_assert)`` or
1113 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
1114 assertions using ``static_assert`` is enabled.
1116 C++11 ``thread_local``
1117 ^^^^^^^^^^^^^^^^^^^^^^
1119 Use ``__has_feature(cxx_thread_local)`` to determine if support for
1120 ``thread_local`` variables is enabled.
1122 C++11 type inference
1123 ^^^^^^^^^^^^^^^^^^^^
1125 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
1126 determine C++11 type inference is supported using the ``auto`` specifier. If
1127 this is disabled, ``auto`` will instead be a storage class specifier, as in C
1130 C++11 strongly typed enumerations
1131 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1133 Use ``__has_feature(cxx_strong_enums)`` or
1134 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
1135 typed, scoped enumerations is enabled.
1137 C++11 trailing return type
1138 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1140 Use ``__has_feature(cxx_trailing_return)`` or
1141 ``__has_extension(cxx_trailing_return)`` to determine if support for the
1142 alternate function declaration syntax with trailing return type is enabled.
1144 C++11 Unicode string literals
1145 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1147 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
1148 string literals is enabled.
1150 C++11 unrestricted unions
1151 ^^^^^^^^^^^^^^^^^^^^^^^^^
1153 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
1154 unrestricted unions is enabled.
1156 C++11 user-defined literals
1157 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1159 Use ``__has_feature(cxx_user_literals)`` to determine if support for
1160 user-defined literals is enabled.
1162 C++11 variadic templates
1163 ^^^^^^^^^^^^^^^^^^^^^^^^
1165 Use ``__has_feature(cxx_variadic_templates)`` or
1166 ``__has_extension(cxx_variadic_templates)`` to determine if support for
1167 variadic templates is enabled.
1172 The features listed below are part of the C++14 standard. As a result, all
1173 these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
1174 when compiling C++ code.
1176 C++14 binary literals
1177 ^^^^^^^^^^^^^^^^^^^^^
1179 Use ``__has_feature(cxx_binary_literals)`` or
1180 ``__has_extension(cxx_binary_literals)`` to determine whether
1181 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
1182 feature as an extension in all language modes.
1184 C++14 contextual conversions
1185 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1187 Use ``__has_feature(cxx_contextual_conversions)`` or
1188 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
1189 are used when performing an implicit conversion for an array bound in a
1190 *new-expression*, the operand of a *delete-expression*, an integral constant
1191 expression, or a condition in a ``switch`` statement.
1193 C++14 decltype(auto)
1194 ^^^^^^^^^^^^^^^^^^^^
1196 Use ``__has_feature(cxx_decltype_auto)`` or
1197 ``__has_extension(cxx_decltype_auto)`` to determine if support
1198 for the ``decltype(auto)`` placeholder type is enabled.
1200 C++14 default initializers for aggregates
1201 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1203 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
1204 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
1205 for default initializers in aggregate members is enabled.
1207 C++14 digit separators
1208 ^^^^^^^^^^^^^^^^^^^^^^
1210 Use ``__cpp_digit_separators`` to determine if support for digit separators
1211 using single quotes (for instance, ``10'000``) is enabled. At this time, there
1212 is no corresponding ``__has_feature`` name
1214 C++14 generalized lambda capture
1215 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1217 Use ``__has_feature(cxx_init_captures)`` or
1218 ``__has_extension(cxx_init_captures)`` to determine if support for
1219 lambda captures with explicit initializers is enabled
1220 (for instance, ``[n(0)] { return ++n; }``).
1222 C++14 generic lambdas
1223 ^^^^^^^^^^^^^^^^^^^^^
1225 Use ``__has_feature(cxx_generic_lambdas)`` or
1226 ``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
1227 (polymorphic) lambdas is enabled
1228 (for instance, ``[] (auto x) { return x + 1; }``).
1230 C++14 relaxed constexpr
1231 ^^^^^^^^^^^^^^^^^^^^^^^
1233 Use ``__has_feature(cxx_relaxed_constexpr)`` or
1234 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
1235 declarations, local variable modification, and control flow constructs
1236 are permitted in ``constexpr`` functions.
1238 C++14 return type deduction
1239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1241 Use ``__has_feature(cxx_return_type_deduction)`` or
1242 ``__has_extension(cxx_return_type_deduction)`` to determine if support
1243 for return type deduction for functions (using ``auto`` as a return type)
1246 C++14 runtime-sized arrays
1247 ^^^^^^^^^^^^^^^^^^^^^^^^^^
1249 Use ``__has_feature(cxx_runtime_array)`` or
1250 ``__has_extension(cxx_runtime_array)`` to determine if support
1251 for arrays of runtime bound (a restricted form of variable-length arrays)
1253 Clang's implementation of this feature is incomplete.
1255 C++14 variable templates
1256 ^^^^^^^^^^^^^^^^^^^^^^^^
1258 Use ``__has_feature(cxx_variable_templates)`` or
1259 ``__has_extension(cxx_variable_templates)`` to determine if support for
1260 templated variable declarations is enabled.
1265 The features listed below are part of the C11 standard. As a result, all these
1266 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
1267 compiling C code. Additionally, because these features are all
1268 backward-compatible, they are available as extensions in all language modes.
1270 C11 alignment specifiers
1271 ^^^^^^^^^^^^^^^^^^^^^^^^
1273 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1274 if support for alignment specifiers using ``_Alignas`` is enabled.
1276 Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1277 if support for the ``_Alignof`` keyword is enabled.
1279 C11 atomic operations
1280 ^^^^^^^^^^^^^^^^^^^^^
1282 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1283 if support for atomic types using ``_Atomic`` is enabled. Clang also provides
1284 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
1285 the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1286 ``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1289 Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1290 will otherwise use its own. When using its own, implementations of the atomic
1291 operations are provided as macros. In the cases where C11 also requires a real
1292 function, this header provides only the declaration of that function (along
1293 with a shadowing macro implementation), and you must link to a library which
1294 provides a definition of the function if you use it instead of the macro.
1296 C11 generic selections
1297 ^^^^^^^^^^^^^^^^^^^^^^
1299 Use ``__has_feature(c_generic_selections)`` or
1300 ``__has_extension(c_generic_selections)`` to determine if support for generic
1301 selections is enabled.
1303 As an extension, the C11 generic selection expression is available in all
1304 languages supported by Clang. The syntax is the same as that given in the C11
1307 In C, type compatibility is decided according to the rules given in the
1308 appropriate standard, but in C++, which lacks the type compatibility rules used
1309 in C, types are considered compatible only if they are equivalent.
1311 C11 ``_Static_assert()``
1312 ^^^^^^^^^^^^^^^^^^^^^^^^
1314 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1315 to determine if support for compile-time assertions using ``_Static_assert`` is
1318 C11 ``_Thread_local``
1319 ^^^^^^^^^^^^^^^^^^^^^
1321 Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1322 to determine if support for ``_Thread_local`` variables is enabled.
1327 Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1328 For example, compiling code with ``-fmodules`` enables the use of Modules.
1330 More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1332 Type Trait Primitives
1333 =====================
1335 Type trait primitives are special builtin constant expressions that can be used
1336 by the standard C++ library to facilitate or simplify the implementation of
1337 user-facing type traits in the <type_traits> header.
1339 They are not intended to be used directly by user code because they are
1340 implementation-defined and subject to change -- as such they're tied closely to
1341 the supported set of system headers, currently:
1345 * The Microsoft standard C++ library
1347 Clang supports the `GNU C++ type traits
1348 <https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1349 `Microsoft Visual C++ type traits
1350 <https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1351 as well as nearly all of the
1352 `Embarcadero C++ type traits
1353 <http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
1355 The following type trait primitives are supported by Clang. Those traits marked
1356 (C++) provide implementations for type traits specified by the C++ standard;
1357 ``__X(...)`` has the same semantics and constraints as the corresponding
1358 ``std::X_t<...>`` or ``std::X_v<...>`` type trait.
1360 * ``__array_rank(type)`` (Embarcadero):
1361 Returns the number of levels of array in the type ``type``:
1362 ``0`` if ``type`` is not an array type, and
1363 ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1364 * ``__array_extent(type, dim)`` (Embarcadero):
1365 The ``dim``'th array bound in the type ``type``, or ``0`` if
1366 ``dim >= __array_rank(type)``.
1367 * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1368 Deprecated, use ``__is_nothrow_assignable`` instead.
1369 * ``__has_nothrow_move_assign`` (GNU, Microsoft):
1370 Deprecated, use ``__is_nothrow_assignable`` instead.
1371 * ``__has_nothrow_copy`` (GNU, Microsoft):
1372 Deprecated, use ``__is_nothrow_constructible`` instead.
1373 * ``__has_nothrow_constructor`` (GNU, Microsoft):
1374 Deprecated, use ``__is_nothrow_constructible`` instead.
1375 * ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1376 Deprecated, use ``__is_trivially_assignable`` instead.
1377 * ``__has_trivial_move_assign`` (GNU, Microsoft):
1378 Deprecated, use ``__is_trivially_assignable`` instead.
1379 * ``__has_trivial_copy`` (GNU, Microsoft):
1380 Deprecated, use ``__is_trivially_copyable`` instead.
1381 * ``__has_trivial_constructor`` (GNU, Microsoft):
1382 Deprecated, use ``__is_trivially_constructible`` instead.
1383 * ``__has_trivial_move_constructor`` (GNU, Microsoft):
1384 Deprecated, use ``__is_trivially_constructible`` instead.
1385 * ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1386 Deprecated, use ``__is_trivially_destructible`` instead.
1387 * ``__has_unique_object_representations`` (C++, GNU)
1388 * ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1389 * ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1390 * ``__is_aggregate`` (C++, GNU, Microsoft)
1391 * ``__is_arithmetic`` (C++, Embarcadero)
1392 * ``__is_array`` (C++, Embarcadero)
1393 * ``__is_assignable`` (C++, MSVC 2015)
1394 * ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1395 * ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1396 * ``__is_complete_type(type)`` (Embarcadero):
1397 Return ``true`` if ``type`` is a complete type.
1398 Warning: this trait is dangerous because it can return different values at
1399 different points in the same program.
1400 * ``__is_compound`` (C++, Embarcadero)
1401 * ``__is_const`` (C++, Embarcadero)
1402 * ``__is_constructible`` (C++, MSVC 2013)
1403 * ``__is_convertible`` (C++, Embarcadero)
1404 * ``__is_convertible_to`` (Microsoft):
1405 Synonym for ``__is_convertible``.
1406 * ``__is_destructible`` (C++, MSVC 2013):
1407 Only available in ``-fms-extensions`` mode.
1408 * ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1409 * ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1410 * ``__is_final`` (C++, GNU, Microsoft)
1411 * ``__is_floating_point`` (C++, Embarcadero)
1412 * ``__is_function`` (C++, Embarcadero)
1413 * ``__is_fundamental`` (C++, Embarcadero)
1414 * ``__is_integral`` (C++, Embarcadero)
1415 * ``__is_interface_class`` (Microsoft):
1416 Returns ``false``, even for types defined with ``__interface``.
1417 * ``__is_literal`` (Clang):
1418 Synonym for ``__is_literal_type``.
1419 * ``__is_literal_type`` (C++, GNU, Microsoft):
1420 Note, the corresponding standard trait was deprecated in C++17
1421 and removed in C++20.
1422 * ``__is_lvalue_reference`` (C++, Embarcadero)
1423 * ``__is_member_object_pointer`` (C++, Embarcadero)
1424 * ``__is_member_function_pointer`` (C++, Embarcadero)
1425 * ``__is_member_pointer`` (C++, Embarcadero)
1426 * ``__is_nothrow_assignable`` (C++, MSVC 2013)
1427 * ``__is_nothrow_constructible`` (C++, MSVC 2013)
1428 * ``__is_nothrow_destructible`` (C++, MSVC 2013)
1429 Only available in ``-fms-extensions`` mode.
1430 * ``__is_object`` (C++, Embarcadero)
1431 * ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1432 Note, the corresponding standard trait was deprecated in C++20.
1433 * ``__is_pointer`` (C++, Embarcadero)
1434 * ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1435 * ``__is_reference`` (C++, Embarcadero)
1436 * ``__is_rvalue_reference`` (C++, Embarcadero)
1437 * ``__is_same`` (C++, Embarcadero)
1438 * ``__is_same_as`` (GCC): Synonym for ``__is_same``.
1439 * ``__is_scalar`` (C++, Embarcadero)
1440 * ``__is_sealed`` (Microsoft):
1441 Synonym for ``__is_final``.
1442 * ``__is_signed`` (C++, Embarcadero):
1443 Returns false for enumeration types, and returns true for floating-point
1444 types. Note, before Clang 10, returned true for enumeration types if the
1445 underlying type was signed, and returned false for floating-point types.
1446 * ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1447 * ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1448 * ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1449 * ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1450 * ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1451 * ``__is_trivially_destructible`` (C++, MSVC 2013)
1452 * ``__is_trivially_relocatable`` (Clang): Returns true if moving an object
1453 of the given type, and then destroying the source object, is known to be
1454 functionally equivalent to copying the underlying bytes and then dropping the
1455 source object on the floor. This is true of trivial types and types which
1456 were made trivially relocatable via the ``clang::trivial_abi`` attribute.
1457 * ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1458 * ``__is_unsigned`` (C++, Embarcadero):
1459 Returns false for enumeration types. Note, before Clang 13, returned true for
1460 enumeration types if the underlying type was unsigned.
1461 * ``__is_void`` (C++, Embarcadero)
1462 * ``__is_volatile`` (C++, Embarcadero)
1463 * ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a
1464 reference of type ``T`` bound to an expression of type ``U`` would bind to a
1465 materialized temporary object. If ``T`` is not a reference type the result
1466 is false. Note this trait will also return false when the initialization of
1467 ``T`` from ``U`` is ill-formed.
1468 * ``__underlying_type`` (C++, GNU, Microsoft)
1470 In addition, the following expression traits are supported:
1472 * ``__is_lvalue_expr(e)`` (Embarcadero):
1473 Returns true if ``e`` is an lvalue expression.
1474 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1475 * ``__is_rvalue_expr(e)`` (Embarcadero):
1476 Returns true if ``e`` is a prvalue expression.
1477 Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1479 There are multiple ways to detect support for a type trait ``__X`` in the
1480 compiler, depending on the oldest version of Clang you wish to support.
1482 * From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1483 * From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1484 * From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1485 the following traits:
1487 * ``__has_nothrow_assign``
1488 * ``__has_nothrow_copy``
1489 * ``__has_nothrow_constructor``
1490 * ``__has_trivial_assign``
1491 * ``__has_trivial_copy``
1492 * ``__has_trivial_constructor``
1493 * ``__has_trivial_destructor``
1494 * ``__has_virtual_destructor``
1498 * ``__is_constructible``
1499 * ``__is_convertible_to``
1504 * ``__is_standard_layout``
1506 * ``__is_polymorphic``
1509 * ``__is_trivially_assignable``
1510 * ``__is_trivially_constructible``
1511 * ``__is_trivially_copyable``
1513 * ``__underlying_type``
1515 A simplistic usage example as might be seen in standard C++ headers follows:
1519 #if __has_builtin(__is_convertible_to)
1520 template<typename From, typename To>
1521 struct is_convertible_to {
1522 static const bool value = __is_convertible_to(From, To);
1525 // Emulate type trait for compatibility with other compilers.
1531 The syntax and high level language feature description is in
1532 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1533 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1535 Query for this feature with ``__has_extension(blocks)``.
1537 ASM Goto with Output Constraints
1538 ================================
1540 In addition to the functionality provided by `GCC's extended
1541 assembly <https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html>`_, clang
1542 supports output constraints with the `goto` form.
1544 The goto form of GCC's extended assembly allows the programmer to branch to a C
1545 label from within an inline assembly block. Clang extends this behavior by
1546 allowing the programmer to use output constraints:
1552 asm goto("# %0 %1 %l2" : "=r"(y) : "r"(x) : : err);
1558 It's important to note that outputs are valid only on the "fallthrough" branch.
1559 Using outputs on an indirect branch may result in undefined behavior. For
1560 example, in the function above, use of the value assigned to `y` in the `err`
1561 block is undefined behavior.
1563 When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1564 outputs) with the `+r` constraint, there is a hidden input that's created
1565 before the label, so numeric references to operands must account for that.
1570 // %0 and %1 both refer to x
1571 // %l2 refers to err
1572 asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1578 This was changed to match GCC in clang-13; for better portability, symbolic
1579 references can be used instead of numeric references.
1584 asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1590 Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1592 Objective-C Features
1593 ====================
1595 Related result types
1596 --------------------
1598 According to Cocoa conventions, Objective-C methods with certain names
1599 ("``init``", "``alloc``", etc.) always return objects that are an instance of
1600 the receiving class's type. Such methods are said to have a "related result
1601 type", meaning that a message send to one of these methods will have the same
1602 static type as an instance of the receiver class. For example, given the
1605 .. code-block:: objc
1612 @interface NSArray : NSObject
1615 and this common initialization pattern
1617 .. code-block:: objc
1619 NSArray *array = [[NSArray alloc] init];
1621 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1622 ``alloc`` implicitly has a related result type. Similarly, the type of the
1623 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1624 related result type and its receiver is known to have the type ``NSArray *``.
1625 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1626 would have had type ``id``, as declared in the method signature.
1628 A method with a related result type can be declared by using the type
1629 ``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1630 that is only permitted in the result type of an Objective-C method, e.g.
1632 .. code-block:: objc
1635 + (instancetype)constructAnA;
1638 The related result type can also be inferred for some methods. To determine
1639 whether a method has an inferred related result type, the first word in the
1640 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1641 and the method will have a related result type if its return type is compatible
1642 with the type of its class and if:
1644 * the first word is "``alloc``" or "``new``", and the method is a class method,
1647 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1648 and the method is an instance method.
1650 If a method with a related result type is overridden by a subclass method, the
1651 subclass method must also return a type that is compatible with the subclass
1654 .. code-block:: objc
1656 @interface NSString : NSObject
1657 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1660 Related result types only affect the type of a message send or property access
1661 via the given method. In all other respects, a method with a related result
1662 type is treated the same way as method that returns ``id``.
1664 Use ``__has_feature(objc_instancetype)`` to determine whether the
1665 ``instancetype`` contextual keyword is available.
1667 Automatic reference counting
1668 ----------------------------
1670 Clang provides support for :doc:`automated reference counting
1671 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1672 for manual ``retain``/``release``/``autorelease`` message sends. There are three
1673 feature macros associated with automatic reference counting:
1674 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1675 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1676 automated reference counting also includes support for ``__weak`` pointers to
1677 Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1678 are allowed to have fields that are pointers to Objective-C objects managed by
1679 automatic reference counting.
1686 Clang supports ARC-style weak and unsafe references in Objective-C even
1687 outside of ARC mode. Weak references must be explicitly enabled with
1688 the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1689 to test whether they are enabled. Unsafe references are enabled
1690 unconditionally. ARC-style weak and unsafe references cannot be used
1691 when Objective-C garbage collection is enabled.
1693 Except as noted below, the language rules for the ``__weak`` and
1694 ``__unsafe_unretained`` qualifiers (and the ``weak`` and
1695 ``unsafe_unretained`` property attributes) are just as laid out
1696 in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1697 In particular, note that some classes do not support forming weak
1698 references to their instances, and note that special care must be
1699 taken when storing weak references in memory where initialization
1700 and deinitialization are outside the responsibility of the compiler
1701 (such as in ``malloc``-ed memory).
1703 Loading from a ``__weak`` variable always implicitly retains the
1704 loaded value. In non-ARC modes, this retain is normally balanced
1705 by an implicit autorelease. This autorelease can be suppressed
1706 by performing the load in the receiver position of a ``-retain``
1707 message send (e.g. ``[weakReference retain]``); note that this performs
1708 only a single retain (the retain done when primitively loading from
1709 the weak reference).
1711 For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1712 default behavior of variables and therefore is not needed. However,
1713 it does have an effect on the semantics of block captures: normally,
1714 copying a block which captures an Objective-C object or block pointer
1715 causes the captured pointer to be retained or copied, respectively,
1716 but that behavior is suppressed when the captured variable is qualified
1717 with ``__unsafe_unretained``.
1719 Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1720 all non-ARC modes and was silently ignored outside of GC modes. It now
1721 means the ARC-style qualifier in all non-GC modes and is no longer
1722 allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1723 It is expected that ``-fobjc-weak`` will eventually be enabled by default
1724 in all non-GC Objective-C modes.
1726 .. _objc-fixed-enum:
1728 Enumerations with a fixed underlying type
1729 -----------------------------------------
1731 Clang provides support for C++11 enumerations with a fixed underlying type
1732 within Objective-C. For example, one can write an enumeration type as:
1736 typedef enum : unsigned char { Red, Green, Blue } Color;
1738 This specifies that the underlying type, which is used to store the enumeration
1739 value, is ``unsigned char``.
1741 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1742 underlying types is available in Objective-C.
1744 Interoperability with C++11 lambdas
1745 -----------------------------------
1747 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1748 permitting a lambda to be implicitly converted to a block pointer with the
1749 corresponding signature. For example, consider an API such as ``NSArray``'s
1750 array-sorting method:
1752 .. code-block:: objc
1754 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1756 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1757 (^)(id, id)``, and parameters of this type are generally provided with block
1758 literals as arguments. However, one can also use a C++11 lambda so long as it
1759 provides the same signature (in this case, accepting two parameters of type
1760 ``id`` and returning an ``NSComparisonResult``):
1762 .. code-block:: objc
1764 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1766 const NSStringCompareOptions comparisonOptions
1767 = NSCaseInsensitiveSearch | NSNumericSearch |
1768 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1769 NSLocale *currentLocale = [NSLocale currentLocale];
1771 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1772 NSRange string1Range = NSMakeRange(0, [s1 length]);
1773 return [s1 compare:s2 options:comparisonOptions
1774 range:string1Range locale:currentLocale];
1776 NSLog(@"sorted: %@", sorted);
1778 This code relies on an implicit conversion from the type of the lambda
1779 expression (an unnamed, local class type called the *closure type*) to the
1780 corresponding block pointer type. The conversion itself is expressed by a
1781 conversion operator in that closure type that produces a block pointer with the
1782 same signature as the lambda itself, e.g.,
1784 .. code-block:: objc
1786 operator NSComparisonResult (^)(id, id)() const;
1788 This conversion function returns a new block that simply forwards the two
1789 parameters to the lambda object (which it captures by copy), then returns the
1790 result. The returned block is first copied (with ``Block_copy``) and then
1791 autoreleased. As an optimization, if a lambda expression is immediately
1792 converted to a block pointer (as in the first example, above), then the block
1793 is not copied and autoreleased: rather, it is given the same lifetime as a
1794 block literal written at that point in the program, which avoids the overhead
1795 of copying a block to the heap in the common case.
1797 The conversion from a lambda to a block pointer is only available in
1798 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1799 management (autorelease).
1801 Object Literals and Subscripting
1802 --------------------------------
1804 Clang provides support for :doc:`Object Literals and Subscripting
1805 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1806 programming patterns, makes programs more concise, and improves the safety of
1807 container creation. There are several feature macros associated with object
1808 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1809 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1810 tests the availability of dictionary literals;
1811 ``__has_feature(objc_subscripting)`` tests the availability of object
1814 Objective-C Autosynthesis of Properties
1815 ---------------------------------------
1817 Clang provides support for autosynthesis of declared properties. Using this
1818 feature, clang provides default synthesis of those properties not declared
1819 @dynamic and not having user provided backing getter and setter methods.
1820 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1821 of this feature in version of clang being used.
1823 .. _langext-objc-retain-release:
1825 Objective-C retaining behavior attributes
1826 -----------------------------------------
1828 In Objective-C, functions and methods are generally assumed to follow the
1829 `Cocoa Memory Management
1830 <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1831 conventions for ownership of object arguments and
1832 return values. However, there are exceptions, and so Clang provides attributes
1833 to allow these exceptions to be documented. This are used by ARC and the
1834 `static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
1835 better described using the ``objc_method_family`` attribute instead.
1837 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1838 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1839 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1840 that return Objective-C or CoreFoundation objects. They are commonly placed at
1841 the end of a function prototype or method declaration:
1843 .. code-block:: objc
1845 id foo() __attribute__((ns_returns_retained));
1847 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1849 The ``*_returns_retained`` attributes specify that the returned object has a +1
1850 retain count. The ``*_returns_not_retained`` attributes specify that the return
1851 object has a +0 retain count, even if the normal convention for its selector
1852 would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
1853 +0, but is guaranteed to live at least as long as the next flush of an
1856 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1857 an parameter declaration; they specify that the argument is expected to have a
1858 +1 retain count, which will be balanced in some way by the function or method.
1859 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1860 method; it specifies that the method expects its ``self`` parameter to have a
1861 +1 retain count, which it will balance in some way.
1863 .. code-block:: objc
1865 void foo(__attribute__((ns_consumed)) NSString *string);
1867 - (void) bar __attribute__((ns_consumes_self));
1868 - (void) baz:(id) __attribute__((ns_consumed)) x;
1870 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
1871 <https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
1873 Query for these features with ``__has_attribute(ns_consumed)``,
1874 ``__has_attribute(ns_returns_retained)``, etc.
1876 Objective-C @available
1877 ----------------------
1879 It is possible to use the newest SDK but still build a program that can run on
1880 older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
1881 ``-miphoneos-version-min=``.
1883 Before LLVM 5.0, when calling a function that exists only in the OS that's
1884 newer than the target OS (as determined by the minimum deployment version),
1885 programmers had to carefully check if the function exists at runtime, using
1886 null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
1887 and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
1888 Objective-C methods. If such a check was missed, the program would compile
1889 fine, run fine on newer systems, but crash on older systems.
1891 As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
1892 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
1893 with the new ``@available()`` keyword to assist with this issue.
1894 When a method that's introduced in the OS newer than the target OS is called, a
1895 -Wunguarded-availability warning is emitted if that call is not guarded:
1897 .. code-block:: objc
1899 void my_fun(NSSomeClass* var) {
1900 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
1901 // built with -mmacosx-version-min=10.11, then this unconditional call
1902 // will emit a -Wunguarded-availability warning:
1903 [var fancyNewMethod];
1906 To fix the warning and to avoid the crash on macOS 10.11, wrap it in
1907 ``if(@available())``:
1909 .. code-block:: objc
1911 void my_fun(NSSomeClass* var) {
1912 if (@available(macOS 10.12, *)) {
1913 [var fancyNewMethod];
1915 // Put fallback behavior for old macOS versions (and for non-mac
1920 The ``*`` is required and means that platforms not explicitly listed will take
1921 the true branch, and the compiler will emit ``-Wunguarded-availability``
1922 warnings for unlisted platforms based on those platform's deployment target.
1923 More than one platform can be listed in ``@available()``:
1925 .. code-block:: objc
1927 void my_fun(NSSomeClass* var) {
1928 if (@available(macOS 10.12, iOS 10, *)) {
1929 [var fancyNewMethod];
1933 If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
1934 on 10.12, then add an `availability attribute
1935 <https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
1936 which will also suppress the warning and require that calls to my_fun() are
1939 .. code-block:: objc
1941 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
1942 [var fancyNewMethod]; // Now ok.
1945 ``@available()`` is only available in Objective-C code. To use the feature
1946 in C and C++ code, use the ``__builtin_available()`` spelling instead.
1948 If existing code uses null checks or ``-respondsToSelector:``, it should
1949 be changed to use ``@available()`` (or ``__builtin_available``) instead.
1951 ``-Wunguarded-availability`` is disabled by default, but
1952 ``-Wunguarded-availability-new``, which only emits this warning for APIs
1953 that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
1954 tvOS >= 11, is enabled by default.
1956 .. _langext-overloading:
1958 Objective-C++ ABI: protocol-qualifier mangling of parameters
1959 ------------------------------------------------------------
1961 Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
1962 type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such
1963 parameters to be differentiated from those with the regular unqualified ``id``
1966 This was a non-backward compatible mangling change to the ABI. This change
1967 allows proper overloading, and also prevents mangling conflicts with template
1968 parameters of protocol-qualified type.
1970 Query the presence of this new mangling with
1971 ``__has_feature(objc_protocol_qualifier_mangling)``.
1973 Initializer lists for complex numbers in C
1974 ==========================================
1976 clang supports an extension which allows the following in C:
1981 #include <complex.h>
1982 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1984 This construct is useful because there is no way to separately initialize the
1985 real and imaginary parts of a complex variable in standard C, given that clang
1986 does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
1987 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
1988 in static initializers.)
1990 Note that this extension does not allow eliding the braces; the meaning of the
1991 following two lines is different:
1995 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
1996 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
1998 This extension also works in C++ mode, as far as that goes, but does not apply
1999 to the C++ ``std::complex``. (In C++11, list initialization allows the same
2000 syntax to be used with ``std::complex`` with the same meaning.)
2002 For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2003 construct a complex number from the given real and imaginary components.
2008 Clang supports internal OpenCL extensions documented below.
2010 ``__cl_clang_bitfields``
2011 --------------------------------
2013 With this extension it is possible to enable bitfields in structs
2014 or unions using the OpenCL extension pragma mechanism detailed in
2015 `the OpenCL Extension Specification, section 1.2
2016 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2018 Use of bitfields in OpenCL kernels can result in reduced portability as struct
2019 layout is not guaranteed to be consistent when compiled by different compilers.
2020 If structs with bitfields are used as kernel function parameters, it can result
2021 in incorrect functionality when the layout is different between the host and
2028 #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2029 struct with_bitfield {
2030 unsigned int i : 5; // compiled - no diagnostic generated
2033 #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2034 struct without_bitfield {
2035 unsigned int i : 5; // error - bitfields are not supported
2038 ``__cl_clang_function_pointers``
2039 --------------------------------
2041 With this extension it is possible to enable various language features that
2042 are relying on function pointers using regular OpenCL extension pragma
2043 mechanism detailed in `the OpenCL Extension Specification,
2045 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2047 In C++ for OpenCL this also enables:
2049 - Use of member function pointers;
2051 - Unrestricted use of references to functions;
2053 - Virtual member functions.
2055 Such functionality is not conformant and does not guarantee to compile
2056 correctly in any circumstances. It can be used if:
2058 - the kernel source does not contain call expressions to (member-) function
2059 pointers, or virtual functions. For example this extension can be used in
2060 metaprogramming algorithms to be able to specify/detect types generically.
2062 - the generated kernel binary does not contain indirect calls because they
2063 are eliminated using compiler optimizations e.g. devirtualization.
2065 - the selected target supports the function pointer like functionality e.g.
2072 #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2075 void (*fp)(); // compiled - no diagnostic generated
2078 #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2081 void (*fp)(); // error - pointers to function are not allowed
2084 ``__cl_clang_variadic_functions``
2085 ---------------------------------
2087 With this extension it is possible to enable variadic arguments in functions
2088 using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2089 Extension Specification, section 1.2
2090 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2092 This is not conformant behavior and it can only be used portably when the
2093 functions with variadic prototypes do not get generated in binary e.g. the
2094 variadic prototype is used to specify a function type with any number of
2095 arguments in metaprogramming algorithms in C++ for OpenCL.
2097 This extensions can also be used when the kernel code is intended for targets
2098 supporting the variadic arguments e.g. majority of CPU targets.
2104 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2105 void foo(int a, ...); // compiled - no diagnostic generated
2107 #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2108 void bar(int a, ...); // error - variadic prototype is not allowed
2110 ``__cl_clang_non_portable_kernel_param_types``
2111 ----------------------------------------------
2113 With this extension it is possible to enable the use of some restricted types
2114 in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2115 <https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2116 The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2117 detailed in `the OpenCL Extension Specification, section 1.2
2118 <https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2120 This is not a conformant behavior and it can only be used when the
2121 kernel arguments are not accessed on the host side or the data layout/size
2122 between the host and device is known to be compatible.
2128 // Plain Old Data type.
2134 // Not POD type because of the constructor.
2135 // Standard layout type because there is only one access control.
2139 NotPod() : a(0), b(0) {}
2142 // Not standard layout type because of two different access controls.
2149 kernel void kernel_main(
2151 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2154 #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2158 Remove address space builtin function
2159 -------------------------------------
2161 ``__remove_address_space`` allows to derive types in C++ for OpenCL
2162 that have address space qualifiers removed. This utility only affects
2163 address space qualifiers, therefore, other type qualifiers such as
2164 ``const`` or ``volatile`` remain unchanged.
2170 template<typename T>
2172 T var1; // error - local function variable with global address space
2173 __private T var2; // error - conflicting address space qualifiers
2174 __private __remove_address_space<T>::type var3; // var3 is __private int
2182 Legacy 1.x atomics with generic address space
2183 ---------------------------------------------
2185 Clang allows use of atomic functions from the OpenCL 1.x standards
2186 with the generic address space pointer in C++ for OpenCL mode.
2188 This is a non-portable feature and might not be supported by all
2195 void foo(__generic volatile unsigned int* a) {
2202 Clang supports a number of builtin library functions with the same syntax as
2203 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
2204 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
2205 ``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to
2206 the GCC builtins, Clang supports a number of builtins that GCC does not, which
2209 Please note that Clang does not and will not support all of the GCC builtins
2210 for vector operations. Instead of using builtins, you should use the functions
2211 defined in target-specific header files like ``<xmmintrin.h>``, which define
2212 portable wrappers for these. Many of the Clang versions of these functions are
2213 implemented directly in terms of :ref:`extended vector support
2214 <langext-vectors>` instead of builtins, in order to reduce the number of
2215 builtins that we need to implement.
2217 ``__builtin_alloca``
2218 --------------------
2220 ``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2221 is automatically freed upon function termination.
2227 __builtin_alloca(size_t n)
2233 void init(float* data, size_t nbelems);
2234 void process(float* data, size_t nbelems);
2236 auto mem = (float*)__builtin_alloca(n * sizeof(float));
2239 /* mem is automatically freed at this point */
2244 ``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2245 on the stack. This amount is subject to stack allocation limits.
2247 Query for this feature with ``__has_builtin(__builtin_alloca)``.
2249 ``__builtin_alloca_with_align``
2250 -------------------------------
2252 ``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2253 stack while controlling its alignment. Memory is automatically freed upon
2254 function termination.
2261 __builtin_alloca_with_align(size_t n, size_t align)
2267 void init(float* data, size_t nbelems);
2268 void process(float* data, size_t nbelems);
2270 auto mem = (float*)__builtin_alloca_with_align(
2272 CHAR_BIT * alignof(float));
2275 /* mem is automatically freed at this point */
2280 ``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2281 on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2282 argument whose value is the alignment constraint, as a power of 2 in *bits*.
2284 Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2286 .. _langext-__builtin_assume:
2288 ``__builtin_assume``
2289 --------------------
2291 ``__builtin_assume`` is used to provide the optimizer with a boolean
2292 invariant that is defined to be true.
2298 __builtin_assume(bool)
2305 __builtin_assume(x != 0);
2306 // The optimizer may short-circuit this check using the invariant.
2308 return do_something();
2309 return do_something_else();
2314 The boolean argument to this function is defined to be true. The optimizer may
2315 analyze the form of the expression provided as the argument and deduce from
2316 that information used to optimize the program. If the condition is violated
2317 during execution, the behavior is undefined. The argument itself is never
2318 evaluated, so any side effects of the expression will be discarded.
2320 Query for this feature with ``__has_builtin(__builtin_assume)``.
2322 ``__builtin_call_with_static_chain``
2323 ------------------------------------
2325 ``__builtin_call_with_static_chain`` is used to perform a static call while
2326 setting updating the static chain register.
2332 T __builtin_call_with_static_chain(T expr, void* ptr)
2338 auto v = __builtin_call_with_static_chain(foo(3), foo);
2342 This builtin returns ``expr`` after checking that ``expr`` is a non-member
2343 static call expression. The call to that expression is made while using ``ptr``
2344 as a function pointer stored in a dedicated register to implement *static chain*
2345 calling convention, as used by some language to implement closures or nested
2348 Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2350 ``__builtin_readcyclecounter``
2351 ------------------------------
2353 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2354 a similar low-latency, high-accuracy clock) on those targets that support it.
2360 __builtin_readcyclecounter()
2366 unsigned long long t0 = __builtin_readcyclecounter();
2368 unsigned long long t1 = __builtin_readcyclecounter();
2369 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2373 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2374 which may be either global or process/thread-specific depending on the target.
2375 As the backing counters often overflow quickly (on the order of seconds) this
2376 should only be used for timing small intervals. When not supported by the
2377 target, the return value is always zero. This builtin takes no arguments and
2378 produces an unsigned long long result.
2380 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2381 that even if present, its use may depend on run-time privilege or other OS
2384 ``__builtin_dump_struct``
2385 -------------------------
2391 __builtin_dump_struct(&some_struct, some_printf_func, args...);
2405 void func(struct S *s) {
2406 __builtin_dump_struct(s, printf);
2411 .. code-block:: none
2425 struct T { int a, b; };
2426 constexpr void constexpr_sprintf(std::string &out, const char *format,
2430 constexpr std::string dump_struct(auto &x) {
2432 __builtin_dump_struct(&x, constexpr_sprintf, s);
2435 static_assert(dump_struct(T{1, 2}) == R"(struct T {
2443 The ``__builtin_dump_struct`` function is used to print the fields of a simple
2444 structure and their values for debugging purposes. The first argument of the
2445 builtin should be a pointer to the struct to dump. The second argument ``f``
2446 should be some callable expression, and can be a function object or an overload
2447 set. The builtin calls ``f``, passing any further arguments ``args...``
2448 followed by a ``printf``-compatible format string and the corresponding
2449 arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2450 evaluated once per call. In C++, ``f`` may be a template or overload set and
2451 resolve to different functions for each call.
2453 In the format string, a suitable format specifier will be used for builtin
2454 types that Clang knows how to format. This includes standard builtin types, as
2455 well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2456 char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2457 that Clang doesn't know how to format, and the corresopnding argument will be a
2458 pointer to the field. This allows a C++ templated formatting function to detect
2459 this case and implement custom formatting. A ``*`` will otherwise not precede a
2462 This builtin does not return a value.
2464 This builtin can be used in constant expressions.
2466 Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2468 .. _langext-__builtin_shufflevector:
2470 ``__builtin_shufflevector``
2471 ---------------------------
2473 ``__builtin_shufflevector`` is used to express generic vector
2474 permutation/shuffle/swizzle operations. This builtin is also very important
2475 for the implementation of various target-specific header files like
2482 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2488 // identity operation - return 4-element vector v1.
2489 __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2491 // "Splat" element 0 of V1 into a 4-element result.
2492 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2494 // Reverse 4-element vector V1.
2495 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2497 // Concatenate every other element of 4-element vectors V1 and V2.
2498 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2500 // Concatenate every other element of 8-element vectors V1 and V2.
2501 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2503 // Shuffle v1 with some elements being undefined
2504 __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2508 The first two arguments to ``__builtin_shufflevector`` are vectors that have
2509 the same element type. The remaining arguments are a list of integers that
2510 specify the elements indices of the first two vectors that should be extracted
2511 and returned in a new vector. These element indices are numbered sequentially
2512 starting with the first vector, continuing into the second vector. Thus, if
2513 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
2514 ``vec2``. An index of -1 can be used to indicate that the corresponding element
2515 in the returned vector is a don't care and can be optimized by the backend.
2517 The result of ``__builtin_shufflevector`` is a vector with the same element
2518 type as ``vec1``/``vec2`` but that has an element count equal to the number of
2521 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2523 .. _langext-__builtin_convertvector:
2525 ``__builtin_convertvector``
2526 ---------------------------
2528 ``__builtin_convertvector`` is used to express generic vector
2529 type-conversion operations. The input vector and the output vector
2530 type must have the same number of elements.
2536 __builtin_convertvector(src_vec, dst_vec_type)
2542 typedef double vector4double __attribute__((__vector_size__(32)));
2543 typedef float vector4float __attribute__((__vector_size__(16)));
2544 typedef short vector4short __attribute__((__vector_size__(8)));
2545 vector4float vf; vector4short vs;
2547 // convert from a vector of 4 floats to a vector of 4 doubles.
2548 __builtin_convertvector(vf, vector4double)
2550 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2552 // convert from a vector of 4 shorts to a vector of 4 floats.
2553 __builtin_convertvector(vs, vector4float)
2555 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2559 The first argument to ``__builtin_convertvector`` is a vector, and the second
2560 argument is a vector type with the same number of elements as the first
2563 The result of ``__builtin_convertvector`` is a vector with the same element
2564 type as the second argument, with a value defined in terms of the action of a
2565 C-style cast applied to each element of the first argument.
2567 Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2569 ``__builtin_bitreverse``
2570 ------------------------
2572 * ``__builtin_bitreverse8``
2573 * ``__builtin_bitreverse16``
2574 * ``__builtin_bitreverse32``
2575 * ``__builtin_bitreverse64``
2581 __builtin_bitreverse32(x)
2587 uint8_t rev_x = __builtin_bitreverse8(x);
2588 uint16_t rev_x = __builtin_bitreverse16(x);
2589 uint32_t rev_y = __builtin_bitreverse32(y);
2590 uint64_t rev_z = __builtin_bitreverse64(z);
2594 The '``__builtin_bitreverse``' family of builtins is used to reverse
2595 the bitpattern of an integer value; for example ``0b10110110`` becomes
2596 ``0b01101101``. These builtins can be used within constant expressions.
2598 ``__builtin_rotateleft``
2599 ------------------------
2601 * ``__builtin_rotateleft8``
2602 * ``__builtin_rotateleft16``
2603 * ``__builtin_rotateleft32``
2604 * ``__builtin_rotateleft64``
2610 __builtin_rotateleft32(x, y)
2616 uint8_t rot_x = __builtin_rotateleft8(x, y);
2617 uint16_t rot_x = __builtin_rotateleft16(x, y);
2618 uint32_t rot_x = __builtin_rotateleft32(x, y);
2619 uint64_t rot_x = __builtin_rotateleft64(x, y);
2623 The '``__builtin_rotateleft``' family of builtins is used to rotate
2624 the bits in the first argument by the amount in the second argument.
2625 For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2626 The shift value is treated as an unsigned amount modulo the size of
2627 the arguments. Both arguments and the result have the bitwidth specified
2628 by the name of the builtin. These builtins can be used within constant
2631 ``__builtin_rotateright``
2632 -------------------------
2634 * ``__builtin_rotateright8``
2635 * ``__builtin_rotateright16``
2636 * ``__builtin_rotateright32``
2637 * ``__builtin_rotateright64``
2643 __builtin_rotateright32(x, y)
2649 uint8_t rot_x = __builtin_rotateright8(x, y);
2650 uint16_t rot_x = __builtin_rotateright16(x, y);
2651 uint32_t rot_x = __builtin_rotateright32(x, y);
2652 uint64_t rot_x = __builtin_rotateright64(x, y);
2656 The '``__builtin_rotateright``' family of builtins is used to rotate
2657 the bits in the first argument by the amount in the second argument.
2658 For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
2659 The shift value is treated as an unsigned amount modulo the size of
2660 the arguments. Both arguments and the result have the bitwidth specified
2661 by the name of the builtin. These builtins can be used within constant
2664 ``__builtin_unreachable``
2665 -------------------------
2667 ``__builtin_unreachable`` is used to indicate that a specific point in the
2668 program cannot be reached, even if the compiler might otherwise think it can.
2669 This is useful to improve optimization and eliminates certain warnings. For
2670 example, without the ``__builtin_unreachable`` in the example below, the
2671 compiler assumes that the inline asm can fall through and prints a "function
2672 declared '``noreturn``' should not return" warning.
2678 __builtin_unreachable()
2684 void myabort(void) __attribute__((noreturn));
2685 void myabort(void) {
2687 __builtin_unreachable();
2692 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
2693 Since it has undefined behavior, it is a statement that it is never reached and
2694 the optimizer can take advantage of this to produce better code. This builtin
2695 takes no arguments and produces a void result.
2697 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
2699 ``__builtin_unpredictable``
2700 ---------------------------
2702 ``__builtin_unpredictable`` is used to indicate that a branch condition is
2703 unpredictable by hardware mechanisms such as branch prediction logic.
2709 __builtin_unpredictable(long long)
2715 if (__builtin_unpredictable(x > 0)) {
2721 The ``__builtin_unpredictable()`` builtin is expected to be used with control
2722 flow conditions such as in ``if`` and ``switch`` statements.
2724 Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
2727 ``__builtin_expect``
2728 --------------------
2730 ``__builtin_expect`` is used to indicate that the value of an expression is
2731 anticipated to be the same as a statically known result.
2737 long __builtin_expect(long expr, long val)
2743 if (__builtin_expect(x, 0)) {
2749 The ``__builtin_expect()`` builtin is typically used with control flow
2750 conditions such as in ``if`` and ``switch`` statements to help branch
2751 prediction. It means that its first argument ``expr`` is expected to take the
2752 value of its second argument ``val``. It always returns ``expr``.
2754 Query for this feature with ``__has_builtin(__builtin_expect)``.
2756 ``__builtin_expect_with_probability``
2757 -------------------------------------
2759 ``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
2760 takes a probability as third argument.
2766 long __builtin_expect_with_probability(long expr, long val, double p)
2772 if (__builtin_expect_with_probability(x, 0, .3)) {
2778 The ``__builtin_expect_with_probability()`` builtin is typically used with
2779 control flow conditions such as in ``if`` and ``switch`` statements to help
2780 branch prediction. It means that its first argument ``expr`` is expected to take
2781 the value of its second argument ``val`` with probability ``p``. ``p`` must be
2782 within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
2784 Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
2786 ``__builtin_prefetch``
2787 ----------------------
2789 ``__builtin_prefetch`` is used to communicate with the cache handler to bring
2790 data into the cache before it gets used.
2796 void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
2802 __builtin_prefetch(a + i);
2806 The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
2807 avoid cache misses when the developper has a good understanding of which data
2808 are going to be used next. ``addr`` is the address that needs to be brought into
2809 the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
2810 for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
2811 indicates the expected persistance of data in cache, from ``0`` which means that
2812 data can be discarded from cache after its next use to ``3`` which means that
2813 data is going to be reused a lot once in cache. ``1`` and ``2`` provide
2814 intermediate behavior between these two extremes.
2816 Query for this feature with ``__has_builtin(__builtin_prefetch)``.
2821 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
2827 type __sync_swap(type *ptr, type value, ...)
2833 int old_value = __sync_swap(&value, new_value);
2837 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
2838 atomic intrinsics to allow code to atomically swap the current value with the
2839 new value. More importantly, it helps developers write more efficient and
2840 correct code by avoiding expensive loops around
2841 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
2842 implementation details of ``__sync_lock_test_and_set()``. The
2843 ``__sync_swap()`` builtin is a full barrier.
2845 ``__builtin_addressof``
2846 -----------------------
2848 ``__builtin_addressof`` performs the functionality of the built-in ``&``
2849 operator, ignoring any ``operator&`` overload. This is useful in constant
2850 expressions in C++11, where there is no other way to take the address of an
2851 object that overloads ``operator&``.
2857 template<typename T> constexpr T *addressof(T &value) {
2858 return __builtin_addressof(value);
2861 ``__builtin_function_start``
2862 -----------------------------
2864 ``__builtin_function_start`` returns the address of a function body.
2870 void *__builtin_function_start(function)
2877 void *p = __builtin_function_start(a);
2888 void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
2889 void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
2893 The ``__builtin_function_start`` builtin accepts an argument that can be
2894 constant-evaluated to a function, and returns the address of the function
2895 body. This builtin is not supported on all targets.
2897 The returned pointer may differ from the normally taken function address
2898 and is not safe to call. For example, with ``-fsanitize=cfi``, taking a
2899 function address produces a callable pointer to a CFI jump table, while
2900 ``__builtin_function_start`` returns an address that fails
2901 :doc:`cfi-icall<ControlFlowIntegrity>` checks.
2903 ``__builtin_operator_new`` and ``__builtin_operator_delete``
2904 ------------------------------------------------------------
2906 A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
2907 ``::operator new(args)``, except that it allows certain optimizations
2908 that the C++ standard does not permit for a direct function call to
2909 ``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
2910 merging allocations), and that the call is required to resolve to a
2911 `replaceable global allocation function
2912 <https://en.cppreference.com/w/cpp/memory/new/operator_new>`_.
2914 Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
2915 ``::operator delete(args)``, except that it permits optimizations
2916 and that the call is required to resolve to a
2917 `replaceable global deallocation function
2918 <https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_.
2920 These builtins are intended for use in the implementation of ``std::allocator``
2921 and other similar allocation libraries, and are only available in C++.
2923 Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
2924 ``__has_builtin(__builtin_operator_delete)``:
2926 * If the value is at least ``201802L``, the builtins behave as described above.
2928 * If the value is non-zero, the builtins may not support calling arbitrary
2929 replaceable global (de)allocation functions, but do support calling at least
2930 ``::operator new(size_t)`` and ``::operator delete(void*)``.
2932 ``__builtin_preserve_access_index``
2933 -----------------------------------
2935 ``__builtin_preserve_access_index`` specifies a code section where
2936 array subscript access and structure/union member access are relocatable
2937 under bpf compile-once run-everywhere framework. Debuginfo (typically
2938 with ``-g``) is needed, otherwise, the compiler will exit with an error.
2939 The return type for the intrinsic is the same as the type of the
2946 type __builtin_preserve_access_index(type arg)
2961 int *pb =__builtin_preserve_access_index(&v->c[3].b);
2962 __builtin_preserve_access_index(v->j);
2964 ``__builtin_debugtrap``
2965 -----------------------
2967 ``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
2973 __builtin_debugtrap()
2977 ``__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.
2979 Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
2985 ``__builtin_trap`` causes the program to stop its execution abnormally.
2995 ``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
2997 Query for this feature with ``__has_builtin(__builtin_trap)``.
3000 ``__builtin_sycl_unique_stable_name``
3001 -------------------------------------
3003 ``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3004 produces a string literal containing a unique name for the type that is stable
3005 across split compilations, mainly to support SYCL/Data Parallel C++ language.
3007 In cases where the split compilation needs to share a unique token for a type
3008 across the boundary (such as in an offloading situation), this name can be used
3009 for lookup purposes, such as in the SYCL Integration Header.
3011 The value of this builtin is computed entirely at compile time, so it can be
3012 used in constant expressions. This value encodes lambda functions based on a
3013 stable numbering order in which they appear in their local declaration contexts.
3014 Once this builtin is evaluated in a constexpr context, it is erroneous to use
3015 it in an instantiation which changes its value.
3017 In order to produce the unique name, the current implementation of the builtin
3018 uses Itanium mangling even if the host compilation uses a different name
3019 mangling scheme at runtime. The mangler marks all the lambdas required to name
3020 the SYCL kernel and emits a stable local ordering of the respective lambdas.
3021 The resulting pattern is demanglable. When non-lambda types are passed to the
3022 builtin, the mangler emits their usual pattern without any special treatment.
3028 // Computes a unique stable name for the given type.
3029 constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3031 Multiprecision Arithmetic Builtins
3032 ----------------------------------
3034 Clang provides a set of builtins which expose multiprecision arithmetic in a
3035 manner amenable to C. They all have the following form:
3039 unsigned x = ..., y = ..., carryin = ..., carryout;
3040 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3042 Thus one can form a multiprecision addition chain in the following manner:
3046 unsigned *x, *y, *z, carryin=0, carryout;
3047 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3049 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3051 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3053 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3055 The complete list of builtins are:
3059 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3060 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3061 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3062 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3063 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3064 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
3065 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
3066 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
3067 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
3068 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
3070 Checked Arithmetic Builtins
3071 ---------------------------
3073 Clang provides a set of builtins that implement checked arithmetic for security
3074 critical applications in a manner that is fast and easily expressible in C. As
3075 an example of their usage:
3079 errorcode_t security_critical_application(...) {
3080 unsigned x, y, result;
3082 if (__builtin_mul_overflow(x, y, &result))
3083 return kErrorCodeHackers;
3085 use_multiply(result);
3089 Clang provides the following checked arithmetic builtins:
3093 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum);
3094 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff);
3095 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod);
3096 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum);
3097 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
3098 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
3099 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff);
3100 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
3101 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
3102 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod);
3103 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
3104 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
3105 bool __builtin_sadd_overflow (int x, int y, int *sum);
3106 bool __builtin_saddl_overflow (long x, long y, long *sum);
3107 bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
3108 bool __builtin_ssub_overflow (int x, int y, int *diff);
3109 bool __builtin_ssubl_overflow (long x, long y, long *diff);
3110 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
3111 bool __builtin_smul_overflow (int x, int y, int *prod);
3112 bool __builtin_smull_overflow (long x, long y, long *prod);
3113 bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
3115 Each builtin performs the specified mathematical operation on the
3116 first two arguments and stores the result in the third argument. If
3117 possible, the result will be equal to mathematically-correct result
3118 and the builtin will return 0. Otherwise, the builtin will return
3119 1 and the result will be equal to the unique value that is equivalent
3120 to the mathematically-correct result modulo two raised to the *k*
3121 power, where *k* is the number of bits in the result type. The
3122 behavior of these builtins is well-defined for all argument values.
3124 The first three builtins work generically for operands of any integer type,
3125 including boolean types. The operands need not have the same type as each
3126 other, or as the result. The other builtins may implicitly promote or
3127 convert their operands before performing the operation.
3129 Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3131 Floating point builtins
3132 ---------------------------------------
3134 ``__builtin_canonicalize``
3135 --------------------------
3139 double __builtin_canonicalize(double);
3140 float __builtin_canonicalizef(float);
3141 long double__builtin_canonicalizel(long double);
3143 Returns the platform specific canonical encoding of a floating point
3144 number. This canonicalization is useful for implementing certain
3145 numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3146 <https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3147 more information on the semantics.
3152 Clang provides constant expression evaluation support for builtins forms of
3153 the following functions from the C standard library headers
3154 ``<string.h>`` and ``<wchar.h>``:
3157 * ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3169 In each case, the builtin form has the name of the C library function prefixed
3170 by ``__builtin_``. Example:
3174 void *p = __builtin_memchr("foobar", 'b', 5);
3176 In addition to the above, one further builtin is provided:
3180 char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3182 ``__builtin_char_memchr(a, b, c)`` is identical to
3183 ``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3184 constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3185 is disallowed in general).
3187 Constant evaluation support for the ``__builtin_mem*`` functions is provided
3188 only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3189 despite these functions accepting an argument of type ``const void*``.
3191 Support for constant expression evaluation for the above builtins can be detected
3192 with ``__has_feature(cxx_constexpr_string_builtins)``.
3197 Clang provides constant expression evaluation support for builtin forms of the
3198 following functions from the C standard library headers
3199 ``<string.h>`` and ``<wchar.h>``:
3206 In each case, the builtin form has the name of the C library function prefixed
3209 Constant evaluation support is only provided when the source and destination
3210 are pointers to arrays with the same trivially copyable element type, and the
3211 given size is an exact multiple of the element size that is no greater than
3212 the number of elements accessible through the source and destination operands.
3214 Guaranteed inlined copy
3215 ^^^^^^^^^^^^^^^^^^^^^^^
3219 void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3222 ``__builtin_memcpy_inline`` has been designed as a building block for efficient
3223 ``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3224 guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3225 <https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3226 for more information.
3228 This is useful to implement a custom version of ``memcpy``, implement a
3229 ``libc`` memcpy or work around the absence of a ``libc``.
3231 Note that the `size` argument must be a compile time constant.
3233 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3235 Guaranteed inlined memset
3236 ^^^^^^^^^^^^^^^^^^^^^^^^^
3240 void __builtin_memset_inline(void *dst, int value, size_t size);
3243 ``__builtin_memset_inline`` has been designed as a building block for efficient
3244 ``memset`` implementations. It is identical to ``__builtin_memset`` but also
3245 guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3246 <https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3247 for more information.
3249 This is useful to implement a custom version of ``memset``, implement a
3250 ``libc`` memset or work around the absence of a ``libc``.
3252 Note that the `size` argument must be a compile time constant.
3254 Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3256 Atomic Min/Max builtins with memory ordering
3257 --------------------------------------------
3259 There are two atomic builtins with min/max in-memory comparison and swap.
3260 The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3262 * ``__atomic_fetch_min``
3263 * ``__atomic_fetch_max``
3265 The builtins work with signed and unsigned integers and require to specify memory ordering.
3266 The return value is the original value that was stored in memory before comparison.
3272 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3274 The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
3275 ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
3276 ``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
3278 In terms or aquire-release ordering barriers these two operations are always
3279 considered as operations with *load-store* semantics, even when the original value
3280 is not actually modified after comparison.
3282 .. _langext-__c11_atomic:
3284 __c11_atomic builtins
3285 ---------------------
3287 Clang provides a set of builtins which are intended to be used to implement
3288 C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
3289 ``_explicit`` form of the corresponding C11 operation, and are named with a
3290 ``__c11_`` prefix. The supported operations, and the differences from
3291 the corresponding C11 operations, are:
3293 * ``__c11_atomic_init``
3294 * ``__c11_atomic_thread_fence``
3295 * ``__c11_atomic_signal_fence``
3296 * ``__c11_atomic_is_lock_free`` (The argument is the size of the
3297 ``_Atomic(...)`` object, instead of its address)
3298 * ``__c11_atomic_store``
3299 * ``__c11_atomic_load``
3300 * ``__c11_atomic_exchange``
3301 * ``__c11_atomic_compare_exchange_strong``
3302 * ``__c11_atomic_compare_exchange_weak``
3303 * ``__c11_atomic_fetch_add``
3304 * ``__c11_atomic_fetch_sub``
3305 * ``__c11_atomic_fetch_and``
3306 * ``__c11_atomic_fetch_or``
3307 * ``__c11_atomic_fetch_xor``
3308 * ``__c11_atomic_fetch_nand`` (Nand is not presented in ``<stdatomic.h>``)
3309 * ``__c11_atomic_fetch_max``
3310 * ``__c11_atomic_fetch_min``
3312 The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3313 ``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3314 provided, with values corresponding to the enumerators of C11's
3315 ``memory_order`` enumeration.
3317 (Note that Clang additionally provides GCC-compatible ``__atomic_*``
3318 builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3319 atomic builtins are an explicit form of the corresponding OpenCL 2.0
3320 builtin function, and are named with a ``__opencl_`` prefix. The macros
3321 ``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
3322 ``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
3323 and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3324 corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3326 Low-level ARM exclusive memory builtins
3327 ---------------------------------------
3329 Clang provides overloaded builtins giving direct access to the three key ARM
3330 instructions for implementing atomic operations.
3334 T __builtin_arm_ldrex(const volatile T *addr);
3335 T __builtin_arm_ldaex(const volatile T *addr);
3336 int __builtin_arm_strex(T val, volatile T *addr);
3337 int __builtin_arm_stlex(T val, volatile T *addr);
3338 void __builtin_arm_clrex(void);
3340 The types ``T`` currently supported are:
3342 * Integer types with width at most 64 bits (or 128 bits on AArch64).
3343 * Floating-point types
3346 Note that the compiler does not guarantee it will not insert stores which clear
3347 the exclusive monitor in between an ``ldrex`` type operation and its paired
3348 ``strex``. In practice this is only usually a risk when the extra store is on
3349 the same cache line as the variable being modified and Clang will only insert
3350 stack stores on its own, so it is best not to use these operations on variables
3351 with automatic storage duration.
3353 Also, loads and stores may be implicit in code written between the ``ldrex`` and
3354 ``strex``. Clang will not necessarily mitigate the effects of these either, so
3355 care should be exercised.
3357 For these reasons the higher level atomic primitives should be preferred where
3360 Non-temporal load/store builtins
3361 --------------------------------
3363 Clang provides overloaded builtins allowing generation of non-temporal memory
3368 T __builtin_nontemporal_load(T *addr);
3369 void __builtin_nontemporal_store(T value, T *addr);
3371 The types ``T`` currently supported are:
3374 * Floating-point types.
3377 Note that the compiler does not guarantee that non-temporal loads or stores
3380 C++ Coroutines support builtins
3381 --------------------------------
3384 This is a work in progress. Compatibility across Clang/LLVM releases is not
3387 Clang provides experimental builtins to support C++ Coroutines as defined by
3388 https://wg21.link/P0057. The following four are intended to be used by the
3389 standard library to implement the ``std::coroutine_handle`` type.
3395 void __builtin_coro_resume(void *addr);
3396 void __builtin_coro_destroy(void *addr);
3397 bool __builtin_coro_done(void *addr);
3398 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
3404 template <> struct coroutine_handle<void> {
3405 void resume() const { __builtin_coro_resume(ptr); }
3406 void destroy() const { __builtin_coro_destroy(ptr); }
3407 bool done() const { return __builtin_coro_done(ptr); }
3413 template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3415 Promise &promise() const {
3416 return *reinterpret_cast<Promise *>(
3417 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3419 static coroutine_handle from_promise(Promise &promise) {
3421 p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3422 /*from-promise=*/true);
3428 Other coroutine builtins are either for internal clang use or for use during
3429 development of the coroutine feature. See `Coroutines in LLVM
3430 <https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3431 more information on their semantics. Note that builtins matching the intrinsics
3432 that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
3433 llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
3434 an appropriate value during the emission.
3440 size_t __builtin_coro_size()
3441 void *__builtin_coro_frame()
3442 void *__builtin_coro_free(void *coro_frame)
3444 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
3445 bool __builtin_coro_alloc()
3446 void *__builtin_coro_begin(void *memory)
3447 void __builtin_coro_end(void *coro_frame, bool unwind)
3448 char __builtin_coro_suspend(bool final)
3450 Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
3451 automatically will insert one if the first argument to `llvm.coro.suspend` is
3452 token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
3453 as the first argument to the intrinsic.
3455 Source location builtins
3456 ------------------------
3458 Clang provides builtins to support C++ standard library implementation
3459 of ``std::source_location`` as specified in C++20. With the exception
3460 of ``__builtin_COLUMN``, these builtins are also implemented by GCC.
3466 const char *__builtin_FILE();
3467 const char *__builtin_FUNCTION();
3468 unsigned __builtin_LINE();
3469 unsigned __builtin_COLUMN(); // Clang only
3470 const std::source_location::__impl *__builtin_source_location();
3476 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
3477 const char* file = __builtin_FILE(),
3478 const char* function = __builtin_FUNCTION()) {
3480 printf("%s:%d assertion failed in function %s\n", file, line, function);
3484 struct MyAggregateType {
3486 int line = __builtin_LINE(); // captures line where aggregate initialization occurs
3488 static_assert(MyAggregateType{42}.line == __LINE__);
3490 struct MyClassType {
3491 int line = __builtin_LINE(); // captures line of the constructor used during initialization
3492 constexpr MyClassType(int) { assert(line == __LINE__); }
3497 The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE``
3498 return the values, at the "invocation point", for ``__LINE__``,
3499 ``__FUNCTION__``, and ``__FILE__`` respectively. ``__builtin_COLUMN`` similarly
3500 returns the column, though there is no corresponding macro. These builtins are
3501 constant expressions.
3503 When the builtins appear as part of a default function argument the invocation
3504 point is the location of the caller. When the builtins appear as part of a
3505 default member initializer, the invocation point is the location of the
3506 constructor or aggregate initialization used to create the object. Otherwise
3507 the invocation point is the same as the location of the builtin.
3509 When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
3510 empty string is returned.
3512 The builtin ``__builtin_source_location`` returns a pointer to constant static
3513 data of type ``std::source_location::__impl``. This type must have already been
3514 defined, and must contain exactly four fields: ``const char *_M_file_name``,
3515 ``const char *_M_function_name``, ``<any-integral-type> _M_line``, and
3516 ``<any-integral-type> _M_column``. The fields will be populated in the same
3517 manner as the above four builtins, except that ``_M_function_name`` is populated
3518 with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
3523 Clang provides builtins to support checking and adjusting alignment of
3524 pointers and integers.
3525 These builtins can be used to avoid relying on implementation-defined behavior
3526 of arithmetic on integers derived from pointers.
3527 Additionally, these builtins retain type information and, unlike bitwise
3528 arithmetic, they can perform semantic checking on the alignment value.
3534 Type __builtin_align_up(Type value, size_t alignment);
3535 Type __builtin_align_down(Type value, size_t alignment);
3536 bool __builtin_is_aligned(Type value, size_t alignment);
3543 char* global_alloc_buffer;
3544 void* my_aligned_allocator(size_t alloc_size, size_t alignment) {
3545 char* result = __builtin_align_up(global_alloc_buffer, alignment);
3546 // result now contains the value of global_alloc_buffer rounded up to the
3547 // next multiple of alignment.
3548 global_alloc_buffer = result + alloc_size;
3552 void* get_start_of_page(void* ptr) {
3553 return __builtin_align_down(ptr, PAGE_SIZE);
3556 void example(char* buffer) {
3557 if (__builtin_is_aligned(buffer, 64)) {
3558 do_fast_aligned_copy(buffer);
3560 do_unaligned_copy(buffer);
3564 // In addition to pointers, the builtins can also be used on integer types
3565 // and are evaluatable inside constant expressions.
3566 static_assert(__builtin_align_up(123, 64) == 128, "");
3567 static_assert(__builtin_align_down(123u, 64) == 64u, "");
3568 static_assert(!__builtin_is_aligned(123, 64), "");
3573 The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
3574 first argument aligned up/down to the next multiple of the second argument.
3575 If the value is already sufficiently aligned, it is returned unchanged.
3576 The builtin ``__builtin_is_aligned`` returns whether the first argument is
3577 aligned to a multiple of the second argument.
3578 All of these builtins expect the alignment to be expressed as a number of bytes.
3580 These builtins can be used for all integer types as well as (non-function)
3581 pointer types. For pointer types, these builtins operate in terms of the integer
3582 address of the pointer and return a new pointer of the same type (including
3583 qualifiers such as ``const``) with an adjusted address.
3584 When aligning pointers up or down, the resulting value must be within the same
3585 underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
3586 This means that arbitrary integer values stored in pointer-type variables must
3587 not be passed to these builtins. For those use cases, the builtins can still be
3588 used, but the operation must be performed on the pointer cast to ``uintptr_t``.
3590 If Clang can determine that the alignment is not a power of two at compile time,
3591 it will result in a compilation failure. If the alignment argument is not a
3592 power of two at run time, the behavior of these builtins is undefined.
3594 Non-standard C++11 Attributes
3595 =============================
3597 Clang's non-standard C++11 attributes live in the ``clang`` attribute
3600 Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
3601 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
3602 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
3603 (see the list of `GCC function attributes
3604 <https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
3605 attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
3606 `GCC type attributes
3607 <https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
3608 implementation, these attributes must appertain to the *declarator-id* in a
3609 declaration, which means they must go either at the start of the declaration or
3610 immediately after the name being declared.
3612 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
3613 also applies the GNU ``noreturn`` attribute to ``f``.
3617 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
3619 Target-Specific Extensions
3620 ==========================
3622 Clang supports some language features conditionally on some targets.
3624 ARM/AArch64 Language Extensions
3625 -------------------------------
3627 Memory Barrier Intrinsics
3628 ^^^^^^^^^^^^^^^^^^^^^^^^^
3629 Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
3630 in the `ARM C Language Extensions Release 2.0
3631 <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
3632 Note that these intrinsics are implemented as motion barriers that block
3633 reordering of memory accesses and side effect instructions. Other instructions
3634 like simple arithmetic may be reordered around the intrinsic. If you expect to
3635 have no reordering at all, use inline assembly instead.
3637 X86/X86-64 Language Extensions
3638 ------------------------------
3640 The X86 backend has these language extensions:
3642 Memory references to specified segments
3643 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3645 Annotating a pointer with address space #256 causes it to be code generated
3646 relative to the X86 GS segment register, address space #257 causes it to be
3647 relative to the X86 FS segment, and address space #258 causes it to be
3648 relative to the X86 SS segment. Note that this is a very very low-level
3649 feature that should only be used if you know what you're doing (for example in
3656 #define GS_RELATIVE __attribute__((address_space(256)))
3657 int foo(int GS_RELATIVE *P) {
3661 Which compiles to (on X86-32):
3667 movl %gs:(%eax), %eax
3670 You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
3671 the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
3672 indicate their support.
3674 PowerPC Language Extensions
3675 ---------------------------
3677 Set the Floating Point Rounding Mode
3678 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3679 PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
3680 the floating point rounding mode. This function will use the least significant
3681 two bits of integer argument to set the floating point rounding mode.
3685 double __builtin_setrnd(int mode);
3687 The effective values for mode are:
3689 - 0 - round to nearest
3691 - 2 - round to +infinity
3692 - 3 - round to -infinity
3694 Note that the mode argument will modulo 4, so if the integer argument is greater
3695 than 3, it will only use the least significant two bits of the mode.
3696 Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
3698 PowerPC cache builtins
3699 ^^^^^^^^^^^^^^^^^^^^^^
3701 The PowerPC architecture specifies instructions implementing cache operations.
3702 Clang provides builtins that give direct programmer access to these cache
3705 Currently the following builtins are implemented in clang:
3707 ``__builtin_dcbf`` copies the contents of a modified block from the data cache
3708 to main memory and flushes the copy from the data cache.
3714 void __dcbf(const void* addr); /* Data Cache Block Flush */
3721 __builtin_dcbf (&a);
3723 Extensions for Static Analysis
3724 ==============================
3726 Clang supports additional attributes that are useful for documenting program
3727 invariants and rules for static analysis tools, such as the `Clang Static
3728 Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
3729 in the analyzer's `list of source-level annotations
3730 <https://clang-analyzer.llvm.org/annotations.html>`_.
3733 Extensions for Dynamic Analysis
3734 ===============================
3736 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
3737 with :doc:`AddressSanitizer`.
3739 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
3740 with :doc:`ThreadSanitizer`.
3742 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
3743 with :doc:`MemorySanitizer`.
3745 Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
3746 with :doc:`DataFlowSanitizer`.
3748 Use ``__has_feature(safe_stack)`` to check if the code is being built
3749 with :doc:`SafeStack`.
3752 Extensions for selectively disabling optimization
3753 =================================================
3755 Clang provides a mechanism for selectively disabling optimizations in functions
3758 To disable optimizations in a single function definition, the GNU-style or C++11
3759 non-standard attribute ``optnone`` can be used.
3763 // The following functions will not be optimized.
3764 // GNU-style attribute
3765 __attribute__((optnone)) int foo() {
3769 [[clang::optnone]] int bar() {
3773 To facilitate disabling optimization for a range of function definitions, a
3774 range-based pragma is provided. Its syntax is ``#pragma clang optimize``
3775 followed by ``off`` or ``on``.
3777 All function definitions in the region between an ``off`` and the following
3778 ``on`` will be decorated with the ``optnone`` attribute unless doing so would
3779 conflict with explicit attributes already present on the function (e.g. the
3780 ones that control inlining).
3784 #pragma clang optimize off
3785 // This function will be decorated with optnone.
3790 // optnone conflicts with always_inline, so bar() will not be decorated.
3791 __attribute__((always_inline)) int bar() {
3794 #pragma clang optimize on
3796 If no ``on`` is found to close an ``off`` region, the end of the region is the
3797 end of the compilation unit.
3799 Note that a stray ``#pragma clang optimize on`` does not selectively enable
3800 additional optimizations when compiling at low optimization levels. This feature
3801 can only be used to selectively disable optimizations.
3803 The pragma has an effect on functions only at the point of their definition; for
3804 function templates, this means that the state of the pragma at the point of an
3805 instantiation is not necessarily relevant. Consider the following example:
3809 template<typename T> T twice(T t) {
3813 #pragma clang optimize off
3814 template<typename T> T thrice(T t) {
3818 int container(int a, int b) {
3819 return twice(a) + thrice(b);
3821 #pragma clang optimize on
3823 In this example, the definition of the template function ``twice`` is outside
3824 the pragma region, whereas the definition of ``thrice`` is inside the region.
3825 The ``container`` function is also in the region and will not be optimized, but
3826 it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
3827 these two instantiations, ``twice`` will be optimized (because its definition
3828 was outside the region) and ``thrice`` will not be optimized.
3830 Clang also implements MSVC's range-based pragma,
3831 ``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
3832 supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
3833 ``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
3834 the same as ``#pragma clang optimize``. All functions
3835 between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
3839 #pragma optimize("", off)
3840 // This function will be decorated with optnone.
3843 #pragma optimize("", on)
3844 // This function will be optimized with whatever was specified on
3848 // This will warn with Clang's current implementation.
3849 #pragma optimize("g", on)
3852 For MSVC, an empty optimization list and ``off`` parameter will turn off
3853 all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
3854 ``on`` parameter will reset the optimizations to the ones specified on the
3857 .. list-table:: Parameters (unsupported by Clang)
3860 - Type of optimization
3864 - Short or fast sequences of machine code
3866 - Enable frame pointers
3868 Extensions for loop hint optimizations
3869 ======================================
3871 The ``#pragma clang loop`` directive is used to specify hints for optimizing the
3872 subsequent for, while, do-while, or c++11 range-based for loop. The directive
3873 provides options for vectorization, interleaving, predication, unrolling and
3874 distribution. Loop hints can be specified before any loop and will be ignored if
3875 the optimization is not safe to apply.
3877 There are loop hints that control transformations (e.g. vectorization, loop
3878 unrolling) and there are loop hints that set transformation options (e.g.
3879 ``vectorize_width``, ``unroll_count``). Pragmas setting transformation options
3880 imply the transformation is enabled, as if it was enabled via the corresponding
3881 transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
3882 disabled (e.g. ``vectorize(disable)``), that takes precedence over
3883 transformations option pragmas implying that transformation.
3885 Vectorization, Interleaving, and Predication
3886 --------------------------------------------
3888 A vectorized loop performs multiple iterations of the original loop
3889 in parallel using vector instructions. The instruction set of the target
3890 processor determines which vector instructions are available and their vector
3891 widths. This restricts the types of loops that can be vectorized. The vectorizer
3892 automatically determines if the loop is safe and profitable to vectorize. A
3893 vector instruction cost model is used to select the vector width.
3895 Interleaving multiple loop iterations allows modern processors to further
3896 improve instruction-level parallelism (ILP) using advanced hardware features,
3897 such as multiple execution units and out-of-order execution. The vectorizer uses
3898 a cost model that depends on the register pressure and generated code size to
3899 select the interleaving count.
3901 Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
3902 by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
3903 manually enable vectorization or interleaving.
3907 #pragma clang loop vectorize(enable)
3908 #pragma clang loop interleave(enable)
3913 The vector width is specified by
3914 ``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
3915 integer and the type of vectorization can be specified with an optional
3916 second parameter. The default for the second parameter is 'fixed' and
3917 refers to fixed width vectorization, whereas 'scalable' indicates the
3918 compiler should use scalable vectors instead. Another use of vectorize_width
3919 is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
3920 of vectorization to use without specifying the exact width. In both variants
3921 of the pragma the vectorizer may decide to fall back on fixed width
3922 vectorization if the target does not support scalable vectors.
3924 The interleave count is specified by ``interleave_count(_value_)``, where
3925 _value_ is a positive integer. This is useful for specifying the optimal
3926 width/count of the set of target architectures supported by your application.
3930 #pragma clang loop vectorize_width(2)
3931 #pragma clang loop interleave_count(2)
3936 Specifying a width/count of 1 disables the optimization, and is equivalent to
3937 ``vectorize(disable)`` or ``interleave(disable)``.
3939 Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
3943 #pragma clang loop vectorize(enable)
3944 #pragma clang loop vectorize_predicate(enable)
3949 This predicates (masks) all instructions in the loop, which allows the scalar
3950 remainder loop (the tail) to be folded into the main vectorized loop. This
3951 might be more efficient when vector predication is efficiently supported by the
3957 Unrolling a loop reduces the loop control overhead and exposes more
3958 opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
3959 eliminates the loop and replaces it with an enumerated sequence of loop
3960 iterations. Full unrolling is only possible if the loop trip count is known at
3961 compile time. Partial unrolling replicates the loop body within the loop and
3962 reduces the trip count.
3964 If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
3965 loop if the trip count is known at compile time. If the fully unrolled code size
3966 is greater than an internal limit the loop will be partially unrolled up to this
3967 limit. If the trip count is not known at compile time the loop will be partially
3968 unrolled with a heuristically chosen unroll factor.
3972 #pragma clang loop unroll(enable)
3977 If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
3978 loop if the trip count is known at compile time identically to
3979 ``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
3980 if the loop count is not known at compile time.
3984 #pragma clang loop unroll(full)
3989 The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
3990 _value_ is a positive integer. If this value is greater than the trip count the
3991 loop will be fully unrolled. Otherwise the loop is partially unrolled subject
3992 to the same code size limit as with ``unroll(enable)``.
3996 #pragma clang loop unroll_count(8)
4001 Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4003 Loop unroll parameters can be controlled by options
4004 `-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4009 Loop Distribution allows splitting a loop into multiple loops. This is
4010 beneficial for example when the entire loop cannot be vectorized but some of the
4011 resulting loops can.
4013 If ``distribute(enable))`` is specified and the loop has memory dependencies
4014 that inhibit vectorization, the compiler will attempt to isolate the offending
4015 operations into a new loop. This optimization is not enabled by default, only
4016 loops marked with the pragma are considered.
4020 #pragma clang loop distribute(enable)
4021 for (i = 0; i < N; ++i) {
4022 S1: A[i + 1] = A[i] + B[i];
4023 S2: C[i] = D[i] * E[i];
4026 This loop will be split into two loops between statements S1 and S2. The
4027 second loop containing S2 will be vectorized.
4029 Loop Distribution is currently not enabled by default in the optimizer because
4030 it can hurt performance in some cases. For example, instruction-level
4031 parallelism could be reduced by sequentializing the execution of the
4032 statements S1 and S2 above.
4034 If Loop Distribution is turned on globally with
4035 ``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4036 be used the disable it on a per-loop basis.
4038 Additional Information
4039 ----------------------
4041 For convenience multiple loop hints can be specified on a single line.
4045 #pragma clang loop vectorize_width(4) interleave_count(8)
4050 If an optimization cannot be applied any hints that apply to it will be ignored.
4051 For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4052 proven safe to vectorize. To identify and diagnose optimization issues use
4053 `-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4054 user guide for details.
4056 Extensions to specify floating-point flags
4057 ====================================================
4059 The ``#pragma clang fp`` pragma allows floating-point options to be specified
4060 for a section of the source code. This pragma can only appear at file scope or
4061 at the start of a compound statement (excluding comments). When using within a
4062 compound statement, the pragma is active within the scope of the compound
4065 Currently, the following settings can be controlled with this pragma:
4067 ``#pragma clang fp reassociate`` allows control over the reassociation
4068 of floating point expressions. When enabled, this pragma allows the expression
4069 ``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4070 Reassociation can also occur across multiple statements.
4071 This pragma can be used to disable reassociation when it is otherwise
4072 enabled for the translation unit with the ``-fassociative-math`` flag.
4073 The pragma can take two values: ``on`` and ``off``.
4077 float f(float x, float y, float z)
4079 // Enable floating point reassociation across statements
4080 #pragma clang fp reassociate(on)
4086 ``#pragma clang fp contract`` specifies whether the compiler should
4087 contract a multiply and an addition (or subtraction) into a fused FMA
4088 operation when supported by the target.
4090 The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on``
4091 option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4092 fusion as specified the language standard. The ``fast`` option allows fusion
4093 in cases when the language standard does not make this possible (e.g. across
4099 #pragma clang fp contract(fast)
4105 The pragma can also be used with ``off`` which turns FP contraction off for a
4106 section of the code. This can be useful when fast contraction is otherwise
4107 enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4108 Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4109 addition across statements regardless of any controlling pragmas.
4111 ``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4112 may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4113 these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4118 // Preserve floating point exceptions
4119 #pragma clang fp exceptions(strict)
4121 if (fetestexcept(FE_OVERFLOW))
4125 A ``#pragma clang fp`` pragma may contain any number of options:
4129 void func(float *dest, float a, float b) {
4130 #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4134 ``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4135 for a section of the source code. This pragma can appear at file or namespace
4136 scope, or at the start of a compound statement (excluding comments).
4137 The pragma is active within the scope of the compound statement.
4139 When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4140 governed by the pragma behaves as though the command-line option
4141 ``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4142 source-defined precision.
4144 When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4145 governed by the pragma behaves as though the command-line option
4146 ``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4147 ``double`` precision.
4149 When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4150 governed by the pragma behaves as though the command-line option
4151 ``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4152 target-dependent ``long double`` precision. In Win32 programming, for instance,
4153 the long double data type maps to the double, 64-bit precision data type.
4155 The full syntax this pragma supports is
4156 ``#pragma clang fp eval_method(source|double|extended)``.
4161 // The compiler will use long double as the floating-point evaluation
4163 #pragma clang fp eval_method(extended)
4164 a = b[i] * c[i] + e;
4167 The ``#pragma float_control`` pragma allows precise floating-point
4168 semantics and floating-point exception behavior to be specified
4169 for a section of the source code. This pragma can only appear at file or
4170 namespace scope, within a language linkage specification or at the start of a
4171 compound statement (excluding comments). When used within a compound statement,
4172 the pragma is active within the scope of the compound statement. This pragma
4173 is modeled after a Microsoft pragma with the same spelling and syntax. For
4174 pragmas specified at file or namespace scope, or within a language linkage
4175 specification, a stack is supported so that the ``pragma float_control``
4176 settings can be pushed or popped.
4178 When ``pragma float_control(precise, on)`` is enabled, the section of code
4179 governed by the pragma uses precise floating point semantics, effectively
4180 ``-ffast-math`` is disabled and ``-ffp-contract=on``
4181 (fused multiply add) is enabled.
4183 When ``pragma float_control(except, on)`` is enabled, the section of code
4184 governed by the pragma behaves as though the command-line option
4185 ``-ffp-exception-behavior=strict`` is enabled,
4186 when ``pragma float_control(except, off)`` is enabled, the section of code
4187 governed by the pragma behaves as though the command-line option
4188 ``-ffp-exception-behavior=ignore`` is enabled.
4190 The full syntax this pragma supports is
4191 ``float_control(except|precise, on|off [, push])`` and
4192 ``float_control(push|pop)``.
4193 The ``push`` and ``pop`` forms, including using ``push`` as the optional
4194 third argument, can only occur at file scope.
4199 // This block will be compiled with -fno-fast-math and -ffp-contract=on
4200 #pragma float_control(precise, on)
4201 a = b[i] * c[i] + e;
4204 Specifying an attribute for multiple declarations (#pragma clang attribute)
4205 ===========================================================================
4207 The ``#pragma clang attribute`` directive can be used to apply an attribute to
4208 multiple declarations. The ``#pragma clang attribute push`` variation of the
4209 directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4210 can be added to. The ``#pragma clang attribute (...)`` variation adds an
4211 attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4212 the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4213 shorthand for when you want to add one attribute to a new scope. Multiple push
4214 directives can be nested inside each other.
4216 The attributes that are used in the ``#pragma clang attribute`` directives
4217 can be written using the GNU-style syntax:
4221 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4223 void function(); // The function now has the annotate("custom") attribute
4225 #pragma clang attribute pop
4227 The attributes can also be written using the C++11 style syntax:
4231 #pragma clang attribute push ([[noreturn]], apply_to = function)
4233 void function(); // The function now has the [[noreturn]] attribute
4235 #pragma clang attribute pop
4237 The ``__declspec`` style syntax is also supported:
4241 #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4243 void function(); // The function now has the __declspec(dllexport) attribute
4245 #pragma clang attribute pop
4247 A single push directive can contain multiple attributes, however,
4248 only one syntax style can be used within a single directive:
4252 #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4254 void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4256 #pragma clang attribute pop
4258 #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4260 void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4262 #pragma clang attribute pop
4264 Because multiple push directives can be nested, if you're writing a macro that
4265 expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4266 required) to add a namespace to your push/pop directives. A pop directive with a
4267 namespace will pop the innermost push that has that same namespace. This will
4268 ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4269 that an ``pop`` without a namespace will pop the innermost ``push`` without a
4270 namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4271 same namespace. For instance:
4275 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4276 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop")
4278 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
4279 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop")
4282 ASSUME_NORETURN_BEGIN
4283 ASSUME_UNAVAILABLE_BEGIN
4284 void function(); // function has [[noreturn]] and __attribute__((unavailable))
4286 void other_function(); // function has __attribute__((unavailable))
4287 ASSUME_UNAVAILABLE_END
4289 Without the namespaces on the macros, ``other_function`` will be annotated with
4290 ``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4291 a contrived example, but its very possible for this kind of situation to appear
4292 in real code if the pragmas are spread out across a large file. You can test if
4293 your version of clang supports namespaces on ``#pragma clang attribute`` with
4294 ``__has_extension(pragma_clang_attribute_namespaces)``.
4299 The set of declarations that receive a single attribute from the attribute stack
4300 depends on the subject match rules that were specified in the pragma. Subject
4301 match rules are specified after the attribute. The compiler expects an
4302 identifier that corresponds to the subject set specifier. The ``apply_to``
4303 specifier is currently the only supported subject set specifier. It allows you
4304 to specify match rules that form a subset of the attribute's allowed subject
4305 set, i.e. the compiler doesn't require all of the attribute's subjects. For
4306 example, an attribute like ``[[nodiscard]]`` whose subject set includes
4307 ``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4308 least one of these rules after ``apply_to``:
4312 #pragma clang attribute push([[nodiscard]], apply_to = enum)
4314 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4316 struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4318 #pragma clang attribute pop
4320 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4322 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4324 struct Record2 { }; // The struct *will* receive [[nodiscard]]
4326 #pragma clang attribute pop
4328 // This is an error, since [[nodiscard]] can't be applied to namespaces:
4329 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4331 #pragma clang attribute pop
4333 Multiple match rules can be specified using the ``any`` match rule, as shown
4334 in the example above. The ``any`` rule applies attributes to all declarations
4335 that are matched by at least one of the rules in the ``any``. It doesn't nest
4336 and can't be used inside the other match rules. Redundant match rules or rules
4337 that conflict with one another should not be used inside of ``any``. Failing to
4338 specify a rule within the ``any`` rule results in an error.
4340 Clang supports the following match rules:
4342 - ``function``: Can be used to apply attributes to functions. This includes C++
4343 member functions, static functions, operators, and constructors/destructors.
4345 - ``function(is_member)``: Can be used to apply attributes to C++ member
4346 functions. This includes members like static functions, operators, and
4347 constructors/destructors.
4349 - ``hasType(functionType)``: Can be used to apply attributes to functions, C++
4350 member functions, and variables/fields whose type is a function pointer. It
4351 does not apply attributes to Objective-C methods or blocks.
4353 - ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4354 and C++11 type aliases.
4356 - ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4357 ``union`` declarations.
4359 - ``record(unless(is_union))``: Can be used to apply attributes only to
4360 ``struct`` and ``class`` declarations.
4362 - ``enum``: Can be be used to apply attributes to enumeration declarations.
4364 - ``enum_constant``: Can be used to apply attributes to enumerators.
4366 - ``variable``: Can be used to apply attributes to variables, including
4367 local variables, parameters, global variables, and static member variables.
4368 It does not apply attributes to instance member variables or Objective-C
4371 - ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4374 - ``variable(is_global)``: Can be used to apply attributes to global variables
4377 - ``variable(is_local)``: Can be used to apply attributes to local variables
4380 - ``variable(is_parameter)``: Can be used to apply attributes to parameters
4383 - ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4384 the variables that are not parameters.
4386 - ``field``: Can be used to apply attributes to non-static member variables
4387 in a record. This includes Objective-C ivars.
4389 - ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4391 - ``objc_interface``: Can be used to apply attributes to ``@interface``
4394 - ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4397 - ``objc_category``: Can be used to apply attributes to category declarations,
4398 including class extensions.
4400 - ``objc_method``: Can be used to apply attributes to Objective-C methods,
4401 including instance and class methods. Implicit methods like implicit property
4402 getters and setters do not receive the attribute.
4404 - ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
4407 - ``objc_property``: Can be used to apply attributes to ``@property``
4410 - ``block``: Can be used to apply attributes to block declarations. This does
4411 not include variables/fields of block pointer type.
4413 The use of ``unless`` in match rules is currently restricted to a strict set of
4414 sub-rules that are used by the supported attributes. That means that even though
4415 ``variable(unless(is_parameter))`` is a valid match rule,
4416 ``variable(unless(is_thread_local))`` is not.
4418 Supported Attributes
4419 --------------------
4421 Not all attributes can be used with the ``#pragma clang attribute`` directive.
4422 Notably, statement attributes like ``[[fallthrough]]`` or type attributes
4423 like ``address_space`` aren't supported by this directive. You can determine
4424 whether or not an attribute is supported by the pragma by referring to the
4425 :doc:`individual documentation for that attribute <AttributeReference>`.
4427 The attributes are applied to all matching declarations individually, even when
4428 the attribute is semantically incorrect. The attributes that aren't applied to
4429 any declaration are not verified semantically.
4431 Specifying section names for global objects (#pragma clang section)
4432 ===================================================================
4434 The ``#pragma clang section`` directive provides a means to assign section-names
4435 to global variables, functions and static variables.
4437 The section names can be specified as:
4441 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
4443 The section names can be reverted back to default name by supplying an empty
4444 string to the section kind, for example:
4448 #pragma clang section bss="" data="" text="" rodata="" relro=""
4450 The ``#pragma clang section`` directive obeys the following rules:
4452 * The pragma applies to all global variable, statics and function declarations
4453 from the pragma to the end of the translation unit.
4455 * The pragma clang section is enabled automatically, without need of any flags.
4457 * This feature is only defined to work sensibly for ELF targets.
4459 * If section name is specified through _attribute_((section("myname"))), then
4460 the attribute name gains precedence.
4462 * Global variables that are initialized to zero will be placed in the named
4463 bss section, if one is present.
4465 * The ``#pragma clang section`` directive does not does try to infer section-kind
4466 from the name. For example, naming a section "``.bss.mySec``" does NOT mean
4467 it will be a bss section name.
4469 * The decision about which section-kind applies to each global is taken in the back-end.
4470 Once the section-kind is known, appropriate section name, as specified by the user using
4471 ``#pragma clang section`` directive, is applied to that global.
4473 Specifying Linker Options on ELF Targets
4474 ========================================
4476 The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
4477 The second parameter is the library name (without the traditional Unix prefix of
4478 ``lib``). This allows you to provide an implicit link of dependent libraries.
4480 Evaluating Object Size Dynamically
4481 ==================================
4483 Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
4484 the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
4485 ``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
4486 ``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
4487 for ``__builtin_object_size`` in libraries that support it.
4489 For instance, here is a program that ``__builtin_dynamic_object_size`` will make
4494 void copy_into_buffer(size_t size) {
4495 char* buffer = malloc(size);
4496 strlcpy(buffer, "some string", strlen("some string"));
4497 // Previous line preprocesses to:
4498 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
4501 Since the size of ``buffer`` can't be known at compile time, Clang will fold
4502 ``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
4503 as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
4504 ``size``, providing some extra runtime safety.
4509 Clang supports the pragma ``#pragma clang deprecated``, which can be used to
4510 provide deprecation warnings for macro uses. For example:
4514 #define MIN(x, y) x < y ? x : y
4515 #pragma clang deprecated(MIN, "use std::min instead")
4517 void min(int a, int b) {
4518 return MIN(a, b); // warning: MIN is deprecated: use std::min instead
4521 ``#pragma clang deprecated`` should be preferred for this purpose over
4522 ``#pragma GCC warning`` because the warning can be controlled with
4525 Restricted Expansion Macros
4526 ===========================
4528 Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
4529 used restrict macro expansion in headers. This can be valuable when providing
4530 headers with ABI stability requirements. Any expansion of the annotated macro
4531 processed by the preprocessor after the ``#pragma`` annotation will log a
4532 warning. Redefining the macro or undefining the macro will not be diagnosed, nor
4533 will expansion of the macro within the main source file. For example:
4537 #define TARGET_ARM 1
4538 #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
4542 #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
4551 #if TARGET_ARM // No warning in main source file
4557 This warning is controlled by ``-Wpedantic-macros``.
4562 Clang supports the pragma ``#pragma clang final``, which can be used to
4563 mark macros as final, meaning they cannot be undef'd or re-defined. For example:
4567 #define FINAL_MACRO 1
4568 #pragma clang final(FINAL_MACRO)
4570 #define FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be redefined
4571 #undef FINAL_MACRO // warning: FINAL_MACRO is marked final and should not be undefined
4573 This is useful for enforcing system-provided macros that should not be altered
4574 in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
4575 macros will always warn on redefinition, including situations with identical
4576 bodies and in system headers.
4581 Clang supports an extension for source line control, which takes the
4582 form of a preprocessor directive starting with an unsigned integral
4583 constant. In addition to the standard ``#line`` directive, this form
4584 allows control of an include stack and header file type, which is used
4585 in issuing diagnostics. These lines are emitted in preprocessed
4590 # <line:number> <filename:string> <header-type:numbers>
4592 The filename is optional, and if unspecified indicates no change in
4593 source filename. The header-type is an optional, whitespace-delimited,
4594 sequence of magic numbers as follows.
4596 * ``1:`` Push the current source file name onto the include stack and
4599 * ``2``: Pop the include stack and return to the specified file. If
4600 the filename is ``""``, the name popped from the include stack is
4601 used. Otherwise there is no requirement that the specified filename
4602 matches the current source when originally pushed.
4604 * ``3``: Enter a system-header region. System headers often contain
4605 implementation-specific source that would normally emit a diagnostic.
4607 * ``4``: Enter an implicit ``extern "C"`` region. This is not required on
4608 modern systems where system headers are C++-aware.
4610 At most a single ``1`` or ``2`` can be present, and values must be in
4617 # 57 // Advance (or return) to line 57 of the current source file
4618 # 57 "frob" // Set to line 57 of "frob"
4619 # 1 "foo.h" 1 // Enter "foo.h" at line 1
4620 # 59 "main.c" 2 // Leave current include and return to "main.c"
4621 # 1 "/usr/include/stdio.h" 1 3 // Enter a system header
4622 # 60 "" 2 // return to "main.c"
4623 # 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
4625 Extended Integer Types
4626 ======================
4628 Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
4629 and in C++. This type was previously implemented in Clang with the same
4630 semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
4631 favor of the standard type.
4633 Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
4634 so this type should not yet be used in interfaces that require ABI stability.
4636 Intrinsics Support within Constant Expressions
4637 ==============================================
4639 The following builtin intrinsics can be used in constant expressions:
4641 * ``__builtin_bitreverse8``
4642 * ``__builtin_bitreverse16``
4643 * ``__builtin_bitreverse32``
4644 * ``__builtin_bitreverse64``
4645 * ``__builtin_bswap16``
4646 * ``__builtin_bswap32``
4647 * ``__builtin_bswap64``
4648 * ``__builtin_clrsb``
4649 * ``__builtin_clrsbl``
4650 * ``__builtin_clrsbll``
4652 * ``__builtin_clzl``
4653 * ``__builtin_clzll``
4654 * ``__builtin_clzs``
4656 * ``__builtin_ctzl``
4657 * ``__builtin_ctzll``
4658 * ``__builtin_ctzs``
4660 * ``__builtin_ffsl``
4661 * ``__builtin_ffsll``
4662 * ``__builtin_fpclassify``
4664 * ``__builtin_isinf``
4665 * ``__builtin_isinf_sign``
4666 * ``__builtin_isfinite``
4667 * ``__builtin_isnan``
4668 * ``__builtin_isnormal``
4670 * ``__builtin_nans``
4671 * ``__builtin_parity``
4672 * ``__builtin_parityl``
4673 * ``__builtin_parityll``
4674 * ``__builtin_popcount``
4675 * ``__builtin_popcountl``
4676 * ``__builtin_popcountll``
4677 * ``__builtin_rotateleft8``
4678 * ``__builtin_rotateleft16``
4679 * ``__builtin_rotateleft32``
4680 * ``__builtin_rotateleft64``
4681 * ``__builtin_rotateright8``
4682 * ``__builtin_rotateright16``
4683 * ``__builtin_rotateright32``
4684 * ``__builtin_rotateright64``
4686 The following x86-specific intrinsics can be used in constant expressions:
4688 * ``_bit_scan_forward``
4689 * ``_bit_scan_reverse``
4702 * ``_mm_popcnt_u32``
4703 * ``_mm_popcnt_u64``