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