1=========================
2Clang Language Extensions
3=========================
4
5.. contents::
6   :local:
7   :depth: 1
8
9.. toctree::
10   :hidden:
11
12   ObjectiveCLiterals
13   BlockLanguageSpec
14   Block-ABI-Apple
15   AutomaticReferenceCounting
16   MatrixTypes
17
18Introduction
19============
20
21This document describes the language extensions provided by Clang.  In addition
22to the language extensions listed here, Clang aims to support a broad range of
23GCC extensions.  Please see the `GCC manual
24<https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
25these extensions.
26
27.. _langext-feature_check:
28
29Feature Checking Macros
30=======================
31
32Language extensions can be very useful, but only if you know you can depend on
33them.  In order to allow fine-grain features checks, we support three builtin
34function-like macros.  This allows you to directly test for a feature in your
35code without having to resort to something like autoconf or fragile "compiler
36version checks".
37
38``__has_builtin``
39-----------------
40
41This function-like macro takes a single identifier argument that is the name of
42a builtin function, a builtin pseudo-function (taking one or more type
43arguments), or a builtin template.
44It evaluates to 1 if the builtin is supported or 0 if not.
45It can be used like this:
46
47.. code-block:: c++
48
49  #ifndef __has_builtin         // Optional of course.
50    #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
51  #endif
52
53  ...
54  #if __has_builtin(__builtin_trap)
55    __builtin_trap();
56  #else
57    abort();
58  #endif
59  ...
60
61.. note::
62
63  Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
64  pseudo-functions.
65
66  ``__has_builtin`` should not be used to detect support for a builtin macro;
67  use ``#ifdef`` instead.
68
69.. _langext-__has_feature-__has_extension:
70
71``__has_feature`` and ``__has_extension``
72-----------------------------------------
73
74These function-like macros take a single identifier argument that is the name
75of a feature.  ``__has_feature`` evaluates to 1 if the feature is both
76supported by Clang and standardized in the current language standard or 0 if
77not (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
79current language (either as a language extension or a standard language
80feature) or 0 if not.  They can be used like this:
81
82.. code-block:: c++
83
84  #ifndef __has_feature         // Optional of course.
85    #define __has_feature(x) 0  // Compatibility with non-clang compilers.
86  #endif
87  #ifndef __has_extension
88    #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
89  #endif
90
91  ...
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.
95  #endif
96
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.
101  #endif
102
103.. _langext-has-feature-back-compat:
104
105For backward compatibility, ``__has_feature`` can also be used to test
106for support for non-standardized features, i.e. features not prefixed ``c_``,
107``cxx_`` or ``objc_``.
108
109Another use of ``__has_feature`` is to check for compiler features not related
110to the language standard, such as e.g. :doc:`AddressSanitizer
111<AddressSanitizer>`.
112
113If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
114to ``__has_feature``.
115
116The feature tag is described along with the language feature below.
117
118The feature name or extension name can also be specified with a preceding and
119following ``__`` (double underscore) to avoid interference from a macro with
120the same name.  For instance, ``__cxx_rvalue_references__`` can be used instead
121of ``cxx_rvalue_references``.
122
123``__has_cpp_attribute``
124-----------------------
125
126This function-like macro is available in C++20 by default, and is provided as an
127extension in earlier language standards. It takes a single argument that is the
128name of a double-square-bracket-style attribute. The argument can either be a
129single identifier or a scoped identifier. If the attribute is supported, a
130nonzero value is returned. If the attribute is a standards-based attribute, this
131macro returns a nonzero value based on the year and month in which the attribute
132was voted into the working draft. See `WG21 SD-6
133<https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
134for the list of values returned for standards-based attributes. If the attribute
135is not supported by the current compilation target, this macro evaluates to 0.
136It can be used like this:
137
138.. code-block:: c++
139
140  #ifndef __has_cpp_attribute         // For backwards compatibility
141    #define __has_cpp_attribute(x) 0
142  #endif
143
144  ...
145  #if __has_cpp_attribute(clang::fallthrough)
146  #define FALLTHROUGH [[clang::fallthrough]]
147  #else
148  #define FALLTHROUGH
149  #endif
150  ...
151
152The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
153the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
154of these namespaces can be specified with a preceding and following ``__``
155(double underscore) to avoid interference from a macro with the same name. For
156instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
157
158``__has_c_attribute``
159---------------------
160
161This function-like macro takes a single argument that is the name of an
162attribute exposed with the double square-bracket syntax in C mode. The argument
163can either be a single identifier or a scoped identifier. If the attribute is
164supported, a nonzero value is returned. If the attribute is not supported by the
165current compilation target, this macro evaluates to 0. It can be used like this:
166
167.. code-block:: c
168
169  #ifndef __has_c_attribute         // Optional of course.
170    #define __has_c_attribute(x) 0  // Compatibility with non-clang compilers.
171  #endif
172
173  ...
174  #if __has_c_attribute(fallthrough)
175    #define FALLTHROUGH [[fallthrough]]
176  #else
177    #define FALLTHROUGH
178  #endif
179  ...
180
181The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
182the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
183of these namespaces can be specified with a preceding and following ``__``
184(double underscore) to avoid interference from a macro with the same name. For
185instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
186
187``__has_attribute``
188-------------------
189
190This function-like macro takes a single identifier argument that is the name of
191a GNU-style attribute.  It evaluates to 1 if the attribute is supported by the
192current compilation target, or 0 if not.  It can be used like this:
193
194.. code-block:: c++
195
196  #ifndef __has_attribute         // Optional of course.
197    #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
198  #endif
199
200  ...
201  #if __has_attribute(always_inline)
202  #define ALWAYS_INLINE __attribute__((always_inline))
203  #else
204  #define ALWAYS_INLINE
205  #endif
206  ...
207
208The 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
210instance, ``__always_inline__`` can be used instead of ``always_inline``.
211
212
213``__has_declspec_attribute``
214----------------------------
215
216This function-like macro takes a single identifier argument that is the name of
217an attribute implemented as a Microsoft-style ``__declspec`` attribute.  It
218evaluates to 1 if the attribute is supported by the current compilation target,
219or 0 if not.  It can be used like this:
220
221.. code-block:: c++
222
223  #ifndef __has_declspec_attribute         // Optional of course.
224    #define __has_declspec_attribute(x) 0  // Compatibility with non-clang compilers.
225  #endif
226
227  ...
228  #if __has_declspec_attribute(dllexport)
229  #define DLLEXPORT __declspec(dllexport)
230  #else
231  #define DLLEXPORT
232  #endif
233  ...
234
235The 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
237instance, ``__dllexport__`` can be used instead of ``dllexport``.
238
239``__is_identifier``
240-------------------
241
242This function-like macro takes a single identifier argument that might be either
243a reserved word or a regular identifier. It evaluates to 1 if the argument is just
244a regular identifier and not a reserved word, in the sense that it can then be
245used as the name of a user-defined function or variable. Otherwise it evaluates
246to 0.  It can be used like this:
247
248.. code-block:: c++
249
250  ...
251  #ifdef __is_identifier          // Compatibility with non-clang compilers.
252    #if __is_identifier(__wchar_t)
253      typedef wchar_t __wchar_t;
254    #endif
255  #endif
256
257  __wchar_t WideCharacter;
258  ...
259
260Include File Checking Macros
261============================
262
263Not all developments systems have the same include files.  The
264:ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
265you to check for the existence of an include file before doing a possibly
266failing ``#include`` directive.  Include file checking macros must be used
267as expressions in ``#if`` or ``#elif`` preprocessing directives.
268
269.. _langext-__has_include:
270
271``__has_include``
272-----------------
273
274This function-like macro takes a single file name string argument that is the
275name of an include file.  It evaluates to 1 if the file can be found using the
276include paths, or 0 otherwise:
277
278.. code-block:: c++
279
280  // Note the two possible file name string formats.
281  #if __has_include("myinclude.h") && __has_include(<stdint.h>)
282  # include "myinclude.h"
283  #endif
284
285To test for this feature, use ``#if defined(__has_include)``:
286
287.. code-block:: c++
288
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"
293  #endif
294  #endif
295
296.. _langext-__has_include_next:
297
298``__has_include_next``
299----------------------
300
301This function-like macro takes a single file name string argument that is the
302name of an include file.  It is like ``__has_include`` except that it looks for
303the second instance of the given file found in the include paths.  It evaluates
304to 1 if the second instance of the file can be found using the include paths,
305or 0 otherwise:
306
307.. code-block:: c++
308
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"
312  #endif
313
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"
318  #endif
319  #endif
320
321Note that ``__has_include_next``, like the GNU extension ``#include_next``
322directive, is intended for use in headers only, and will issue a warning if
323used in the top-level compilation file.  A warning will also be issued if an
324absolute path is used in the file argument.
325
326``__has_warning``
327-----------------
328
329This function-like macro takes a string literal that represents a command line
330option for a warning and returns true if that is a valid warning option.
331
332.. code-block:: c++
333
334  #if __has_warning("-Wformat")
335  ...
336  #endif
337
338.. _languageextensions-builtin-macros:
339
340Builtin Macros
341==============
342
343``__BASE_FILE__``
344  Defined to a string that contains the name of the main input file passed to
345  Clang.
346
347``__FILE_NAME__``
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.
351
352``__COUNTER__``
353  Defined to an integer value that starts at zero and is incremented each time
354  the ``__COUNTER__`` macro is expanded.
355
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.
359
360``__TIMESTAMP__``
361  Defined to the date and time of the last modification of the current source
362  file.
363
364``__clang__``
365  Defined when compiling with Clang
366
367``__clang_major__``
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`.
372
373``__clang_minor__``
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`.
378
379``__clang_patchlevel__``
380  Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
381
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)``".
385
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.)
391
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.)
397
398.. _langext-vectors:
399
400Vectors and Extended Vectors
401============================
402
403Supports the GCC, OpenCL, AltiVec, NEON and SVE vector extensions.
404
405OpenCL vector types are created using the ``ext_vector_type`` attribute.  It
406supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL.  An example
407is:
408
409.. code-block:: c++
410
411  typedef float float4 __attribute__((ext_vector_type(4)));
412  typedef float float2 __attribute__((ext_vector_type(2)));
413
414  float4 foo(float2 a, float2 b) {
415    float4 c;
416    c.xz = a;
417    c.yw = b;
418    return c;
419  }
420
421Query for this feature with ``__has_attribute(ext_vector_type)``.
422
423Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
424and functions.  For example:
425
426.. code-block:: c++
427
428  vector float foo(vector int a) {
429    vector int b;
430    b = vec_add(a, a) + a;
431    return (vector float)b;
432  }
433
434NEON vector types are created using ``neon_vector_type`` and
435``neon_polyvector_type`` attributes.  For example:
436
437.. code-block:: c++
438
439  typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
440  typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
441
442  int8x8_t foo(int8x8_t a) {
443    int8x8_t v;
444    v = a;
445    return v;
446  }
447
448GCC vector types are created using the ``vector_size(N)`` attribute.  The
449argument ``N`` specifies the number of bytes that will be allocated for an
450object of this type.  The size has to be multiple of the size of the vector
451element type. For example:
452
453.. code-block:: c++
454
455  // OK: This declares a vector type with four 'int' elements
456  typedef int int4 __attribute__((vector_size(4 * sizeof(int))));
457
458  // ERROR: '11' is not a multiple of sizeof(int)
459  typedef int int_impossible __attribute__((vector_size(11)));
460
461  int4 foo(int4 a) {
462    int4 v;
463    v = a;
464    return v;
465  }
466
467
468Boolean Vectors
469---------------
470
471Clang also supports the ext_vector_type attribute with boolean element types in
472C and C++.  For example:
473
474.. code-block:: c++
475
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
479
480  bool4 foo(bool4 a) {
481    bool4 v;
482    v = a;
483    return v;
484  }
485
486Boolean vectors are a Clang extension of the ext vector type.  Boolean vectors
487are intended, though not guaranteed, to map to vector mask registers.  The size
488parameter of a boolean vector type is the number of bits in the vector.  The
489boolean vector is dense and each bit in the boolean vector is one vector
490element.
491
492The semantics of boolean vectors borrows from C bit-fields with the following
493differences:
494
495* Distinct boolean vectors are always distinct memory objects (there is no
496  packing).
497* Only the operators `?:`, `!`, `~`, `|`, `&`, `^` and comparison are allowed on
498  boolean vectors.
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).
503
504The size and alignment are both the number of bits rounded up to the next power
505of two, but the alignment is at most the maximum vector alignment of the
506target.
507
508
509Vector Literals
510---------------
511
512Vector literals can be used to create vectors from a set of scalars, or
513vectors.  Either parentheses or braces form can be used.  In the parentheses
514form the number of literal values specified must be one, i.e. referring to a
515scalar value, or must match the size of the vector type being created.  If a
516single scalar literal value is specified, the scalar literal value will be
517replicated to all the components of the vector type.  In the brackets form any
518number of literals can be specified.  For example:
519
520.. code-block:: c++
521
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)));
525
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));
534
535.. _Vector Operations:
536
537Vector Operations
538-----------------
539
540The table below shows the support for each operation by vector extension.  A
541dash indicates that an operation is not accepted according to a corresponding
542specification.
543
544============================== ======= ======= ============= ======= =====
545         Operator              OpenCL  AltiVec     GCC        NEON    SVE
546============================== ======= ======= ============= ======= =====
547[]                               yes     yes       yes         yes    yes
548unary operators +, --            yes     yes       yes         yes    yes
549++, -- --                        yes     yes       yes         no     no
550+,--,*,/,%                       yes     yes       yes         yes    yes
551bitwise operators &,|,^,~        yes     yes       yes         yes    yes
552>>,<<                            yes     yes       yes         yes    yes
553!, &&, ||                        yes     --        yes         yes    yes
554==, !=, >, <, >=, <=             yes     yes       yes         yes    yes
555=                                yes     yes       yes         yes    yes
556?: [#]_                          yes     --        yes         yes    yes
557sizeof                           yes     yes       yes         yes    yes [#]_
558C-style cast                     yes     yes       yes         no     no
559reinterpret_cast                 yes     no        yes         no     no
560static_cast                      yes     no        yes         no     no
561const_cast                       no      no        no          no     no
562address &v[i]                    no      no        no [#]_     no     no
563============================== ======= ======= ============= ======= =====
564
565See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
566
567.. [#] ternary operator(?:) has different behaviors depending on condition
568  operand's vector type. If the condition is a GNU vector (i.e. __vector_size__),
569  a NEON vector or an SVE vector, it's only available in C++ and uses normal bool
570  conversions (that is, != 0).
571  If it's an extension (OpenCL) vector, it's only available in C and OpenCL C.
572  And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9).
573.. [#] sizeof can only be used on vector length specific SVE types.
574.. [#] Clang does not allow the address of an element to be taken while GCC
575   allows this. This is intentional for vectors with a boolean element type and
576   not implemented otherwise.
577
578Vector Builtins
579---------------
580
581**Note: The implementation of vector builtins is work-in-progress and incomplete.**
582
583In addition to the operators mentioned above, Clang provides a set of builtins
584to perform additional operations on certain scalar and vector types.
585
586Let ``T`` be one of the following types:
587
588* an integer type (as in C2x 6.2.5p19), but excluding enumerated types and _Bool
589* the standard floating types float or double
590* a half-precision floating point type, if one is supported on the target
591* a vector type.
592
593For scalar types, consider the operation applied to a vector with a single element.
594
595*Elementwise Builtins*
596
597Each builtin returns a vector equivalent to applying the specified operation
598elementwise to the input.
599
600Unless specified otherwise operation(±0) = ±0 and operation(±infinity) = ±infinity
601
602=========================================== ================================================================ =========================================
603         Name                                Operation                                                        Supported element types
604=========================================== ================================================================ =========================================
605 T __builtin_elementwise_abs(T x)            return the absolute value of a number x; the absolute value of   signed integer and floating point types
606                                             the most negative integer remains the most negative integer
607 T __builtin_elementwise_ceil(T x)           return the smallest integral value greater than or equal to x    floating point types
608 T __builtin_elementwise_floor(T x)          return the largest integral value less than or equal to x        floating point types
609 T __builtin_elementwise_roundeven(T x)      round x to the nearest integer value in floating point format,   floating point types
610                                             rounding halfway cases to even (that is, to the nearest value
611                                             that is an even integer), regardless of the current rounding
612                                             direction.
613 T__builtin_elementwise_trunc(T x)           return the integral value nearest to but no larger in            floating point types
614                                             magnitude than x
615 T __builtin_elementwise_max(T x, T y)       return x or y, whichever is larger                               integer and floating point types
616 T __builtin_elementwise_min(T x, T y)       return x or y, whichever is smaller                              integer and floating point types
617 T __builtin_elementwise_add_sat(T x, T y)   return the sum of x and y, clamped to the range of               integer types
618                                             representable values for the signed/unsigned integer type.
619 T __builtin_elementwise_sub_sat(T x, T y)   return the difference of x and y, clamped to the range of        integer types
620                                             representable values for the signed/unsigned integer type.
621=========================================== ================================================================ =========================================
622
623
624*Reduction Builtins*
625
626Each builtin returns a scalar equivalent to applying the specified
627operation(x, y) as recursive even-odd pairwise reduction to all vector
628elements. ``operation(x, y)`` is repeatedly applied to each non-overlapping
629even-odd element pair with indices ``i * 2`` and ``i * 2 + 1`` with
630``i in [0, Number of elements / 2)``. If the numbers of elements is not a
631power of 2, the vector is widened with neutral elements for the reduction
632at the end to the next power of 2.
633
634Example:
635
636.. code-block:: c++
637
638    __builtin_reduce_add([e3, e2, e1, e0]) = __builtin_reduced_add([e3 + e2, e1 + e0])
639                                           = (e3 + e2) + (e1 + e0)
640
641
642Let ``VT`` be a vector type and ``ET`` the element type of ``VT``.
643
644======================================= ================================================================ ==================================
645         Name                            Operation                                                        Supported element types
646======================================= ================================================================ ==================================
647 ET __builtin_reduce_max(VT a)           return x or y, whichever is larger; If exactly one argument is   integer and floating point types
648                                         a NaN, return the other argument. If both arguments are NaNs,
649                                         fmax() return a NaN.
650 ET __builtin_reduce_min(VT a)           return x or y, whichever is smaller; If exactly one argument     integer and floating point types
651                                         is a NaN, return the other argument. If both arguments are
652                                         NaNs, fmax() return a NaN.
653 ET __builtin_reduce_add(VT a)           \+                                                               integer and floating point types
654 ET __builtin_reduce_mul(VT a)           \*                                                               integer and floating point types
655 ET __builtin_reduce_and(VT a)           &                                                                integer types
656 ET __builtin_reduce_or(VT a)            \|                                                               integer types
657 ET __builtin_reduce_xor(VT a)           ^                                                                integer types
658======================================= ================================================================ ==================================
659
660Matrix Types
661============
662
663Clang provides an extension for matrix types, which is currently being
664implemented. See :ref:`the draft specification <matrixtypes>` for more details.
665
666For example, the code below uses the matrix types extension to multiply two 4x4
667float matrices and add the result to a third 4x4 matrix.
668
669.. code-block:: c++
670
671  typedef float m4x4_t __attribute__((matrix_type(4, 4)));
672
673  m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) {
674    return a + b * c;
675  }
676
677The matrix type extension also supports operations on a matrix and a scalar.
678
679.. code-block:: c++
680
681  typedef float m4x4_t __attribute__((matrix_type(4, 4)));
682
683  m4x4_t f(m4x4_t a) {
684    return (a + 23) * 12;
685  }
686
687The matrix type extension supports division on a matrix and a scalar but not on a matrix and a matrix.
688
689.. code-block:: c++
690
691  typedef float m4x4_t __attribute__((matrix_type(4, 4)));
692
693  m4x4_t f(m4x4_t a) {
694    a = a / 3.0;
695    return a;
696  }
697
698The matrix type extension supports compound assignments for addition, subtraction, and multiplication on matrices
699and on a matrix and a scalar, provided their types are consistent.
700
701.. code-block:: c++
702
703  typedef float m4x4_t __attribute__((matrix_type(4, 4)));
704
705  m4x4_t f(m4x4_t a, m4x4_t b) {
706    a += b;
707    a -= b;
708    a *= b;
709    a += 23;
710    a -= 12;
711    return a;
712  }
713
714The matrix type extension supports explicit casts. Implicit type conversion between matrix types is not allowed.
715
716.. code-block:: c++
717
718  typedef int ix5x5 __attribute__((matrix_type(5, 5)));
719  typedef float fx5x5 __attribute__((matrix_type(5, 5)));
720
721  fx5x5 f1(ix5x5 i, fx5x5 f) {
722    return (fx5x5) i;
723  }
724
725
726  template <typename X>
727  using matrix_4_4 = X __attribute__((matrix_type(4, 4)));
728
729  void f2() {
730    matrix_5_5<double> d;
731    matrix_5_5<int> i;
732    i = (matrix_5_5<int>)d;
733    i = static_cast<matrix_5_5<int>>(d);
734  }
735
736Half-Precision Floating Point
737=============================
738
739Clang supports three half-precision (16-bit) floating point types: ``__fp16``,
740``_Float16`` and ``__bf16``.  These types are supported in all language modes.
741
742``__fp16`` is supported on every target, as it is purely a storage format; see below.
743``_Float16`` is currently only supported on the following targets, with further
744targets pending ABI standardization:
745
746* 32-bit ARM
747* 64-bit ARM (AArch64)
748* AMDGPU
749* SPIR
750* X86 (see below)
751
752On X86 targets, ``_Float16`` is supported as long as SSE2 is available, which
753includes all 64-bit and all recent 32-bit processors. When the target supports
754AVX512-FP16, ``_Float16`` arithmetic is performed using that native support.
755Otherwise, ``_Float16`` arithmetic is performed by promoting to ``float``,
756performing the operation, and then truncating to ``_Float16``.
757
758``_Float16`` will be supported on more targets as they define ABIs for it.
759
760``__bf16`` is purely a storage format; it is currently only supported on the following targets:
761* 32-bit ARM
762* 64-bit ARM (AArch64)
763* X86 (see below)
764
765On X86 targets, ``__bf16`` is supported as long as SSE2 is available, which
766includes all 64-bit and all recent 32-bit processors.
767
768The ``__bf16`` type is only available when supported in hardware.
769
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
772operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``.
773The 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>`_).
774Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM
775alternative format.
776
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``
782format from IEEE 754-2008 for ``_Float16``.
783
784``_Float16`` arithmetic will be performed using native half-precision support
785when available on the target (e.g. on ARMv8.2a); otherwise it will be performed
786at a higher precision (currently always ``float``) and then truncated down to
787``_Float16``.  Note that C and C++ allow intermediate floating-point operands
788of an expression to be computed with greater precision than is expressible in
789their type, so Clang may avoid intermediate truncations in certain cases; this may
790lead to results that are inconsistent with native arithmetic.
791
792It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
793as it has been defined by the C standards committee and has behavior that is
794more familiar to most programmers.
795
796Because ``__fp16`` operands are always immediately promoted to ``float``, the
797common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
798arithmetic conversions is ``float``.
799
800A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
801``3.14f16``.
802
803Because default argument promotion only applies to the standard floating-point
804types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
805or untyped arguments.  As a consequence, some caution must be taken when using
806certain library facilities with ``_Float16``; for example, there is no ``printf`` format
807specifier 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.
810
811Messages on ``deprecated`` and ``unavailable`` Attributes
812=========================================================
813
814An optional string message can be added to the ``deprecated`` and
815``unavailable`` attributes.  For example:
816
817.. code-block:: c++
818
819  void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
820
821If the deprecated or unavailable declaration is used, the message will be
822incorporated into the appropriate diagnostic:
823
824.. code-block:: none
825
826  harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
827        [-Wdeprecated-declarations]
828    explode();
829    ^
830
831Query for this feature with
832``__has_extension(attribute_deprecated_with_message)`` and
833``__has_extension(attribute_unavailable_with_message)``.
834
835Attributes on Enumerators
836=========================
837
838Clang allows attributes to be written on individual enumerators.  This allows
839enumerators to be deprecated, made unavailable, etc.  The attribute must appear
840after the enumerator name and before any initializer, like so:
841
842.. code-block:: c++
843
844  enum OperationMode {
845    OM_Invalid,
846    OM_Normal,
847    OM_Terrified __attribute__((deprecated)),
848    OM_AbortOnError __attribute__((deprecated)) = 4
849  };
850
851Attributes on the ``enum`` declaration do not apply to individual enumerators.
852
853Query for this feature with ``__has_extension(enumerator_attributes)``.
854
855C++11 Attributes on using-declarations
856======================================
857
858Clang allows C++-style ``[[]]`` attributes to be written on using-declarations.
859For instance:
860
861.. code-block:: c++
862
863  [[clang::using_if_exists]] using foo::bar;
864  using foo::baz [[clang::using_if_exists]];
865
866You can test for support for this extension with
867``__has_extension(cxx_attributes_on_using_declarations)``.
868
869'User-Specified' System Frameworks
870==================================
871
872Clang provides a mechanism by which frameworks can be built in such a way that
873they will always be treated as being "system frameworks", even if they are not
874present in a system framework directory.  This can be useful to system
875framework developers who want to be able to test building other applications
876with development builds of their framework, including the manner in which the
877compiler changes warning behavior for system headers.
878
879Framework developers can opt-in to this mechanism by creating a
880"``.system_framework``" file at the top-level of their framework.  That is, the
881framework should have contents like:
882
883.. code-block:: none
884
885  .../TestFramework.framework
886  .../TestFramework.framework/.system_framework
887  .../TestFramework.framework/Headers
888  .../TestFramework.framework/Headers/TestFramework.h
889  ...
890
891Clang will treat the presence of this file as an indicator that the framework
892should be treated as a system framework, regardless of how it was found in the
893framework search path.  For consistency, we recommend that such files never be
894included in installed versions of the framework.
895
896Checks for Standard Language Features
897=====================================
898
899The ``__has_feature`` macro can be used to query if certain standard language
900features are enabled.  The ``__has_extension`` macro can be used to query if
901language features are available as an extension when compiling for a standard
902which does not provide them.  The features which can be tested are listed here.
903
904Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
905These are macros with names of the form ``__cpp_<feature_name>``, and are
906intended to be a portable way to query the supported features of the compiler.
907See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
908information on the version of SD-6 supported by each Clang release, and the
909macros provided by that revision of the recommendations.
910
911C++98
912-----
913
914The features listed below are part of the C++98 standard.  These features are
915enabled by default when compiling C++ code.
916
917C++ exceptions
918^^^^^^^^^^^^^^
919
920Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
921enabled.  For example, compiling code with ``-fno-exceptions`` disables C++
922exceptions.
923
924C++ RTTI
925^^^^^^^^
926
927Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled.  For
928example, compiling code with ``-fno-rtti`` disables the use of RTTI.
929
930C++11
931-----
932
933The features listed below are part of the C++11 standard.  As a result, all
934these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
935when compiling C++ code.
936
937C++11 SFINAE includes access control
938^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
939
940Use ``__has_feature(cxx_access_control_sfinae)`` or
941``__has_extension(cxx_access_control_sfinae)`` to determine whether
942access-control errors (e.g., calling a private constructor) are considered to
943be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
944<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
945
946C++11 alias templates
947^^^^^^^^^^^^^^^^^^^^^
948
949Use ``__has_feature(cxx_alias_templates)`` or
950``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
951alias declarations and alias templates is enabled.
952
953C++11 alignment specifiers
954^^^^^^^^^^^^^^^^^^^^^^^^^^
955
956Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
957determine if support for alignment specifiers using ``alignas`` is enabled.
958
959Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
960determine if support for the ``alignof`` keyword is enabled.
961
962C++11 attributes
963^^^^^^^^^^^^^^^^
964
965Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
966determine if support for attribute parsing with C++11's square bracket notation
967is enabled.
968
969C++11 generalized constant expressions
970^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
971
972Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
973constant expressions (e.g., ``constexpr``) is enabled.
974
975C++11 ``decltype()``
976^^^^^^^^^^^^^^^^^^^^
977
978Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
979determine if support for the ``decltype()`` specifier is enabled.  C++11's
980``decltype`` does not require type-completeness of a function call expression.
981Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
982``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
983support for this feature is enabled.
984
985C++11 default template arguments in function templates
986^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
987
988Use ``__has_feature(cxx_default_function_template_args)`` or
989``__has_extension(cxx_default_function_template_args)`` to determine if support
990for default template arguments in function templates is enabled.
991
992C++11 ``default``\ ed functions
993^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
994
995Use ``__has_feature(cxx_defaulted_functions)`` or
996``__has_extension(cxx_defaulted_functions)`` to determine if support for
997defaulted function definitions (with ``= default``) is enabled.
998
999C++11 delegating constructors
1000^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1001
1002Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
1003delegating constructors is enabled.
1004
1005C++11 ``deleted`` functions
1006^^^^^^^^^^^^^^^^^^^^^^^^^^^
1007
1008Use ``__has_feature(cxx_deleted_functions)`` or
1009``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
1010function definitions (with ``= delete``) is enabled.
1011
1012C++11 explicit conversion functions
1013^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1014
1015Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
1016``explicit`` conversion functions is enabled.
1017
1018C++11 generalized initializers
1019^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1020
1021Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
1022generalized initializers (using braced lists and ``std::initializer_list``) is
1023enabled.
1024
1025C++11 implicit move constructors/assignment operators
1026^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1027
1028Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
1029generate move constructors and move assignment operators where needed.
1030
1031C++11 inheriting constructors
1032^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1033
1034Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
1035inheriting constructors is enabled.
1036
1037C++11 inline namespaces
1038^^^^^^^^^^^^^^^^^^^^^^^
1039
1040Use ``__has_feature(cxx_inline_namespaces)`` or
1041``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
1042namespaces is enabled.
1043
1044C++11 lambdas
1045^^^^^^^^^^^^^
1046
1047Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
1048determine if support for lambdas is enabled.
1049
1050C++11 local and unnamed types as template arguments
1051^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1052
1053Use ``__has_feature(cxx_local_type_template_args)`` or
1054``__has_extension(cxx_local_type_template_args)`` to determine if support for
1055local and unnamed types as template arguments is enabled.
1056
1057C++11 noexcept
1058^^^^^^^^^^^^^^
1059
1060Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
1061determine if support for noexcept exception specifications is enabled.
1062
1063C++11 in-class non-static data member initialization
1064^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1065
1066Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
1067initialization of non-static data members is enabled.
1068
1069C++11 ``nullptr``
1070^^^^^^^^^^^^^^^^^
1071
1072Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
1073determine if support for ``nullptr`` is enabled.
1074
1075C++11 ``override control``
1076^^^^^^^^^^^^^^^^^^^^^^^^^^
1077
1078Use ``__has_feature(cxx_override_control)`` or
1079``__has_extension(cxx_override_control)`` to determine if support for the
1080override control keywords is enabled.
1081
1082C++11 reference-qualified functions
1083^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1084
1085Use ``__has_feature(cxx_reference_qualified_functions)`` or
1086``__has_extension(cxx_reference_qualified_functions)`` to determine if support
1087for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
1088applied to ``*this``) is enabled.
1089
1090C++11 range-based ``for`` loop
1091^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1092
1093Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
1094determine if support for the range-based for loop is enabled.
1095
1096C++11 raw string literals
1097^^^^^^^^^^^^^^^^^^^^^^^^^
1098
1099Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
1100string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
1101
1102C++11 rvalue references
1103^^^^^^^^^^^^^^^^^^^^^^^
1104
1105Use ``__has_feature(cxx_rvalue_references)`` or
1106``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
1107references is enabled.
1108
1109C++11 ``static_assert()``
1110^^^^^^^^^^^^^^^^^^^^^^^^^
1111
1112Use ``__has_feature(cxx_static_assert)`` or
1113``__has_extension(cxx_static_assert)`` to determine if support for compile-time
1114assertions using ``static_assert`` is enabled.
1115
1116C++11 ``thread_local``
1117^^^^^^^^^^^^^^^^^^^^^^
1118
1119Use ``__has_feature(cxx_thread_local)`` to determine if support for
1120``thread_local`` variables is enabled.
1121
1122C++11 type inference
1123^^^^^^^^^^^^^^^^^^^^
1124
1125Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
1126determine C++11 type inference is supported using the ``auto`` specifier.  If
1127this is disabled, ``auto`` will instead be a storage class specifier, as in C
1128or C++98.
1129
1130C++11 strongly typed enumerations
1131^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1132
1133Use ``__has_feature(cxx_strong_enums)`` or
1134``__has_extension(cxx_strong_enums)`` to determine if support for strongly
1135typed, scoped enumerations is enabled.
1136
1137C++11 trailing return type
1138^^^^^^^^^^^^^^^^^^^^^^^^^^
1139
1140Use ``__has_feature(cxx_trailing_return)`` or
1141``__has_extension(cxx_trailing_return)`` to determine if support for the
1142alternate function declaration syntax with trailing return type is enabled.
1143
1144C++11 Unicode string literals
1145^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1146
1147Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
1148string literals is enabled.
1149
1150C++11 unrestricted unions
1151^^^^^^^^^^^^^^^^^^^^^^^^^
1152
1153Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
1154unrestricted unions is enabled.
1155
1156C++11 user-defined literals
1157^^^^^^^^^^^^^^^^^^^^^^^^^^^
1158
1159Use ``__has_feature(cxx_user_literals)`` to determine if support for
1160user-defined literals is enabled.
1161
1162C++11 variadic templates
1163^^^^^^^^^^^^^^^^^^^^^^^^
1164
1165Use ``__has_feature(cxx_variadic_templates)`` or
1166``__has_extension(cxx_variadic_templates)`` to determine if support for
1167variadic templates is enabled.
1168
1169C++14
1170-----
1171
1172The features listed below are part of the C++14 standard.  As a result, all
1173these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
1174when compiling C++ code.
1175
1176C++14 binary literals
1177^^^^^^^^^^^^^^^^^^^^^
1178
1179Use ``__has_feature(cxx_binary_literals)`` or
1180``__has_extension(cxx_binary_literals)`` to determine whether
1181binary literals (for instance, ``0b10010``) are recognized. Clang supports this
1182feature as an extension in all language modes.
1183
1184C++14 contextual conversions
1185^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1186
1187Use ``__has_feature(cxx_contextual_conversions)`` or
1188``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
1189are used when performing an implicit conversion for an array bound in a
1190*new-expression*, the operand of a *delete-expression*, an integral constant
1191expression, or a condition in a ``switch`` statement.
1192
1193C++14 decltype(auto)
1194^^^^^^^^^^^^^^^^^^^^
1195
1196Use ``__has_feature(cxx_decltype_auto)`` or
1197``__has_extension(cxx_decltype_auto)`` to determine if support
1198for the ``decltype(auto)`` placeholder type is enabled.
1199
1200C++14 default initializers for aggregates
1201^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1202
1203Use ``__has_feature(cxx_aggregate_nsdmi)`` or
1204``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
1205for default initializers in aggregate members is enabled.
1206
1207C++14 digit separators
1208^^^^^^^^^^^^^^^^^^^^^^
1209
1210Use ``__cpp_digit_separators`` to determine if support for digit separators
1211using single quotes (for instance, ``10'000``) is enabled. At this time, there
1212is no corresponding ``__has_feature`` name
1213
1214C++14 generalized lambda capture
1215^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1216
1217Use ``__has_feature(cxx_init_captures)`` or
1218``__has_extension(cxx_init_captures)`` to determine if support for
1219lambda captures with explicit initializers is enabled
1220(for instance, ``[n(0)] { return ++n; }``).
1221
1222C++14 generic lambdas
1223^^^^^^^^^^^^^^^^^^^^^
1224
1225Use ``__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; }``).
1229
1230C++14 relaxed constexpr
1231^^^^^^^^^^^^^^^^^^^^^^^
1232
1233Use ``__has_feature(cxx_relaxed_constexpr)`` or
1234``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
1235declarations, local variable modification, and control flow constructs
1236are permitted in ``constexpr`` functions.
1237
1238C++14 return type deduction
1239^^^^^^^^^^^^^^^^^^^^^^^^^^^
1240
1241Use ``__has_feature(cxx_return_type_deduction)`` or
1242``__has_extension(cxx_return_type_deduction)`` to determine if support
1243for return type deduction for functions (using ``auto`` as a return type)
1244is enabled.
1245
1246C++14 runtime-sized arrays
1247^^^^^^^^^^^^^^^^^^^^^^^^^^
1248
1249Use ``__has_feature(cxx_runtime_array)`` or
1250``__has_extension(cxx_runtime_array)`` to determine if support
1251for arrays of runtime bound (a restricted form of variable-length arrays)
1252is enabled.
1253Clang's implementation of this feature is incomplete.
1254
1255C++14 variable templates
1256^^^^^^^^^^^^^^^^^^^^^^^^
1257
1258Use ``__has_feature(cxx_variable_templates)`` or
1259``__has_extension(cxx_variable_templates)`` to determine if support for
1260templated variable declarations is enabled.
1261
1262C11
1263---
1264
1265The features listed below are part of the C11 standard.  As a result, all these
1266features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
1267compiling C code.  Additionally, because these features are all
1268backward-compatible, they are available as extensions in all language modes.
1269
1270C11 alignment specifiers
1271^^^^^^^^^^^^^^^^^^^^^^^^
1272
1273Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
1274if support for alignment specifiers using ``_Alignas`` is enabled.
1275
1276Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
1277if support for the ``_Alignof`` keyword is enabled.
1278
1279C11 atomic operations
1280^^^^^^^^^^^^^^^^^^^^^
1281
1282Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1283if 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
1285the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1286``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1287is available.
1288
1289Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1290will otherwise use its own. When using its own, implementations of the atomic
1291operations are provided as macros. In the cases where C11 also requires a real
1292function, this header provides only the declaration of that function (along
1293with a shadowing macro implementation), and you must link to a library which
1294provides a definition of the function if you use it instead of the macro.
1295
1296C11 generic selections
1297^^^^^^^^^^^^^^^^^^^^^^
1298
1299Use ``__has_feature(c_generic_selections)`` or
1300``__has_extension(c_generic_selections)`` to determine if support for generic
1301selections is enabled.
1302
1303As an extension, the C11 generic selection expression is available in all
1304languages supported by Clang.  The syntax is the same as that given in the C11
1305standard.
1306
1307In C, type compatibility is decided according to the rules given in the
1308appropriate standard, but in C++, which lacks the type compatibility rules used
1309in C, types are considered compatible only if they are equivalent.
1310
1311C11 ``_Static_assert()``
1312^^^^^^^^^^^^^^^^^^^^^^^^
1313
1314Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1315to determine if support for compile-time assertions using ``_Static_assert`` is
1316enabled.
1317
1318C11 ``_Thread_local``
1319^^^^^^^^^^^^^^^^^^^^^
1320
1321Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1322to determine if support for ``_Thread_local`` variables is enabled.
1323
1324Modules
1325-------
1326
1327Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1328For example, compiling code with ``-fmodules`` enables the use of Modules.
1329
1330More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
1331
1332Type Trait Primitives
1333=====================
1334
1335Type trait primitives are special builtin constant expressions that can be used
1336by the standard C++ library to facilitate or simplify the implementation of
1337user-facing type traits in the <type_traits> header.
1338
1339They are not intended to be used directly by user code because they are
1340implementation-defined and subject to change -- as such they're tied closely to
1341the supported set of system headers, currently:
1342
1343* LLVM's own libc++
1344* GNU libstdc++
1345* The Microsoft standard C++ library
1346
1347Clang 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>`_,
1351as 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>`_.
1354
1355The 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.
1359
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)
1469
1470In addition, the following expression traits are supported:
1471
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.
1478
1479There are multiple ways to detect support for a type trait ``__X`` in the
1480compiler, depending on the oldest version of Clang you wish to support.
1481
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:
1486
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``
1495  * ``__is_abstract``
1496  * ``__is_base_of``
1497  * ``__is_class``
1498  * ``__is_constructible``
1499  * ``__is_convertible_to``
1500  * ``__is_empty``
1501  * ``__is_enum``
1502  * ``__is_final``
1503  * ``__is_literal``
1504  * ``__is_standard_layout``
1505  * ``__is_pod``
1506  * ``__is_polymorphic``
1507  * ``__is_sealed``
1508  * ``__is_trivial``
1509  * ``__is_trivially_assignable``
1510  * ``__is_trivially_constructible``
1511  * ``__is_trivially_copyable``
1512  * ``__is_union``
1513  * ``__underlying_type``
1514
1515A simplistic usage example as might be seen in standard C++ headers follows:
1516
1517.. code-block:: c++
1518
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);
1523  };
1524  #else
1525  // Emulate type trait for compatibility with other compilers.
1526  #endif
1527
1528Blocks
1529======
1530
1531The syntax and high level language feature description is in
1532:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1533the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
1534
1535Query for this feature with ``__has_extension(blocks)``.
1536
1537ASM Goto with Output Constraints
1538================================
1539
1540In addition to the functionality provided by `GCC's extended
1541assembly <https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html>`_, clang
1542supports output constraints with the `goto` form.
1543
1544The goto form of GCC's extended assembly allows the programmer to branch to a C
1545label from within an inline assembly block. Clang extends this behavior by
1546allowing the programmer to use output constraints:
1547
1548.. code-block:: c++
1549
1550  int foo(int x) {
1551      int y;
1552      asm goto("# %0 %1 %l2" : "=r"(y) : "r"(x) : : err);
1553      return y;
1554    err:
1555      return -1;
1556  }
1557
1558It's important to note that outputs are valid only on the "fallthrough" branch.
1559Using outputs on an indirect branch may result in undefined behavior. For
1560example, in the function above, use of the value assigned to `y` in the `err`
1561block is undefined behavior.
1562
1563When using tied-outputs (i.e. outputs that are inputs and outputs, not just
1564outputs) with the `+r` constraint, there is a hidden input that's created
1565before the label, so numeric references to operands must account for that.
1566
1567.. code-block:: c++
1568
1569  int foo(int x) {
1570      // %0 and %1 both refer to x
1571      // %l2 refers to err
1572      asm goto("# %0 %1 %l2" : "+r"(x) : : : err);
1573      return x;
1574    err:
1575      return -1;
1576  }
1577
1578This was changed to match GCC in clang-13; for better portability, symbolic
1579references can be used instead of numeric references.
1580
1581.. code-block:: c++
1582
1583  int foo(int x) {
1584      asm goto("# %[x] %l[err]" : [x]"+r"(x) : : : err);
1585      return x;
1586    err:
1587      return -1;
1588  }
1589
1590Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``.
1591
1592Objective-C Features
1593====================
1594
1595Related result types
1596--------------------
1597
1598According to Cocoa conventions, Objective-C methods with certain names
1599("``init``", "``alloc``", etc.) always return objects that are an instance of
1600the receiving class's type.  Such methods are said to have a "related result
1601type", meaning that a message send to one of these methods will have the same
1602static type as an instance of the receiver class.  For example, given the
1603following classes:
1604
1605.. code-block:: objc
1606
1607  @interface NSObject
1608  + (id)alloc;
1609  - (id)init;
1610  @end
1611
1612  @interface NSArray : NSObject
1613  @end
1614
1615and this common initialization pattern
1616
1617.. code-block:: objc
1618
1619  NSArray *array = [[NSArray alloc] init];
1620
1621the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1622``alloc`` implicitly has a related result type.  Similarly, the type of the
1623expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1624related result type and its receiver is known to have the type ``NSArray *``.
1625If neither ``alloc`` nor ``init`` had a related result type, the expressions
1626would have had type ``id``, as declared in the method signature.
1627
1628A method with a related result type can be declared by using the type
1629``instancetype`` as its result type.  ``instancetype`` is a contextual keyword
1630that is only permitted in the result type of an Objective-C method, e.g.
1631
1632.. code-block:: objc
1633
1634  @interface A
1635  + (instancetype)constructAnA;
1636  @end
1637
1638The related result type can also be inferred for some methods.  To determine
1639whether a method has an inferred related result type, the first word in the
1640camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1641and the method will have a related result type if its return type is compatible
1642with the type of its class and if:
1643
1644* the first word is "``alloc``" or "``new``", and the method is a class method,
1645  or
1646
1647* the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1648  and the method is an instance method.
1649
1650If a method with a related result type is overridden by a subclass method, the
1651subclass method must also return a type that is compatible with the subclass
1652type.  For example:
1653
1654.. code-block:: objc
1655
1656  @interface NSString : NSObject
1657  - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1658  @end
1659
1660Related result types only affect the type of a message send or property access
1661via the given method.  In all other respects, a method with a related result
1662type is treated the same way as method that returns ``id``.
1663
1664Use ``__has_feature(objc_instancetype)`` to determine whether the
1665``instancetype`` contextual keyword is available.
1666
1667Automatic reference counting
1668----------------------------
1669
1670Clang provides support for :doc:`automated reference counting
1671<AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1672for manual ``retain``/``release``/``autorelease`` message sends.  There are three
1673feature macros associated with automatic reference counting:
1674``__has_feature(objc_arc)`` indicates the availability of automated reference
1675counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1676automated reference counting also includes support for ``__weak`` pointers to
1677Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1678are allowed to have fields that are pointers to Objective-C objects managed by
1679automatic reference counting.
1680
1681.. _objc-weak:
1682
1683Weak references
1684---------------
1685
1686Clang supports ARC-style weak and unsafe references in Objective-C even
1687outside of ARC mode.  Weak references must be explicitly enabled with
1688the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1689to test whether they are enabled.  Unsafe references are enabled
1690unconditionally.  ARC-style weak and unsafe references cannot be used
1691when Objective-C garbage collection is enabled.
1692
1693Except 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
1696in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1697In particular, note that some classes do not support forming weak
1698references to their instances, and note that special care must be
1699taken when storing weak references in memory where initialization
1700and deinitialization are outside the responsibility of the compiler
1701(such as in ``malloc``-ed memory).
1702
1703Loading from a ``__weak`` variable always implicitly retains the
1704loaded value.  In non-ARC modes, this retain is normally balanced
1705by an implicit autorelease.  This autorelease can be suppressed
1706by performing the load in the receiver position of a ``-retain``
1707message send (e.g. ``[weakReference retain]``); note that this performs
1708only a single retain (the retain done when primitively loading from
1709the weak reference).
1710
1711For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1712default behavior of variables and therefore is not needed.  However,
1713it does have an effect on the semantics of block captures: normally,
1714copying a block which captures an Objective-C object or block pointer
1715causes the captured pointer to be retained or copied, respectively,
1716but that behavior is suppressed when the captured variable is qualified
1717with ``__unsafe_unretained``.
1718
1719Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1720all non-ARC modes and was silently ignored outside of GC modes.  It now
1721means the ARC-style qualifier in all non-GC modes and is no longer
1722allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1723It is expected that ``-fobjc-weak`` will eventually be enabled by default
1724in all non-GC Objective-C modes.
1725
1726.. _objc-fixed-enum:
1727
1728Enumerations with a fixed underlying type
1729-----------------------------------------
1730
1731Clang provides support for C++11 enumerations with a fixed underlying type
1732within Objective-C.  For example, one can write an enumeration type as:
1733
1734.. code-block:: c++
1735
1736  typedef enum : unsigned char { Red, Green, Blue } Color;
1737
1738This specifies that the underlying type, which is used to store the enumeration
1739value, is ``unsigned char``.
1740
1741Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1742underlying types is available in Objective-C.
1743
1744Interoperability with C++11 lambdas
1745-----------------------------------
1746
1747Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1748permitting a lambda to be implicitly converted to a block pointer with the
1749corresponding signature.  For example, consider an API such as ``NSArray``'s
1750array-sorting method:
1751
1752.. code-block:: objc
1753
1754  - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1755
1756``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1757(^)(id, id)``, and parameters of this type are generally provided with block
1758literals as arguments.  However, one can also use a C++11 lambda so long as it
1759provides the same signature (in this case, accepting two parameters of type
1760``id`` and returning an ``NSComparisonResult``):
1761
1762.. code-block:: objc
1763
1764  NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1765                     @"String 02"];
1766  const NSStringCompareOptions comparisonOptions
1767    = NSCaseInsensitiveSearch | NSNumericSearch |
1768      NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1769  NSLocale *currentLocale = [NSLocale currentLocale];
1770  NSArray *sorted
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];
1775       }];
1776  NSLog(@"sorted: %@", sorted);
1777
1778This code relies on an implicit conversion from the type of the lambda
1779expression (an unnamed, local class type called the *closure type*) to the
1780corresponding block pointer type.  The conversion itself is expressed by a
1781conversion operator in that closure type that produces a block pointer with the
1782same signature as the lambda itself, e.g.,
1783
1784.. code-block:: objc
1785
1786  operator NSComparisonResult (^)(id, id)() const;
1787
1788This conversion function returns a new block that simply forwards the two
1789parameters to the lambda object (which it captures by copy), then returns the
1790result.  The returned block is first copied (with ``Block_copy``) and then
1791autoreleased.  As an optimization, if a lambda expression is immediately
1792converted to a block pointer (as in the first example, above), then the block
1793is not copied and autoreleased: rather, it is given the same lifetime as a
1794block literal written at that point in the program, which avoids the overhead
1795of copying a block to the heap in the common case.
1796
1797The conversion from a lambda to a block pointer is only available in
1798Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1799management (autorelease).
1800
1801Object Literals and Subscripting
1802--------------------------------
1803
1804Clang provides support for :doc:`Object Literals and Subscripting
1805<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1806programming patterns, makes programs more concise, and improves the safety of
1807container creation.  There are several feature macros associated with object
1808literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1809availability of array literals; ``__has_feature(objc_dictionary_literals)``
1810tests the availability of dictionary literals;
1811``__has_feature(objc_subscripting)`` tests the availability of object
1812subscripting.
1813
1814Objective-C Autosynthesis of Properties
1815---------------------------------------
1816
1817Clang provides support for autosynthesis of declared properties.  Using this
1818feature, 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
1821of this feature in version of clang being used.
1822
1823.. _langext-objc-retain-release:
1824
1825Objective-C retaining behavior attributes
1826-----------------------------------------
1827
1828In 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>`_
1831conventions for ownership of object arguments and
1832return values. However, there are exceptions, and so Clang provides attributes
1833to 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
1835better described using the ``objc_method_family`` attribute instead.
1836
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
1840that return Objective-C or CoreFoundation objects. They are commonly placed at
1841the end of a function prototype or method declaration:
1842
1843.. code-block:: objc
1844
1845  id foo() __attribute__((ns_returns_retained));
1846
1847  - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1848
1849The ``*_returns_retained`` attributes specify that the returned object has a +1
1850retain count.  The ``*_returns_not_retained`` attributes specify that the return
1851object has a +0 retain count, even if the normal convention for its selector
1852would 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
1854autorelease pool.
1855
1856**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1857an 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.
1859The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1860method; it specifies that the method expects its ``self`` parameter to have a
1861+1 retain count, which it will balance in some way.
1862
1863.. code-block:: objc
1864
1865  void foo(__attribute__((ns_consumed)) NSString *string);
1866
1867  - (void) bar __attribute__((ns_consumes_self));
1868  - (void) baz:(id) __attribute__((ns_consumed)) x;
1869
1870Further 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>`_.
1872
1873Query for these features with ``__has_attribute(ns_consumed)``,
1874``__has_attribute(ns_returns_retained)``, etc.
1875
1876Objective-C @available
1877----------------------
1878
1879It is possible to use the newest SDK but still build a program that can run on
1880older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
1881``-miphoneos-version-min=``.
1882
1883Before LLVM 5.0, when calling a function that exists only in the OS that's
1884newer than the target OS (as determined by the minimum deployment version),
1885programmers had to carefully check if the function exists at runtime, using
1886null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
1887and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
1888Objective-C methods.  If such a check was missed, the program would compile
1889fine, run fine on newer systems, but crash on older systems.
1890
1891As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
1892<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
1893with the new ``@available()`` keyword to assist with this issue.
1894When 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:
1896
1897.. code-block:: objc
1898
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];
1904  }
1905
1906To fix the warning and to avoid the crash on macOS 10.11, wrap it in
1907``if(@available())``:
1908
1909.. code-block:: objc
1910
1911  void my_fun(NSSomeClass* var) {
1912    if (@available(macOS 10.12, *)) {
1913      [var fancyNewMethod];
1914    } else {
1915      // Put fallback behavior for old macOS versions (and for non-mac
1916      // platforms) here.
1917    }
1918  }
1919
1920The ``*`` is required and means that platforms not explicitly listed will take
1921the true branch, and the compiler will emit ``-Wunguarded-availability``
1922warnings for unlisted platforms based on those platform's deployment target.
1923More than one platform can be listed in ``@available()``:
1924
1925.. code-block:: objc
1926
1927  void my_fun(NSSomeClass* var) {
1928    if (@available(macOS 10.12, iOS 10, *)) {
1929      [var fancyNewMethod];
1930    }
1931  }
1932
1933If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
1934on 10.12, then add an `availability attribute
1935<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
1936which will also suppress the warning and require that calls to my_fun() are
1937checked:
1938
1939.. code-block:: objc
1940
1941  API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
1942    [var fancyNewMethod];  // Now ok.
1943  }
1944
1945``@available()`` is only available in Objective-C code.  To use the feature
1946in C and C++ code, use the ``__builtin_available()`` spelling instead.
1947
1948If existing code uses null checks or ``-respondsToSelector:``, it should
1949be changed to use ``@available()`` (or ``__builtin_available``) instead.
1950
1951``-Wunguarded-availability`` is disabled by default, but
1952``-Wunguarded-availability-new``, which only emits this warning for APIs
1953that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
1954tvOS >= 11, is enabled by default.
1955
1956.. _langext-overloading:
1957
1958Objective-C++ ABI: protocol-qualifier mangling of parameters
1959------------------------------------------------------------
1960
1961Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
1962type is a qualified-``id`` (e.g., ``id<Foo>``).  This mangling allows such
1963parameters to be differentiated from those with the regular unqualified ``id``
1964type.
1965
1966This was a non-backward compatible mangling change to the ABI.  This change
1967allows proper overloading, and also prevents mangling conflicts with template
1968parameters of protocol-qualified type.
1969
1970Query the presence of this new mangling with
1971``__has_feature(objc_protocol_qualifier_mangling)``.
1972
1973Initializer lists for complex numbers in C
1974==========================================
1975
1976clang supports an extension which allows the following in C:
1977
1978.. code-block:: c++
1979
1980  #include <math.h>
1981  #include <complex.h>
1982  complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1983
1984This construct is useful because there is no way to separately initialize the
1985real and imaginary parts of a complex variable in standard C, given that clang
1986does not support ``_Imaginary``.  (Clang also supports the ``__real__`` and
1987``__imag__`` extensions from gcc, which help in some cases, but are not usable
1988in static initializers.)
1989
1990Note that this extension does not allow eliding the braces; the meaning of the
1991following two lines is different:
1992
1993.. code-block:: c++
1994
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)
1997
1998This extension also works in C++ mode, as far as that goes, but does not apply
1999to the C++ ``std::complex``.  (In C++11, list initialization allows the same
2000syntax to be used with ``std::complex`` with the same meaning.)
2001
2002For GCC compatibility, ``__builtin_complex(re, im)`` can also be used to
2003construct a complex number from the given real and imaginary components.
2004
2005OpenCL Features
2006===============
2007
2008Clang supports internal OpenCL extensions documented below.
2009
2010``__cl_clang_bitfields``
2011--------------------------------
2012
2013With this extension it is possible to enable bitfields in structs
2014or 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>`_.
2017
2018Use of bitfields in OpenCL kernels can result in reduced portability as struct
2019layout is not guaranteed to be consistent when compiled by different compilers.
2020If structs with bitfields are used as kernel function parameters, it can result
2021in incorrect functionality when the layout is different between the host and
2022device code.
2023
2024**Example of Use**:
2025
2026.. code-block:: c++
2027
2028  #pragma OPENCL EXTENSION __cl_clang_bitfields : enable
2029  struct with_bitfield {
2030    unsigned int i : 5; // compiled - no diagnostic generated
2031  };
2032
2033  #pragma OPENCL EXTENSION __cl_clang_bitfields : disable
2034  struct without_bitfield {
2035    unsigned int i : 5; // error - bitfields are not supported
2036  };
2037
2038``__cl_clang_function_pointers``
2039--------------------------------
2040
2041With this extension it is possible to enable various language features that
2042are relying on function pointers using regular OpenCL extension pragma
2043mechanism detailed in `the OpenCL Extension Specification,
2044section 1.2
2045<https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2046
2047In C++ for OpenCL this also enables:
2048
2049- Use of member function pointers;
2050
2051- Unrestricted use of references to functions;
2052
2053- Virtual member functions.
2054
2055Such functionality is not conformant and does not guarantee to compile
2056correctly in any circumstances. It can be used if:
2057
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.
2061
2062- the generated kernel binary does not contain indirect calls because they
2063  are eliminated using compiler optimizations e.g. devirtualization.
2064
2065- the selected target supports the function pointer like functionality e.g.
2066  most CPU targets.
2067
2068**Example of Use**:
2069
2070.. code-block:: c++
2071
2072  #pragma OPENCL EXTENSION __cl_clang_function_pointers : enable
2073  void foo()
2074  {
2075    void (*fp)(); // compiled - no diagnostic generated
2076  }
2077
2078  #pragma OPENCL EXTENSION __cl_clang_function_pointers : disable
2079  void bar()
2080  {
2081    void (*fp)(); // error - pointers to function are not allowed
2082  }
2083
2084``__cl_clang_variadic_functions``
2085---------------------------------
2086
2087With this extension it is possible to enable variadic arguments in functions
2088using regular OpenCL extension pragma mechanism detailed in `the OpenCL
2089Extension Specification, section 1.2
2090<https://www.khronos.org/registry/OpenCL/specs/3.0-unified/html/OpenCL_Ext.html#extensions-overview>`_.
2091
2092This is not conformant behavior and it can only be used portably when the
2093functions with variadic prototypes do not get generated in binary e.g. the
2094variadic prototype is used to specify a function type with any number of
2095arguments in metaprogramming algorithms in C++ for OpenCL.
2096
2097This extensions can also be used when the kernel code is intended for targets
2098supporting the variadic arguments e.g. majority of CPU targets.
2099
2100**Example of Use**:
2101
2102.. code-block:: c++
2103
2104  #pragma OPENCL EXTENSION __cl_clang_variadic_functions : enable
2105  void foo(int a, ...); // compiled - no diagnostic generated
2106
2107  #pragma OPENCL EXTENSION __cl_clang_variadic_functions : disable
2108  void bar(int a, ...); // error - variadic prototype is not allowed
2109
2110``__cl_clang_non_portable_kernel_param_types``
2111----------------------------------------------
2112
2113With this extension it is possible to enable the use of some restricted types
2114in kernel parameters specified in `C++ for OpenCL v1.0 s2.4
2115<https://www.khronos.org/opencl/assets/CXX_for_OpenCL.html#kernel_function>`_.
2116The restrictions can be relaxed using regular OpenCL extension pragma mechanism
2117detailed 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>`_.
2119
2120This is not a conformant behavior and it can only be used when the
2121kernel arguments are not accessed on the host side or the data layout/size
2122between the host and device is known to be compatible.
2123
2124**Example of Use**:
2125
2126.. code-block:: c++
2127
2128  // Plain Old Data type.
2129  struct Pod {
2130    int a;
2131    int b;
2132  };
2133
2134  // Not POD type because of the constructor.
2135  // Standard layout type because there is only one access control.
2136  struct OnlySL {
2137    int a;
2138    int b;
2139    NotPod() : a(0), b(0) {}
2140  };
2141
2142  // Not standard layout type because of two different access controls.
2143  struct NotSL {
2144    int a;
2145  private:
2146    int b;
2147  }
2148
2149  kernel void kernel_main(
2150    Pod a,
2151  #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : enable
2152    OnlySL b,
2153    global NotSL *c,
2154  #pragma OPENCL EXTENSION __cl_clang_non_portable_kernel_param_types : disable
2155    global OnlySL *d,
2156  );
2157
2158Remove address space builtin function
2159-------------------------------------
2160
2161``__remove_address_space`` allows to derive types in C++ for OpenCL
2162that have address space qualifiers removed. This utility only affects
2163address space qualifiers, therefore, other type qualifiers such as
2164``const`` or ``volatile`` remain unchanged.
2165
2166**Example of Use**:
2167
2168.. code-block:: c++
2169
2170  template<typename T>
2171  void foo(T *par){
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
2175  }
2176
2177  void bar(){
2178    __global int* ptr;
2179    foo(ptr);
2180  }
2181
2182Legacy 1.x atomics with generic address space
2183---------------------------------------------
2184
2185Clang allows use of atomic functions from the OpenCL 1.x standards
2186with the generic address space pointer in C++ for OpenCL mode.
2187
2188This is a non-portable feature and might not be supported by all
2189targets.
2190
2191**Example of Use**:
2192
2193.. code-block:: c++
2194
2195  void foo(__generic volatile unsigned int* a) {
2196    atomic_add(a, 1);
2197  }
2198
2199Builtin Functions
2200=================
2201
2202Clang supports a number of builtin library functions with the same syntax as
2203GCC, 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
2206the GCC builtins, Clang supports a number of builtins that GCC does not, which
2207are listed here.
2208
2209Please note that Clang does not and will not support all of the GCC builtins
2210for vector operations.  Instead of using builtins, you should use the functions
2211defined in target-specific header files like ``<xmmintrin.h>``, which define
2212portable wrappers for these.  Many of the Clang versions of these functions are
2213implemented directly in terms of :ref:`extended vector support
2214<langext-vectors>` instead of builtins, in order to reduce the number of
2215builtins that we need to implement.
2216
2217``__builtin_alloca``
2218--------------------
2219
2220``__builtin_alloca`` is used to dynamically allocate memory on the stack. Memory
2221is automatically freed upon function termination.
2222
2223**Syntax**:
2224
2225.. code-block:: c++
2226
2227  __builtin_alloca(size_t n)
2228
2229**Example of Use**:
2230
2231.. code-block:: c++
2232
2233  void init(float* data, size_t nbelems);
2234  void process(float* data, size_t nbelems);
2235  int foo(size_t n) {
2236    auto mem = (float*)__builtin_alloca(n * sizeof(float));
2237    init(mem, n);
2238    process(mem, n);
2239    /* mem is automatically freed at this point */
2240  }
2241
2242**Description**:
2243
2244``__builtin_alloca`` is meant to be used to allocate a dynamic amount of memory
2245on the stack. This amount is subject to stack allocation limits.
2246
2247Query for this feature with ``__has_builtin(__builtin_alloca)``.
2248
2249``__builtin_alloca_with_align``
2250-------------------------------
2251
2252``__builtin_alloca_with_align`` is used to dynamically allocate memory on the
2253stack while controlling its alignment. Memory is automatically freed upon
2254function termination.
2255
2256
2257**Syntax**:
2258
2259.. code-block:: c++
2260
2261  __builtin_alloca_with_align(size_t n, size_t align)
2262
2263**Example of Use**:
2264
2265.. code-block:: c++
2266
2267  void init(float* data, size_t nbelems);
2268  void process(float* data, size_t nbelems);
2269  int foo(size_t n) {
2270    auto mem = (float*)__builtin_alloca_with_align(
2271                        n * sizeof(float),
2272                        CHAR_BIT * alignof(float));
2273    init(mem, n);
2274    process(mem, n);
2275    /* mem is automatically freed at this point */
2276  }
2277
2278**Description**:
2279
2280``__builtin_alloca_with_align`` is meant to be used to allocate a dynamic amount of memory
2281on the stack. It is similar to ``__builtin_alloca`` but accepts a second
2282argument whose value is the alignment constraint, as a power of 2 in *bits*.
2283
2284Query for this feature with ``__has_builtin(__builtin_alloca_with_align)``.
2285
2286.. _langext-__builtin_assume:
2287
2288``__builtin_assume``
2289--------------------
2290
2291``__builtin_assume`` is used to provide the optimizer with a boolean
2292invariant that is defined to be true.
2293
2294**Syntax**:
2295
2296.. code-block:: c++
2297
2298    __builtin_assume(bool)
2299
2300**Example of Use**:
2301
2302.. code-block:: c++
2303
2304  int foo(int x) {
2305      __builtin_assume(x != 0);
2306      // The optimizer may short-circuit this check using the invariant.
2307      if (x == 0)
2308            return do_something();
2309      return do_something_else();
2310  }
2311
2312**Description**:
2313
2314The boolean argument to this function is defined to be true. The optimizer may
2315analyze the form of the expression provided as the argument and deduce from
2316that information used to optimize the program. If the condition is violated
2317during execution, the behavior is undefined. The argument itself is never
2318evaluated, so any side effects of the expression will be discarded.
2319
2320Query for this feature with ``__has_builtin(__builtin_assume)``.
2321
2322``__builtin_call_with_static_chain``
2323------------------------------------
2324
2325``__builtin_call_with_static_chain`` is used to perform a static call while
2326setting updating the static chain register.
2327
2328**Syntax**:
2329
2330.. code-block:: c++
2331
2332  T __builtin_call_with_static_chain(T expr, void* ptr)
2333
2334**Example of Use**:
2335
2336.. code-block:: c++
2337
2338  auto v = __builtin_call_with_static_chain(foo(3), foo);
2339
2340**Description**:
2341
2342This builtin returns ``expr`` after checking that ``expr`` is a non-member
2343static call expression. The call to that expression is made while using ``ptr``
2344as a function pointer stored in a dedicated register to implement *static chain*
2345calling convention, as used by some language to implement closures or nested
2346functions.
2347
2348Query for this feature with ``__has_builtin(__builtin_call_with_static_chain)``.
2349
2350``__builtin_readcyclecounter``
2351------------------------------
2352
2353``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2354a similar low-latency, high-accuracy clock) on those targets that support it.
2355
2356**Syntax**:
2357
2358.. code-block:: c++
2359
2360  __builtin_readcyclecounter()
2361
2362**Example of Use**:
2363
2364.. code-block:: c++
2365
2366  unsigned long long t0 = __builtin_readcyclecounter();
2367  do_something();
2368  unsigned long long t1 = __builtin_readcyclecounter();
2369  unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2370
2371**Description**:
2372
2373The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2374which may be either global or process/thread-specific depending on the target.
2375As the backing counters often overflow quickly (on the order of seconds) this
2376should only be used for timing small intervals.  When not supported by the
2377target, the return value is always zero.  This builtin takes no arguments and
2378produces an unsigned long long result.
2379
2380Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2381that even if present, its use may depend on run-time privilege or other OS
2382controlled state.
2383
2384``__builtin_dump_struct``
2385-------------------------
2386
2387**Syntax**:
2388
2389.. code-block:: c++
2390
2391    __builtin_dump_struct(&some_struct, some_printf_func, args...);
2392
2393**Examples**:
2394
2395.. code-block:: c++
2396
2397    struct S {
2398      int x, y;
2399      float f;
2400      struct T {
2401        int i;
2402      } t;
2403    };
2404
2405    void func(struct S *s) {
2406      __builtin_dump_struct(s, printf);
2407    }
2408
2409Example output:
2410
2411.. code-block:: none
2412
2413    struct S {
2414      int x = 100
2415      int y = 42
2416      float f = 3.141593
2417      struct T t = {
2418        int i = 1997
2419      }
2420    }
2421
2422.. code-block:: c++
2423
2424    #include <string>
2425    struct T { int a, b; };
2426    constexpr void constexpr_sprintf(std::string &out, const char *format,
2427                                     auto ...args) {
2428      // ...
2429    }
2430    constexpr std::string dump_struct(auto &x) {
2431      std::string s;
2432      __builtin_dump_struct(&x, constexpr_sprintf, s);
2433      return s;
2434    }
2435    static_assert(dump_struct(T{1, 2}) == R"(struct T {
2436      int a = 1
2437      int b = 2
2438    }
2439    )");
2440
2441**Description**:
2442
2443The ``__builtin_dump_struct`` function is used to print the fields of a simple
2444structure and their values for debugging purposes. The first argument of the
2445builtin should be a pointer to the struct to dump. The second argument ``f``
2446should be some callable expression, and can be a function object or an overload
2447set. The builtin calls ``f``, passing any further arguments ``args...``
2448followed by a ``printf``-compatible format string and the corresponding
2449arguments. ``f`` may be called more than once, and ``f`` and ``args`` will be
2450evaluated once per call. In C++, ``f`` may be a template or overload set and
2451resolve to different functions for each call.
2452
2453In the format string, a suitable format specifier will be used for builtin
2454types that Clang knows how to format. This includes standard builtin types, as
2455well as aggregate structures, ``void*`` (printed with ``%p``), and ``const
2456char*`` (printed with ``%s``). A ``*%p`` specifier will be used for a field
2457that Clang doesn't know how to format, and the corresopnding argument will be a
2458pointer to the field. This allows a C++ templated formatting function to detect
2459this case and implement custom formatting. A ``*`` will otherwise not precede a
2460format specifier.
2461
2462This builtin does not return a value.
2463
2464This builtin can be used in constant expressions.
2465
2466Query for this feature with ``__has_builtin(__builtin_dump_struct)``
2467
2468.. _langext-__builtin_shufflevector:
2469
2470``__builtin_shufflevector``
2471---------------------------
2472
2473``__builtin_shufflevector`` is used to express generic vector
2474permutation/shuffle/swizzle operations.  This builtin is also very important
2475for the implementation of various target-specific header files like
2476``<xmmintrin.h>``.
2477
2478**Syntax**:
2479
2480.. code-block:: c++
2481
2482  __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2483
2484**Examples**:
2485
2486.. code-block:: c++
2487
2488  // identity operation - return 4-element vector v1.
2489  __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
2490
2491  // "Splat" element 0 of V1 into a 4-element result.
2492  __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2493
2494  // Reverse 4-element vector V1.
2495  __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2496
2497  // Concatenate every other element of 4-element vectors V1 and V2.
2498  __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2499
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)
2502
2503  // Shuffle v1 with some elements being undefined
2504  __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2505
2506**Description**:
2507
2508The first two arguments to ``__builtin_shufflevector`` are vectors that have
2509the same element type.  The remaining arguments are a list of integers that
2510specify the elements indices of the first two vectors that should be extracted
2511and returned in a new vector.  These element indices are numbered sequentially
2512starting 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
2515in the returned vector is a don't care and can be optimized by the backend.
2516
2517The result of ``__builtin_shufflevector`` is a vector with the same element
2518type as ``vec1``/``vec2`` but that has an element count equal to the number of
2519indices specified.
2520
2521Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2522
2523.. _langext-__builtin_convertvector:
2524
2525``__builtin_convertvector``
2526---------------------------
2527
2528``__builtin_convertvector`` is used to express generic vector
2529type-conversion operations. The input vector and the output vector
2530type must have the same number of elements.
2531
2532**Syntax**:
2533
2534.. code-block:: c++
2535
2536  __builtin_convertvector(src_vec, dst_vec_type)
2537
2538**Examples**:
2539
2540.. code-block:: c++
2541
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;
2546
2547  // convert from a vector of 4 floats to a vector of 4 doubles.
2548  __builtin_convertvector(vf, vector4double)
2549  // equivalent to:
2550  (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2551
2552  // convert from a vector of 4 shorts to a vector of 4 floats.
2553  __builtin_convertvector(vs, vector4float)
2554  // equivalent to:
2555  (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
2556
2557**Description**:
2558
2559The first argument to ``__builtin_convertvector`` is a vector, and the second
2560argument is a vector type with the same number of elements as the first
2561argument.
2562
2563The result of ``__builtin_convertvector`` is a vector with the same element
2564type as the second argument, with a value defined in terms of the action of a
2565C-style cast applied to each element of the first argument.
2566
2567Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2568
2569``__builtin_bitreverse``
2570------------------------
2571
2572* ``__builtin_bitreverse8``
2573* ``__builtin_bitreverse16``
2574* ``__builtin_bitreverse32``
2575* ``__builtin_bitreverse64``
2576
2577**Syntax**:
2578
2579.. code-block:: c++
2580
2581     __builtin_bitreverse32(x)
2582
2583**Examples**:
2584
2585.. code-block:: c++
2586
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);
2591
2592**Description**:
2593
2594The '``__builtin_bitreverse``' family of builtins is used to reverse
2595the bitpattern of an integer value; for example ``0b10110110`` becomes
2596``0b01101101``. These builtins can be used within constant expressions.
2597
2598``__builtin_rotateleft``
2599------------------------
2600
2601* ``__builtin_rotateleft8``
2602* ``__builtin_rotateleft16``
2603* ``__builtin_rotateleft32``
2604* ``__builtin_rotateleft64``
2605
2606**Syntax**:
2607
2608.. code-block:: c++
2609
2610     __builtin_rotateleft32(x, y)
2611
2612**Examples**:
2613
2614.. code-block:: c++
2615
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);
2620
2621**Description**:
2622
2623The '``__builtin_rotateleft``' family of builtins is used to rotate
2624the bits in the first argument by the amount in the second argument.
2625For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2626The shift value is treated as an unsigned amount modulo the size of
2627the arguments. Both arguments and the result have the bitwidth specified
2628by the name of the builtin. These builtins can be used within constant
2629expressions.
2630
2631``__builtin_rotateright``
2632-------------------------
2633
2634* ``__builtin_rotateright8``
2635* ``__builtin_rotateright16``
2636* ``__builtin_rotateright32``
2637* ``__builtin_rotateright64``
2638
2639**Syntax**:
2640
2641.. code-block:: c++
2642
2643     __builtin_rotateright32(x, y)
2644
2645**Examples**:
2646
2647.. code-block:: c++
2648
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);
2653
2654**Description**:
2655
2656The '``__builtin_rotateright``' family of builtins is used to rotate
2657the bits in the first argument by the amount in the second argument.
2658For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
2659The shift value is treated as an unsigned amount modulo the size of
2660the arguments. Both arguments and the result have the bitwidth specified
2661by the name of the builtin. These builtins can be used within constant
2662expressions.
2663
2664``__builtin_unreachable``
2665-------------------------
2666
2667``__builtin_unreachable`` is used to indicate that a specific point in the
2668program cannot be reached, even if the compiler might otherwise think it can.
2669This is useful to improve optimization and eliminates certain warnings.  For
2670example, without the ``__builtin_unreachable`` in the example below, the
2671compiler assumes that the inline asm can fall through and prints a "function
2672declared '``noreturn``' should not return" warning.
2673
2674**Syntax**:
2675
2676.. code-block:: c++
2677
2678    __builtin_unreachable()
2679
2680**Example of use**:
2681
2682.. code-block:: c++
2683
2684  void myabort(void) __attribute__((noreturn));
2685  void myabort(void) {
2686    asm("int3");
2687    __builtin_unreachable();
2688  }
2689
2690**Description**:
2691
2692The ``__builtin_unreachable()`` builtin has completely undefined behavior.
2693Since it has undefined behavior, it is a statement that it is never reached and
2694the optimizer can take advantage of this to produce better code.  This builtin
2695takes no arguments and produces a void result.
2696
2697Query for this feature with ``__has_builtin(__builtin_unreachable)``.
2698
2699``__builtin_unpredictable``
2700---------------------------
2701
2702``__builtin_unpredictable`` is used to indicate that a branch condition is
2703unpredictable by hardware mechanisms such as branch prediction logic.
2704
2705**Syntax**:
2706
2707.. code-block:: c++
2708
2709    __builtin_unpredictable(long long)
2710
2711**Example of use**:
2712
2713.. code-block:: c++
2714
2715  if (__builtin_unpredictable(x > 0)) {
2716     foo();
2717  }
2718
2719**Description**:
2720
2721The ``__builtin_unpredictable()`` builtin is expected to be used with control
2722flow conditions such as in ``if`` and ``switch`` statements.
2723
2724Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
2725
2726
2727``__builtin_expect``
2728--------------------
2729
2730``__builtin_expect`` is used to indicate that the value of an expression is
2731anticipated to be the same as a statically known result.
2732
2733**Syntax**:
2734
2735.. code-block:: c++
2736
2737    long __builtin_expect(long expr, long val)
2738
2739**Example of use**:
2740
2741.. code-block:: c++
2742
2743  if (__builtin_expect(x, 0)) {
2744     bar();
2745  }
2746
2747**Description**:
2748
2749The ``__builtin_expect()`` builtin is typically used with control flow
2750conditions such as in ``if`` and ``switch`` statements to help branch
2751prediction. It means that its first argument ``expr`` is expected to take the
2752value of its second argument ``val``. It always returns ``expr``.
2753
2754Query for this feature with ``__has_builtin(__builtin_expect)``.
2755
2756``__builtin_expect_with_probability``
2757-------------------------------------
2758
2759``__builtin_expect_with_probability`` is similar to ``__builtin_expect`` but it
2760takes a probability as third argument.
2761
2762**Syntax**:
2763
2764.. code-block:: c++
2765
2766    long __builtin_expect_with_probability(long expr, long val, double p)
2767
2768**Example of use**:
2769
2770.. code-block:: c++
2771
2772  if (__builtin_expect_with_probability(x, 0, .3)) {
2773     bar();
2774  }
2775
2776**Description**:
2777
2778The ``__builtin_expect_with_probability()`` builtin is typically used with
2779control flow conditions such as in ``if`` and ``switch`` statements to help
2780branch prediction. It means that its first argument ``expr`` is expected to take
2781the value of its second argument ``val`` with probability ``p``. ``p`` must be
2782within ``[0.0 ; 1.0]`` bounds. This builtin always returns the value of ``expr``.
2783
2784Query for this feature with ``__has_builtin(__builtin_expect_with_probability)``.
2785
2786``__builtin_prefetch``
2787----------------------
2788
2789``__builtin_prefetch`` is used to communicate with the cache handler to bring
2790data into the cache before it gets used.
2791
2792**Syntax**:
2793
2794.. code-block:: c++
2795
2796    void __builtin_prefetch(const void *addr, int rw=0, int locality=3)
2797
2798**Example of use**:
2799
2800.. code-block:: c++
2801
2802    __builtin_prefetch(a + i);
2803
2804**Description**:
2805
2806The ``__builtin_prefetch(addr, rw, locality)`` builtin is expected to be used to
2807avoid cache misses when the developper has a good understanding of which data
2808are going to be used next. ``addr`` is the address that needs to be brought into
2809the cache. ``rw`` indicates the expected access mode: ``0`` for *read* and ``1``
2810for *write*. In case of *read write* access, ``1`` is to be used. ``locality``
2811indicates the expected persistance of data in cache, from ``0`` which means that
2812data can be discarded from cache after its next use to ``3`` which means that
2813data is going to be reused a lot once in cache. ``1`` and ``2`` provide
2814intermediate behavior between these two extremes.
2815
2816Query for this feature with ``__has_builtin(__builtin_prefetch)``.
2817
2818``__sync_swap``
2819---------------
2820
2821``__sync_swap`` is used to atomically swap integers or pointers in memory.
2822
2823**Syntax**:
2824
2825.. code-block:: c++
2826
2827  type __sync_swap(type *ptr, type value, ...)
2828
2829**Example of Use**:
2830
2831.. code-block:: c++
2832
2833  int old_value = __sync_swap(&value, new_value);
2834
2835**Description**:
2836
2837The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
2838atomic intrinsics to allow code to atomically swap the current value with the
2839new value.  More importantly, it helps developers write more efficient and
2840correct code by avoiding expensive loops around
2841``__sync_bool_compare_and_swap()`` or relying on the platform specific
2842implementation details of ``__sync_lock_test_and_set()``.  The
2843``__sync_swap()`` builtin is a full barrier.
2844
2845``__builtin_addressof``
2846-----------------------
2847
2848``__builtin_addressof`` performs the functionality of the built-in ``&``
2849operator, ignoring any ``operator&`` overload.  This is useful in constant
2850expressions in C++11, where there is no other way to take the address of an
2851object that overloads ``operator&``.
2852
2853**Example of use**:
2854
2855.. code-block:: c++
2856
2857  template<typename T> constexpr T *addressof(T &value) {
2858    return __builtin_addressof(value);
2859  }
2860
2861``__builtin_function_start``
2862-----------------------------
2863
2864``__builtin_function_start`` returns the address of a function body.
2865
2866**Syntax**:
2867
2868.. code-block:: c++
2869
2870  void *__builtin_function_start(function)
2871
2872**Example of use**:
2873
2874.. code-block:: c++
2875
2876  void a() {}
2877  void *p = __builtin_function_start(a);
2878
2879  class A {
2880  public:
2881    void a(int n);
2882    void a();
2883  };
2884
2885  void A::a(int n) {}
2886  void A::a() {}
2887
2888  void *pa1 = __builtin_function_start((void(A::*)(int)) &A::a);
2889  void *pa2 = __builtin_function_start((void(A::*)()) &A::a);
2890
2891**Description**:
2892
2893The ``__builtin_function_start`` builtin accepts an argument that can be
2894constant-evaluated to a function, and returns the address of the function
2895body.  This builtin is not supported on all targets.
2896
2897The returned pointer may differ from the normally taken function address
2898and is not safe to call.  For example, with ``-fsanitize=cfi``, taking a
2899function 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.
2902
2903``__builtin_operator_new`` and ``__builtin_operator_delete``
2904------------------------------------------------------------
2905
2906A call to ``__builtin_operator_new(args)`` is exactly the same as a call to
2907``::operator new(args)``, except that it allows certain optimizations
2908that the C++ standard does not permit for a direct function call to
2909``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
2910merging 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>`_.
2913
2914Likewise, ``__builtin_operator_delete`` is exactly the same as a call to
2915``::operator delete(args)``, except that it permits optimizations
2916and 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>`_.
2919
2920These builtins are intended for use in the implementation of ``std::allocator``
2921and other similar allocation libraries, and are only available in C++.
2922
2923Query for this feature with ``__has_builtin(__builtin_operator_new)`` or
2924``__has_builtin(__builtin_operator_delete)``:
2925
2926  * If the value is at least ``201802L``, the builtins behave as described above.
2927
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*)``.
2931
2932``__builtin_preserve_access_index``
2933-----------------------------------
2934
2935``__builtin_preserve_access_index`` specifies a code section where
2936array subscript access and structure/union member access are relocatable
2937under bpf compile-once run-everywhere framework. Debuginfo (typically
2938with ``-g``) is needed, otherwise, the compiler will exit with an error.
2939The return type for the intrinsic is the same as the type of the
2940argument.
2941
2942**Syntax**:
2943
2944.. code-block:: c
2945
2946  type __builtin_preserve_access_index(type arg)
2947
2948**Example of Use**:
2949
2950.. code-block:: c
2951
2952  struct t {
2953    int i;
2954    int j;
2955    union {
2956      int a;
2957      int b;
2958    } c[4];
2959  };
2960  struct t *v = ...;
2961  int *pb =__builtin_preserve_access_index(&v->c[3].b);
2962  __builtin_preserve_access_index(v->j);
2963
2964``__builtin_debugtrap``
2965-----------------------
2966
2967``__builtin_debugtrap`` causes the program to stop its execution in such a way that a debugger can catch it.
2968
2969**Syntax**:
2970
2971.. code-block:: c++
2972
2973    __builtin_debugtrap()
2974
2975**Description**
2976
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.
2978
2979Query for this feature with ``__has_builtin(__builtin_debugtrap)``.
2980
2981
2982``__builtin_trap``
2983------------------
2984
2985``__builtin_trap`` causes the program to stop its execution abnormally.
2986
2987**Syntax**:
2988
2989.. code-block:: c++
2990
2991    __builtin_trap()
2992
2993**Description**
2994
2995``__builtin_trap`` is lowered to the ` ``llvm.trap`` <https://llvm.org/docs/LangRef.html#llvm-trap-intrinsic>`_ builtin.
2996
2997Query for this feature with ``__has_builtin(__builtin_trap)``.
2998
2999
3000``__builtin_sycl_unique_stable_name``
3001-------------------------------------
3002
3003``__builtin_sycl_unique_stable_name()`` is a builtin that takes a type and
3004produces a string literal containing a unique name for the type that is stable
3005across split compilations, mainly to support SYCL/Data Parallel C++ language.
3006
3007In cases where the split compilation needs to share a unique token for a type
3008across the boundary (such as in an offloading situation), this name can be used
3009for lookup purposes, such as in the SYCL Integration Header.
3010
3011The value of this builtin is computed entirely at compile time, so it can be
3012used in constant expressions. This value encodes lambda functions based on a
3013stable numbering order in which they appear in their local declaration contexts.
3014Once this builtin is evaluated in a constexpr context, it is erroneous to use
3015it in an instantiation which changes its value.
3016
3017In order to produce the unique name, the current implementation of the bultin
3018uses Itanium mangling even if the host compilation uses a different name
3019mangling scheme at runtime. The mangler marks all the lambdas required to name
3020the SYCL kernel and emits a stable local ordering of the respective lambdas.
3021The resulting pattern is demanglable.  When non-lambda types are passed to the
3022builtin, the mangler emits their usual pattern without any special treatment.
3023
3024**Syntax**:
3025
3026.. code-block:: c
3027
3028  // Computes a unique stable name for the given type.
3029  constexpr const char * __builtin_sycl_unique_stable_name( type-id );
3030
3031Multiprecision Arithmetic Builtins
3032----------------------------------
3033
3034Clang provides a set of builtins which expose multiprecision arithmetic in a
3035manner amenable to C. They all have the following form:
3036
3037.. code-block:: c
3038
3039  unsigned x = ..., y = ..., carryin = ..., carryout;
3040  unsigned sum = __builtin_addc(x, y, carryin, &carryout);
3041
3042Thus one can form a multiprecision addition chain in the following manner:
3043
3044.. code-block:: c
3045
3046  unsigned *x, *y, *z, carryin=0, carryout;
3047  z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
3048  carryin = carryout;
3049  z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
3050  carryin = carryout;
3051  z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
3052  carryin = carryout;
3053  z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
3054
3055The complete list of builtins are:
3056
3057.. code-block:: c
3058
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);
3069
3070Checked Arithmetic Builtins
3071---------------------------
3072
3073Clang provides a set of builtins that implement checked arithmetic for security
3074critical applications in a manner that is fast and easily expressible in C. As
3075an example of their usage:
3076
3077.. code-block:: c
3078
3079  errorcode_t security_critical_application(...) {
3080    unsigned x, y, result;
3081    ...
3082    if (__builtin_mul_overflow(x, y, &result))
3083      return kErrorCodeHackers;
3084    ...
3085    use_multiply(result);
3086    ...
3087  }
3088
3089Clang provides the following checked arithmetic builtins:
3090
3091.. code-block:: c
3092
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);
3114
3115Each builtin performs the specified mathematical operation on the
3116first two arguments and stores the result in the third argument.  If
3117possible, the result will be equal to mathematically-correct result
3118and the builtin will return 0.  Otherwise, the builtin will return
31191 and the result will be equal to the unique value that is equivalent
3120to the mathematically-correct result modulo two raised to the *k*
3121power, where *k* is the number of bits in the result type.  The
3122behavior of these builtins is well-defined for all argument values.
3123
3124The first three builtins work generically for operands of any integer type,
3125including boolean types.  The operands need not have the same type as each
3126other, or as the result.  The other builtins may implicitly promote or
3127convert their operands before performing the operation.
3128
3129Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
3130
3131Floating point builtins
3132---------------------------------------
3133
3134``__builtin_canonicalize``
3135--------------------------
3136
3137.. code-block:: c
3138
3139   double __builtin_canonicalize(double);
3140   float __builtin_canonicalizef(float);
3141   long double__builtin_canonicalizel(long double);
3142
3143Returns the platform specific canonical encoding of a floating point
3144number. This canonicalization is useful for implementing certain
3145numeric primitives such as frexp. See `LLVM canonicalize intrinsic
3146<https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
3147more information on the semantics.
3148
3149String builtins
3150---------------
3151
3152Clang provides constant expression evaluation support for builtins forms of
3153the following functions from the C standard library headers
3154``<string.h>`` and ``<wchar.h>``:
3155
3156* ``memchr``
3157* ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``)
3158* ``strchr``
3159* ``strcmp``
3160* ``strlen``
3161* ``strncmp``
3162* ``wcschr``
3163* ``wcscmp``
3164* ``wcslen``
3165* ``wcsncmp``
3166* ``wmemchr``
3167* ``wmemcmp``
3168
3169In each case, the builtin form has the name of the C library function prefixed
3170by ``__builtin_``. Example:
3171
3172.. code-block:: c
3173
3174  void *p = __builtin_memchr("foobar", 'b', 5);
3175
3176In addition to the above, one further builtin is provided:
3177
3178.. code-block:: c
3179
3180  char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
3181
3182``__builtin_char_memchr(a, b, c)`` is identical to
3183``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
3184constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
3185is disallowed in general).
3186
3187Constant evaluation support for the ``__builtin_mem*`` functions is provided
3188only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``,
3189despite these functions accepting an argument of type ``const void*``.
3190
3191Support for constant expression evaluation for the above builtins can be detected
3192with ``__has_feature(cxx_constexpr_string_builtins)``.
3193
3194Memory builtins
3195---------------
3196
3197Clang provides constant expression evaluation support for builtin forms of the
3198following functions from the C standard library headers
3199``<string.h>`` and ``<wchar.h>``:
3200
3201* ``memcpy``
3202* ``memmove``
3203* ``wmemcpy``
3204* ``wmemmove``
3205
3206In each case, the builtin form has the name of the C library function prefixed
3207by ``__builtin_``.
3208
3209Constant evaluation support is only provided when the source and destination
3210are pointers to arrays with the same trivially copyable element type, and the
3211given size is an exact multiple of the element size that is no greater than
3212the number of elements accessible through the source and destination operands.
3213
3214Guaranteed inlined copy
3215^^^^^^^^^^^^^^^^^^^^^^^
3216
3217.. code-block:: c
3218
3219  void __builtin_memcpy_inline(void *dst, const void *src, size_t size);
3220
3221
3222``__builtin_memcpy_inline`` has been designed as a building block for efficient
3223``memcpy`` implementations. It is identical to ``__builtin_memcpy`` but also
3224guarantees not to call any external functions. See LLVM IR `llvm.memcpy.inline
3225<https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic>`_ intrinsic
3226for more information.
3227
3228This is useful to implement a custom version of ``memcpy``, implement a
3229``libc`` memcpy or work around the absence of a ``libc``.
3230
3231Note that the `size` argument must be a compile time constant.
3232
3233Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3234
3235Guaranteed inlined memset
3236^^^^^^^^^^^^^^^^^^^^^^^^^
3237
3238.. code-block:: c
3239
3240  void __builtin_memset_inline(void *dst, int value, size_t size);
3241
3242
3243``__builtin_memset_inline`` has been designed as a building block for efficient
3244``memset`` implementations. It is identical to ``__builtin_memset`` but also
3245guarantees not to call any external functions. See LLVM IR `llvm.memset.inline
3246<https://llvm.org/docs/LangRef.html#llvm-memset-inline-intrinsic>`_ intrinsic
3247for more information.
3248
3249This is useful to implement a custom version of ``memset``, implement a
3250``libc`` memset or work around the absence of a ``libc``.
3251
3252Note that the `size` argument must be a compile time constant.
3253
3254Note that this intrinsic cannot yet be called in a ``constexpr`` context.
3255
3256Atomic Min/Max builtins with memory ordering
3257--------------------------------------------
3258
3259There are two atomic builtins with min/max in-memory comparison and swap.
3260The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
3261
3262* ``__atomic_fetch_min``
3263* ``__atomic_fetch_max``
3264
3265The builtins work with signed and unsigned integers and require to specify memory ordering.
3266The return value is the original value that was stored in memory before comparison.
3267
3268Example:
3269
3270.. code-block:: c
3271
3272  unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
3273
3274The 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.
3277
3278In terms or aquire-release ordering barriers these two operations are always
3279considered as operations with *load-store* semantics, even when the original value
3280is not actually modified after comparison.
3281
3282.. _langext-__c11_atomic:
3283
3284__c11_atomic builtins
3285---------------------
3286
3287Clang provides a set of builtins which are intended to be used to implement
3288C11'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
3291the corresponding C11 operations, are:
3292
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``
3311
3312The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
3313``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
3314provided, with values corresponding to the enumerators of C11's
3315``memory_order`` enumeration.
3316
3317(Note that Clang additionally provides GCC-compatible ``__atomic_*``
3318builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
3319atomic builtins are an explicit form of the corresponding OpenCL 2.0
3320builtin 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``,
3323and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
3324corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
3325
3326Low-level ARM exclusive memory builtins
3327---------------------------------------
3328
3329Clang provides overloaded builtins giving direct access to the three key ARM
3330instructions for implementing atomic operations.
3331
3332.. code-block:: c
3333
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);
3339
3340The types ``T`` currently supported are:
3341
3342* Integer types with width at most 64 bits (or 128 bits on AArch64).
3343* Floating-point types
3344* Pointer types.
3345
3346Note that the compiler does not guarantee it will not insert stores which clear
3347the 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
3349the same cache line as the variable being modified and Clang will only insert
3350stack stores on its own, so it is best not to use these operations on variables
3351with automatic storage duration.
3352
3353Also, 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
3355care should be exercised.
3356
3357For these reasons the higher level atomic primitives should be preferred where
3358possible.
3359
3360Non-temporal load/store builtins
3361--------------------------------
3362
3363Clang provides overloaded builtins allowing generation of non-temporal memory
3364accesses.
3365
3366.. code-block:: c
3367
3368  T __builtin_nontemporal_load(T *addr);
3369  void __builtin_nontemporal_store(T value, T *addr);
3370
3371The types ``T`` currently supported are:
3372
3373* Integer types.
3374* Floating-point types.
3375* Vector types.
3376
3377Note that the compiler does not guarantee that non-temporal loads or stores
3378will be used.
3379
3380C++ Coroutines support builtins
3381--------------------------------
3382
3383.. warning::
3384  This is a work in progress. Compatibility across Clang/LLVM releases is not
3385  guaranteed.
3386
3387Clang provides experimental builtins to support C++ Coroutines as defined by
3388https://wg21.link/P0057. The following four are intended to be used by the
3389standard library to implement the ``std::coroutine_handle`` type.
3390
3391**Syntax**:
3392
3393.. code-block:: c
3394
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)
3399
3400**Example of use**:
3401
3402.. code-block:: c++
3403
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); }
3408    // ...
3409  protected:
3410    void *ptr;
3411  };
3412
3413  template <typename Promise> struct coroutine_handle : coroutine_handle<> {
3414    // ...
3415    Promise &promise() const {
3416      return *reinterpret_cast<Promise *>(
3417        __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
3418    }
3419    static coroutine_handle from_promise(Promise &promise) {
3420      coroutine_handle p;
3421      p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
3422                                                      /*from-promise=*/true);
3423      return p;
3424    }
3425  };
3426
3427
3428Other coroutine builtins are either for internal clang use or for use during
3429development of the coroutine feature. See `Coroutines in LLVM
3430<https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
3431more information on their semantics. Note that builtins matching the intrinsics
3432that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
3433llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
3434an appropriate value during the emission.
3435
3436**Syntax**:
3437
3438.. code-block:: c
3439
3440  size_t __builtin_coro_size()
3441  void  *__builtin_coro_frame()
3442  void  *__builtin_coro_free(void *coro_frame)
3443
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)
3449
3450Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
3451automatically will insert one if the first argument to `llvm.coro.suspend` is
3452token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
3453as the first argument to the intrinsic.
3454
3455Source location builtins
3456------------------------
3457
3458Clang provides builtins to support C++ standard library implementation
3459of ``std::source_location`` as specified in C++20.  With the exception
3460of ``__builtin_COLUMN``, these builtins are also implemented by GCC.
3461
3462**Syntax**:
3463
3464.. code-block:: c
3465
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();
3471
3472**Example of use**:
3473
3474.. code-block:: c++
3475
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()) {
3479    if (pred) return;
3480    printf("%s:%d assertion failed in function %s\n", file, line, function);
3481    std::abort();
3482  }
3483
3484  struct MyAggregateType {
3485    int x;
3486    int line = __builtin_LINE(); // captures line where aggregate initialization occurs
3487  };
3488  static_assert(MyAggregateType{42}.line == __LINE__);
3489
3490  struct MyClassType {
3491    int line = __builtin_LINE(); // captures line of the constructor used during initialization
3492    constexpr MyClassType(int) { assert(line == __LINE__); }
3493  };
3494
3495**Description**:
3496
3497The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE``
3498return the values, at the "invocation point", for ``__LINE__``,
3499``__FUNCTION__``, and ``__FILE__`` respectively. ``__builtin_COLUMN`` similarly
3500returns the column, though there is no corresponding macro. These builtins are
3501constant expressions.
3502
3503When the builtins appear as part of a default function argument the invocation
3504point is the location of the caller. When the builtins appear as part of a
3505default member initializer, the invocation point is the location of the
3506constructor or aggregate initialization used to create the object. Otherwise
3507the invocation point is the same as the location of the builtin.
3508
3509When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
3510empty string is returned.
3511
3512The builtin ``__builtin_source_location`` returns a pointer to constant static
3513data of type ``std::source_location::__impl``. This type must have already been
3514defined, 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
3517manner as the above four builtins, except that ``_M_function_name`` is populated
3518with ``__PRETTY_FUNCTION__`` rather than ``__FUNCTION__``.
3519
3520
3521Alignment builtins
3522------------------
3523Clang provides builtins to support checking and adjusting alignment of
3524pointers and integers.
3525These builtins can be used to avoid relying on implementation-defined behavior
3526of arithmetic on integers derived from pointers.
3527Additionally, these builtins retain type information and, unlike bitwise
3528arithmetic, they can perform semantic checking on the alignment value.
3529
3530**Syntax**:
3531
3532.. code-block:: c
3533
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);
3537
3538
3539**Example of use**:
3540
3541.. code-block:: c++
3542
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;
3549    return result;
3550  }
3551
3552  void* get_start_of_page(void* ptr) {
3553    return __builtin_align_down(ptr, PAGE_SIZE);
3554  }
3555
3556  void example(char* buffer) {
3557     if (__builtin_is_aligned(buffer, 64)) {
3558       do_fast_aligned_copy(buffer);
3559     } else {
3560       do_unaligned_copy(buffer);
3561     }
3562  }
3563
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), "");
3569
3570
3571**Description**:
3572
3573The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their
3574first argument aligned up/down to the next multiple of the second argument.
3575If the value is already sufficiently aligned, it is returned unchanged.
3576The builtin ``__builtin_is_aligned`` returns whether the first argument is
3577aligned to a multiple of the second argument.
3578All of these builtins expect the alignment to be expressed as a number of bytes.
3579
3580These builtins can be used for all integer types as well as (non-function)
3581pointer types. For pointer types, these builtins operate in terms of the integer
3582address of the pointer and return a new pointer of the same type (including
3583qualifiers such as ``const``) with an adjusted address.
3584When aligning pointers up or down, the resulting value must be within the same
3585underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]).
3586This means that arbitrary integer values stored in pointer-type variables must
3587not be passed to these builtins. For those use cases, the builtins can still be
3588used, but the operation must be performed on the pointer cast to ``uintptr_t``.
3589
3590If Clang can determine that the alignment is not a power of two at compile time,
3591it will result in a compilation failure. If the alignment argument is not a
3592power of two at run time, the behavior of these builtins is undefined.
3593
3594Non-standard C++11 Attributes
3595=============================
3596
3597Clang's non-standard C++11 attributes live in the ``clang`` attribute
3598namespace.
3599
3600Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
3601are 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
3605attributes <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
3608implementation, these attributes must appertain to the *declarator-id* in a
3609declaration, which means they must go either at the start of the declaration or
3610immediately after the name being declared.
3611
3612For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
3613also applies the GNU ``noreturn`` attribute to ``f``.
3614
3615.. code-block:: c++
3616
3617  [[gnu::unused]] int a, f [[gnu::noreturn]] ();
3618
3619Target-Specific Extensions
3620==========================
3621
3622Clang supports some language features conditionally on some targets.
3623
3624ARM/AArch64 Language Extensions
3625-------------------------------
3626
3627Memory Barrier Intrinsics
3628^^^^^^^^^^^^^^^^^^^^^^^^^
3629Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
3630in the `ARM C Language Extensions Release 2.0
3631<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
3632Note that these intrinsics are implemented as motion barriers that block
3633reordering of memory accesses and side effect instructions. Other instructions
3634like simple arithmetic may be reordered around the intrinsic. If you expect to
3635have no reordering at all, use inline assembly instead.
3636
3637X86/X86-64 Language Extensions
3638------------------------------
3639
3640The X86 backend has these language extensions:
3641
3642Memory references to specified segments
3643^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3644
3645Annotating a pointer with address space #256 causes it to be code generated
3646relative to the X86 GS segment register, address space #257 causes it to be
3647relative to the X86 FS segment, and address space #258 causes it to be
3648relative to the X86 SS segment.  Note that this is a very very low-level
3649feature that should only be used if you know what you're doing (for example in
3650an OS kernel).
3651
3652Here is an example:
3653
3654.. code-block:: c++
3655
3656  #define GS_RELATIVE __attribute__((address_space(256)))
3657  int foo(int GS_RELATIVE *P) {
3658    return *P;
3659  }
3660
3661Which compiles to (on X86-32):
3662
3663.. code-block:: gas
3664
3665  _foo:
3666          movl    4(%esp), %eax
3667          movl    %gs:(%eax), %eax
3668          ret
3669
3670You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
3671the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
3672indicate their support.
3673
3674PowerPC Language Extensions
3675---------------------------
3676
3677Set the Floating Point Rounding Mode
3678^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3679PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
3680the floating point rounding mode. This function will use the least significant
3681two bits of integer argument to set the floating point rounding mode.
3682
3683.. code-block:: c++
3684
3685  double __builtin_setrnd(int mode);
3686
3687The effective values for mode are:
3688
3689    - 0 - round to nearest
3690    - 1 - round to zero
3691    - 2 - round to +infinity
3692    - 3 - round to -infinity
3693
3694Note that the mode argument will modulo 4, so if the integer argument is greater
3695than 3, it will only use the least significant two bits of the mode.
3696Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
3697
3698PowerPC cache builtins
3699^^^^^^^^^^^^^^^^^^^^^^
3700
3701The PowerPC architecture specifies instructions implementing cache operations.
3702Clang provides builtins that give direct programmer access to these cache
3703instructions.
3704
3705Currently the following builtins are implemented in clang:
3706
3707``__builtin_dcbf`` copies the contents of a modified block from the data cache
3708to main memory and flushes the copy from the data cache.
3709
3710**Syntax**:
3711
3712.. code-block:: c
3713
3714  void __dcbf(const void* addr); /* Data Cache Block Flush */
3715
3716**Example of Use**:
3717
3718.. code-block:: c
3719
3720  int a = 1;
3721  __builtin_dcbf (&a);
3722
3723Extensions for Static Analysis
3724==============================
3725
3726Clang supports additional attributes that are useful for documenting program
3727invariants and rules for static analysis tools, such as the `Clang Static
3728Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
3729in the analyzer's `list of source-level annotations
3730<https://clang-analyzer.llvm.org/annotations.html>`_.
3731
3732
3733Extensions for Dynamic Analysis
3734===============================
3735
3736Use ``__has_feature(address_sanitizer)`` to check if the code is being built
3737with :doc:`AddressSanitizer`.
3738
3739Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
3740with :doc:`ThreadSanitizer`.
3741
3742Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
3743with :doc:`MemorySanitizer`.
3744
3745Use ``__has_feature(dataflow_sanitizer)`` to check if the code is being built
3746with :doc:`DataFlowSanitizer`.
3747
3748Use ``__has_feature(safe_stack)`` to check if the code is being built
3749with :doc:`SafeStack`.
3750
3751
3752Extensions for selectively disabling optimization
3753=================================================
3754
3755Clang provides a mechanism for selectively disabling optimizations in functions
3756and methods.
3757
3758To disable optimizations in a single function definition, the GNU-style or C++11
3759non-standard attribute ``optnone`` can be used.
3760
3761.. code-block:: c++
3762
3763  // The following functions will not be optimized.
3764  // GNU-style attribute
3765  __attribute__((optnone)) int foo() {
3766    // ... code
3767  }
3768  // C++11 attribute
3769  [[clang::optnone]] int bar() {
3770    // ... code
3771  }
3772
3773To facilitate disabling optimization for a range of function definitions, a
3774range-based pragma is provided. Its syntax is ``#pragma clang optimize``
3775followed by ``off`` or ``on``.
3776
3777All function definitions in the region between an ``off`` and the following
3778``on`` will be decorated with the ``optnone`` attribute unless doing so would
3779conflict with explicit attributes already present on the function (e.g. the
3780ones that control inlining).
3781
3782.. code-block:: c++
3783
3784  #pragma clang optimize off
3785  // This function will be decorated with optnone.
3786  int foo() {
3787    // ... code
3788  }
3789
3790  // optnone conflicts with always_inline, so bar() will not be decorated.
3791  __attribute__((always_inline)) int bar() {
3792    // ... code
3793  }
3794  #pragma clang optimize on
3795
3796If no ``on`` is found to close an ``off`` region, the end of the region is the
3797end of the compilation unit.
3798
3799Note that a stray ``#pragma clang optimize on`` does not selectively enable
3800additional optimizations when compiling at low optimization levels. This feature
3801can only be used to selectively disable optimizations.
3802
3803The pragma has an effect on functions only at the point of their definition; for
3804function templates, this means that the state of the pragma at the point of an
3805instantiation is not necessarily relevant. Consider the following example:
3806
3807.. code-block:: c++
3808
3809  template<typename T> T twice(T t) {
3810    return 2 * t;
3811  }
3812
3813  #pragma clang optimize off
3814  template<typename T> T thrice(T t) {
3815    return 3 * t;
3816  }
3817
3818  int container(int a, int b) {
3819    return twice(a) + thrice(b);
3820  }
3821  #pragma clang optimize on
3822
3823In this example, the definition of the template function ``twice`` is outside
3824the pragma region, whereas the definition of ``thrice`` is inside the region.
3825The ``container`` function is also in the region and will not be optimized, but
3826it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
3827these two instantiations, ``twice`` will be optimized (because its definition
3828was outside the region) and ``thrice`` will not be optimized.
3829
3830Clang also implements MSVC's range-based pragma,
3831``#pragma optimize("[optimization-list]", on | off)``. At the moment, Clang only
3832supports an empty optimization list, whereas MSVC supports the arguments, ``s``,
3833``g``, ``t``, and ``y``. Currently, the implementation of ``pragma optimize`` behaves
3834the same as ``#pragma clang optimize``. All functions
3835between ``off`` and ``on`` will be decorated with the ``optnone`` attribute.
3836
3837.. code-block:: c++
3838
3839  #pragma optimize("", off)
3840  // This function will be decorated with optnone.
3841  void f1() {}
3842
3843  #pragma optimize("", on)
3844  // This function will be optimized with whatever was specified on
3845  // the commandline.
3846  void f2() {}
3847
3848  // This will warn with Clang's current implementation.
3849  #pragma optimize("g", on)
3850  void f3() {}
3851
3852For MSVC, an empty optimization list and ``off`` parameter will turn off
3853all optimizations, ``s``, ``g``, ``t``, and ``y``. An empty optimization and
3854``on`` parameter will reset the optimizations to the ones specified on the
3855commandline.
3856
3857.. list-table:: Parameters (unsupported by Clang)
3858
3859   * - Parameter
3860     - Type of optimization
3861   * - g
3862     - Deprecated
3863   * - s or t
3864     - Short or fast sequences of machine code
3865   * - y
3866     - Enable frame pointers
3867
3868Extensions for loop hint optimizations
3869======================================
3870
3871The ``#pragma clang loop`` directive is used to specify hints for optimizing the
3872subsequent for, while, do-while, or c++11 range-based for loop. The directive
3873provides options for vectorization, interleaving, predication, unrolling and
3874distribution. Loop hints can be specified before any loop and will be ignored if
3875the optimization is not safe to apply.
3876
3877There are loop hints that control transformations (e.g. vectorization, loop
3878unrolling) and there are loop hints that set transformation options (e.g.
3879``vectorize_width``, ``unroll_count``).  Pragmas setting transformation options
3880imply the transformation is enabled, as if it was enabled via the corresponding
3881transformation pragma (e.g. ``vectorize(enable)``). If the transformation is
3882disabled  (e.g. ``vectorize(disable)``), that takes precedence over
3883transformations option pragmas implying that transformation.
3884
3885Vectorization, Interleaving, and Predication
3886--------------------------------------------
3887
3888A vectorized loop performs multiple iterations of the original loop
3889in parallel using vector instructions. The instruction set of the target
3890processor determines which vector instructions are available and their vector
3891widths. This restricts the types of loops that can be vectorized. The vectorizer
3892automatically determines if the loop is safe and profitable to vectorize. A
3893vector instruction cost model is used to select the vector width.
3894
3895Interleaving multiple loop iterations allows modern processors to further
3896improve instruction-level parallelism (ILP) using advanced hardware features,
3897such as multiple execution units and out-of-order execution. The vectorizer uses
3898a cost model that depends on the register pressure and generated code size to
3899select the interleaving count.
3900
3901Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
3902by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
3903manually enable vectorization or interleaving.
3904
3905.. code-block:: c++
3906
3907  #pragma clang loop vectorize(enable)
3908  #pragma clang loop interleave(enable)
3909  for(...) {
3910    ...
3911  }
3912
3913The vector width is specified by
3914``vectorize_width(_value_[, fixed|scalable])``, where _value_ is a positive
3915integer and the type of vectorization can be specified with an optional
3916second parameter. The default for the second parameter is 'fixed' and
3917refers to fixed width vectorization, whereas 'scalable' indicates the
3918compiler should use scalable vectors instead. Another use of vectorize_width
3919is ``vectorize_width(fixed|scalable)`` where the user can hint at the type
3920of vectorization to use without specifying the exact width. In both variants
3921of the pragma the vectorizer may decide to fall back on fixed width
3922vectorization if the target does not support scalable vectors.
3923
3924The interleave count is specified by ``interleave_count(_value_)``, where
3925_value_ is a positive integer. This is useful for specifying the optimal
3926width/count of the set of target architectures supported by your application.
3927
3928.. code-block:: c++
3929
3930  #pragma clang loop vectorize_width(2)
3931  #pragma clang loop interleave_count(2)
3932  for(...) {
3933    ...
3934  }
3935
3936Specifying a width/count of 1 disables the optimization, and is equivalent to
3937``vectorize(disable)`` or ``interleave(disable)``.
3938
3939Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
3940
3941.. code-block:: c++
3942
3943  #pragma clang loop vectorize(enable)
3944  #pragma clang loop vectorize_predicate(enable)
3945  for(...) {
3946    ...
3947  }
3948
3949This predicates (masks) all instructions in the loop, which allows the scalar
3950remainder loop (the tail) to be folded into the main vectorized loop. This
3951might be more efficient when vector predication is efficiently supported by the
3952target platform.
3953
3954Loop Unrolling
3955--------------
3956
3957Unrolling a loop reduces the loop control overhead and exposes more
3958opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
3959eliminates the loop and replaces it with an enumerated sequence of loop
3960iterations. Full unrolling is only possible if the loop trip count is known at
3961compile time. Partial unrolling replicates the loop body within the loop and
3962reduces the trip count.
3963
3964If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
3965loop if the trip count is known at compile time. If the fully unrolled code size
3966is greater than an internal limit the loop will be partially unrolled up to this
3967limit. If the trip count is not known at compile time the loop will be partially
3968unrolled with a heuristically chosen unroll factor.
3969
3970.. code-block:: c++
3971
3972  #pragma clang loop unroll(enable)
3973  for(...) {
3974    ...
3975  }
3976
3977If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
3978loop if the trip count is known at compile time identically to
3979``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
3980if the loop count is not known at compile time.
3981
3982.. code-block:: c++
3983
3984  #pragma clang loop unroll(full)
3985  for(...) {
3986    ...
3987  }
3988
3989The 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
3991loop will be fully unrolled. Otherwise the loop is partially unrolled subject
3992to the same code size limit as with ``unroll(enable)``.
3993
3994.. code-block:: c++
3995
3996  #pragma clang loop unroll_count(8)
3997  for(...) {
3998    ...
3999  }
4000
4001Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
4002
4003Loop unroll parameters can be controlled by options
4004`-mllvm -unroll-count=n` and `-mllvm -pragma-unroll-threshold=n`.
4005
4006Loop Distribution
4007-----------------
4008
4009Loop Distribution allows splitting a loop into multiple loops.  This is
4010beneficial for example when the entire loop cannot be vectorized but some of the
4011resulting loops can.
4012
4013If ``distribute(enable))`` is specified and the loop has memory dependencies
4014that inhibit vectorization, the compiler will attempt to isolate the offending
4015operations into a new loop.  This optimization is not enabled by default, only
4016loops marked with the pragma are considered.
4017
4018.. code-block:: c++
4019
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];
4024  }
4025
4026This loop will be split into two loops between statements S1 and S2.  The
4027second loop containing S2 will be vectorized.
4028
4029Loop Distribution is currently not enabled by default in the optimizer because
4030it can hurt performance in some cases.  For example, instruction-level
4031parallelism could be reduced by sequentializing the execution of the
4032statements S1 and S2 above.
4033
4034If Loop Distribution is turned on globally with
4035``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
4036be used the disable it on a per-loop basis.
4037
4038Additional Information
4039----------------------
4040
4041For convenience multiple loop hints can be specified on a single line.
4042
4043.. code-block:: c++
4044
4045  #pragma clang loop vectorize_width(4) interleave_count(8)
4046  for(...) {
4047    ...
4048  }
4049
4050If an optimization cannot be applied any hints that apply to it will be ignored.
4051For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
4052proven safe to vectorize. To identify and diagnose optimization issues use
4053`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
4054user guide for details.
4055
4056Extensions to specify floating-point flags
4057====================================================
4058
4059The ``#pragma clang fp`` pragma allows floating-point options to be specified
4060for a section of the source code. This pragma can only appear at file scope or
4061at the start of a compound statement (excluding comments). When using within a
4062compound statement, the pragma is active within the scope of the compound
4063statement.
4064
4065Currently, the following settings can be controlled with this pragma:
4066
4067``#pragma clang fp reassociate`` allows control over the reassociation
4068of floating point expressions. When enabled, this pragma allows the expression
4069``x + (y + z)`` to be reassociated as ``(x + y) + z``.
4070Reassociation can also occur across multiple statements.
4071This pragma can be used to disable reassociation when it is otherwise
4072enabled for the translation unit with the ``-fassociative-math`` flag.
4073The pragma can take two values: ``on`` and ``off``.
4074
4075.. code-block:: c++
4076
4077  float f(float x, float y, float z)
4078  {
4079    // Enable floating point reassociation across statements
4080    #pragma clang fp reassociate(on)
4081    float t = x + y;
4082    float v = t + z;
4083  }
4084
4085
4086``#pragma clang fp contract`` specifies whether the compiler should
4087contract a multiply and an addition (or subtraction) into a fused FMA
4088operation when supported by the target.
4089
4090The pragma can take three values: ``on``, ``fast`` and ``off``.  The ``on``
4091option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
4092fusion as specified the language standard.  The ``fast`` option allows fusion
4093in cases when the language standard does not make this possible (e.g. across
4094statements in C).
4095
4096.. code-block:: c++
4097
4098  for(...) {
4099    #pragma clang fp contract(fast)
4100    a = b[i] * c[i];
4101    d[i] += a;
4102  }
4103
4104
4105The pragma can also be used with ``off`` which turns FP contraction off for a
4106section of the code. This can be useful when fast contraction is otherwise
4107enabled for the translation unit with the ``-ffp-contract=fast-honor-pragmas`` flag.
4108Note that ``-ffp-contract=fast`` will override pragmas to fuse multiply and
4109addition across statements regardless of any controlling pragmas.
4110
4111``#pragma clang fp exceptions`` specifies floating point exception behavior. It
4112may take one of the values: ``ignore``, ``maytrap`` or ``strict``. Meaning of
4113these values is same as for `constrained floating point intrinsics <http://llvm.org/docs/LangRef.html#constrained-floating-point-intrinsics>`_.
4114
4115.. code-block:: c++
4116
4117  {
4118    // Preserve floating point exceptions
4119    #pragma clang fp exceptions(strict)
4120    z = x + y;
4121    if (fetestexcept(FE_OVERFLOW))
4122	  ...
4123  }
4124
4125A ``#pragma clang fp`` pragma may contain any number of options:
4126
4127.. code-block:: c++
4128
4129  void func(float *dest, float a, float b) {
4130    #pragma clang fp exceptions(maytrap) contract(fast) reassociate(on)
4131    ...
4132  }
4133
4134``#pragma clang fp eval_method`` allows floating-point behavior to be specified
4135for a section of the source code. This pragma can appear at file or namespace
4136scope, or at the start of a compound statement (excluding comments).
4137The pragma is active within the scope of the compound statement.
4138
4139When ``pragma clang fp eval_method(source)`` is enabled, the section of code
4140governed by the pragma behaves as though the command-line option
4141``-ffp-eval-method=source`` is enabled. Rounds intermediate results to
4142source-defined precision.
4143
4144When ``pragma clang fp eval_method(double)`` is enabled, the section of code
4145governed by the pragma behaves as though the command-line option
4146``-ffp-eval-method=double`` is enabled. Rounds intermediate results to
4147``double`` precision.
4148
4149When ``pragma clang fp eval_method(extended)`` is enabled, the section of code
4150governed by the pragma behaves as though the command-line option
4151``-ffp-eval-method=extended`` is enabled. Rounds intermediate results to
4152target-dependent ``long double`` precision. In Win32 programming, for instance,
4153the long double data type maps to the double, 64-bit precision data type.
4154
4155The full syntax this pragma supports is
4156``#pragma clang fp eval_method(source|double|extended)``.
4157
4158.. code-block:: c++
4159
4160  for(...) {
4161    // The compiler will use long double as the floating-point evaluation
4162    // method.
4163    #pragma clang fp eval_method(extended)
4164    a = b[i] * c[i] + e;
4165  }
4166
4167The ``#pragma float_control`` pragma allows precise floating-point
4168semantics and floating-point exception behavior to be specified
4169for a section of the source code. This pragma can only appear at file or
4170namespace scope, within a language linkage specification or at the start of a
4171compound statement (excluding comments). When used within a compound statement,
4172the pragma is active within the scope of the compound statement.  This pragma
4173is modeled after a Microsoft pragma with the same spelling and syntax.  For
4174pragmas specified at file or namespace scope, or within a language linkage
4175specification, a stack is supported so that the ``pragma float_control``
4176settings can be pushed or popped.
4177
4178When ``pragma float_control(precise, on)`` is enabled, the section of code
4179governed by the pragma uses precise floating point semantics, effectively
4180``-ffast-math`` is disabled and ``-ffp-contract=on``
4181(fused multiply add) is enabled.
4182
4183When ``pragma float_control(except, on)`` is enabled, the section of code
4184governed by the pragma behaves as though the command-line option
4185``-ffp-exception-behavior=strict`` is enabled,
4186when ``pragma float_control(except, off)`` is enabled, the section of code
4187governed by the pragma behaves as though the command-line option
4188``-ffp-exception-behavior=ignore`` is enabled.
4189
4190The full syntax this pragma supports is
4191``float_control(except|precise, on|off [, push])`` and
4192``float_control(push|pop)``.
4193The ``push`` and ``pop`` forms, including using ``push`` as the optional
4194third argument, can only occur at file scope.
4195
4196.. code-block:: c++
4197
4198  for(...) {
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;
4202  }
4203
4204Specifying an attribute for multiple declarations (#pragma clang attribute)
4205===========================================================================
4206
4207The ``#pragma clang attribute`` directive can be used to apply an attribute to
4208multiple declarations. The ``#pragma clang attribute push`` variation of the
4209directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
4210can be added to. The ``#pragma clang attribute (...)`` variation adds an
4211attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
4212the scope. You can also use ``#pragma clang attribute push (...)``, which is a
4213shorthand for when you want to add one attribute to a new scope. Multiple push
4214directives can be nested inside each other.
4215
4216The attributes that are used in the ``#pragma clang attribute`` directives
4217can be written using the GNU-style syntax:
4218
4219.. code-block:: c++
4220
4221  #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
4222
4223  void function(); // The function now has the annotate("custom") attribute
4224
4225  #pragma clang attribute pop
4226
4227The attributes can also be written using the C++11 style syntax:
4228
4229.. code-block:: c++
4230
4231  #pragma clang attribute push ([[noreturn]], apply_to = function)
4232
4233  void function(); // The function now has the [[noreturn]] attribute
4234
4235  #pragma clang attribute pop
4236
4237The ``__declspec`` style syntax is also supported:
4238
4239.. code-block:: c++
4240
4241  #pragma clang attribute push (__declspec(dllexport), apply_to = function)
4242
4243  void function(); // The function now has the __declspec(dllexport) attribute
4244
4245  #pragma clang attribute pop
4246
4247A single push directive can contain multiple attributes, however,
4248only one syntax style can be used within a single directive:
4249
4250.. code-block:: c++
4251
4252  #pragma clang attribute push ([[noreturn, noinline]], apply_to = function)
4253
4254  void function1(); // The function now has the [[noreturn]] and [[noinline]] attributes
4255
4256  #pragma clang attribute pop
4257
4258  #pragma clang attribute push (__attribute((noreturn, noinline)), apply_to = function)
4259
4260  void function2(); // The function now has the __attribute((noreturn)) and __attribute((noinline)) attributes
4261
4262  #pragma clang attribute pop
4263
4264Because multiple push directives can be nested, if you're writing a macro that
4265expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
4266required) to add a namespace to your push/pop directives. A pop directive with a
4267namespace will pop the innermost push that has that same namespace. This will
4268ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
4269that an ``pop`` without a namespace will pop the innermost ``push`` without a
4270namespace. ``push``es with a namespace can only be popped by ``pop`` with the
4271same namespace. For instance:
4272
4273.. code-block:: c++
4274
4275   #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
4276   #define ASSUME_NORETURN_END   _Pragma("clang attribute AssumeNoreturn.pop")
4277
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")
4280
4281
4282   ASSUME_NORETURN_BEGIN
4283   ASSUME_UNAVAILABLE_BEGIN
4284   void function(); // function has [[noreturn]] and __attribute__((unavailable))
4285   ASSUME_NORETURN_END
4286   void other_function(); // function has __attribute__((unavailable))
4287   ASSUME_UNAVAILABLE_END
4288
4289Without the namespaces on the macros, ``other_function`` will be annotated with
4290``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
4291a contrived example, but its very possible for this kind of situation to appear
4292in real code if the pragmas are spread out across a large file. You can test if
4293your version of clang supports namespaces on ``#pragma clang attribute`` with
4294``__has_extension(pragma_clang_attribute_namespaces)``.
4295
4296Subject Match Rules
4297-------------------
4298
4299The set of declarations that receive a single attribute from the attribute stack
4300depends on the subject match rules that were specified in the pragma. Subject
4301match rules are specified after the attribute. The compiler expects an
4302identifier that corresponds to the subject set specifier. The ``apply_to``
4303specifier is currently the only supported subject set specifier. It allows you
4304to specify match rules that form a subset of the attribute's allowed subject
4305set, i.e. the compiler doesn't require all of the attribute's subjects. For
4306example, an attribute like ``[[nodiscard]]`` whose subject set includes
4307``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
4308least one of these rules after ``apply_to``:
4309
4310.. code-block:: c++
4311
4312  #pragma clang attribute push([[nodiscard]], apply_to = enum)
4313
4314  enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
4315
4316  struct Record1 { }; // The struct will *not* receive [[nodiscard]]
4317
4318  #pragma clang attribute pop
4319
4320  #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
4321
4322  enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
4323
4324  struct Record2 { }; // The struct *will* receive [[nodiscard]]
4325
4326  #pragma clang attribute pop
4327
4328  // This is an error, since [[nodiscard]] can't be applied to namespaces:
4329  #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
4330
4331  #pragma clang attribute pop
4332
4333Multiple match rules can be specified using the ``any`` match rule, as shown
4334in the example above. The ``any`` rule applies attributes to all declarations
4335that are matched by at least one of the rules in the ``any``. It doesn't nest
4336and can't be used inside the other match rules. Redundant match rules or rules
4337that conflict with one another should not be used inside of ``any``. Failing to
4338specify a rule within the ``any`` rule results in an error.
4339
4340Clang supports the following match rules:
4341
4342- ``function``: Can be used to apply attributes to functions. This includes C++
4343  member functions, static functions, operators, and constructors/destructors.
4344
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.
4348
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.
4352
4353- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
4354  and C++11 type aliases.
4355
4356- ``record``: Can be used to apply attributes to ``struct``, ``class``, and
4357  ``union`` declarations.
4358
4359- ``record(unless(is_union))``: Can be used to apply attributes only to
4360  ``struct`` and ``class`` declarations.
4361
4362- ``enum``: Can be be used to apply attributes to enumeration declarations.
4363
4364- ``enum_constant``: Can be used to apply attributes to enumerators.
4365
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
4369  ivars.
4370
4371- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
4372  variables only.
4373
4374- ``variable(is_global)``: Can be used to apply attributes to global variables
4375  only.
4376
4377- ``variable(is_local)``: Can be used to apply attributes to local variables
4378  only.
4379
4380- ``variable(is_parameter)``: Can be used to apply attributes to parameters
4381  only.
4382
4383- ``variable(unless(is_parameter))``: Can be used to apply attributes to all
4384  the variables that are not parameters.
4385
4386- ``field``: Can be used to apply attributes to non-static member variables
4387  in a record. This includes Objective-C ivars.
4388
4389- ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
4390
4391- ``objc_interface``: Can be used to apply attributes to ``@interface``
4392  declarations.
4393
4394- ``objc_protocol``: Can be used to apply attributes to ``@protocol``
4395  declarations.
4396
4397- ``objc_category``: Can be used to apply attributes to category declarations,
4398  including class extensions.
4399
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.
4403
4404- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
4405  instance methods.
4406
4407- ``objc_property``: Can be used to apply attributes to ``@property``
4408  declarations.
4409
4410- ``block``: Can be used to apply attributes to block declarations. This does
4411  not include variables/fields of block pointer type.
4412
4413The use of ``unless`` in match rules is currently restricted to a strict set of
4414sub-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.
4417
4418Supported Attributes
4419--------------------
4420
4421Not all attributes can be used with the ``#pragma clang attribute`` directive.
4422Notably, statement attributes like ``[[fallthrough]]`` or type attributes
4423like ``address_space`` aren't supported by this directive. You can determine
4424whether or not an attribute is supported by the pragma by referring to the
4425:doc:`individual documentation for that attribute <AttributeReference>`.
4426
4427The attributes are applied to all matching declarations individually, even when
4428the attribute is semantically incorrect. The attributes that aren't applied to
4429any declaration are not verified semantically.
4430
4431Specifying section names for global objects (#pragma clang section)
4432===================================================================
4433
4434The ``#pragma clang section`` directive provides a means to assign section-names
4435to global variables, functions and static variables.
4436
4437The section names can be specified as:
4438
4439.. code-block:: c++
4440
4441  #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText"
4442
4443The section names can be reverted back to default name by supplying an empty
4444string to the section kind, for example:
4445
4446.. code-block:: c++
4447
4448  #pragma clang section bss="" data="" text="" rodata="" relro=""
4449
4450The ``#pragma clang section`` directive obeys the following rules:
4451
4452* The pragma applies to all global variable, statics and function declarations
4453  from the pragma to the end of the translation unit.
4454
4455* The pragma clang section is enabled automatically, without need of any flags.
4456
4457* This feature is only defined to work sensibly for ELF targets.
4458
4459* If section name is specified through _attribute_((section("myname"))), then
4460  the attribute name gains precedence.
4461
4462* Global variables that are initialized to zero will be placed in the named
4463  bss section, if one is present.
4464
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.
4468
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.
4472
4473Specifying Linker Options on ELF Targets
4474========================================
4475
4476The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
4477The 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.
4479
4480Evaluating Object Size Dynamically
4481==================================
4482
4483Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
4484the 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
4487for ``__builtin_object_size`` in libraries that support it.
4488
4489For instance, here is a program that ``__builtin_dynamic_object_size`` will make
4490safer:
4491
4492.. code-block:: c
4493
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))
4499  }
4500
4501Since 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
4503as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
4504``size``, providing some extra runtime safety.
4505
4506Deprecating Macros
4507==================
4508
4509Clang supports the pragma ``#pragma clang deprecated``, which can be used to
4510provide deprecation warnings for macro uses. For example:
4511
4512.. code-block:: c
4513
4514   #define MIN(x, y) x < y ? x : y
4515   #pragma clang deprecated(MIN, "use std::min instead")
4516
4517   void min(int a, int b) {
4518     return MIN(a, b); // warning: MIN is deprecated: use std::min instead
4519   }
4520
4521``#pragma clang deprecated`` should be preferred for this purpose over
4522``#pragma GCC warning`` because the warning can be controlled with
4523``-Wdeprecated``.
4524
4525Restricted Expansion Macros
4526===========================
4527
4528Clang supports the pragma ``#pragma clang restrict_expansion``, which can be
4529used restrict macro expansion in headers. This can be valuable when providing
4530headers with ABI stability requirements. Any expansion of the annotated macro
4531processed by the preprocessor after the ``#pragma`` annotation will log a
4532warning. Redefining the macro or undefining the macro will not be diagnosed, nor
4533will expansion of the macro within the main source file. For example:
4534
4535.. code-block:: c
4536
4537   #define TARGET_ARM 1
4538   #pragma clang restrict_expansion(TARGET_ARM, "<reason>")
4539
4540   /// Foo.h
4541   struct Foo {
4542   #if TARGET_ARM // warning: TARGET_ARM is marked unsafe in headers: <reason>
4543     uint32_t X;
4544   #else
4545     uint64_t X;
4546   #endif
4547   };
4548
4549   /// main.c
4550   #include "foo.h"
4551   #if TARGET_ARM // No warning in main source file
4552   X_TYPE uint32_t
4553   #else
4554   X_TYPE uint64_t
4555   #endif
4556
4557This warning is controlled by ``-Wpedantic-macros``.
4558
4559Final Macros
4560============
4561
4562Clang supports the pragma ``#pragma clang final``, which can be used to
4563mark macros as final, meaning they cannot be undef'd or re-defined. For example:
4564
4565.. code-block:: c
4566
4567   #define FINAL_MACRO 1
4568   #pragma clang final(FINAL_MACRO)
4569
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
4572
4573This is useful for enforcing system-provided macros that should not be altered
4574in user headers or code. This is controlled by ``-Wpedantic-macros``. Final
4575macros will always warn on redefinition, including situations with identical
4576bodies and in system headers.
4577
4578Line Control
4579============
4580
4581Clang supports an extension for source line control, which takes the
4582form of a preprocessor directive starting with an unsigned integral
4583constant. In addition to the standard ``#line`` directive, this form
4584allows control of an include stack and header file type, which is used
4585in issuing diagnostics. These lines are emitted in preprocessed
4586output.
4587
4588.. code-block:: c
4589
4590   # <line:number> <filename:string> <header-type:numbers>
4591
4592The filename is optional, and if unspecified indicates no change in
4593source filename. The header-type is an optional, whitespace-delimited,
4594sequence of magic numbers as follows.
4595
4596* ``1:`` Push the current source file name onto the include stack and
4597  enter a new file.
4598
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.
4603
4604* ``3``: Enter a system-header region. System headers often contain
4605  implementation-specific source that would normally emit a diagnostic.
4606
4607* ``4``: Enter an implicit ``extern "C"`` region. This is not required on
4608  modern systems where system headers are C++-aware.
4609
4610At most a single ``1`` or ``2`` can be present, and values must be in
4611ascending order.
4612
4613Examples are:
4614
4615.. code-block:: c
4616
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
4624
4625Extended Integer Types
4626======================
4627
4628Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
4629and in C++. This type was previously implemented in Clang with the same
4630semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
4631favor of the standard type.
4632
4633Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
4634so this type should not yet be used in interfaces that require ABI stability.
4635
4636Intrinsics Support within Constant Expressions
4637==============================================
4638
4639The following builtin intrinsics can be used in constant expressions:
4640
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``
4651* ``__builtin_clz``
4652* ``__builtin_clzl``
4653* ``__builtin_clzll``
4654* ``__builtin_clzs``
4655* ``__builtin_ctz``
4656* ``__builtin_ctzl``
4657* ``__builtin_ctzll``
4658* ``__builtin_ctzs``
4659* ``__builtin_ffs``
4660* ``__builtin_ffsl``
4661* ``__builtin_ffsll``
4662* ``__builtin_fpclassify``
4663* ``__builtin_inf``
4664* ``__builtin_isinf``
4665* ``__builtin_isinf_sign``
4666* ``__builtin_isfinite``
4667* ``__builtin_isnan``
4668* ``__builtin_isnormal``
4669* ``__builtin_nan``
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``
4685
4686The following x86-specific intrinsics can be used in constant expressions:
4687
4688* ``_bit_scan_forward``
4689* ``_bit_scan_reverse``
4690* ``__bsfd``
4691* ``__bsfq``
4692* ``__bsrd``
4693* ``__bsrq``
4694* ``__bswap``
4695* ``__bswapd``
4696* ``__bswap64``
4697* ``__bswapq``
4698* ``_castf32_u32``
4699* ``_castf64_u64``
4700* ``_castu32_f32``
4701* ``_castu64_f64``
4702* ``_mm_popcnt_u32``
4703* ``_mm_popcnt_u64``
4704* ``_popcnt32``
4705* ``_popcnt64``
4706* ``__popcntd``
4707* ``__popcntq``
4708* ``__rolb``
4709* ``__rolw``
4710* ``__rold``
4711* ``__rolq``
4712* ``__rorb``
4713* ``__rorw``
4714* ``__rord``
4715* ``__rorq``
4716* ``_rotl``
4717* ``_rotr``
4718* ``_rotwl``
4719* ``_rotwr``
4720* ``_lrotl``
4721* ``_lrotr``
4722