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