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 compliation 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.. _langext-vectors: 387 388Vectors and Extended Vectors 389============================ 390 391Supports the GCC, OpenCL, AltiVec and NEON vector extensions. 392 393OpenCL vector types are created using the ``ext_vector_type`` attribute. It 394supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example 395is: 396 397.. code-block:: c++ 398 399 typedef float float4 __attribute__((ext_vector_type(4))); 400 typedef float float2 __attribute__((ext_vector_type(2))); 401 402 float4 foo(float2 a, float2 b) { 403 float4 c; 404 c.xz = a; 405 c.yw = b; 406 return c; 407 } 408 409Query for this feature with ``__has_attribute(ext_vector_type)``. 410 411Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax 412and functions. For example: 413 414.. code-block:: c++ 415 416 vector float foo(vector int a) { 417 vector int b; 418 b = vec_add(a, a) + a; 419 return (vector float)b; 420 } 421 422NEON vector types are created using ``neon_vector_type`` and 423``neon_polyvector_type`` attributes. For example: 424 425.. code-block:: c++ 426 427 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t; 428 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t; 429 430 int8x8_t foo(int8x8_t a) { 431 int8x8_t v; 432 v = a; 433 return v; 434 } 435 436Vector Literals 437--------------- 438 439Vector literals can be used to create vectors from a set of scalars, or 440vectors. Either parentheses or braces form can be used. In the parentheses 441form the number of literal values specified must be one, i.e. referring to a 442scalar value, or must match the size of the vector type being created. If a 443single scalar literal value is specified, the scalar literal value will be 444replicated to all the components of the vector type. In the brackets form any 445number of literals can be specified. For example: 446 447.. code-block:: c++ 448 449 typedef int v4si __attribute__((__vector_size__(16))); 450 typedef float float4 __attribute__((ext_vector_type(4))); 451 typedef float float2 __attribute__((ext_vector_type(2))); 452 453 v4si vsi = (v4si){1, 2, 3, 4}; 454 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f); 455 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1). 456 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0). 457 vector int vi3 = (vector int)(1, 2); // error 458 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0). 459 vector int vi5 = (vector int)(1, 2, 3, 4); 460 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f)); 461 462Vector Operations 463----------------- 464 465The table below shows the support for each operation by vector extension. A 466dash indicates that an operation is not accepted according to a corresponding 467specification. 468 469============================== ======= ======= ============= ======= 470 Operator OpenCL AltiVec GCC NEON 471============================== ======= ======= ============= ======= 472[] yes yes yes -- 473unary operators +, -- yes yes yes -- 474++, -- -- yes yes yes -- 475+,--,*,/,% yes yes yes -- 476bitwise operators &,|,^,~ yes yes yes -- 477>>,<< yes yes yes -- 478!, &&, || yes -- yes [#]_ -- 479==, !=, >, <, >=, <= yes yes yes -- 480= yes yes yes yes 481?: [#]_ yes -- yes -- 482sizeof yes yes yes yes 483C-style cast yes yes yes no 484reinterpret_cast yes no yes no 485static_cast yes no yes no 486const_cast no no no no 487============================== ======= ======= ============= ======= 488 489See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`. 490 491.. [#] unary operator ! is not implemented, however && and || are. 492.. [#] ternary operator(?:) has different behaviors depending on condition 493 operand's vector type. If the condition is a GNU vector (i.e. __vector_size__), 494 it's only available in C++ and uses normal bool conversions (that is, != 0). 495 If it's an extension (OpenCL) vector, it's only available in C and OpenCL C. 496 And it selects base on signedness of the condition operands (OpenCL v1.1 s6.3.9). 497 498Matrix Types 499============ 500 501Clang provides an extension for matrix types, which is currently being 502implemented. See :ref:`the draft specification <matrixtypes>` for more details. 503 504For example, the code below uses the matrix types extension to multiply two 4x4 505float matrices and add the result to a third 4x4 matrix. 506 507.. code-block:: c++ 508 509 typedef float m4x4_t __attribute__((matrix_type(4, 4))); 510 511 m4x4_t f(m4x4_t a, m4x4_t b, m4x4_t c) { 512 return a + b * c; 513 } 514 515 516Half-Precision Floating Point 517============================= 518 519Clang supports three half-precision (16-bit) floating point types: ``__fp16``, 520``_Float16`` and ``__bf16``. These types are supported in all language modes. 521 522``__fp16`` is supported on every target, as it is purely a storage format; see below. 523``_Float16`` is currently only supported on the following targets, with further 524targets pending ABI standardization: 525 526* 32-bit ARM 527* 64-bit ARM (AArch64) 528* SPIR 529 530``_Float16`` will be supported on more targets as they define ABIs for it. 531 532``__bf16`` is purely a storage format; it is currently only supported on the following targets: 533* 32-bit ARM 534* 64-bit ARM (AArch64) 535 536The ``__bf16`` type is only available when supported in hardware. 537 538``__fp16`` is a storage and interchange format only. This means that values of 539``__fp16`` are immediately promoted to (at least) ``float`` when used in arithmetic 540operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``. 541The 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>`_). 542Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM 543alternative format. 544 545``_Float16`` is an extended floating-point type. This means that, just like arithmetic on 546``float`` or ``double``, arithmetic on ``_Float16`` operands is formally performed in the 547``_Float16`` type, so that e.g. the result of adding two ``_Float16`` values has type 548``_Float16``. The behavior of ``_Float16`` is specified by ISO/IEC TS 18661-3:2015 549("Floating-point extensions for C"). As with ``__fp16``, Clang uses the ``binary16`` 550format from IEEE 754-2008 for ``_Float16``. 551 552``_Float16`` arithmetic will be performed using native half-precision support 553when available on the target (e.g. on ARMv8.2a); otherwise it will be performed 554at a higher precision (currently always ``float``) and then truncated down to 555``_Float16``. Note that C and C++ allow intermediate floating-point operands 556of an expression to be computed with greater precision than is expressible in 557their type, so Clang may avoid intermediate truncations in certain cases; this may 558lead to results that are inconsistent with native arithmetic. 559 560It is recommended that portable code use ``_Float16`` instead of ``__fp16``, 561as it has been defined by the C standards committee and has behavior that is 562more familiar to most programmers. 563 564Because ``__fp16`` operands are always immediately promoted to ``float``, the 565common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual 566arithmetic conversions is ``float``. 567 568A literal can be given ``_Float16`` type using the suffix ``f16``. For example, 569``3.14f16``. 570 571Because default argument promotion only applies to the standard floating-point 572types, ``_Float16`` values are not promoted to ``double`` when passed as variadic 573or untyped arguments. As a consequence, some caution must be taken when using 574certain library facilities with ``_Float16``; for example, there is no ``printf`` format 575specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to 576``double`` when passed to ``printf``, so the programmer must explicitly cast it to 577``double`` before using it with an ``%f`` or similar specifier. 578 579Messages on ``deprecated`` and ``unavailable`` Attributes 580========================================================= 581 582An optional string message can be added to the ``deprecated`` and 583``unavailable`` attributes. For example: 584 585.. code-block:: c++ 586 587 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!"))); 588 589If the deprecated or unavailable declaration is used, the message will be 590incorporated into the appropriate diagnostic: 591 592.. code-block:: none 593 594 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! 595 [-Wdeprecated-declarations] 596 explode(); 597 ^ 598 599Query for this feature with 600``__has_extension(attribute_deprecated_with_message)`` and 601``__has_extension(attribute_unavailable_with_message)``. 602 603Attributes on Enumerators 604========================= 605 606Clang allows attributes to be written on individual enumerators. This allows 607enumerators to be deprecated, made unavailable, etc. The attribute must appear 608after the enumerator name and before any initializer, like so: 609 610.. code-block:: c++ 611 612 enum OperationMode { 613 OM_Invalid, 614 OM_Normal, 615 OM_Terrified __attribute__((deprecated)), 616 OM_AbortOnError __attribute__((deprecated)) = 4 617 }; 618 619Attributes on the ``enum`` declaration do not apply to individual enumerators. 620 621Query for this feature with ``__has_extension(enumerator_attributes)``. 622 623'User-Specified' System Frameworks 624================================== 625 626Clang provides a mechanism by which frameworks can be built in such a way that 627they will always be treated as being "system frameworks", even if they are not 628present in a system framework directory. This can be useful to system 629framework developers who want to be able to test building other applications 630with development builds of their framework, including the manner in which the 631compiler changes warning behavior for system headers. 632 633Framework developers can opt-in to this mechanism by creating a 634"``.system_framework``" file at the top-level of their framework. That is, the 635framework should have contents like: 636 637.. code-block:: none 638 639 .../TestFramework.framework 640 .../TestFramework.framework/.system_framework 641 .../TestFramework.framework/Headers 642 .../TestFramework.framework/Headers/TestFramework.h 643 ... 644 645Clang will treat the presence of this file as an indicator that the framework 646should be treated as a system framework, regardless of how it was found in the 647framework search path. For consistency, we recommend that such files never be 648included in installed versions of the framework. 649 650Checks for Standard Language Features 651===================================== 652 653The ``__has_feature`` macro can be used to query if certain standard language 654features are enabled. The ``__has_extension`` macro can be used to query if 655language features are available as an extension when compiling for a standard 656which does not provide them. The features which can be tested are listed here. 657 658Since Clang 3.4, the C++ SD-6 feature test macros are also supported. 659These are macros with names of the form ``__cpp_<feature_name>``, and are 660intended to be a portable way to query the supported features of the compiler. 661See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for 662information on the version of SD-6 supported by each Clang release, and the 663macros provided by that revision of the recommendations. 664 665C++98 666----- 667 668The features listed below are part of the C++98 standard. These features are 669enabled by default when compiling C++ code. 670 671C++ exceptions 672^^^^^^^^^^^^^^ 673 674Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been 675enabled. For example, compiling code with ``-fno-exceptions`` disables C++ 676exceptions. 677 678C++ RTTI 679^^^^^^^^ 680 681Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For 682example, compiling code with ``-fno-rtti`` disables the use of RTTI. 683 684C++11 685----- 686 687The features listed below are part of the C++11 standard. As a result, all 688these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option 689when compiling C++ code. 690 691C++11 SFINAE includes access control 692^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 693 694Use ``__has_feature(cxx_access_control_sfinae)`` or 695``__has_extension(cxx_access_control_sfinae)`` to determine whether 696access-control errors (e.g., calling a private constructor) are considered to 697be template argument deduction errors (aka SFINAE errors), per `C++ DR1170 698<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_. 699 700C++11 alias templates 701^^^^^^^^^^^^^^^^^^^^^ 702 703Use ``__has_feature(cxx_alias_templates)`` or 704``__has_extension(cxx_alias_templates)`` to determine if support for C++11's 705alias declarations and alias templates is enabled. 706 707C++11 alignment specifiers 708^^^^^^^^^^^^^^^^^^^^^^^^^^ 709 710Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to 711determine if support for alignment specifiers using ``alignas`` is enabled. 712 713Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to 714determine if support for the ``alignof`` keyword is enabled. 715 716C++11 attributes 717^^^^^^^^^^^^^^^^ 718 719Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to 720determine if support for attribute parsing with C++11's square bracket notation 721is enabled. 722 723C++11 generalized constant expressions 724^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 725 726Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized 727constant expressions (e.g., ``constexpr``) is enabled. 728 729C++11 ``decltype()`` 730^^^^^^^^^^^^^^^^^^^^ 731 732Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to 733determine if support for the ``decltype()`` specifier is enabled. C++11's 734``decltype`` does not require type-completeness of a function call expression. 735Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or 736``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if 737support for this feature is enabled. 738 739C++11 default template arguments in function templates 740^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 741 742Use ``__has_feature(cxx_default_function_template_args)`` or 743``__has_extension(cxx_default_function_template_args)`` to determine if support 744for default template arguments in function templates is enabled. 745 746C++11 ``default``\ ed functions 747^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 748 749Use ``__has_feature(cxx_defaulted_functions)`` or 750``__has_extension(cxx_defaulted_functions)`` to determine if support for 751defaulted function definitions (with ``= default``) is enabled. 752 753C++11 delegating constructors 754^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 755 756Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for 757delegating constructors is enabled. 758 759C++11 ``deleted`` functions 760^^^^^^^^^^^^^^^^^^^^^^^^^^^ 761 762Use ``__has_feature(cxx_deleted_functions)`` or 763``__has_extension(cxx_deleted_functions)`` to determine if support for deleted 764function definitions (with ``= delete``) is enabled. 765 766C++11 explicit conversion functions 767^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 768 769Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for 770``explicit`` conversion functions is enabled. 771 772C++11 generalized initializers 773^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 774 775Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for 776generalized initializers (using braced lists and ``std::initializer_list``) is 777enabled. 778 779C++11 implicit move constructors/assignment operators 780^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 781 782Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly 783generate move constructors and move assignment operators where needed. 784 785C++11 inheriting constructors 786^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 787 788Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for 789inheriting constructors is enabled. 790 791C++11 inline namespaces 792^^^^^^^^^^^^^^^^^^^^^^^ 793 794Use ``__has_feature(cxx_inline_namespaces)`` or 795``__has_extension(cxx_inline_namespaces)`` to determine if support for inline 796namespaces is enabled. 797 798C++11 lambdas 799^^^^^^^^^^^^^ 800 801Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to 802determine if support for lambdas is enabled. 803 804C++11 local and unnamed types as template arguments 805^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 806 807Use ``__has_feature(cxx_local_type_template_args)`` or 808``__has_extension(cxx_local_type_template_args)`` to determine if support for 809local and unnamed types as template arguments is enabled. 810 811C++11 noexcept 812^^^^^^^^^^^^^^ 813 814Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to 815determine if support for noexcept exception specifications is enabled. 816 817C++11 in-class non-static data member initialization 818^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 819 820Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class 821initialization of non-static data members is enabled. 822 823C++11 ``nullptr`` 824^^^^^^^^^^^^^^^^^ 825 826Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to 827determine if support for ``nullptr`` is enabled. 828 829C++11 ``override control`` 830^^^^^^^^^^^^^^^^^^^^^^^^^^ 831 832Use ``__has_feature(cxx_override_control)`` or 833``__has_extension(cxx_override_control)`` to determine if support for the 834override control keywords is enabled. 835 836C++11 reference-qualified functions 837^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 838 839Use ``__has_feature(cxx_reference_qualified_functions)`` or 840``__has_extension(cxx_reference_qualified_functions)`` to determine if support 841for reference-qualified functions (e.g., member functions with ``&`` or ``&&`` 842applied to ``*this``) is enabled. 843 844C++11 range-based ``for`` loop 845^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 846 847Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to 848determine if support for the range-based for loop is enabled. 849 850C++11 raw string literals 851^^^^^^^^^^^^^^^^^^^^^^^^^ 852 853Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw 854string literals (e.g., ``R"x(foo\bar)x"``) is enabled. 855 856C++11 rvalue references 857^^^^^^^^^^^^^^^^^^^^^^^ 858 859Use ``__has_feature(cxx_rvalue_references)`` or 860``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue 861references is enabled. 862 863C++11 ``static_assert()`` 864^^^^^^^^^^^^^^^^^^^^^^^^^ 865 866Use ``__has_feature(cxx_static_assert)`` or 867``__has_extension(cxx_static_assert)`` to determine if support for compile-time 868assertions using ``static_assert`` is enabled. 869 870C++11 ``thread_local`` 871^^^^^^^^^^^^^^^^^^^^^^ 872 873Use ``__has_feature(cxx_thread_local)`` to determine if support for 874``thread_local`` variables is enabled. 875 876C++11 type inference 877^^^^^^^^^^^^^^^^^^^^ 878 879Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to 880determine C++11 type inference is supported using the ``auto`` specifier. If 881this is disabled, ``auto`` will instead be a storage class specifier, as in C 882or C++98. 883 884C++11 strongly typed enumerations 885^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 886 887Use ``__has_feature(cxx_strong_enums)`` or 888``__has_extension(cxx_strong_enums)`` to determine if support for strongly 889typed, scoped enumerations is enabled. 890 891C++11 trailing return type 892^^^^^^^^^^^^^^^^^^^^^^^^^^ 893 894Use ``__has_feature(cxx_trailing_return)`` or 895``__has_extension(cxx_trailing_return)`` to determine if support for the 896alternate function declaration syntax with trailing return type is enabled. 897 898C++11 Unicode string literals 899^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 900 901Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode 902string literals is enabled. 903 904C++11 unrestricted unions 905^^^^^^^^^^^^^^^^^^^^^^^^^ 906 907Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for 908unrestricted unions is enabled. 909 910C++11 user-defined literals 911^^^^^^^^^^^^^^^^^^^^^^^^^^^ 912 913Use ``__has_feature(cxx_user_literals)`` to determine if support for 914user-defined literals is enabled. 915 916C++11 variadic templates 917^^^^^^^^^^^^^^^^^^^^^^^^ 918 919Use ``__has_feature(cxx_variadic_templates)`` or 920``__has_extension(cxx_variadic_templates)`` to determine if support for 921variadic templates is enabled. 922 923C++14 924----- 925 926The features listed below are part of the C++14 standard. As a result, all 927these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option 928when compiling C++ code. 929 930C++14 binary literals 931^^^^^^^^^^^^^^^^^^^^^ 932 933Use ``__has_feature(cxx_binary_literals)`` or 934``__has_extension(cxx_binary_literals)`` to determine whether 935binary literals (for instance, ``0b10010``) are recognized. Clang supports this 936feature as an extension in all language modes. 937 938C++14 contextual conversions 939^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 940 941Use ``__has_feature(cxx_contextual_conversions)`` or 942``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules 943are used when performing an implicit conversion for an array bound in a 944*new-expression*, the operand of a *delete-expression*, an integral constant 945expression, or a condition in a ``switch`` statement. 946 947C++14 decltype(auto) 948^^^^^^^^^^^^^^^^^^^^ 949 950Use ``__has_feature(cxx_decltype_auto)`` or 951``__has_extension(cxx_decltype_auto)`` to determine if support 952for the ``decltype(auto)`` placeholder type is enabled. 953 954C++14 default initializers for aggregates 955^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 956 957Use ``__has_feature(cxx_aggregate_nsdmi)`` or 958``__has_extension(cxx_aggregate_nsdmi)`` to determine if support 959for default initializers in aggregate members is enabled. 960 961C++14 digit separators 962^^^^^^^^^^^^^^^^^^^^^^ 963 964Use ``__cpp_digit_separators`` to determine if support for digit separators 965using single quotes (for instance, ``10'000``) is enabled. At this time, there 966is no corresponding ``__has_feature`` name 967 968C++14 generalized lambda capture 969^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 970 971Use ``__has_feature(cxx_init_captures)`` or 972``__has_extension(cxx_init_captures)`` to determine if support for 973lambda captures with explicit initializers is enabled 974(for instance, ``[n(0)] { return ++n; }``). 975 976C++14 generic lambdas 977^^^^^^^^^^^^^^^^^^^^^ 978 979Use ``__has_feature(cxx_generic_lambdas)`` or 980``__has_extension(cxx_generic_lambdas)`` to determine if support for generic 981(polymorphic) lambdas is enabled 982(for instance, ``[] (auto x) { return x + 1; }``). 983 984C++14 relaxed constexpr 985^^^^^^^^^^^^^^^^^^^^^^^ 986 987Use ``__has_feature(cxx_relaxed_constexpr)`` or 988``__has_extension(cxx_relaxed_constexpr)`` to determine if variable 989declarations, local variable modification, and control flow constructs 990are permitted in ``constexpr`` functions. 991 992C++14 return type deduction 993^^^^^^^^^^^^^^^^^^^^^^^^^^^ 994 995Use ``__has_feature(cxx_return_type_deduction)`` or 996``__has_extension(cxx_return_type_deduction)`` to determine if support 997for return type deduction for functions (using ``auto`` as a return type) 998is enabled. 999 1000C++14 runtime-sized arrays 1001^^^^^^^^^^^^^^^^^^^^^^^^^^ 1002 1003Use ``__has_feature(cxx_runtime_array)`` or 1004``__has_extension(cxx_runtime_array)`` to determine if support 1005for arrays of runtime bound (a restricted form of variable-length arrays) 1006is enabled. 1007Clang's implementation of this feature is incomplete. 1008 1009C++14 variable templates 1010^^^^^^^^^^^^^^^^^^^^^^^^ 1011 1012Use ``__has_feature(cxx_variable_templates)`` or 1013``__has_extension(cxx_variable_templates)`` to determine if support for 1014templated variable declarations is enabled. 1015 1016C11 1017--- 1018 1019The features listed below are part of the C11 standard. As a result, all these 1020features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when 1021compiling C code. Additionally, because these features are all 1022backward-compatible, they are available as extensions in all language modes. 1023 1024C11 alignment specifiers 1025^^^^^^^^^^^^^^^^^^^^^^^^ 1026 1027Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine 1028if support for alignment specifiers using ``_Alignas`` is enabled. 1029 1030Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine 1031if support for the ``_Alignof`` keyword is enabled. 1032 1033C11 atomic operations 1034^^^^^^^^^^^^^^^^^^^^^ 1035 1036Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine 1037if support for atomic types using ``_Atomic`` is enabled. Clang also provides 1038:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement 1039the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use 1040``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header 1041is available. 1042 1043Clang will use the system's ``<stdatomic.h>`` header when one is available, and 1044will otherwise use its own. When using its own, implementations of the atomic 1045operations are provided as macros. In the cases where C11 also requires a real 1046function, this header provides only the declaration of that function (along 1047with a shadowing macro implementation), and you must link to a library which 1048provides a definition of the function if you use it instead of the macro. 1049 1050C11 generic selections 1051^^^^^^^^^^^^^^^^^^^^^^ 1052 1053Use ``__has_feature(c_generic_selections)`` or 1054``__has_extension(c_generic_selections)`` to determine if support for generic 1055selections is enabled. 1056 1057As an extension, the C11 generic selection expression is available in all 1058languages supported by Clang. The syntax is the same as that given in the C11 1059standard. 1060 1061In C, type compatibility is decided according to the rules given in the 1062appropriate standard, but in C++, which lacks the type compatibility rules used 1063in C, types are considered compatible only if they are equivalent. 1064 1065C11 ``_Static_assert()`` 1066^^^^^^^^^^^^^^^^^^^^^^^^ 1067 1068Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)`` 1069to determine if support for compile-time assertions using ``_Static_assert`` is 1070enabled. 1071 1072C11 ``_Thread_local`` 1073^^^^^^^^^^^^^^^^^^^^^ 1074 1075Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)`` 1076to determine if support for ``_Thread_local`` variables is enabled. 1077 1078Modules 1079------- 1080 1081Use ``__has_feature(modules)`` to determine if Modules have been enabled. 1082For example, compiling code with ``-fmodules`` enables the use of Modules. 1083 1084More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_. 1085 1086Type Trait Primitives 1087===================== 1088 1089Type trait primitives are special builtin constant expressions that can be used 1090by the standard C++ library to facilitate or simplify the implementation of 1091user-facing type traits in the <type_traits> header. 1092 1093They are not intended to be used directly by user code because they are 1094implementation-defined and subject to change -- as such they're tied closely to 1095the supported set of system headers, currently: 1096 1097* LLVM's own libc++ 1098* GNU libstdc++ 1099* The Microsoft standard C++ library 1100 1101Clang supports the `GNU C++ type traits 1102<https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the 1103`Microsoft Visual C++ type traits 1104<https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_, 1105as well as nearly all of the 1106`Embarcadero C++ type traits 1107<http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_. 1108 1109The following type trait primitives are supported by Clang. Those traits marked 1110(C++) provide implementations for type traits specified by the C++ standard; 1111``__X(...)`` has the same semantics and constraints as the corresponding 1112``std::X_t<...>`` or ``std::X_v<...>`` type trait. 1113 1114* ``__array_rank(type)`` (Embarcadero): 1115 Returns the number of levels of array in the type ``type``: 1116 ``0`` if ``type`` is not an array type, and 1117 ``__array_rank(element) + 1`` if ``type`` is an array of ``element``. 1118* ``__array_extent(type, dim)`` (Embarcadero): 1119 The ``dim``'th array bound in the type ``type``, or ``0`` if 1120 ``dim >= __array_rank(type)``. 1121* ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero): 1122 Deprecated, use ``__is_nothrow_assignable`` instead. 1123* ``__has_nothrow_move_assign`` (GNU, Microsoft): 1124 Deprecated, use ``__is_nothrow_assignable`` instead. 1125* ``__has_nothrow_copy`` (GNU, Microsoft): 1126 Deprecated, use ``__is_nothrow_constructible`` instead. 1127* ``__has_nothrow_constructor`` (GNU, Microsoft): 1128 Deprecated, use ``__is_nothrow_constructible`` instead. 1129* ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero): 1130 Deprecated, use ``__is_trivially_assignable`` instead. 1131* ``__has_trivial_move_assign`` (GNU, Microsoft): 1132 Deprecated, use ``__is_trivially_assignable`` instead. 1133* ``__has_trivial_copy`` (GNU, Microsoft): 1134 Deprecated, use ``__is_trivially_constructible`` instead. 1135* ``__has_trivial_constructor`` (GNU, Microsoft): 1136 Deprecated, use ``__is_trivially_constructible`` instead. 1137* ``__has_trivial_move_constructor`` (GNU, Microsoft): 1138 Deprecated, use ``__is_trivially_constructible`` instead. 1139* ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero): 1140 Deprecated, use ``__is_trivially_destructible`` instead. 1141* ``__has_unique_object_representations`` (C++, GNU) 1142* ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero) 1143* ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero) 1144* ``__is_aggregate`` (C++, GNU, Microsoft) 1145* ``__is_arithmetic`` (C++, Embarcadero) 1146* ``__is_array`` (C++, Embarcadero) 1147* ``__is_assignable`` (C++, MSVC 2015) 1148* ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero) 1149* ``__is_class`` (C++, GNU, Microsoft, Embarcadero) 1150* ``__is_complete_type(type)`` (Embarcadero): 1151 Return ``true`` if ``type`` is a complete type. 1152 Warning: this trait is dangerous because it can return different values at 1153 different points in the same program. 1154* ``__is_compound`` (C++, Embarcadero) 1155* ``__is_const`` (C++, Embarcadero) 1156* ``__is_constructible`` (C++, MSVC 2013) 1157* ``__is_convertible`` (C++, Embarcadero) 1158* ``__is_convertible_to`` (Microsoft): 1159 Synonym for ``__is_convertible``. 1160* ``__is_destructible`` (C++, MSVC 2013): 1161 Only available in ``-fms-extensions`` mode. 1162* ``__is_empty`` (C++, GNU, Microsoft, Embarcadero) 1163* ``__is_enum`` (C++, GNU, Microsoft, Embarcadero) 1164* ``__is_final`` (C++, GNU, Microsoft) 1165* ``__is_floating_point`` (C++, Embarcadero) 1166* ``__is_function`` (C++, Embarcadero) 1167* ``__is_fundamental`` (C++, Embarcadero) 1168* ``__is_integral`` (C++, Embarcadero) 1169* ``__is_interface_class`` (Microsoft): 1170 Returns ``false``, even for types defined with ``__interface``. 1171* ``__is_literal`` (Clang): 1172 Synonym for ``__is_literal_type``. 1173* ``__is_literal_type`` (C++, GNU, Microsoft): 1174 Note, the corresponding standard trait was deprecated in C++17 1175 and removed in C++20. 1176* ``__is_lvalue_reference`` (C++, Embarcadero) 1177* ``__is_member_object_pointer`` (C++, Embarcadero) 1178* ``__is_member_function_pointer`` (C++, Embarcadero) 1179* ``__is_member_pointer`` (C++, Embarcadero) 1180* ``__is_nothrow_assignable`` (C++, MSVC 2013) 1181* ``__is_nothrow_constructible`` (C++, MSVC 2013) 1182* ``__is_nothrow_destructible`` (C++, MSVC 2013) 1183 Only available in ``-fms-extensions`` mode. 1184* ``__is_object`` (C++, Embarcadero) 1185* ``__is_pod`` (C++, GNU, Microsoft, Embarcadero): 1186 Note, the corresponding standard trait was deprecated in C++20. 1187* ``__is_pointer`` (C++, Embarcadero) 1188* ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero) 1189* ``__is_reference`` (C++, Embarcadero) 1190* ``__is_rvalue_reference`` (C++, Embarcadero) 1191* ``__is_same`` (C++, Embarcadero) 1192* ``__is_same_as`` (GCC): Synonym for ``__is_same``. 1193* ``__is_scalar`` (C++, Embarcadero) 1194* ``__is_sealed`` (Microsoft): 1195 Synonym for ``__is_final``. 1196* ``__is_signed`` (C++, Embarcadero): 1197 Returns false for enumeration types, and returns true for floating-point types. Note, before Clang 10, returned true for enumeration types if the underlying type was signed, and returned false for floating-point types. 1198* ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero) 1199* ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero) 1200* ``__is_trivially_assignable`` (C++, GNU, Microsoft) 1201* ``__is_trivially_constructible`` (C++, GNU, Microsoft) 1202* ``__is_trivially_copyable`` (C++, GNU, Microsoft) 1203* ``__is_trivially_destructible`` (C++, MSVC 2013) 1204* ``__is_union`` (C++, GNU, Microsoft, Embarcadero) 1205* ``__is_unsigned`` (C++, Embarcadero) 1206 Note that this currently returns true for enumeration types if the underlying 1207 type is unsigned, in violation of the requirements for ``std::is_unsigned``. 1208 This behavior is likely to change in a future version of Clang. 1209* ``__is_void`` (C++, Embarcadero) 1210* ``__is_volatile`` (C++, Embarcadero) 1211* ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a 1212 reference of type ``T`` bound to an expression of type ``U`` would bind to a 1213 materialized temporary object. If ``T`` is not a reference type the result 1214 is false. Note this trait will also return false when the initialization of 1215 ``T`` from ``U`` is ill-formed. 1216* ``__underlying_type`` (C++, GNU, Microsoft) 1217 1218In addition, the following expression traits are supported: 1219 1220* ``__is_lvalue_expr(e)`` (Embarcadero): 1221 Returns true if ``e`` is an lvalue expression. 1222 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead. 1223* ``__is_rvalue_expr(e)`` (Embarcadero): 1224 Returns true if ``e`` is a prvalue expression. 1225 Deprecated, use ``!__is_reference(decltype((e)))`` instead. 1226 1227There are multiple ways to detect support for a type trait ``__X`` in the 1228compiler, depending on the oldest version of Clang you wish to support. 1229 1230* From Clang 10 onwards, ``__has_builtin(__X)`` can be used. 1231* From Clang 6 onwards, ``!__is_identifier(__X)`` can be used. 1232* From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports 1233 the following traits: 1234 1235 * ``__has_nothrow_assign`` 1236 * ``__has_nothrow_copy`` 1237 * ``__has_nothrow_constructor`` 1238 * ``__has_trivial_assign`` 1239 * ``__has_trivial_copy`` 1240 * ``__has_trivial_constructor`` 1241 * ``__has_trivial_destructor`` 1242 * ``__has_virtual_destructor`` 1243 * ``__is_abstract`` 1244 * ``__is_base_of`` 1245 * ``__is_class`` 1246 * ``__is_constructible`` 1247 * ``__is_convertible_to`` 1248 * ``__is_empty`` 1249 * ``__is_enum`` 1250 * ``__is_final`` 1251 * ``__is_literal`` 1252 * ``__is_standard_layout`` 1253 * ``__is_pod`` 1254 * ``__is_polymorphic`` 1255 * ``__is_sealed`` 1256 * ``__is_trivial`` 1257 * ``__is_trivially_assignable`` 1258 * ``__is_trivially_constructible`` 1259 * ``__is_trivially_copyable`` 1260 * ``__is_union`` 1261 * ``__underlying_type`` 1262 1263A simplistic usage example as might be seen in standard C++ headers follows: 1264 1265.. code-block:: c++ 1266 1267 #if __has_builtin(__is_convertible_to) 1268 template<typename From, typename To> 1269 struct is_convertible_to { 1270 static const bool value = __is_convertible_to(From, To); 1271 }; 1272 #else 1273 // Emulate type trait for compatibility with other compilers. 1274 #endif 1275 1276Blocks 1277====== 1278 1279The syntax and high level language feature description is in 1280:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for 1281the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`. 1282 1283Query for this feature with ``__has_extension(blocks)``. 1284 1285ASM Goto with Output Constraints 1286================================ 1287 1288In addition to the functionality provided by `GCC's extended 1289assembly <https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html>`_, clang 1290supports output constraints with the `goto` form. 1291 1292The goto form of GCC's extended assembly allows the programmer to branch to a C 1293label from within an inline assembly block. Clang extends this behavior by 1294allowing the programmer to use output constraints: 1295 1296.. code-block:: c++ 1297 1298 int foo(int x) { 1299 int y; 1300 asm goto("# %0 %1 %l2" : "=r"(y) : "r"(x) : : err); 1301 return y; 1302 err: 1303 return -1; 1304 } 1305 1306It's important to note that outputs are valid only on the "fallthrough" branch. 1307Using outputs on an indirect branch may result in undefined behavior. For 1308example, in the function above, use of the value assigned to `y` in the `err` 1309block is undefined behavior. 1310 1311Query for this feature with ``__has_extension(gnu_asm_goto_with_outputs)``. 1312 1313Objective-C Features 1314==================== 1315 1316Related result types 1317-------------------- 1318 1319According to Cocoa conventions, Objective-C methods with certain names 1320("``init``", "``alloc``", etc.) always return objects that are an instance of 1321the receiving class's type. Such methods are said to have a "related result 1322type", meaning that a message send to one of these methods will have the same 1323static type as an instance of the receiver class. For example, given the 1324following classes: 1325 1326.. code-block:: objc 1327 1328 @interface NSObject 1329 + (id)alloc; 1330 - (id)init; 1331 @end 1332 1333 @interface NSArray : NSObject 1334 @end 1335 1336and this common initialization pattern 1337 1338.. code-block:: objc 1339 1340 NSArray *array = [[NSArray alloc] init]; 1341 1342the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because 1343``alloc`` implicitly has a related result type. Similarly, the type of the 1344expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a 1345related result type and its receiver is known to have the type ``NSArray *``. 1346If neither ``alloc`` nor ``init`` had a related result type, the expressions 1347would have had type ``id``, as declared in the method signature. 1348 1349A method with a related result type can be declared by using the type 1350``instancetype`` as its result type. ``instancetype`` is a contextual keyword 1351that is only permitted in the result type of an Objective-C method, e.g. 1352 1353.. code-block:: objc 1354 1355 @interface A 1356 + (instancetype)constructAnA; 1357 @end 1358 1359The related result type can also be inferred for some methods. To determine 1360whether a method has an inferred related result type, the first word in the 1361camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered, 1362and the method will have a related result type if its return type is compatible 1363with the type of its class and if: 1364 1365* the first word is "``alloc``" or "``new``", and the method is a class method, 1366 or 1367 1368* the first word is "``autorelease``", "``init``", "``retain``", or "``self``", 1369 and the method is an instance method. 1370 1371If a method with a related result type is overridden by a subclass method, the 1372subclass method must also return a type that is compatible with the subclass 1373type. For example: 1374 1375.. code-block:: objc 1376 1377 @interface NSString : NSObject 1378 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 1379 @end 1380 1381Related result types only affect the type of a message send or property access 1382via the given method. In all other respects, a method with a related result 1383type is treated the same way as method that returns ``id``. 1384 1385Use ``__has_feature(objc_instancetype)`` to determine whether the 1386``instancetype`` contextual keyword is available. 1387 1388Automatic reference counting 1389---------------------------- 1390 1391Clang provides support for :doc:`automated reference counting 1392<AutomaticReferenceCounting>` in Objective-C, which eliminates the need 1393for manual ``retain``/``release``/``autorelease`` message sends. There are three 1394feature macros associated with automatic reference counting: 1395``__has_feature(objc_arc)`` indicates the availability of automated reference 1396counting in general, while ``__has_feature(objc_arc_weak)`` indicates that 1397automated reference counting also includes support for ``__weak`` pointers to 1398Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs 1399are allowed to have fields that are pointers to Objective-C objects managed by 1400automatic reference counting. 1401 1402.. _objc-weak: 1403 1404Weak references 1405--------------- 1406 1407Clang supports ARC-style weak and unsafe references in Objective-C even 1408outside of ARC mode. Weak references must be explicitly enabled with 1409the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))`` 1410to test whether they are enabled. Unsafe references are enabled 1411unconditionally. ARC-style weak and unsafe references cannot be used 1412when Objective-C garbage collection is enabled. 1413 1414Except as noted below, the language rules for the ``__weak`` and 1415``__unsafe_unretained`` qualifiers (and the ``weak`` and 1416``unsafe_unretained`` property attributes) are just as laid out 1417in the :doc:`ARC specification <AutomaticReferenceCounting>`. 1418In particular, note that some classes do not support forming weak 1419references to their instances, and note that special care must be 1420taken when storing weak references in memory where initialization 1421and deinitialization are outside the responsibility of the compiler 1422(such as in ``malloc``-ed memory). 1423 1424Loading from a ``__weak`` variable always implicitly retains the 1425loaded value. In non-ARC modes, this retain is normally balanced 1426by an implicit autorelease. This autorelease can be suppressed 1427by performing the load in the receiver position of a ``-retain`` 1428message send (e.g. ``[weakReference retain]``); note that this performs 1429only a single retain (the retain done when primitively loading from 1430the weak reference). 1431 1432For the most part, ``__unsafe_unretained`` in non-ARC modes is just the 1433default behavior of variables and therefore is not needed. However, 1434it does have an effect on the semantics of block captures: normally, 1435copying a block which captures an Objective-C object or block pointer 1436causes the captured pointer to be retained or copied, respectively, 1437but that behavior is suppressed when the captured variable is qualified 1438with ``__unsafe_unretained``. 1439 1440Note that the ``__weak`` qualifier formerly meant the GC qualifier in 1441all non-ARC modes and was silently ignored outside of GC modes. It now 1442means the ARC-style qualifier in all non-GC modes and is no longer 1443allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``. 1444It is expected that ``-fobjc-weak`` will eventually be enabled by default 1445in all non-GC Objective-C modes. 1446 1447.. _objc-fixed-enum: 1448 1449Enumerations with a fixed underlying type 1450----------------------------------------- 1451 1452Clang provides support for C++11 enumerations with a fixed underlying type 1453within Objective-C. For example, one can write an enumeration type as: 1454 1455.. code-block:: c++ 1456 1457 typedef enum : unsigned char { Red, Green, Blue } Color; 1458 1459This specifies that the underlying type, which is used to store the enumeration 1460value, is ``unsigned char``. 1461 1462Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed 1463underlying types is available in Objective-C. 1464 1465Interoperability with C++11 lambdas 1466----------------------------------- 1467 1468Clang provides interoperability between C++11 lambdas and blocks-based APIs, by 1469permitting a lambda to be implicitly converted to a block pointer with the 1470corresponding signature. For example, consider an API such as ``NSArray``'s 1471array-sorting method: 1472 1473.. code-block:: objc 1474 1475 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 1476 1477``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult 1478(^)(id, id)``, and parameters of this type are generally provided with block 1479literals as arguments. However, one can also use a C++11 lambda so long as it 1480provides the same signature (in this case, accepting two parameters of type 1481``id`` and returning an ``NSComparisonResult``): 1482 1483.. code-block:: objc 1484 1485 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11", 1486 @"String 02"]; 1487 const NSStringCompareOptions comparisonOptions 1488 = NSCaseInsensitiveSearch | NSNumericSearch | 1489 NSWidthInsensitiveSearch | NSForcedOrderingSearch; 1490 NSLocale *currentLocale = [NSLocale currentLocale]; 1491 NSArray *sorted 1492 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult { 1493 NSRange string1Range = NSMakeRange(0, [s1 length]); 1494 return [s1 compare:s2 options:comparisonOptions 1495 range:string1Range locale:currentLocale]; 1496 }]; 1497 NSLog(@"sorted: %@", sorted); 1498 1499This code relies on an implicit conversion from the type of the lambda 1500expression (an unnamed, local class type called the *closure type*) to the 1501corresponding block pointer type. The conversion itself is expressed by a 1502conversion operator in that closure type that produces a block pointer with the 1503same signature as the lambda itself, e.g., 1504 1505.. code-block:: objc 1506 1507 operator NSComparisonResult (^)(id, id)() const; 1508 1509This conversion function returns a new block that simply forwards the two 1510parameters to the lambda object (which it captures by copy), then returns the 1511result. The returned block is first copied (with ``Block_copy``) and then 1512autoreleased. As an optimization, if a lambda expression is immediately 1513converted to a block pointer (as in the first example, above), then the block 1514is not copied and autoreleased: rather, it is given the same lifetime as a 1515block literal written at that point in the program, which avoids the overhead 1516of copying a block to the heap in the common case. 1517 1518The conversion from a lambda to a block pointer is only available in 1519Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory 1520management (autorelease). 1521 1522Object Literals and Subscripting 1523-------------------------------- 1524 1525Clang provides support for :doc:`Object Literals and Subscripting 1526<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C 1527programming patterns, makes programs more concise, and improves the safety of 1528container creation. There are several feature macros associated with object 1529literals and subscripting: ``__has_feature(objc_array_literals)`` tests the 1530availability of array literals; ``__has_feature(objc_dictionary_literals)`` 1531tests the availability of dictionary literals; 1532``__has_feature(objc_subscripting)`` tests the availability of object 1533subscripting. 1534 1535Objective-C Autosynthesis of Properties 1536--------------------------------------- 1537 1538Clang provides support for autosynthesis of declared properties. Using this 1539feature, clang provides default synthesis of those properties not declared 1540@dynamic and not having user provided backing getter and setter methods. 1541``__has_feature(objc_default_synthesize_properties)`` checks for availability 1542of this feature in version of clang being used. 1543 1544.. _langext-objc-retain-release: 1545 1546Objective-C retaining behavior attributes 1547----------------------------------------- 1548 1549In Objective-C, functions and methods are generally assumed to follow the 1550`Cocoa Memory Management 1551<https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_ 1552conventions for ownership of object arguments and 1553return values. However, there are exceptions, and so Clang provides attributes 1554to allow these exceptions to be documented. This are used by ARC and the 1555`static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be 1556better described using the ``objc_method_family`` attribute instead. 1557 1558**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``, 1559``ns_returns_autoreleased``, ``cf_returns_retained``, and 1560``cf_returns_not_retained`` attributes can be placed on methods and functions 1561that return Objective-C or CoreFoundation objects. They are commonly placed at 1562the end of a function prototype or method declaration: 1563 1564.. code-block:: objc 1565 1566 id foo() __attribute__((ns_returns_retained)); 1567 1568 - (NSString *)bar:(int)x __attribute__((ns_returns_retained)); 1569 1570The ``*_returns_retained`` attributes specify that the returned object has a +1 1571retain count. The ``*_returns_not_retained`` attributes specify that the return 1572object has a +0 retain count, even if the normal convention for its selector 1573would be +1. ``ns_returns_autoreleased`` specifies that the returned object is 1574+0, but is guaranteed to live at least as long as the next flush of an 1575autorelease pool. 1576 1577**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on 1578an parameter declaration; they specify that the argument is expected to have a 1579+1 retain count, which will be balanced in some way by the function or method. 1580The ``ns_consumes_self`` attribute can only be placed on an Objective-C 1581method; it specifies that the method expects its ``self`` parameter to have a 1582+1 retain count, which it will balance in some way. 1583 1584.. code-block:: objc 1585 1586 void foo(__attribute__((ns_consumed)) NSString *string); 1587 1588 - (void) bar __attribute__((ns_consumes_self)); 1589 - (void) baz:(id) __attribute__((ns_consumed)) x; 1590 1591Further examples of these attributes are available in the static analyzer's `list of annotations for analysis 1592<https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_. 1593 1594Query for these features with ``__has_attribute(ns_consumed)``, 1595``__has_attribute(ns_returns_retained)``, etc. 1596 1597Objective-C @available 1598---------------------- 1599 1600It is possible to use the newest SDK but still build a program that can run on 1601older versions of macOS and iOS by passing ``-mmacosx-version-min=`` / 1602``-miphoneos-version-min=``. 1603 1604Before LLVM 5.0, when calling a function that exists only in the OS that's 1605newer than the target OS (as determined by the minimum deployment version), 1606programmers had to carefully check if the function exists at runtime, using 1607null checks for weakly-linked C functions, ``+class`` for Objective-C classes, 1608and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for 1609Objective-C methods. If such a check was missed, the program would compile 1610fine, run fine on newer systems, but crash on older systems. 1611 1612As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes 1613<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together 1614with the new ``@available()`` keyword to assist with this issue. 1615When a method that's introduced in the OS newer than the target OS is called, a 1616-Wunguarded-availability warning is emitted if that call is not guarded: 1617 1618.. code-block:: objc 1619 1620 void my_fun(NSSomeClass* var) { 1621 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is 1622 // built with -mmacosx-version-min=10.11, then this unconditional call 1623 // will emit a -Wunguarded-availability warning: 1624 [var fancyNewMethod]; 1625 } 1626 1627To fix the warning and to avoid the crash on macOS 10.11, wrap it in 1628``if(@available())``: 1629 1630.. code-block:: objc 1631 1632 void my_fun(NSSomeClass* var) { 1633 if (@available(macOS 10.12, *)) { 1634 [var fancyNewMethod]; 1635 } else { 1636 // Put fallback behavior for old macOS versions (and for non-mac 1637 // platforms) here. 1638 } 1639 } 1640 1641The ``*`` is required and means that platforms not explicitly listed will take 1642the true branch, and the compiler will emit ``-Wunguarded-availability`` 1643warnings for unlisted platforms based on those platform's deployment target. 1644More than one platform can be listed in ``@available()``: 1645 1646.. code-block:: objc 1647 1648 void my_fun(NSSomeClass* var) { 1649 if (@available(macOS 10.12, iOS 10, *)) { 1650 [var fancyNewMethod]; 1651 } 1652 } 1653 1654If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called 1655on 10.12, then add an `availability attribute 1656<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it, 1657which will also suppress the warning and require that calls to my_fun() are 1658checked: 1659 1660.. code-block:: objc 1661 1662 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) { 1663 [var fancyNewMethod]; // Now ok. 1664 } 1665 1666``@available()`` is only available in Objective-C code. To use the feature 1667in C and C++ code, use the ``__builtin_available()`` spelling instead. 1668 1669If existing code uses null checks or ``-respondsToSelector:``, it should 1670be changed to use ``@available()`` (or ``__builtin_available``) instead. 1671 1672``-Wunguarded-availability`` is disabled by default, but 1673``-Wunguarded-availability-new``, which only emits this warning for APIs 1674that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and 1675tvOS >= 11, is enabled by default. 1676 1677.. _langext-overloading: 1678 1679Objective-C++ ABI: protocol-qualifier mangling of parameters 1680------------------------------------------------------------ 1681 1682Starting with LLVM 3.4, Clang produces a new mangling for parameters whose 1683type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such 1684parameters to be differentiated from those with the regular unqualified ``id`` 1685type. 1686 1687This was a non-backward compatible mangling change to the ABI. This change 1688allows proper overloading, and also prevents mangling conflicts with template 1689parameters of protocol-qualified type. 1690 1691Query the presence of this new mangling with 1692``__has_feature(objc_protocol_qualifier_mangling)``. 1693 1694Initializer lists for complex numbers in C 1695========================================== 1696 1697clang supports an extension which allows the following in C: 1698 1699.. code-block:: c++ 1700 1701 #include <math.h> 1702 #include <complex.h> 1703 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 1704 1705This construct is useful because there is no way to separately initialize the 1706real and imaginary parts of a complex variable in standard C, given that clang 1707does not support ``_Imaginary``. (Clang also supports the ``__real__`` and 1708``__imag__`` extensions from gcc, which help in some cases, but are not usable 1709in static initializers.) 1710 1711Note that this extension does not allow eliding the braces; the meaning of the 1712following two lines is different: 1713 1714.. code-block:: c++ 1715 1716 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 1717 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 1718 1719This extension also works in C++ mode, as far as that goes, but does not apply 1720to the C++ ``std::complex``. (In C++11, list initialization allows the same 1721syntax to be used with ``std::complex`` with the same meaning.) 1722 1723Builtin Functions 1724================= 1725 1726Clang supports a number of builtin library functions with the same syntax as 1727GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``, 1728``__builtin_choose_expr``, ``__builtin_types_compatible_p``, 1729``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to 1730the GCC builtins, Clang supports a number of builtins that GCC does not, which 1731are listed here. 1732 1733Please note that Clang does not and will not support all of the GCC builtins 1734for vector operations. Instead of using builtins, you should use the functions 1735defined in target-specific header files like ``<xmmintrin.h>``, which define 1736portable wrappers for these. Many of the Clang versions of these functions are 1737implemented directly in terms of :ref:`extended vector support 1738<langext-vectors>` instead of builtins, in order to reduce the number of 1739builtins that we need to implement. 1740 1741``__builtin_assume`` 1742------------------------------ 1743 1744``__builtin_assume`` is used to provide the optimizer with a boolean 1745invariant that is defined to be true. 1746 1747**Syntax**: 1748 1749.. code-block:: c++ 1750 1751 __builtin_assume(bool) 1752 1753**Example of Use**: 1754 1755.. code-block:: c++ 1756 1757 int foo(int x) { 1758 __builtin_assume(x != 0); 1759 1760 // The optimizer may short-circuit this check using the invariant. 1761 if (x == 0) 1762 return do_something(); 1763 1764 return do_something_else(); 1765 } 1766 1767**Description**: 1768 1769The boolean argument to this function is defined to be true. The optimizer may 1770analyze the form of the expression provided as the argument and deduce from 1771that information used to optimize the program. If the condition is violated 1772during execution, the behavior is undefined. The argument itself is never 1773evaluated, so any side effects of the expression will be discarded. 1774 1775Query for this feature with ``__has_builtin(__builtin_assume)``. 1776 1777``__builtin_readcyclecounter`` 1778------------------------------ 1779 1780``__builtin_readcyclecounter`` is used to access the cycle counter register (or 1781a similar low-latency, high-accuracy clock) on those targets that support it. 1782 1783**Syntax**: 1784 1785.. code-block:: c++ 1786 1787 __builtin_readcyclecounter() 1788 1789**Example of Use**: 1790 1791.. code-block:: c++ 1792 1793 unsigned long long t0 = __builtin_readcyclecounter(); 1794 do_something(); 1795 unsigned long long t1 = __builtin_readcyclecounter(); 1796 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow 1797 1798**Description**: 1799 1800The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value, 1801which may be either global or process/thread-specific depending on the target. 1802As the backing counters often overflow quickly (on the order of seconds) this 1803should only be used for timing small intervals. When not supported by the 1804target, the return value is always zero. This builtin takes no arguments and 1805produces an unsigned long long result. 1806 1807Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note 1808that even if present, its use may depend on run-time privilege or other OS 1809controlled state. 1810 1811.. _langext-__builtin_shufflevector: 1812 1813``__builtin_dump_struct`` 1814------------------------- 1815 1816**Syntax**: 1817 1818.. code-block:: c++ 1819 1820 __builtin_dump_struct(&some_struct, &some_printf_func); 1821 1822**Examples**: 1823 1824.. code-block:: c++ 1825 1826 struct S { 1827 int x, y; 1828 float f; 1829 struct T { 1830 int i; 1831 } t; 1832 }; 1833 1834 void func(struct S *s) { 1835 __builtin_dump_struct(s, &printf); 1836 } 1837 1838Example output: 1839 1840.. code-block:: none 1841 1842 struct S { 1843 int i : 100 1844 int j : 42 1845 float f : 3.14159 1846 struct T t : struct T { 1847 int i : 1997 1848 } 1849 } 1850 1851**Description**: 1852 1853The '``__builtin_dump_struct``' function is used to print the fields of a simple 1854structure and their values for debugging purposes. The builtin accepts a pointer 1855to a structure to dump the fields of, and a pointer to a formatted output 1856function whose signature must be: ``int (*)(const char *, ...)`` and must 1857support the format specifiers used by ``printf()``. 1858 1859``__builtin_shufflevector`` 1860--------------------------- 1861 1862``__builtin_shufflevector`` is used to express generic vector 1863permutation/shuffle/swizzle operations. This builtin is also very important 1864for the implementation of various target-specific header files like 1865``<xmmintrin.h>``. 1866 1867**Syntax**: 1868 1869.. code-block:: c++ 1870 1871 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 1872 1873**Examples**: 1874 1875.. code-block:: c++ 1876 1877 // identity operation - return 4-element vector v1. 1878 __builtin_shufflevector(v1, v1, 0, 1, 2, 3) 1879 1880 // "Splat" element 0 of V1 into a 4-element result. 1881 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 1882 1883 // Reverse 4-element vector V1. 1884 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 1885 1886 // Concatenate every other element of 4-element vectors V1 and V2. 1887 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 1888 1889 // Concatenate every other element of 8-element vectors V1 and V2. 1890 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 1891 1892 // Shuffle v1 with some elements being undefined 1893 __builtin_shufflevector(v1, v1, 3, -1, 1, -1) 1894 1895**Description**: 1896 1897The first two arguments to ``__builtin_shufflevector`` are vectors that have 1898the same element type. The remaining arguments are a list of integers that 1899specify the elements indices of the first two vectors that should be extracted 1900and returned in a new vector. These element indices are numbered sequentially 1901starting with the first vector, continuing into the second vector. Thus, if 1902``vec1`` is a 4-element vector, index 5 would refer to the second element of 1903``vec2``. An index of -1 can be used to indicate that the corresponding element 1904in the returned vector is a don't care and can be optimized by the backend. 1905 1906The result of ``__builtin_shufflevector`` is a vector with the same element 1907type as ``vec1``/``vec2`` but that has an element count equal to the number of 1908indices specified. 1909 1910Query for this feature with ``__has_builtin(__builtin_shufflevector)``. 1911 1912.. _langext-__builtin_convertvector: 1913 1914``__builtin_convertvector`` 1915--------------------------- 1916 1917``__builtin_convertvector`` is used to express generic vector 1918type-conversion operations. The input vector and the output vector 1919type must have the same number of elements. 1920 1921**Syntax**: 1922 1923.. code-block:: c++ 1924 1925 __builtin_convertvector(src_vec, dst_vec_type) 1926 1927**Examples**: 1928 1929.. code-block:: c++ 1930 1931 typedef double vector4double __attribute__((__vector_size__(32))); 1932 typedef float vector4float __attribute__((__vector_size__(16))); 1933 typedef short vector4short __attribute__((__vector_size__(8))); 1934 vector4float vf; vector4short vs; 1935 1936 // convert from a vector of 4 floats to a vector of 4 doubles. 1937 __builtin_convertvector(vf, vector4double) 1938 // equivalent to: 1939 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] } 1940 1941 // convert from a vector of 4 shorts to a vector of 4 floats. 1942 __builtin_convertvector(vs, vector4float) 1943 // equivalent to: 1944 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] } 1945 1946**Description**: 1947 1948The first argument to ``__builtin_convertvector`` is a vector, and the second 1949argument is a vector type with the same number of elements as the first 1950argument. 1951 1952The result of ``__builtin_convertvector`` is a vector with the same element 1953type as the second argument, with a value defined in terms of the action of a 1954C-style cast applied to each element of the first argument. 1955 1956Query for this feature with ``__has_builtin(__builtin_convertvector)``. 1957 1958``__builtin_bitreverse`` 1959------------------------ 1960 1961* ``__builtin_bitreverse8`` 1962* ``__builtin_bitreverse16`` 1963* ``__builtin_bitreverse32`` 1964* ``__builtin_bitreverse64`` 1965 1966**Syntax**: 1967 1968.. code-block:: c++ 1969 1970 __builtin_bitreverse32(x) 1971 1972**Examples**: 1973 1974.. code-block:: c++ 1975 1976 uint8_t rev_x = __builtin_bitreverse8(x); 1977 uint16_t rev_x = __builtin_bitreverse16(x); 1978 uint32_t rev_y = __builtin_bitreverse32(y); 1979 uint64_t rev_z = __builtin_bitreverse64(z); 1980 1981**Description**: 1982 1983The '``__builtin_bitreverse``' family of builtins is used to reverse 1984the bitpattern of an integer value; for example ``0b10110110`` becomes 1985``0b01101101``. 1986 1987``__builtin_rotateleft`` 1988------------------------ 1989 1990* ``__builtin_rotateleft8`` 1991* ``__builtin_rotateleft16`` 1992* ``__builtin_rotateleft32`` 1993* ``__builtin_rotateleft64`` 1994 1995**Syntax**: 1996 1997.. code-block:: c++ 1998 1999 __builtin_rotateleft32(x, y) 2000 2001**Examples**: 2002 2003.. code-block:: c++ 2004 2005 uint8_t rot_x = __builtin_rotateleft8(x, y); 2006 uint16_t rot_x = __builtin_rotateleft16(x, y); 2007 uint32_t rot_x = __builtin_rotateleft32(x, y); 2008 uint64_t rot_x = __builtin_rotateleft64(x, y); 2009 2010**Description**: 2011 2012The '``__builtin_rotateleft``' family of builtins is used to rotate 2013the bits in the first argument by the amount in the second argument. 2014For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``. 2015The shift value is treated as an unsigned amount modulo the size of 2016the arguments. Both arguments and the result have the bitwidth specified 2017by the name of the builtin. 2018 2019``__builtin_rotateright`` 2020------------------------- 2021 2022* ``__builtin_rotateright8`` 2023* ``__builtin_rotateright16`` 2024* ``__builtin_rotateright32`` 2025* ``__builtin_rotateright64`` 2026 2027**Syntax**: 2028 2029.. code-block:: c++ 2030 2031 __builtin_rotateright32(x, y) 2032 2033**Examples**: 2034 2035.. code-block:: c++ 2036 2037 uint8_t rot_x = __builtin_rotateright8(x, y); 2038 uint16_t rot_x = __builtin_rotateright16(x, y); 2039 uint32_t rot_x = __builtin_rotateright32(x, y); 2040 uint64_t rot_x = __builtin_rotateright64(x, y); 2041 2042**Description**: 2043 2044The '``__builtin_rotateright``' family of builtins is used to rotate 2045the bits in the first argument by the amount in the second argument. 2046For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``. 2047The shift value is treated as an unsigned amount modulo the size of 2048the arguments. Both arguments and the result have the bitwidth specified 2049by the name of the builtin. 2050 2051``__builtin_unreachable`` 2052------------------------- 2053 2054``__builtin_unreachable`` is used to indicate that a specific point in the 2055program cannot be reached, even if the compiler might otherwise think it can. 2056This is useful to improve optimization and eliminates certain warnings. For 2057example, without the ``__builtin_unreachable`` in the example below, the 2058compiler assumes that the inline asm can fall through and prints a "function 2059declared '``noreturn``' should not return" warning. 2060 2061**Syntax**: 2062 2063.. code-block:: c++ 2064 2065 __builtin_unreachable() 2066 2067**Example of use**: 2068 2069.. code-block:: c++ 2070 2071 void myabort(void) __attribute__((noreturn)); 2072 void myabort(void) { 2073 asm("int3"); 2074 __builtin_unreachable(); 2075 } 2076 2077**Description**: 2078 2079The ``__builtin_unreachable()`` builtin has completely undefined behavior. 2080Since it has undefined behavior, it is a statement that it is never reached and 2081the optimizer can take advantage of this to produce better code. This builtin 2082takes no arguments and produces a void result. 2083 2084Query for this feature with ``__has_builtin(__builtin_unreachable)``. 2085 2086``__builtin_unpredictable`` 2087--------------------------- 2088 2089``__builtin_unpredictable`` is used to indicate that a branch condition is 2090unpredictable by hardware mechanisms such as branch prediction logic. 2091 2092**Syntax**: 2093 2094.. code-block:: c++ 2095 2096 __builtin_unpredictable(long long) 2097 2098**Example of use**: 2099 2100.. code-block:: c++ 2101 2102 if (__builtin_unpredictable(x > 0)) { 2103 foo(); 2104 } 2105 2106**Description**: 2107 2108The ``__builtin_unpredictable()`` builtin is expected to be used with control 2109flow conditions such as in ``if`` and ``switch`` statements. 2110 2111Query for this feature with ``__has_builtin(__builtin_unpredictable)``. 2112 2113``__sync_swap`` 2114--------------- 2115 2116``__sync_swap`` is used to atomically swap integers or pointers in memory. 2117 2118**Syntax**: 2119 2120.. code-block:: c++ 2121 2122 type __sync_swap(type *ptr, type value, ...) 2123 2124**Example of Use**: 2125 2126.. code-block:: c++ 2127 2128 int old_value = __sync_swap(&value, new_value); 2129 2130**Description**: 2131 2132The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of 2133atomic intrinsics to allow code to atomically swap the current value with the 2134new value. More importantly, it helps developers write more efficient and 2135correct code by avoiding expensive loops around 2136``__sync_bool_compare_and_swap()`` or relying on the platform specific 2137implementation details of ``__sync_lock_test_and_set()``. The 2138``__sync_swap()`` builtin is a full barrier. 2139 2140``__builtin_addressof`` 2141----------------------- 2142 2143``__builtin_addressof`` performs the functionality of the built-in ``&`` 2144operator, ignoring any ``operator&`` overload. This is useful in constant 2145expressions in C++11, where there is no other way to take the address of an 2146object that overloads ``operator&``. 2147 2148**Example of use**: 2149 2150.. code-block:: c++ 2151 2152 template<typename T> constexpr T *addressof(T &value) { 2153 return __builtin_addressof(value); 2154 } 2155 2156``__builtin_operator_new`` and ``__builtin_operator_delete`` 2157------------------------------------------------------------ 2158 2159A call to ``__builtin_operator_new(args)`` is exactly the same as a call to 2160``::operator new(args)``, except that it allows certain optimizations 2161that the C++ standard does not permit for a direct function call to 2162``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and 2163merging allocations), and that the call is required to resolve to a 2164`replaceable global allocation function 2165<https://en.cppreference.com/w/cpp/memory/new/operator_new>`_. 2166 2167Likewise, ``__builtin_operator_delete`` is exactly the same as a call to 2168``::operator delete(args)``, except that it permits optimizations 2169and that the call is required to resolve to a 2170`replaceable global deallocation function 2171<https://en.cppreference.com/w/cpp/memory/new/operator_delete>`_. 2172 2173These builtins are intended for use in the implementation of ``std::allocator`` 2174and other similar allocation libraries, and are only available in C++. 2175 2176Query for this feature with ``__has_builtin(__builtin_operator_new)`` or 2177``__has_builtin(__builtin_operator_delete)``: 2178 2179 * If the value is at least ``201802L``, the builtins behave as described above. 2180 2181 * If the value is non-zero, the builtins may not support calling arbitrary 2182 replaceable global (de)allocation functions, but do support calling at least 2183 ``::operator new(size_t)`` and ``::operator delete(void*)``. 2184 2185``__builtin_preserve_access_index`` 2186----------------------------------- 2187 2188``__builtin_preserve_access_index`` specifies a code section where 2189array subscript access and structure/union member access are relocatable 2190under bpf compile-once run-everywhere framework. Debuginfo (typically 2191with ``-g``) is needed, otherwise, the compiler will exit with an error. 2192The return type for the intrinsic is the same as the type of the 2193argument. 2194 2195**Syntax**: 2196 2197.. code-block:: c 2198 2199 type __builtin_preserve_access_index(type arg) 2200 2201**Example of Use**: 2202 2203.. code-block:: c 2204 2205 struct t { 2206 int i; 2207 int j; 2208 union { 2209 int a; 2210 int b; 2211 } c[4]; 2212 }; 2213 struct t *v = ...; 2214 int *pb =__builtin_preserve_access_index(&v->c[3].b); 2215 __builtin_preserve_access_index(v->j); 2216 2217``__builtin_unique_stable_name`` 2218-------------------------------- 2219 2220``__builtin_unique_stable_name()`` is a builtin that takes a type or expression and 2221produces a string literal containing a unique name for the type (or type of the 2222expression) that is stable across split compilations. 2223 2224In cases where the split compilation needs to share a unique token for a type 2225across the boundary (such as in an offloading situation), this name can be used 2226for lookup purposes. 2227 2228This builtin is superior to RTTI for this purpose for two reasons. First, this 2229value is computed entirely at compile time, so it can be used in constant 2230expressions. Second, this value encodes lambda functions based on line-number 2231rather than the order in which it appears in a function. This is valuable 2232because it is stable in cases where an unrelated lambda is introduced 2233conditionally in the same function. 2234 2235The current implementation of this builtin uses a slightly modified Itanium 2236Mangler to produce the unique name. The lambda ordinal is replaced with one or 2237more line/column pairs in the format ``LINE->COL``, separated with a ``~`` 2238character. Typically, only one pair will be included, however in the case of 2239macro expansions the entire macro expansion stack is expressed. 2240 2241Multiprecision Arithmetic Builtins 2242---------------------------------- 2243 2244Clang provides a set of builtins which expose multiprecision arithmetic in a 2245manner amenable to C. They all have the following form: 2246 2247.. code-block:: c 2248 2249 unsigned x = ..., y = ..., carryin = ..., carryout; 2250 unsigned sum = __builtin_addc(x, y, carryin, &carryout); 2251 2252Thus one can form a multiprecision addition chain in the following manner: 2253 2254.. code-block:: c 2255 2256 unsigned *x, *y, *z, carryin=0, carryout; 2257 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout); 2258 carryin = carryout; 2259 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout); 2260 carryin = carryout; 2261 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout); 2262 carryin = carryout; 2263 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout); 2264 2265The complete list of builtins are: 2266 2267.. code-block:: c 2268 2269 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 2270 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 2271 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 2272 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 2273 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 2274 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 2275 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 2276 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 2277 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 2278 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 2279 2280Checked Arithmetic Builtins 2281--------------------------- 2282 2283Clang provides a set of builtins that implement checked arithmetic for security 2284critical applications in a manner that is fast and easily expressible in C. As 2285an example of their usage: 2286 2287.. code-block:: c 2288 2289 errorcode_t security_critical_application(...) { 2290 unsigned x, y, result; 2291 ... 2292 if (__builtin_mul_overflow(x, y, &result)) 2293 return kErrorCodeHackers; 2294 ... 2295 use_multiply(result); 2296 ... 2297 } 2298 2299Clang provides the following checked arithmetic builtins: 2300 2301.. code-block:: c 2302 2303 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum); 2304 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff); 2305 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod); 2306 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum); 2307 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum); 2308 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum); 2309 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff); 2310 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff); 2311 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff); 2312 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod); 2313 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod); 2314 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod); 2315 bool __builtin_sadd_overflow (int x, int y, int *sum); 2316 bool __builtin_saddl_overflow (long x, long y, long *sum); 2317 bool __builtin_saddll_overflow(long long x, long long y, long long *sum); 2318 bool __builtin_ssub_overflow (int x, int y, int *diff); 2319 bool __builtin_ssubl_overflow (long x, long y, long *diff); 2320 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff); 2321 bool __builtin_smul_overflow (int x, int y, int *prod); 2322 bool __builtin_smull_overflow (long x, long y, long *prod); 2323 bool __builtin_smulll_overflow(long long x, long long y, long long *prod); 2324 2325Each builtin performs the specified mathematical operation on the 2326first two arguments and stores the result in the third argument. If 2327possible, the result will be equal to mathematically-correct result 2328and the builtin will return 0. Otherwise, the builtin will return 23291 and the result will be equal to the unique value that is equivalent 2330to the mathematically-correct result modulo two raised to the *k* 2331power, where *k* is the number of bits in the result type. The 2332behavior of these builtins is well-defined for all argument values. 2333 2334The first three builtins work generically for operands of any integer type, 2335including boolean types. The operands need not have the same type as each 2336other, or as the result. The other builtins may implicitly promote or 2337convert their operands before performing the operation. 2338 2339Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc. 2340 2341Floating point builtins 2342--------------------------------------- 2343 2344``__builtin_canonicalize`` 2345-------------------------- 2346 2347.. code-block:: c 2348 2349 double __builtin_canonicalize(double); 2350 float __builtin_canonicalizef(float); 2351 long double__builtin_canonicalizel(long double); 2352 2353Returns the platform specific canonical encoding of a floating point 2354number. This canonicalization is useful for implementing certain 2355numeric primitives such as frexp. See `LLVM canonicalize intrinsic 2356<https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for 2357more information on the semantics. 2358 2359String builtins 2360--------------- 2361 2362Clang provides constant expression evaluation support for builtins forms of 2363the following functions from the C standard library headers 2364``<string.h>`` and ``<wchar.h>``: 2365 2366* ``memchr`` 2367* ``memcmp`` (and its deprecated BSD / POSIX alias ``bcmp``) 2368* ``strchr`` 2369* ``strcmp`` 2370* ``strlen`` 2371* ``strncmp`` 2372* ``wcschr`` 2373* ``wcscmp`` 2374* ``wcslen`` 2375* ``wcsncmp`` 2376* ``wmemchr`` 2377* ``wmemcmp`` 2378 2379In each case, the builtin form has the name of the C library function prefixed 2380by ``__builtin_``. Example: 2381 2382.. code-block:: c 2383 2384 void *p = __builtin_memchr("foobar", 'b', 5); 2385 2386In addition to the above, one further builtin is provided: 2387 2388.. code-block:: c 2389 2390 char *__builtin_char_memchr(const char *haystack, int needle, size_t size); 2391 2392``__builtin_char_memchr(a, b, c)`` is identical to 2393``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within 2394constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*`` 2395is disallowed in general). 2396 2397Constant evaluation support for the ``__builtin_mem*`` functions is provided 2398only for arrays of ``char``, ``signed char``, ``unsigned char``, or ``char8_t``, 2399despite these functions accepting an argument of type ``const void*``. 2400 2401Support for constant expression evaluation for the above builtins can be detected 2402with ``__has_feature(cxx_constexpr_string_builtins)``. 2403 2404Memory builtins 2405--------------- 2406 2407 * ``__builtin_memcpy_inline`` 2408 2409.. code-block:: c 2410 2411 void __builtin_memcpy_inline(void *dst, const void *src, size_t size); 2412 2413``__builtin_memcpy_inline(dst, src, size)`` is identical to 2414``__builtin_memcpy(dst, src, size)`` except that the generated code is 2415guaranteed not to call any external functions. See [LLVM IR ‘llvm.memcpy.inline’ 2416Intrinsic](https://llvm.org/docs/LangRef.html#llvm-memcpy-inline-intrinsic) for 2417more information. 2418 2419Note that the `size` argument must be a compile time constant. 2420 2421Clang provides constant expression evaluation support for builtin forms of the 2422following functions from the C standard library headers 2423``<string.h>`` and ``<wchar.h>``: 2424 2425* ``memcpy`` 2426* ``memmove`` 2427* ``wmemcpy`` 2428* ``wmemmove`` 2429 2430In each case, the builtin form has the name of the C library function prefixed 2431by ``__builtin_``. 2432 2433Constant evaluation support is only provided when the source and destination 2434are pointers to arrays with the same trivially copyable element type, and the 2435given size is an exact multiple of the element size that is no greater than 2436the number of elements accessible through the source and destination operands. 2437 2438Constant evaluation support is not yet provided for ``__builtin_memcpy_inline``. 2439 2440Atomic Min/Max builtins with memory ordering 2441-------------------------------------------- 2442 2443There are two atomic builtins with min/max in-memory comparison and swap. 2444The syntax and semantics are similar to GCC-compatible __atomic_* builtins. 2445 2446* ``__atomic_fetch_min`` 2447* ``__atomic_fetch_max`` 2448 2449The builtins work with signed and unsigned integers and require to specify memory ordering. 2450The return value is the original value that was stored in memory before comparison. 2451 2452Example: 2453 2454.. code-block:: c 2455 2456 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED); 2457 2458The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``, 2459``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``, 2460``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics. 2461 2462In terms or aquire-release ordering barriers these two operations are always 2463considered as operations with *load-store* semantics, even when the original value 2464is not actually modified after comparison. 2465 2466.. _langext-__c11_atomic: 2467 2468__c11_atomic builtins 2469--------------------- 2470 2471Clang provides a set of builtins which are intended to be used to implement 2472C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the 2473``_explicit`` form of the corresponding C11 operation, and are named with a 2474``__c11_`` prefix. The supported operations, and the differences from 2475the corresponding C11 operations, are: 2476 2477* ``__c11_atomic_init`` 2478* ``__c11_atomic_thread_fence`` 2479* ``__c11_atomic_signal_fence`` 2480* ``__c11_atomic_is_lock_free`` (The argument is the size of the 2481 ``_Atomic(...)`` object, instead of its address) 2482* ``__c11_atomic_store`` 2483* ``__c11_atomic_load`` 2484* ``__c11_atomic_exchange`` 2485* ``__c11_atomic_compare_exchange_strong`` 2486* ``__c11_atomic_compare_exchange_weak`` 2487* ``__c11_atomic_fetch_add`` 2488* ``__c11_atomic_fetch_sub`` 2489* ``__c11_atomic_fetch_and`` 2490* ``__c11_atomic_fetch_or`` 2491* ``__c11_atomic_fetch_xor`` 2492* ``__c11_atomic_fetch_max`` 2493* ``__c11_atomic_fetch_min`` 2494 2495The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, 2496``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are 2497provided, with values corresponding to the enumerators of C11's 2498``memory_order`` enumeration. 2499 2500(Note that Clang additionally provides GCC-compatible ``__atomic_*`` 2501builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0 2502atomic builtins are an explicit form of the corresponding OpenCL 2.0 2503builtin function, and are named with a ``__opencl_`` prefix. The macros 2504``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``, 2505``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``, 2506and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values 2507corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.) 2508 2509Low-level ARM exclusive memory builtins 2510--------------------------------------- 2511 2512Clang provides overloaded builtins giving direct access to the three key ARM 2513instructions for implementing atomic operations. 2514 2515.. code-block:: c 2516 2517 T __builtin_arm_ldrex(const volatile T *addr); 2518 T __builtin_arm_ldaex(const volatile T *addr); 2519 int __builtin_arm_strex(T val, volatile T *addr); 2520 int __builtin_arm_stlex(T val, volatile T *addr); 2521 void __builtin_arm_clrex(void); 2522 2523The types ``T`` currently supported are: 2524 2525* Integer types with width at most 64 bits (or 128 bits on AArch64). 2526* Floating-point types 2527* Pointer types. 2528 2529Note that the compiler does not guarantee it will not insert stores which clear 2530the exclusive monitor in between an ``ldrex`` type operation and its paired 2531``strex``. In practice this is only usually a risk when the extra store is on 2532the same cache line as the variable being modified and Clang will only insert 2533stack stores on its own, so it is best not to use these operations on variables 2534with automatic storage duration. 2535 2536Also, loads and stores may be implicit in code written between the ``ldrex`` and 2537``strex``. Clang will not necessarily mitigate the effects of these either, so 2538care should be exercised. 2539 2540For these reasons the higher level atomic primitives should be preferred where 2541possible. 2542 2543Non-temporal load/store builtins 2544-------------------------------- 2545 2546Clang provides overloaded builtins allowing generation of non-temporal memory 2547accesses. 2548 2549.. code-block:: c 2550 2551 T __builtin_nontemporal_load(T *addr); 2552 void __builtin_nontemporal_store(T value, T *addr); 2553 2554The types ``T`` currently supported are: 2555 2556* Integer types. 2557* Floating-point types. 2558* Vector types. 2559 2560Note that the compiler does not guarantee that non-temporal loads or stores 2561will be used. 2562 2563C++ Coroutines support builtins 2564-------------------------------- 2565 2566.. warning:: 2567 This is a work in progress. Compatibility across Clang/LLVM releases is not 2568 guaranteed. 2569 2570Clang provides experimental builtins to support C++ Coroutines as defined by 2571https://wg21.link/P0057. The following four are intended to be used by the 2572standard library to implement `std::experimental::coroutine_handle` type. 2573 2574**Syntax**: 2575 2576.. code-block:: c 2577 2578 void __builtin_coro_resume(void *addr); 2579 void __builtin_coro_destroy(void *addr); 2580 bool __builtin_coro_done(void *addr); 2581 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise) 2582 2583**Example of use**: 2584 2585.. code-block:: c++ 2586 2587 template <> struct coroutine_handle<void> { 2588 void resume() const { __builtin_coro_resume(ptr); } 2589 void destroy() const { __builtin_coro_destroy(ptr); } 2590 bool done() const { return __builtin_coro_done(ptr); } 2591 // ... 2592 protected: 2593 void *ptr; 2594 }; 2595 2596 template <typename Promise> struct coroutine_handle : coroutine_handle<> { 2597 // ... 2598 Promise &promise() const { 2599 return *reinterpret_cast<Promise *>( 2600 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false)); 2601 } 2602 static coroutine_handle from_promise(Promise &promise) { 2603 coroutine_handle p; 2604 p.ptr = __builtin_coro_promise(&promise, alignof(Promise), 2605 /*from-promise=*/true); 2606 return p; 2607 } 2608 }; 2609 2610 2611Other coroutine builtins are either for internal clang use or for use during 2612development of the coroutine feature. See `Coroutines in LLVM 2613<https://llvm.org/docs/Coroutines.html#intrinsics>`_ for 2614more information on their semantics. Note that builtins matching the intrinsics 2615that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc, 2616llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to 2617an appropriate value during the emission. 2618 2619**Syntax**: 2620 2621.. code-block:: c 2622 2623 size_t __builtin_coro_size() 2624 void *__builtin_coro_frame() 2625 void *__builtin_coro_free(void *coro_frame) 2626 2627 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts) 2628 bool __builtin_coro_alloc() 2629 void *__builtin_coro_begin(void *memory) 2630 void __builtin_coro_end(void *coro_frame, bool unwind) 2631 char __builtin_coro_suspend(bool final) 2632 bool __builtin_coro_param(void *original, void *copy) 2633 2634Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM 2635automatically will insert one if the first argument to `llvm.coro.suspend` is 2636token `none`. If a user calls `__builin_suspend`, clang will insert `token none` 2637as the first argument to the intrinsic. 2638 2639Source location builtins 2640------------------------ 2641 2642Clang provides experimental builtins to support C++ standard library implementation 2643of ``std::experimental::source_location`` as specified in http://wg21.link/N4600. 2644With the exception of ``__builtin_COLUMN``, these builtins are also implemented by 2645GCC. 2646 2647**Syntax**: 2648 2649.. code-block:: c 2650 2651 const char *__builtin_FILE(); 2652 const char *__builtin_FUNCTION(); 2653 unsigned __builtin_LINE(); 2654 unsigned __builtin_COLUMN(); // Clang only 2655 2656**Example of use**: 2657 2658.. code-block:: c++ 2659 2660 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller 2661 const char* file = __builtin_FILE(), 2662 const char* function = __builtin_FUNCTION()) { 2663 if (pred) return; 2664 printf("%s:%d assertion failed in function %s\n", file, line, function); 2665 std::abort(); 2666 } 2667 2668 struct MyAggregateType { 2669 int x; 2670 int line = __builtin_LINE(); // captures line where aggregate initialization occurs 2671 }; 2672 static_assert(MyAggregateType{42}.line == __LINE__); 2673 2674 struct MyClassType { 2675 int line = __builtin_LINE(); // captures line of the constructor used during initialization 2676 constexpr MyClassType(int) { assert(line == __LINE__); } 2677 }; 2678 2679**Description**: 2680 2681The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return 2682the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and 2683``__FILE__`` respectively. These builtins are constant expressions. 2684 2685When the builtins appear as part of a default function argument the invocation 2686point is the location of the caller. When the builtins appear as part of a 2687default member initializer, the invocation point is the location of the 2688constructor or aggregate initialization used to create the object. Otherwise 2689the invocation point is the same as the location of the builtin. 2690 2691When the invocation point of ``__builtin_FUNCTION`` is not a function scope the 2692empty string is returned. 2693 2694Alignment builtins 2695------------------ 2696Clang provides builtins to support checking and adjusting alignment of 2697pointers and integers. 2698These builtins can be used to avoid relying on implementation-defined behavior 2699of arithmetic on integers derived from pointers. 2700Additionally, these builtins retain type information and, unlike bitwise 2701arithmetic, they can perform semantic checking on the alignment value. 2702 2703**Syntax**: 2704 2705.. code-block:: c 2706 2707 Type __builtin_align_up(Type value, size_t alignment); 2708 Type __builtin_align_down(Type value, size_t alignment); 2709 bool __builtin_is_aligned(Type value, size_t alignment); 2710 2711 2712**Example of use**: 2713 2714.. code-block:: c++ 2715 2716 char* global_alloc_buffer; 2717 void* my_aligned_allocator(size_t alloc_size, size_t alignment) { 2718 char* result = __builtin_align_up(global_alloc_buffer, alignment); 2719 // result now contains the value of global_alloc_buffer rounded up to the 2720 // next multiple of alignment. 2721 global_alloc_buffer = result + alloc_size; 2722 return result; 2723 } 2724 2725 void* get_start_of_page(void* ptr) { 2726 return __builtin_align_down(ptr, PAGE_SIZE); 2727 } 2728 2729 void example(char* buffer) { 2730 if (__builtin_is_aligned(buffer, 64)) { 2731 do_fast_aligned_copy(buffer); 2732 } else { 2733 do_unaligned_copy(buffer); 2734 } 2735 } 2736 2737 // In addition to pointers, the builtins can also be used on integer types 2738 // and are evaluatable inside constant expressions. 2739 static_assert(__builtin_align_up(123, 64) == 128, ""); 2740 static_assert(__builtin_align_down(123u, 64) == 64u, ""); 2741 static_assert(!__builtin_is_aligned(123, 64), ""); 2742 2743 2744**Description**: 2745 2746The builtins ``__builtin_align_up``, ``__builtin_align_down``, return their 2747first argument aligned up/down to the next multiple of the second argument. 2748If the value is already sufficiently aligned, it is returned unchanged. 2749The builtin ``__builtin_is_aligned`` returns whether the first argument is 2750aligned to a multiple of the second argument. 2751All of these builtins expect the alignment to be expressed as a number of bytes. 2752 2753These builtins can be used for all integer types as well as (non-function) 2754pointer types. For pointer types, these builtins operate in terms of the integer 2755address of the pointer and return a new pointer of the same type (including 2756qualifiers such as ``const``) with an adjusted address. 2757When aligning pointers up or down, the resulting value must be within the same 2758underlying allocation or one past the end (see C17 6.5.6p8, C++ [expr.add]). 2759This means that arbitrary integer values stored in pointer-type variables must 2760not be passed to these builtins. For those use cases, the builtins can still be 2761used, but the operation must be performed on the pointer cast to ``uintptr_t``. 2762 2763If Clang can determine that the alignment is not a power of two at compile time, 2764it will result in a compilation failure. If the alignment argument is not a 2765power of two at run time, the behavior of these builtins is undefined. 2766 2767Non-standard C++11 Attributes 2768============================= 2769 2770Clang's non-standard C++11 attributes live in the ``clang`` attribute 2771namespace. 2772 2773Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which 2774are accepted with the ``__attribute__((foo))`` syntax are also accepted as 2775``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 2776(see the list of `GCC function attributes 2777<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 2778attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 2779`GCC type attributes 2780<https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC 2781implementation, these attributes must appertain to the *declarator-id* in a 2782declaration, which means they must go either at the start of the declaration or 2783immediately after the name being declared. 2784 2785For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 2786also applies the GNU ``noreturn`` attribute to ``f``. 2787 2788.. code-block:: c++ 2789 2790 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 2791 2792Target-Specific Extensions 2793========================== 2794 2795Clang supports some language features conditionally on some targets. 2796 2797ARM/AArch64 Language Extensions 2798------------------------------- 2799 2800Memory Barrier Intrinsics 2801^^^^^^^^^^^^^^^^^^^^^^^^^ 2802Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined 2803in the `ARM C Language Extensions Release 2.0 2804<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_. 2805Note that these intrinsics are implemented as motion barriers that block 2806reordering of memory accesses and side effect instructions. Other instructions 2807like simple arithmetic may be reordered around the intrinsic. If you expect to 2808have no reordering at all, use inline assembly instead. 2809 2810X86/X86-64 Language Extensions 2811------------------------------ 2812 2813The X86 backend has these language extensions: 2814 2815Memory references to specified segments 2816^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2817 2818Annotating a pointer with address space #256 causes it to be code generated 2819relative to the X86 GS segment register, address space #257 causes it to be 2820relative to the X86 FS segment, and address space #258 causes it to be 2821relative to the X86 SS segment. Note that this is a very very low-level 2822feature that should only be used if you know what you're doing (for example in 2823an OS kernel). 2824 2825Here is an example: 2826 2827.. code-block:: c++ 2828 2829 #define GS_RELATIVE __attribute__((address_space(256))) 2830 int foo(int GS_RELATIVE *P) { 2831 return *P; 2832 } 2833 2834Which compiles to (on X86-32): 2835 2836.. code-block:: gas 2837 2838 _foo: 2839 movl 4(%esp), %eax 2840 movl %gs:(%eax), %eax 2841 ret 2842 2843You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for 2844the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS`` 2845indicate their support. 2846 2847PowerPC Language Extensions 2848------------------------------ 2849 2850Set the Floating Point Rounding Mode 2851^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2852PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set 2853the floating point rounding mode. This function will use the least significant 2854two bits of integer argument to set the floating point rounding mode. 2855 2856.. code-block:: c++ 2857 2858 double __builtin_setrnd(int mode); 2859 2860The effective values for mode are: 2861 2862 - 0 - round to nearest 2863 - 1 - round to zero 2864 - 2 - round to +infinity 2865 - 3 - round to -infinity 2866 2867Note that the mode argument will modulo 4, so if the integer argument is greater 2868than 3, it will only use the least significant two bits of the mode. 2869Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``. 2870 2871PowerPC cache builtins 2872^^^^^^^^^^^^^^^^^^^^^^ 2873 2874The PowerPC architecture specifies instructions implementing cache operations. 2875Clang provides builtins that give direct programmer access to these cache 2876instructions. 2877 2878Currently the following builtins are implemented in clang: 2879 2880``__builtin_dcbf`` copies the contents of a modified block from the data cache 2881to main memory and flushes the copy from the data cache. 2882 2883**Syntax**: 2884 2885.. code-block:: c 2886 2887 void __dcbf(const void* addr); /* Data Cache Block Flush */ 2888 2889**Example of Use**: 2890 2891.. code-block:: c 2892 2893 int a = 1; 2894 __builtin_dcbf (&a); 2895 2896Extensions for Static Analysis 2897============================== 2898 2899Clang supports additional attributes that are useful for documenting program 2900invariants and rules for static analysis tools, such as the `Clang Static 2901Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented 2902in the analyzer's `list of source-level annotations 2903<https://clang-analyzer.llvm.org/annotations.html>`_. 2904 2905 2906Extensions for Dynamic Analysis 2907=============================== 2908 2909Use ``__has_feature(address_sanitizer)`` to check if the code is being built 2910with :doc:`AddressSanitizer`. 2911 2912Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 2913with :doc:`ThreadSanitizer`. 2914 2915Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 2916with :doc:`MemorySanitizer`. 2917 2918Use ``__has_feature(safe_stack)`` to check if the code is being built 2919with :doc:`SafeStack`. 2920 2921 2922Extensions for selectively disabling optimization 2923================================================= 2924 2925Clang provides a mechanism for selectively disabling optimizations in functions 2926and methods. 2927 2928To disable optimizations in a single function definition, the GNU-style or C++11 2929non-standard attribute ``optnone`` can be used. 2930 2931.. code-block:: c++ 2932 2933 // The following functions will not be optimized. 2934 // GNU-style attribute 2935 __attribute__((optnone)) int foo() { 2936 // ... code 2937 } 2938 // C++11 attribute 2939 [[clang::optnone]] int bar() { 2940 // ... code 2941 } 2942 2943To facilitate disabling optimization for a range of function definitions, a 2944range-based pragma is provided. Its syntax is ``#pragma clang optimize`` 2945followed by ``off`` or ``on``. 2946 2947All function definitions in the region between an ``off`` and the following 2948``on`` will be decorated with the ``optnone`` attribute unless doing so would 2949conflict with explicit attributes already present on the function (e.g. the 2950ones that control inlining). 2951 2952.. code-block:: c++ 2953 2954 #pragma clang optimize off 2955 // This function will be decorated with optnone. 2956 int foo() { 2957 // ... code 2958 } 2959 2960 // optnone conflicts with always_inline, so bar() will not be decorated. 2961 __attribute__((always_inline)) int bar() { 2962 // ... code 2963 } 2964 #pragma clang optimize on 2965 2966If no ``on`` is found to close an ``off`` region, the end of the region is the 2967end of the compilation unit. 2968 2969Note that a stray ``#pragma clang optimize on`` does not selectively enable 2970additional optimizations when compiling at low optimization levels. This feature 2971can only be used to selectively disable optimizations. 2972 2973The pragma has an effect on functions only at the point of their definition; for 2974function templates, this means that the state of the pragma at the point of an 2975instantiation is not necessarily relevant. Consider the following example: 2976 2977.. code-block:: c++ 2978 2979 template<typename T> T twice(T t) { 2980 return 2 * t; 2981 } 2982 2983 #pragma clang optimize off 2984 template<typename T> T thrice(T t) { 2985 return 3 * t; 2986 } 2987 2988 int container(int a, int b) { 2989 return twice(a) + thrice(b); 2990 } 2991 #pragma clang optimize on 2992 2993In this example, the definition of the template function ``twice`` is outside 2994the pragma region, whereas the definition of ``thrice`` is inside the region. 2995The ``container`` function is also in the region and will not be optimized, but 2996it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of 2997these two instantiations, ``twice`` will be optimized (because its definition 2998was outside the region) and ``thrice`` will not be optimized. 2999 3000Extensions for loop hint optimizations 3001====================================== 3002 3003The ``#pragma clang loop`` directive is used to specify hints for optimizing the 3004subsequent for, while, do-while, or c++11 range-based for loop. The directive 3005provides options for vectorization, interleaving, predication, unrolling and 3006distribution. Loop hints can be specified before any loop and will be ignored if 3007the optimization is not safe to apply. 3008 3009There are loop hints that control transformations (e.g. vectorization, loop 3010unrolling) and there are loop hints that set transformation options (e.g. 3011``vectorize_width``, ``unroll_count``). Pragmas setting transformation options 3012imply the transformation is enabled, as if it was enabled via the corresponding 3013transformation pragma (e.g. ``vectorize(enable)``). If the transformation is 3014disabled (e.g. ``vectorize(disable)``), that takes precedence over 3015transformations option pragmas implying that transformation. 3016 3017Vectorization, Interleaving, and Predication 3018-------------------------------------------- 3019 3020A vectorized loop performs multiple iterations of the original loop 3021in parallel using vector instructions. The instruction set of the target 3022processor determines which vector instructions are available and their vector 3023widths. This restricts the types of loops that can be vectorized. The vectorizer 3024automatically determines if the loop is safe and profitable to vectorize. A 3025vector instruction cost model is used to select the vector width. 3026 3027Interleaving multiple loop iterations allows modern processors to further 3028improve instruction-level parallelism (ILP) using advanced hardware features, 3029such as multiple execution units and out-of-order execution. The vectorizer uses 3030a cost model that depends on the register pressure and generated code size to 3031select the interleaving count. 3032 3033Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled 3034by ``interleave(enable)``. This is useful when compiling with ``-Os`` to 3035manually enable vectorization or interleaving. 3036 3037.. code-block:: c++ 3038 3039 #pragma clang loop vectorize(enable) 3040 #pragma clang loop interleave(enable) 3041 for(...) { 3042 ... 3043 } 3044 3045The vector width is specified by ``vectorize_width(_value_)`` and the interleave 3046count is specified by ``interleave_count(_value_)``, where 3047_value_ is a positive integer. This is useful for specifying the optimal 3048width/count of the set of target architectures supported by your application. 3049 3050.. code-block:: c++ 3051 3052 #pragma clang loop vectorize_width(2) 3053 #pragma clang loop interleave_count(2) 3054 for(...) { 3055 ... 3056 } 3057 3058Specifying a width/count of 1 disables the optimization, and is equivalent to 3059``vectorize(disable)`` or ``interleave(disable)``. 3060 3061Vector predication is enabled by ``vectorize_predicate(enable)``, for example: 3062 3063.. code-block:: c++ 3064 3065 #pragma clang loop vectorize(enable) 3066 #pragma clang loop vectorize_predicate(enable) 3067 for(...) { 3068 ... 3069 } 3070 3071This predicates (masks) all instructions in the loop, which allows the scalar 3072remainder loop (the tail) to be folded into the main vectorized loop. This 3073might be more efficient when vector predication is efficiently supported by the 3074target platform. 3075 3076Loop Unrolling 3077-------------- 3078 3079Unrolling a loop reduces the loop control overhead and exposes more 3080opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling 3081eliminates the loop and replaces it with an enumerated sequence of loop 3082iterations. Full unrolling is only possible if the loop trip count is known at 3083compile time. Partial unrolling replicates the loop body within the loop and 3084reduces the trip count. 3085 3086If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the 3087loop if the trip count is known at compile time. If the fully unrolled code size 3088is greater than an internal limit the loop will be partially unrolled up to this 3089limit. If the trip count is not known at compile time the loop will be partially 3090unrolled with a heuristically chosen unroll factor. 3091 3092.. code-block:: c++ 3093 3094 #pragma clang loop unroll(enable) 3095 for(...) { 3096 ... 3097 } 3098 3099If ``unroll(full)`` is specified the unroller will attempt to fully unroll the 3100loop if the trip count is known at compile time identically to 3101``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled 3102if the loop count is not known at compile time. 3103 3104.. code-block:: c++ 3105 3106 #pragma clang loop unroll(full) 3107 for(...) { 3108 ... 3109 } 3110 3111The unroll count can be specified explicitly with ``unroll_count(_value_)`` where 3112_value_ is a positive integer. If this value is greater than the trip count the 3113loop will be fully unrolled. Otherwise the loop is partially unrolled subject 3114to the same code size limit as with ``unroll(enable)``. 3115 3116.. code-block:: c++ 3117 3118 #pragma clang loop unroll_count(8) 3119 for(...) { 3120 ... 3121 } 3122 3123Unrolling of a loop can be prevented by specifying ``unroll(disable)``. 3124 3125Loop Distribution 3126----------------- 3127 3128Loop Distribution allows splitting a loop into multiple loops. This is 3129beneficial for example when the entire loop cannot be vectorized but some of the 3130resulting loops can. 3131 3132If ``distribute(enable))`` is specified and the loop has memory dependencies 3133that inhibit vectorization, the compiler will attempt to isolate the offending 3134operations into a new loop. This optimization is not enabled by default, only 3135loops marked with the pragma are considered. 3136 3137.. code-block:: c++ 3138 3139 #pragma clang loop distribute(enable) 3140 for (i = 0; i < N; ++i) { 3141 S1: A[i + 1] = A[i] + B[i]; 3142 S2: C[i] = D[i] * E[i]; 3143 } 3144 3145This loop will be split into two loops between statements S1 and S2. The 3146second loop containing S2 will be vectorized. 3147 3148Loop Distribution is currently not enabled by default in the optimizer because 3149it can hurt performance in some cases. For example, instruction-level 3150parallelism could be reduced by sequentializing the execution of the 3151statements S1 and S2 above. 3152 3153If Loop Distribution is turned on globally with 3154``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can 3155be used the disable it on a per-loop basis. 3156 3157Additional Information 3158---------------------- 3159 3160For convenience multiple loop hints can be specified on a single line. 3161 3162.. code-block:: c++ 3163 3164 #pragma clang loop vectorize_width(4) interleave_count(8) 3165 for(...) { 3166 ... 3167 } 3168 3169If an optimization cannot be applied any hints that apply to it will be ignored. 3170For example, the hint ``vectorize_width(4)`` is ignored if the loop is not 3171proven safe to vectorize. To identify and diagnose optimization issues use 3172`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the 3173user guide for details. 3174 3175Extensions to specify floating-point flags 3176==================================================== 3177 3178The ``#pragma clang fp`` pragma allows floating-point options to be specified 3179for a section of the source code. This pragma can only appear at file scope or 3180at the start of a compound statement (excluding comments). When using within a 3181compound statement, the pragma is active within the scope of the compound 3182statement. 3183 3184Currently, the following settings can be controlled with this pragma: 3185 3186``#pragma clang fp reassociate`` allows control over the reassociation 3187of floating point expressions. When enabled, this pragma allows the expression 3188``x + (y + z)`` to be reassociated as ``(x + y) + z``. 3189Reassociation can also occur across multiple statements. 3190This pragma can be used to disable reassociation when it is otherwise 3191enabled for the translation unit with the ``-fassociative-math`` flag. 3192The pragma can take two values: ``on`` and ``off``. 3193 3194.. code-block:: c++ 3195 3196 float f(float x, float y, float z) 3197 { 3198 // Enable floating point reassociation across statements 3199 #pragma fp reassociate(on) 3200 float t = x + y; 3201 float v = t + z; 3202 } 3203 3204 3205``#pragma clang fp contract`` specifies whether the compiler should 3206contract a multiply and an addition (or subtraction) into a fused FMA 3207operation when supported by the target. 3208 3209The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on`` 3210option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows 3211fusion as specified the language standard. The ``fast`` option allows fusion 3212in cases when the language standard does not make this possible (e.g. across 3213statements in C). 3214 3215.. code-block:: c++ 3216 3217 for(...) { 3218 #pragma clang fp contract(fast) 3219 a = b[i] * c[i]; 3220 d[i] += a; 3221 } 3222 3223 3224The pragma can also be used with ``off`` which turns FP contraction off for a 3225section of the code. This can be useful when fast contraction is otherwise 3226enabled for the translation unit with the ``-ffp-contract=fast`` flag. 3227 3228The ``#pragma float_control`` pragma allows precise floating-point 3229semantics and floating-point exception behavior to be specified 3230for a section of the source code. This pragma can only appear at file scope or 3231at the start of a compound statement (excluding comments). When using within a 3232compound statement, the pragma is active within the scope of the compound 3233statement. This pragma is modeled after a Microsoft pragma with the 3234same spelling and syntax. For pragmas specified at file scope, a stack 3235is supported so that the ``pragma float_control`` settings can be pushed or popped. 3236 3237When ``pragma float_control(precise, on)`` is enabled, the section of code 3238governed by the pragma uses precise floating point semantics, effectively 3239``-ffast-math`` is disabled and ``-ffp-contract=on`` 3240(fused multiply add) is enabled. 3241 3242When ``pragma float_control(except, on)`` is enabled, the section of code governed 3243by the pragma behaves as though the command-line option 3244``-ffp-exception-behavior=strict`` is enabled, 3245when ``pragma float_control(precise, off)`` is enabled, the section of code 3246governed by the pragma behaves as though the command-line option 3247``-ffp-exception-behavior=ignore`` is enabled. 3248 3249The full syntax this pragma supports is 3250``float_control(except|precise, on|off [, push])`` and 3251``float_control(push|pop)``. 3252The ``push`` and ``pop`` forms, including using ``push`` as the optional 3253third argument, can only occur at file scope. 3254 3255.. code-block:: c++ 3256 3257 for(...) { 3258 // This block will be compiled with -fno-fast-math and -ffp-contract=on 3259 #pragma float_control(precise, on) 3260 a = b[i] * c[i] + e; 3261 } 3262 3263Specifying an attribute for multiple declarations (#pragma clang attribute) 3264=========================================================================== 3265 3266The ``#pragma clang attribute`` directive can be used to apply an attribute to 3267multiple declarations. The ``#pragma clang attribute push`` variation of the 3268directive pushes a new "scope" of ``#pragma clang attribute`` that attributes 3269can be added to. The ``#pragma clang attribute (...)`` variation adds an 3270attribute to that scope, and the ``#pragma clang attribute pop`` variation pops 3271the scope. You can also use ``#pragma clang attribute push (...)``, which is a 3272shorthand for when you want to add one attribute to a new scope. Multiple push 3273directives can be nested inside each other. 3274 3275The attributes that are used in the ``#pragma clang attribute`` directives 3276can be written using the GNU-style syntax: 3277 3278.. code-block:: c++ 3279 3280 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function) 3281 3282 void function(); // The function now has the annotate("custom") attribute 3283 3284 #pragma clang attribute pop 3285 3286The attributes can also be written using the C++11 style syntax: 3287 3288.. code-block:: c++ 3289 3290 #pragma clang attribute push ([[noreturn]], apply_to = function) 3291 3292 void function(); // The function now has the [[noreturn]] attribute 3293 3294 #pragma clang attribute pop 3295 3296The ``__declspec`` style syntax is also supported: 3297 3298.. code-block:: c++ 3299 3300 #pragma clang attribute push (__declspec(dllexport), apply_to = function) 3301 3302 void function(); // The function now has the __declspec(dllexport) attribute 3303 3304 #pragma clang attribute pop 3305 3306A single push directive accepts only one attribute regardless of the syntax 3307used. 3308 3309Because multiple push directives can be nested, if you're writing a macro that 3310expands to ``_Pragma("clang attribute")`` it's good hygiene (though not 3311required) to add a namespace to your push/pop directives. A pop directive with a 3312namespace will pop the innermost push that has that same namespace. This will 3313ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note 3314that an ``pop`` without a namespace will pop the innermost ``push`` without a 3315namespace. ``push``es with a namespace can only be popped by ``pop`` with the 3316same namespace. For instance: 3317 3318.. code-block:: c++ 3319 3320 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)") 3321 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop") 3322 3323 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)") 3324 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop") 3325 3326 3327 ASSUME_NORETURN_BEGIN 3328 ASSUME_UNAVAILABLE_BEGIN 3329 void function(); // function has [[noreturn]] and __attribute__((unavailable)) 3330 ASSUME_NORETURN_END 3331 void other_function(); // function has __attribute__((unavailable)) 3332 ASSUME_UNAVAILABLE_END 3333 3334Without the namespaces on the macros, ``other_function`` will be annotated with 3335``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like 3336a contrived example, but its very possible for this kind of situation to appear 3337in real code if the pragmas are spread out across a large file. You can test if 3338your version of clang supports namespaces on ``#pragma clang attribute`` with 3339``__has_extension(pragma_clang_attribute_namespaces)``. 3340 3341Subject Match Rules 3342------------------- 3343 3344The set of declarations that receive a single attribute from the attribute stack 3345depends on the subject match rules that were specified in the pragma. Subject 3346match rules are specified after the attribute. The compiler expects an 3347identifier that corresponds to the subject set specifier. The ``apply_to`` 3348specifier is currently the only supported subject set specifier. It allows you 3349to specify match rules that form a subset of the attribute's allowed subject 3350set, i.e. the compiler doesn't require all of the attribute's subjects. For 3351example, an attribute like ``[[nodiscard]]`` whose subject set includes 3352``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at 3353least one of these rules after ``apply_to``: 3354 3355.. code-block:: c++ 3356 3357 #pragma clang attribute push([[nodiscard]], apply_to = enum) 3358 3359 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]] 3360 3361 struct Record1 { }; // The struct will *not* receive [[nodiscard]] 3362 3363 #pragma clang attribute pop 3364 3365 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum)) 3366 3367 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]] 3368 3369 struct Record2 { }; // The struct *will* receive [[nodiscard]] 3370 3371 #pragma clang attribute pop 3372 3373 // This is an error, since [[nodiscard]] can't be applied to namespaces: 3374 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace)) 3375 3376 #pragma clang attribute pop 3377 3378Multiple match rules can be specified using the ``any`` match rule, as shown 3379in the example above. The ``any`` rule applies attributes to all declarations 3380that are matched by at least one of the rules in the ``any``. It doesn't nest 3381and can't be used inside the other match rules. Redundant match rules or rules 3382that conflict with one another should not be used inside of ``any``. 3383 3384Clang supports the following match rules: 3385 3386- ``function``: Can be used to apply attributes to functions. This includes C++ 3387 member functions, static functions, operators, and constructors/destructors. 3388 3389- ``function(is_member)``: Can be used to apply attributes to C++ member 3390 functions. This includes members like static functions, operators, and 3391 constructors/destructors. 3392 3393- ``hasType(functionType)``: Can be used to apply attributes to functions, C++ 3394 member functions, and variables/fields whose type is a function pointer. It 3395 does not apply attributes to Objective-C methods or blocks. 3396 3397- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations 3398 and C++11 type aliases. 3399 3400- ``record``: Can be used to apply attributes to ``struct``, ``class``, and 3401 ``union`` declarations. 3402 3403- ``record(unless(is_union))``: Can be used to apply attributes only to 3404 ``struct`` and ``class`` declarations. 3405 3406- ``enum``: Can be be used to apply attributes to enumeration declarations. 3407 3408- ``enum_constant``: Can be used to apply attributes to enumerators. 3409 3410- ``variable``: Can be used to apply attributes to variables, including 3411 local variables, parameters, global variables, and static member variables. 3412 It does not apply attributes to instance member variables or Objective-C 3413 ivars. 3414 3415- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local 3416 variables only. 3417 3418- ``variable(is_global)``: Can be used to apply attributes to global variables 3419 only. 3420 3421- ``variable(is_local)``: Can be used to apply attributes to local variables 3422 only. 3423 3424- ``variable(is_parameter)``: Can be used to apply attributes to parameters 3425 only. 3426 3427- ``variable(unless(is_parameter))``: Can be used to apply attributes to all 3428 the variables that are not parameters. 3429 3430- ``field``: Can be used to apply attributes to non-static member variables 3431 in a record. This includes Objective-C ivars. 3432 3433- ``namespace``: Can be used to apply attributes to ``namespace`` declarations. 3434 3435- ``objc_interface``: Can be used to apply attributes to ``@interface`` 3436 declarations. 3437 3438- ``objc_protocol``: Can be used to apply attributes to ``@protocol`` 3439 declarations. 3440 3441- ``objc_category``: Can be used to apply attributes to category declarations, 3442 including class extensions. 3443 3444- ``objc_method``: Can be used to apply attributes to Objective-C methods, 3445 including instance and class methods. Implicit methods like implicit property 3446 getters and setters do not receive the attribute. 3447 3448- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C 3449 instance methods. 3450 3451- ``objc_property``: Can be used to apply attributes to ``@property`` 3452 declarations. 3453 3454- ``block``: Can be used to apply attributes to block declarations. This does 3455 not include variables/fields of block pointer type. 3456 3457The use of ``unless`` in match rules is currently restricted to a strict set of 3458sub-rules that are used by the supported attributes. That means that even though 3459``variable(unless(is_parameter))`` is a valid match rule, 3460``variable(unless(is_thread_local))`` is not. 3461 3462Supported Attributes 3463-------------------- 3464 3465Not all attributes can be used with the ``#pragma clang attribute`` directive. 3466Notably, statement attributes like ``[[fallthrough]]`` or type attributes 3467like ``address_space`` aren't supported by this directive. You can determine 3468whether or not an attribute is supported by the pragma by referring to the 3469:doc:`individual documentation for that attribute <AttributeReference>`. 3470 3471The attributes are applied to all matching declarations individually, even when 3472the attribute is semantically incorrect. The attributes that aren't applied to 3473any declaration are not verified semantically. 3474 3475Specifying section names for global objects (#pragma clang section) 3476=================================================================== 3477 3478The ``#pragma clang section`` directive provides a means to assign section-names 3479to global variables, functions and static variables. 3480 3481The section names can be specified as: 3482 3483.. code-block:: c++ 3484 3485 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText" 3486 3487The section names can be reverted back to default name by supplying an empty 3488string to the section kind, for example: 3489 3490.. code-block:: c++ 3491 3492 #pragma clang section bss="" data="" text="" rodata="" relro="" 3493 3494The ``#pragma clang section`` directive obeys the following rules: 3495 3496* The pragma applies to all global variable, statics and function declarations 3497 from the pragma to the end of the translation unit. 3498 3499* The pragma clang section is enabled automatically, without need of any flags. 3500 3501* This feature is only defined to work sensibly for ELF targets. 3502 3503* If section name is specified through _attribute_((section("myname"))), then 3504 the attribute name gains precedence. 3505 3506* Global variables that are initialized to zero will be placed in the named 3507 bss section, if one is present. 3508 3509* The ``#pragma clang section`` directive does not does try to infer section-kind 3510 from the name. For example, naming a section "``.bss.mySec``" does NOT mean 3511 it will be a bss section name. 3512 3513* The decision about which section-kind applies to each global is taken in the back-end. 3514 Once the section-kind is known, appropriate section name, as specified by the user using 3515 ``#pragma clang section`` directive, is applied to that global. 3516 3517Specifying Linker Options on ELF Targets 3518======================================== 3519 3520The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets. 3521The second parameter is the library name (without the traditional Unix prefix of 3522``lib``). This allows you to provide an implicit link of dependent libraries. 3523 3524Evaluating Object Size Dynamically 3525================================== 3526 3527Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are 3528the same as GCC's ``__builtin_object_size`` (which Clang also supports), but 3529``__builtin_dynamic_object_size`` can evaluate the object's size at runtime. 3530``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement 3531for ``__builtin_object_size`` in libraries that support it. 3532 3533For instance, here is a program that ``__builtin_dynamic_object_size`` will make 3534safer: 3535 3536.. code-block:: c 3537 3538 void copy_into_buffer(size_t size) { 3539 char* buffer = malloc(size); 3540 strlcpy(buffer, "some string", strlen("some string")); 3541 // Previous line preprocesses to: 3542 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0)) 3543 } 3544 3545Since the size of ``buffer`` can't be known at compile time, Clang will fold 3546``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written 3547as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into 3548``size``, providing some extra runtime safety. 3549 3550Extended Integer Types 3551====================== 3552 3553Clang supports a set of extended integer types under the syntax ``_ExtInt(N)`` 3554where ``N`` is an integer that specifies the number of bits that are used to represent 3555the type, including the sign bit. The keyword ``_ExtInt`` is a type specifier, thus 3556it can be used in any place a type can, including as a non-type-template-parameter, 3557as the type of a bitfield, and as the underlying type of an enumeration. 3558 3559An extended integer can be declared either signed, or unsigned by using the 3560``signed``/``unsigned`` keywords. If no sign specifier is used or if the ``signed`` 3561keyword is used, the extended integer type is a signed integer and can represent 3562negative values. 3563 3564The ``N`` expression is an integer constant expression, which specifies the number 3565of bits used to represent the type, following normal integer representations for 3566both signed and unsigned types. Both a signed and unsigned extended integer of the 3567same ``N`` value will have the same number of bits in its representation. Many 3568architectures don't have a way of representing non power-of-2 integers, so these 3569architectures emulate these types using larger integers. In these cases, they are 3570expected to follow the 'as-if' rule and do math 'as-if' they were done at the 3571specified number of bits. 3572 3573In order to be consistent with the C language specification, and make the extended 3574integer types useful for their intended purpose, extended integers follow the C 3575standard integer conversion ranks. An extended integer type has a greater rank than 3576any integer type with less precision. However, they have lower rank than any 3577of the built in or other integer types (such as __int128). Usual arithmetic conversions 3578also work the same, where the smaller ranked integer is converted to the larger. 3579 3580The one exception to the C rules for integers for these types is Integer Promotion. 3581Unary +, -, and ~ operators typically will promote operands to ``int``. Doing these 3582promotions would inflate the size of required hardware on some platforms, so extended 3583integer types aren't subject to the integer promotion rules in these cases. 3584 3585In languages (such as OpenCL) that define shift by-out-of-range behavior as a mask, 3586non-power-of-two versions of these types use an unsigned remainder operation to constrain 3587the value to the proper range, preventing undefined behavior. 3588 3589Extended integer types are aligned to the next greatest power-of-2 up to 64 bits. 3590The size of these types for the purposes of layout and ``sizeof`` are the number of 3591bits aligned to this calculated alignment. This permits the use of these types in 3592allocated arrays using common ``sizeof(Array)/sizeof(ElementType)`` pattern. 3593 3594Extended integer types work with the C _Atomic type modifier, however only precisions 3595that are powers-of-2 greater than 8 bit are accepted. 3596 3597Extended integer types align with existing calling conventions. They have the same size 3598and alignment as the smallest basic type that can contain them. Types that are larger 3599than 64 bits are handled in the same way as _int128 is handled; they are conceptually 3600treated as struct of register size chunks. They number of chunks are the smallest 3601number that can contain the types which does not necessarily mean a power-of-2 size. 3602