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 2590The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, 2591``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are 2592provided, with values corresponding to the enumerators of C11's 2593``memory_order`` enumeration. 2594 2595(Note that Clang additionally provides GCC-compatible ``__atomic_*`` 2596builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0 2597atomic builtins are an explicit form of the corresponding OpenCL 2.0 2598builtin function, and are named with a ``__opencl_`` prefix. The macros 2599``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``, 2600``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``, 2601and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values 2602corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.) 2603 2604Low-level ARM exclusive memory builtins 2605--------------------------------------- 2606 2607Clang provides overloaded builtins giving direct access to the three key ARM 2608instructions for implementing atomic operations. 2609 2610.. code-block:: c 2611 2612 T __builtin_arm_ldrex(const volatile T *addr); 2613 T __builtin_arm_ldaex(const volatile T *addr); 2614 int __builtin_arm_strex(T val, volatile T *addr); 2615 int __builtin_arm_stlex(T val, volatile T *addr); 2616 void __builtin_arm_clrex(void); 2617 2618The types ``T`` currently supported are: 2619 2620* Integer types with width at most 64 bits (or 128 bits on AArch64). 2621* Floating-point types 2622* Pointer types. 2623 2624Note that the compiler does not guarantee it will not insert stores which clear 2625the exclusive monitor in between an ``ldrex`` type operation and its paired 2626``strex``. In practice this is only usually a risk when the extra store is on 2627the same cache line as the variable being modified and Clang will only insert 2628stack stores on its own, so it is best not to use these operations on variables 2629with automatic storage duration. 2630 2631Also, loads and stores may be implicit in code written between the ``ldrex`` and 2632``strex``. Clang will not necessarily mitigate the effects of these either, so 2633care should be exercised. 2634 2635For these reasons the higher level atomic primitives should be preferred where 2636possible. 2637 2638Non-temporal load/store builtins 2639-------------------------------- 2640 2641Clang provides overloaded builtins allowing generation of non-temporal memory 2642accesses. 2643 2644.. code-block:: c 2645 2646 T __builtin_nontemporal_load(T *addr); 2647 void __builtin_nontemporal_store(T value, T *addr); 2648 2649The types ``T`` currently supported are: 2650 2651* Integer types. 2652* Floating-point types. 2653* Vector types. 2654 2655Note that the compiler does not guarantee that non-temporal loads or stores 2656will be used. 2657 2658C++ Coroutines support builtins 2659-------------------------------- 2660 2661.. warning:: 2662 This is a work in progress. Compatibility across Clang/LLVM releases is not 2663 guaranteed. 2664 2665Clang provides experimental builtins to support C++ Coroutines as defined by 2666https://wg21.link/P0057. The following four are intended to be used by the 2667standard library to implement `std::experimental::coroutine_handle` type. 2668 2669**Syntax**: 2670 2671.. code-block:: c 2672 2673 void __builtin_coro_resume(void *addr); 2674 void __builtin_coro_destroy(void *addr); 2675 bool __builtin_coro_done(void *addr); 2676 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise) 2677 2678**Example of use**: 2679 2680.. code-block:: c++ 2681 2682 template <> struct coroutine_handle<void> { 2683 void resume() const { __builtin_coro_resume(ptr); } 2684 void destroy() const { __builtin_coro_destroy(ptr); } 2685 bool done() const { return __builtin_coro_done(ptr); } 2686 // ... 2687 protected: 2688 void *ptr; 2689 }; 2690 2691 template <typename Promise> struct coroutine_handle : coroutine_handle<> { 2692 // ... 2693 Promise &promise() const { 2694 return *reinterpret_cast<Promise *>( 2695 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false)); 2696 } 2697 static coroutine_handle from_promise(Promise &promise) { 2698 coroutine_handle p; 2699 p.ptr = __builtin_coro_promise(&promise, alignof(Promise), 2700 /*from-promise=*/true); 2701 return p; 2702 } 2703 }; 2704 2705 2706Other coroutine builtins are either for internal clang use or for use during 2707development of the coroutine feature. See `Coroutines in LLVM 2708<https://llvm.org/docs/Coroutines.html#intrinsics>`_ for 2709more information on their semantics. Note that builtins matching the intrinsics 2710that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc, 2711llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to 2712an appropriate value during the emission. 2713 2714**Syntax**: 2715 2716.. code-block:: c 2717 2718 size_t __builtin_coro_size() 2719 void *__builtin_coro_frame() 2720 void *__builtin_coro_free(void *coro_frame) 2721 2722 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts) 2723 bool __builtin_coro_alloc() 2724 void *__builtin_coro_begin(void *memory) 2725 void __builtin_coro_end(void *coro_frame, bool unwind) 2726 char __builtin_coro_suspend(bool final) 2727 bool __builtin_coro_param(void *original, void *copy) 2728 2729Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM 2730automatically will insert one if the first argument to `llvm.coro.suspend` is 2731token `none`. If a user calls `__builin_suspend`, clang will insert `token none` 2732as the first argument to the intrinsic. 2733 2734Source location builtins 2735------------------------ 2736 2737Clang provides experimental builtins to support C++ standard library implementation 2738of ``std::experimental::source_location`` as specified in http://wg21.link/N4600. 2739With the exception of ``__builtin_COLUMN``, these builtins are also implemented by 2740GCC. 2741 2742**Syntax**: 2743 2744.. code-block:: c 2745 2746 const char *__builtin_FILE(); 2747 const char *__builtin_FUNCTION(); 2748 unsigned __builtin_LINE(); 2749 unsigned __builtin_COLUMN(); // Clang only 2750 2751**Example of use**: 2752 2753.. code-block:: c++ 2754 2755 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller 2756 const char* file = __builtin_FILE(), 2757 const char* function = __builtin_FUNCTION()) { 2758 if (pred) return; 2759 printf("%s:%d assertion failed in function %s\n", file, line, function); 2760 std::abort(); 2761 } 2762 2763 struct MyAggregateType { 2764 int x; 2765 int line = __builtin_LINE(); // captures line where aggregate initialization occurs 2766 }; 2767 static_assert(MyAggregateType{42}.line == __LINE__); 2768 2769 struct MyClassType { 2770 int line = __builtin_LINE(); // captures line of the constructor used during initialization 2771 constexpr MyClassType(int) { assert(line == __LINE__); } 2772 }; 2773 2774**Description**: 2775 2776The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return 2777the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and 2778``__FILE__`` respectively. These builtins are constant expressions. 2779 2780When the builtins appear as part of a default function argument the invocation 2781point is the location of the caller. When the builtins appear as part of a 2782default member initializer, the invocation point is the location of the 2783constructor or aggregate initialization used to create the object. Otherwise 2784the invocation point is the same as the location of the builtin. 2785 2786When the invocation point of ``__builtin_FUNCTION`` is not a function scope the 2787empty string is returned. 2788 2789Non-standard C++11 Attributes 2790============================= 2791 2792Clang's non-standard C++11 attributes live in the ``clang`` attribute 2793namespace. 2794 2795Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which 2796are accepted with the ``__attribute__((foo))`` syntax are also accepted as 2797``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 2798(see the list of `GCC function attributes 2799<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 2800attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 2801`GCC type attributes 2802<https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC 2803implementation, these attributes must appertain to the *declarator-id* in a 2804declaration, which means they must go either at the start of the declaration or 2805immediately after the name being declared. 2806 2807For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 2808also applies the GNU ``noreturn`` attribute to ``f``. 2809 2810.. code-block:: c++ 2811 2812 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 2813 2814Target-Specific Extensions 2815========================== 2816 2817Clang supports some language features conditionally on some targets. 2818 2819ARM/AArch64 Language Extensions 2820------------------------------- 2821 2822Memory Barrier Intrinsics 2823^^^^^^^^^^^^^^^^^^^^^^^^^ 2824Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined 2825in the `ARM C Language Extensions Release 2.0 2826<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_. 2827Note that these intrinsics are implemented as motion barriers that block 2828reordering of memory accesses and side effect instructions. Other instructions 2829like simple arithmetic may be reordered around the intrinsic. If you expect to 2830have no reordering at all, use inline assembly instead. 2831 2832X86/X86-64 Language Extensions 2833------------------------------ 2834 2835The X86 backend has these language extensions: 2836 2837Memory references to specified segments 2838^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2839 2840Annotating a pointer with address space #256 causes it to be code generated 2841relative to the X86 GS segment register, address space #257 causes it to be 2842relative to the X86 FS segment, and address space #258 causes it to be 2843relative to the X86 SS segment. Note that this is a very very low-level 2844feature that should only be used if you know what you're doing (for example in 2845an OS kernel). 2846 2847Here is an example: 2848 2849.. code-block:: c++ 2850 2851 #define GS_RELATIVE __attribute__((address_space(256))) 2852 int foo(int GS_RELATIVE *P) { 2853 return *P; 2854 } 2855 2856Which compiles to (on X86-32): 2857 2858.. code-block:: gas 2859 2860 _foo: 2861 movl 4(%esp), %eax 2862 movl %gs:(%eax), %eax 2863 ret 2864 2865You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for 2866the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS`` 2867indicate their support. 2868 2869PowerPC Language Extensions 2870------------------------------ 2871 2872Set the Floating Point Rounding Mode 2873^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2874PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set 2875the floating point rounding mode. This function will use the least significant 2876two bits of integer argument to set the floating point rounding mode. 2877 2878.. code-block:: c++ 2879 2880 double __builtin_setrnd(int mode); 2881 2882The effective values for mode are: 2883 2884 - 0 - round to nearest 2885 - 1 - round to zero 2886 - 2 - round to +infinity 2887 - 3 - round to -infinity 2888 2889Note that the mode argument will modulo 4, so if the integer argument is greater 2890than 3, it will only use the least significant two bits of the mode. 2891Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``. 2892 2893PowerPC cache builtins 2894^^^^^^^^^^^^^^^^^^^^^^ 2895 2896The PowerPC architecture specifies instructions implementing cache operations. 2897Clang provides builtins that give direct programmer access to these cache 2898instructions. 2899 2900Currently the following builtins are implemented in clang: 2901 2902``__builtin_dcbf`` copies the contents of a modified block from the data cache 2903to main memory and flushes the copy from the data cache. 2904 2905**Syntax**: 2906 2907.. code-block:: c 2908 2909 void __dcbf(const void* addr); /* Data Cache Block Flush */ 2910 2911**Example of Use**: 2912 2913.. code-block:: c 2914 2915 int a = 1; 2916 __builtin_dcbf (&a); 2917 2918Extensions for Static Analysis 2919============================== 2920 2921Clang supports additional attributes that are useful for documenting program 2922invariants and rules for static analysis tools, such as the `Clang Static 2923Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented 2924in the analyzer's `list of source-level annotations 2925<https://clang-analyzer.llvm.org/annotations.html>`_. 2926 2927 2928Extensions for Dynamic Analysis 2929=============================== 2930 2931Use ``__has_feature(address_sanitizer)`` to check if the code is being built 2932with :doc:`AddressSanitizer`. 2933 2934Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 2935with :doc:`ThreadSanitizer`. 2936 2937Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 2938with :doc:`MemorySanitizer`. 2939 2940Use ``__has_feature(safe_stack)`` to check if the code is being built 2941with :doc:`SafeStack`. 2942 2943 2944Extensions for selectively disabling optimization 2945================================================= 2946 2947Clang provides a mechanism for selectively disabling optimizations in functions 2948and methods. 2949 2950To disable optimizations in a single function definition, the GNU-style or C++11 2951non-standard attribute ``optnone`` can be used. 2952 2953.. code-block:: c++ 2954 2955 // The following functions will not be optimized. 2956 // GNU-style attribute 2957 __attribute__((optnone)) int foo() { 2958 // ... code 2959 } 2960 // C++11 attribute 2961 [[clang::optnone]] int bar() { 2962 // ... code 2963 } 2964 2965To facilitate disabling optimization for a range of function definitions, a 2966range-based pragma is provided. Its syntax is ``#pragma clang optimize`` 2967followed by ``off`` or ``on``. 2968 2969All function definitions in the region between an ``off`` and the following 2970``on`` will be decorated with the ``optnone`` attribute unless doing so would 2971conflict with explicit attributes already present on the function (e.g. the 2972ones that control inlining). 2973 2974.. code-block:: c++ 2975 2976 #pragma clang optimize off 2977 // This function will be decorated with optnone. 2978 int foo() { 2979 // ... code 2980 } 2981 2982 // optnone conflicts with always_inline, so bar() will not be decorated. 2983 __attribute__((always_inline)) int bar() { 2984 // ... code 2985 } 2986 #pragma clang optimize on 2987 2988If no ``on`` is found to close an ``off`` region, the end of the region is the 2989end of the compilation unit. 2990 2991Note that a stray ``#pragma clang optimize on`` does not selectively enable 2992additional optimizations when compiling at low optimization levels. This feature 2993can only be used to selectively disable optimizations. 2994 2995The pragma has an effect on functions only at the point of their definition; for 2996function templates, this means that the state of the pragma at the point of an 2997instantiation is not necessarily relevant. Consider the following example: 2998 2999.. code-block:: c++ 3000 3001 template<typename T> T twice(T t) { 3002 return 2 * t; 3003 } 3004 3005 #pragma clang optimize off 3006 template<typename T> T thrice(T t) { 3007 return 3 * t; 3008 } 3009 3010 int container(int a, int b) { 3011 return twice(a) + thrice(b); 3012 } 3013 #pragma clang optimize on 3014 3015In this example, the definition of the template function ``twice`` is outside 3016the pragma region, whereas the definition of ``thrice`` is inside the region. 3017The ``container`` function is also in the region and will not be optimized, but 3018it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of 3019these two instantiations, ``twice`` will be optimized (because its definition 3020was outside the region) and ``thrice`` will not be optimized. 3021 3022Extensions for loop hint optimizations 3023====================================== 3024 3025The ``#pragma clang loop`` directive is used to specify hints for optimizing the 3026subsequent for, while, do-while, or c++11 range-based for loop. The directive 3027provides options for vectorization, interleaving, predication, unrolling and 3028distribution. Loop hints can be specified before any loop and will be ignored if 3029the optimization is not safe to apply. 3030 3031There are loop hints that control transformations (e.g. vectorization, loop 3032unrolling) and there are loop hints that set transformation options (e.g. 3033``vectorize_width``, ``unroll_count``). Pragmas setting transformation options 3034imply the transformation is enabled, as if it was enabled via the corresponding 3035transformation pragma (e.g. ``vectorize(enable)``). If the transformation is 3036disabled (e.g. ``vectorize(disable)``), that takes precedence over 3037transformations option pragmas implying that transformation. 3038 3039Vectorization, Interleaving, and Predication 3040-------------------------------------------- 3041 3042A vectorized loop performs multiple iterations of the original loop 3043in parallel using vector instructions. The instruction set of the target 3044processor determines which vector instructions are available and their vector 3045widths. This restricts the types of loops that can be vectorized. The vectorizer 3046automatically determines if the loop is safe and profitable to vectorize. A 3047vector instruction cost model is used to select the vector width. 3048 3049Interleaving multiple loop iterations allows modern processors to further 3050improve instruction-level parallelism (ILP) using advanced hardware features, 3051such as multiple execution units and out-of-order execution. The vectorizer uses 3052a cost model that depends on the register pressure and generated code size to 3053select the interleaving count. 3054 3055Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled 3056by ``interleave(enable)``. This is useful when compiling with ``-Os`` to 3057manually enable vectorization or interleaving. 3058 3059.. code-block:: c++ 3060 3061 #pragma clang loop vectorize(enable) 3062 #pragma clang loop interleave(enable) 3063 for(...) { 3064 ... 3065 } 3066 3067The vector width is specified by ``vectorize_width(_value_)`` and the interleave 3068count is specified by ``interleave_count(_value_)``, where 3069_value_ is a positive integer. This is useful for specifying the optimal 3070width/count of the set of target architectures supported by your application. 3071 3072.. code-block:: c++ 3073 3074 #pragma clang loop vectorize_width(2) 3075 #pragma clang loop interleave_count(2) 3076 for(...) { 3077 ... 3078 } 3079 3080Specifying a width/count of 1 disables the optimization, and is equivalent to 3081``vectorize(disable)`` or ``interleave(disable)``. 3082 3083Vector predication is enabled by ``vectorize_predicate(enable)``, for example: 3084 3085.. code-block:: c++ 3086 3087 #pragma clang loop vectorize(enable) 3088 #pragma clang loop vectorize_predicate(enable) 3089 for(...) { 3090 ... 3091 } 3092 3093This predicates (masks) all instructions in the loop, which allows the scalar 3094remainder loop (the tail) to be folded into the main vectorized loop. This 3095might be more efficient when vector predication is efficiently supported by the 3096target platform. 3097 3098Loop Unrolling 3099-------------- 3100 3101Unrolling a loop reduces the loop control overhead and exposes more 3102opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling 3103eliminates the loop and replaces it with an enumerated sequence of loop 3104iterations. Full unrolling is only possible if the loop trip count is known at 3105compile time. Partial unrolling replicates the loop body within the loop and 3106reduces the trip count. 3107 3108If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the 3109loop if the trip count is known at compile time. If the fully unrolled code size 3110is greater than an internal limit the loop will be partially unrolled up to this 3111limit. If the trip count is not known at compile time the loop will be partially 3112unrolled with a heuristically chosen unroll factor. 3113 3114.. code-block:: c++ 3115 3116 #pragma clang loop unroll(enable) 3117 for(...) { 3118 ... 3119 } 3120 3121If ``unroll(full)`` is specified the unroller will attempt to fully unroll the 3122loop if the trip count is known at compile time identically to 3123``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled 3124if the loop count is not known at compile time. 3125 3126.. code-block:: c++ 3127 3128 #pragma clang loop unroll(full) 3129 for(...) { 3130 ... 3131 } 3132 3133The unroll count can be specified explicitly with ``unroll_count(_value_)`` where 3134_value_ is a positive integer. If this value is greater than the trip count the 3135loop will be fully unrolled. Otherwise the loop is partially unrolled subject 3136to the same code size limit as with ``unroll(enable)``. 3137 3138.. code-block:: c++ 3139 3140 #pragma clang loop unroll_count(8) 3141 for(...) { 3142 ... 3143 } 3144 3145Unrolling of a loop can be prevented by specifying ``unroll(disable)``. 3146 3147Loop Distribution 3148----------------- 3149 3150Loop Distribution allows splitting a loop into multiple loops. This is 3151beneficial for example when the entire loop cannot be vectorized but some of the 3152resulting loops can. 3153 3154If ``distribute(enable))`` is specified and the loop has memory dependencies 3155that inhibit vectorization, the compiler will attempt to isolate the offending 3156operations into a new loop. This optimization is not enabled by default, only 3157loops marked with the pragma are considered. 3158 3159.. code-block:: c++ 3160 3161 #pragma clang loop distribute(enable) 3162 for (i = 0; i < N; ++i) { 3163 S1: A[i + 1] = A[i] + B[i]; 3164 S2: C[i] = D[i] * E[i]; 3165 } 3166 3167This loop will be split into two loops between statements S1 and S2. The 3168second loop containing S2 will be vectorized. 3169 3170Loop Distribution is currently not enabled by default in the optimizer because 3171it can hurt performance in some cases. For example, instruction-level 3172parallelism could be reduced by sequentializing the execution of the 3173statements S1 and S2 above. 3174 3175If Loop Distribution is turned on globally with 3176``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can 3177be used the disable it on a per-loop basis. 3178 3179Additional Information 3180---------------------- 3181 3182For convenience multiple loop hints can be specified on a single line. 3183 3184.. code-block:: c++ 3185 3186 #pragma clang loop vectorize_width(4) interleave_count(8) 3187 for(...) { 3188 ... 3189 } 3190 3191If an optimization cannot be applied any hints that apply to it will be ignored. 3192For example, the hint ``vectorize_width(4)`` is ignored if the loop is not 3193proven safe to vectorize. To identify and diagnose optimization issues use 3194`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the 3195user guide for details. 3196 3197Extensions to specify floating-point flags 3198==================================================== 3199 3200The ``#pragma clang fp`` pragma allows floating-point options to be specified 3201for a section of the source code. This pragma can only appear at file scope or 3202at the start of a compound statement (excluding comments). When using within a 3203compound statement, the pragma is active within the scope of the compound 3204statement. 3205 3206Currently, only FP contraction can be controlled with the pragma. ``#pragma 3207clang fp contract`` specifies whether the compiler should contract a multiply 3208and an addition (or subtraction) into a fused FMA operation when supported by 3209the target. 3210 3211The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on`` 3212option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows 3213fusion as specified the language standard. The ``fast`` option allows fusiong 3214in cases when the language standard does not make this possible (e.g. across 3215statements in C) 3216 3217.. code-block:: c++ 3218 3219 for(...) { 3220 #pragma clang fp contract(fast) 3221 a = b[i] * c[i]; 3222 d[i] += a; 3223 } 3224 3225 3226The pragma can also be used with ``off`` which turns FP contraction off for a 3227section of the code. This can be useful when fast contraction is otherwise 3228enabled for the translation unit with the ``-ffp-contract=fast`` flag. 3229 3230Specifying an attribute for multiple declarations (#pragma clang attribute) 3231=========================================================================== 3232 3233The ``#pragma clang attribute`` directive can be used to apply an attribute to 3234multiple declarations. The ``#pragma clang attribute push`` variation of the 3235directive pushes a new "scope" of ``#pragma clang attribute`` that attributes 3236can be added to. The ``#pragma clang attribute (...)`` variation adds an 3237attribute to that scope, and the ``#pragma clang attribute pop`` variation pops 3238the scope. You can also use ``#pragma clang attribute push (...)``, which is a 3239shorthand for when you want to add one attribute to a new scope. Multiple push 3240directives can be nested inside each other. 3241 3242The attributes that are used in the ``#pragma clang attribute`` directives 3243can be written using the GNU-style syntax: 3244 3245.. code-block:: c++ 3246 3247 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function) 3248 3249 void function(); // The function now has the annotate("custom") attribute 3250 3251 #pragma clang attribute pop 3252 3253The attributes can also be written using the C++11 style syntax: 3254 3255.. code-block:: c++ 3256 3257 #pragma clang attribute push ([[noreturn]], apply_to = function) 3258 3259 void function(); // The function now has the [[noreturn]] attribute 3260 3261 #pragma clang attribute pop 3262 3263The ``__declspec`` style syntax is also supported: 3264 3265.. code-block:: c++ 3266 3267 #pragma clang attribute push (__declspec(dllexport), apply_to = function) 3268 3269 void function(); // The function now has the __declspec(dllexport) attribute 3270 3271 #pragma clang attribute pop 3272 3273A single push directive accepts only one attribute regardless of the syntax 3274used. 3275 3276Because multiple push directives can be nested, if you're writing a macro that 3277expands to ``_Pragma("clang attribute")`` it's good hygiene (though not 3278required) to add a namespace to your push/pop directives. A pop directive with a 3279namespace will pop the innermost push that has that same namespace. This will 3280ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note 3281that an ``pop`` without a namespace will pop the innermost ``push`` without a 3282namespace. ``push``es with a namespace can only be popped by ``pop`` with the 3283same namespace. For instance: 3284 3285.. code-block:: c++ 3286 3287 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)") 3288 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop") 3289 3290 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)") 3291 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop") 3292 3293 3294 ASSUME_NORETURN_BEGIN 3295 ASSUME_UNAVAILABLE_BEGIN 3296 void function(); // function has [[noreturn]] and __attribute__((unavailable)) 3297 ASSUME_NORETURN_END 3298 void other_function(); // function has __attribute__((unavailable)) 3299 ASSUME_UNAVAILABLE_END 3300 3301Without the namespaces on the macros, ``other_function`` will be annotated with 3302``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like 3303a contrived example, but its very possible for this kind of situation to appear 3304in real code if the pragmas are spread out across a large file. You can test if 3305your version of clang supports namespaces on ``#pragma clang attribute`` with 3306``__has_extension(pragma_clang_attribute_namespaces)``. 3307 3308Subject Match Rules 3309------------------- 3310 3311The set of declarations that receive a single attribute from the attribute stack 3312depends on the subject match rules that were specified in the pragma. Subject 3313match rules are specified after the attribute. The compiler expects an 3314identifier that corresponds to the subject set specifier. The ``apply_to`` 3315specifier is currently the only supported subject set specifier. It allows you 3316to specify match rules that form a subset of the attribute's allowed subject 3317set, i.e. the compiler doesn't require all of the attribute's subjects. For 3318example, an attribute like ``[[nodiscard]]`` whose subject set includes 3319``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at 3320least one of these rules after ``apply_to``: 3321 3322.. code-block:: c++ 3323 3324 #pragma clang attribute push([[nodiscard]], apply_to = enum) 3325 3326 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]] 3327 3328 struct Record1 { }; // The struct will *not* receive [[nodiscard]] 3329 3330 #pragma clang attribute pop 3331 3332 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum)) 3333 3334 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]] 3335 3336 struct Record2 { }; // The struct *will* receive [[nodiscard]] 3337 3338 #pragma clang attribute pop 3339 3340 // This is an error, since [[nodiscard]] can't be applied to namespaces: 3341 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace)) 3342 3343 #pragma clang attribute pop 3344 3345Multiple match rules can be specified using the ``any`` match rule, as shown 3346in the example above. The ``any`` rule applies attributes to all declarations 3347that are matched by at least one of the rules in the ``any``. It doesn't nest 3348and can't be used inside the other match rules. Redundant match rules or rules 3349that conflict with one another should not be used inside of ``any``. 3350 3351Clang supports the following match rules: 3352 3353- ``function``: Can be used to apply attributes to functions. This includes C++ 3354 member functions, static functions, operators, and constructors/destructors. 3355 3356- ``function(is_member)``: Can be used to apply attributes to C++ member 3357 functions. This includes members like static functions, operators, and 3358 constructors/destructors. 3359 3360- ``hasType(functionType)``: Can be used to apply attributes to functions, C++ 3361 member functions, and variables/fields whose type is a function pointer. It 3362 does not apply attributes to Objective-C methods or blocks. 3363 3364- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations 3365 and C++11 type aliases. 3366 3367- ``record``: Can be used to apply attributes to ``struct``, ``class``, and 3368 ``union`` declarations. 3369 3370- ``record(unless(is_union))``: Can be used to apply attributes only to 3371 ``struct`` and ``class`` declarations. 3372 3373- ``enum``: Can be be used to apply attributes to enumeration declarations. 3374 3375- ``enum_constant``: Can be used to apply attributes to enumerators. 3376 3377- ``variable``: Can be used to apply attributes to variables, including 3378 local variables, parameters, global variables, and static member variables. 3379 It does not apply attributes to instance member variables or Objective-C 3380 ivars. 3381 3382- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local 3383 variables only. 3384 3385- ``variable(is_global)``: Can be used to apply attributes to global variables 3386 only. 3387 3388- ``variable(is_parameter)``: Can be used to apply attributes to parameters 3389 only. 3390 3391- ``variable(unless(is_parameter))``: Can be used to apply attributes to all 3392 the variables that are not parameters. 3393 3394- ``field``: Can be used to apply attributes to non-static member variables 3395 in a record. This includes Objective-C ivars. 3396 3397- ``namespace``: Can be used to apply attributes to ``namespace`` declarations. 3398 3399- ``objc_interface``: Can be used to apply attributes to ``@interface`` 3400 declarations. 3401 3402- ``objc_protocol``: Can be used to apply attributes to ``@protocol`` 3403 declarations. 3404 3405- ``objc_category``: Can be used to apply attributes to category declarations, 3406 including class extensions. 3407 3408- ``objc_method``: Can be used to apply attributes to Objective-C methods, 3409 including instance and class methods. Implicit methods like implicit property 3410 getters and setters do not receive the attribute. 3411 3412- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C 3413 instance methods. 3414 3415- ``objc_property``: Can be used to apply attributes to ``@property`` 3416 declarations. 3417 3418- ``block``: Can be used to apply attributes to block declarations. This does 3419 not include variables/fields of block pointer type. 3420 3421The use of ``unless`` in match rules is currently restricted to a strict set of 3422sub-rules that are used by the supported attributes. That means that even though 3423``variable(unless(is_parameter))`` is a valid match rule, 3424``variable(unless(is_thread_local))`` is not. 3425 3426Supported Attributes 3427-------------------- 3428 3429Not all attributes can be used with the ``#pragma clang attribute`` directive. 3430Notably, statement attributes like ``[[fallthrough]]`` or type attributes 3431like ``address_space`` aren't supported by this directive. You can determine 3432whether or not an attribute is supported by the pragma by referring to the 3433:doc:`individual documentation for that attribute <AttributeReference>`. 3434 3435The attributes are applied to all matching declarations individually, even when 3436the attribute is semantically incorrect. The attributes that aren't applied to 3437any declaration are not verified semantically. 3438 3439Specifying section names for global objects (#pragma clang section) 3440=================================================================== 3441 3442The ``#pragma clang section`` directive provides a means to assign section-names 3443to global variables, functions and static variables. 3444 3445The section names can be specified as: 3446 3447.. code-block:: c++ 3448 3449 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText" 3450 3451The section names can be reverted back to default name by supplying an empty 3452string to the section kind, for example: 3453 3454.. code-block:: c++ 3455 3456 #pragma clang section bss="" data="" text="" rodata="" relro="" 3457 3458The ``#pragma clang section`` directive obeys the following rules: 3459 3460* The pragma applies to all global variable, statics and function declarations 3461 from the pragma to the end of the translation unit. 3462 3463* The pragma clang section is enabled automatically, without need of any flags. 3464 3465* This feature is only defined to work sensibly for ELF targets. 3466 3467* If section name is specified through _attribute_((section("myname"))), then 3468 the attribute name gains precedence. 3469 3470* Global variables that are initialized to zero will be placed in the named 3471 bss section, if one is present. 3472 3473* The ``#pragma clang section`` directive does not does try to infer section-kind 3474 from the name. For example, naming a section "``.bss.mySec``" does NOT mean 3475 it will be a bss section name. 3476 3477* The decision about which section-kind applies to each global is taken in the back-end. 3478 Once the section-kind is known, appropriate section name, as specified by the user using 3479 ``#pragma clang section`` directive, is applied to that global. 3480 3481Specifying Linker Options on ELF Targets 3482======================================== 3483 3484The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets. 3485The second parameter is the library name (without the traditional Unix prefix of 3486``lib``). This allows you to provide an implicit link of dependent libraries. 3487 3488Evaluating Object Size Dynamically 3489================================== 3490 3491Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are 3492the same as GCC's ``__builtin_object_size`` (which Clang also supports), but 3493``__builtin_dynamic_object_size`` can evaluate the object's size at runtime. 3494``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement 3495for ``__builtin_object_size`` in libraries that support it. 3496 3497For instance, here is a program that ``__builtin_dynamic_object_size`` will make 3498safer: 3499 3500.. code-block:: c 3501 3502 void copy_into_buffer(size_t size) { 3503 char* buffer = malloc(size); 3504 strlcpy(buffer, "some string", strlen("some string")); 3505 // Previous line preprocesses to: 3506 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0)) 3507 } 3508 3509Since the size of ``buffer`` can't be known at compile time, Clang will fold 3510``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written 3511as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into 3512``size``, providing some extra runtime safety. 3513