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_scalar`` (C++, Embarcadero) 1161* ``__is_sealed`` (Microsoft): 1162 Synonym for ``__is_final``. 1163* ``__is_signed`` (C++, Embarcadero): 1164 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. 1165* ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero) 1166* ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero) 1167* ``__is_trivially_assignable`` (C++, GNU, Microsoft) 1168* ``__is_trivially_constructible`` (C++, GNU, Microsoft) 1169* ``__is_trivially_copyable`` (C++, GNU, Microsoft) 1170* ``__is_trivially_destructible`` (C++, MSVC 2013) 1171* ``__is_union`` (C++, GNU, Microsoft, Embarcadero) 1172* ``__is_unsigned`` (C++, Embarcadero) 1173 Note that this currently returns true for enumeration types if the underlying 1174 type is unsigned, in violation of the requirements for ``std::is_unsigned``. 1175 This behavior is likely to change in a future version of Clang. 1176* ``__is_void`` (C++, Embarcadero) 1177* ``__is_volatile`` (C++, Embarcadero) 1178* ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a 1179 reference of type ``T`` bound to an expression of type ``U`` would bind to a 1180 materialized temporary object. If ``T`` is not a reference type the result 1181 is false. Note this trait will also return false when the initialization of 1182 ``T`` from ``U`` is ill-formed. 1183* ``__underlying_type`` (C++, GNU, Microsoft) 1184 1185In addition, the following expression traits are supported: 1186 1187* ``__is_lvalue_expr(e)`` (Embarcadero): 1188 Returns true if ``e`` is an lvalue expression. 1189 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead. 1190* ``__is_rvalue_expr(e)`` (Embarcadero): 1191 Returns true if ``e`` is a prvalue expression. 1192 Deprecated, use ``!__is_reference(decltype((e)))`` instead. 1193 1194There are multiple ways to detect support for a type trait ``__X`` in the 1195compiler, depending on the oldest version of Clang you wish to support. 1196 1197* From Clang 10 onwards, ``__has_builtin(__X)`` can be used. 1198* From Clang 6 onwards, ``!__is_identifier(__X)`` can be used. 1199* From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports 1200 the following traits: 1201 1202 * ``__has_nothrow_assign`` 1203 * ``__has_nothrow_copy`` 1204 * ``__has_nothrow_constructor`` 1205 * ``__has_trivial_assign`` 1206 * ``__has_trivial_copy`` 1207 * ``__has_trivial_constructor`` 1208 * ``__has_trivial_destructor`` 1209 * ``__has_virtual_destructor`` 1210 * ``__is_abstract`` 1211 * ``__is_base_of`` 1212 * ``__is_class`` 1213 * ``__is_constructible`` 1214 * ``__is_convertible_to`` 1215 * ``__is_empty`` 1216 * ``__is_enum`` 1217 * ``__is_final`` 1218 * ``__is_literal`` 1219 * ``__is_standard_layout`` 1220 * ``__is_pod`` 1221 * ``__is_polymorphic`` 1222 * ``__is_sealed`` 1223 * ``__is_trivial`` 1224 * ``__is_trivially_assignable`` 1225 * ``__is_trivially_constructible`` 1226 * ``__is_trivially_copyable`` 1227 * ``__is_union`` 1228 * ``__underlying_type`` 1229 1230A simplistic usage example as might be seen in standard C++ headers follows: 1231 1232.. code-block:: c++ 1233 1234 #if __has_builtin(__is_convertible_to) 1235 template<typename From, typename To> 1236 struct is_convertible_to { 1237 static const bool value = __is_convertible_to(From, To); 1238 }; 1239 #else 1240 // Emulate type trait for compatibility with other compilers. 1241 #endif 1242 1243Blocks 1244====== 1245 1246The syntax and high level language feature description is in 1247:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for 1248the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`. 1249 1250Query for this feature with ``__has_extension(blocks)``. 1251 1252Objective-C Features 1253==================== 1254 1255Related result types 1256-------------------- 1257 1258According to Cocoa conventions, Objective-C methods with certain names 1259("``init``", "``alloc``", etc.) always return objects that are an instance of 1260the receiving class's type. Such methods are said to have a "related result 1261type", meaning that a message send to one of these methods will have the same 1262static type as an instance of the receiver class. For example, given the 1263following classes: 1264 1265.. code-block:: objc 1266 1267 @interface NSObject 1268 + (id)alloc; 1269 - (id)init; 1270 @end 1271 1272 @interface NSArray : NSObject 1273 @end 1274 1275and this common initialization pattern 1276 1277.. code-block:: objc 1278 1279 NSArray *array = [[NSArray alloc] init]; 1280 1281the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because 1282``alloc`` implicitly has a related result type. Similarly, the type of the 1283expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a 1284related result type and its receiver is known to have the type ``NSArray *``. 1285If neither ``alloc`` nor ``init`` had a related result type, the expressions 1286would have had type ``id``, as declared in the method signature. 1287 1288A method with a related result type can be declared by using the type 1289``instancetype`` as its result type. ``instancetype`` is a contextual keyword 1290that is only permitted in the result type of an Objective-C method, e.g. 1291 1292.. code-block:: objc 1293 1294 @interface A 1295 + (instancetype)constructAnA; 1296 @end 1297 1298The related result type can also be inferred for some methods. To determine 1299whether a method has an inferred related result type, the first word in the 1300camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered, 1301and the method will have a related result type if its return type is compatible 1302with the type of its class and if: 1303 1304* the first word is "``alloc``" or "``new``", and the method is a class method, 1305 or 1306 1307* the first word is "``autorelease``", "``init``", "``retain``", or "``self``", 1308 and the method is an instance method. 1309 1310If a method with a related result type is overridden by a subclass method, the 1311subclass method must also return a type that is compatible with the subclass 1312type. For example: 1313 1314.. code-block:: objc 1315 1316 @interface NSString : NSObject 1317 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 1318 @end 1319 1320Related result types only affect the type of a message send or property access 1321via the given method. In all other respects, a method with a related result 1322type is treated the same way as method that returns ``id``. 1323 1324Use ``__has_feature(objc_instancetype)`` to determine whether the 1325``instancetype`` contextual keyword is available. 1326 1327Automatic reference counting 1328---------------------------- 1329 1330Clang provides support for :doc:`automated reference counting 1331<AutomaticReferenceCounting>` in Objective-C, which eliminates the need 1332for manual ``retain``/``release``/``autorelease`` message sends. There are three 1333feature macros associated with automatic reference counting: 1334``__has_feature(objc_arc)`` indicates the availability of automated reference 1335counting in general, while ``__has_feature(objc_arc_weak)`` indicates that 1336automated reference counting also includes support for ``__weak`` pointers to 1337Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs 1338are allowed to have fields that are pointers to Objective-C objects managed by 1339automatic reference counting. 1340 1341.. _objc-weak: 1342 1343Weak references 1344--------------- 1345 1346Clang supports ARC-style weak and unsafe references in Objective-C even 1347outside of ARC mode. Weak references must be explicitly enabled with 1348the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))`` 1349to test whether they are enabled. Unsafe references are enabled 1350unconditionally. ARC-style weak and unsafe references cannot be used 1351when Objective-C garbage collection is enabled. 1352 1353Except as noted below, the language rules for the ``__weak`` and 1354``__unsafe_unretained`` qualifiers (and the ``weak`` and 1355``unsafe_unretained`` property attributes) are just as laid out 1356in the :doc:`ARC specification <AutomaticReferenceCounting>`. 1357In particular, note that some classes do not support forming weak 1358references to their instances, and note that special care must be 1359taken when storing weak references in memory where initialization 1360and deinitialization are outside the responsibility of the compiler 1361(such as in ``malloc``-ed memory). 1362 1363Loading from a ``__weak`` variable always implicitly retains the 1364loaded value. In non-ARC modes, this retain is normally balanced 1365by an implicit autorelease. This autorelease can be suppressed 1366by performing the load in the receiver position of a ``-retain`` 1367message send (e.g. ``[weakReference retain]``); note that this performs 1368only a single retain (the retain done when primitively loading from 1369the weak reference). 1370 1371For the most part, ``__unsafe_unretained`` in non-ARC modes is just the 1372default behavior of variables and therefore is not needed. However, 1373it does have an effect on the semantics of block captures: normally, 1374copying a block which captures an Objective-C object or block pointer 1375causes the captured pointer to be retained or copied, respectively, 1376but that behavior is suppressed when the captured variable is qualified 1377with ``__unsafe_unretained``. 1378 1379Note that the ``__weak`` qualifier formerly meant the GC qualifier in 1380all non-ARC modes and was silently ignored outside of GC modes. It now 1381means the ARC-style qualifier in all non-GC modes and is no longer 1382allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``. 1383It is expected that ``-fobjc-weak`` will eventually be enabled by default 1384in all non-GC Objective-C modes. 1385 1386.. _objc-fixed-enum: 1387 1388Enumerations with a fixed underlying type 1389----------------------------------------- 1390 1391Clang provides support for C++11 enumerations with a fixed underlying type 1392within Objective-C. For example, one can write an enumeration type as: 1393 1394.. code-block:: c++ 1395 1396 typedef enum : unsigned char { Red, Green, Blue } Color; 1397 1398This specifies that the underlying type, which is used to store the enumeration 1399value, is ``unsigned char``. 1400 1401Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed 1402underlying types is available in Objective-C. 1403 1404Interoperability with C++11 lambdas 1405----------------------------------- 1406 1407Clang provides interoperability between C++11 lambdas and blocks-based APIs, by 1408permitting a lambda to be implicitly converted to a block pointer with the 1409corresponding signature. For example, consider an API such as ``NSArray``'s 1410array-sorting method: 1411 1412.. code-block:: objc 1413 1414 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 1415 1416``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult 1417(^)(id, id)``, and parameters of this type are generally provided with block 1418literals as arguments. However, one can also use a C++11 lambda so long as it 1419provides the same signature (in this case, accepting two parameters of type 1420``id`` and returning an ``NSComparisonResult``): 1421 1422.. code-block:: objc 1423 1424 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11", 1425 @"String 02"]; 1426 const NSStringCompareOptions comparisonOptions 1427 = NSCaseInsensitiveSearch | NSNumericSearch | 1428 NSWidthInsensitiveSearch | NSForcedOrderingSearch; 1429 NSLocale *currentLocale = [NSLocale currentLocale]; 1430 NSArray *sorted 1431 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult { 1432 NSRange string1Range = NSMakeRange(0, [s1 length]); 1433 return [s1 compare:s2 options:comparisonOptions 1434 range:string1Range locale:currentLocale]; 1435 }]; 1436 NSLog(@"sorted: %@", sorted); 1437 1438This code relies on an implicit conversion from the type of the lambda 1439expression (an unnamed, local class type called the *closure type*) to the 1440corresponding block pointer type. The conversion itself is expressed by a 1441conversion operator in that closure type that produces a block pointer with the 1442same signature as the lambda itself, e.g., 1443 1444.. code-block:: objc 1445 1446 operator NSComparisonResult (^)(id, id)() const; 1447 1448This conversion function returns a new block that simply forwards the two 1449parameters to the lambda object (which it captures by copy), then returns the 1450result. The returned block is first copied (with ``Block_copy``) and then 1451autoreleased. As an optimization, if a lambda expression is immediately 1452converted to a block pointer (as in the first example, above), then the block 1453is not copied and autoreleased: rather, it is given the same lifetime as a 1454block literal written at that point in the program, which avoids the overhead 1455of copying a block to the heap in the common case. 1456 1457The conversion from a lambda to a block pointer is only available in 1458Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory 1459management (autorelease). 1460 1461Object Literals and Subscripting 1462-------------------------------- 1463 1464Clang provides support for :doc:`Object Literals and Subscripting 1465<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C 1466programming patterns, makes programs more concise, and improves the safety of 1467container creation. There are several feature macros associated with object 1468literals and subscripting: ``__has_feature(objc_array_literals)`` tests the 1469availability of array literals; ``__has_feature(objc_dictionary_literals)`` 1470tests the availability of dictionary literals; 1471``__has_feature(objc_subscripting)`` tests the availability of object 1472subscripting. 1473 1474Objective-C Autosynthesis of Properties 1475--------------------------------------- 1476 1477Clang provides support for autosynthesis of declared properties. Using this 1478feature, clang provides default synthesis of those properties not declared 1479@dynamic and not having user provided backing getter and setter methods. 1480``__has_feature(objc_default_synthesize_properties)`` checks for availability 1481of this feature in version of clang being used. 1482 1483.. _langext-objc-retain-release: 1484 1485Objective-C retaining behavior attributes 1486----------------------------------------- 1487 1488In Objective-C, functions and methods are generally assumed to follow the 1489`Cocoa Memory Management 1490<https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_ 1491conventions for ownership of object arguments and 1492return values. However, there are exceptions, and so Clang provides attributes 1493to allow these exceptions to be documented. This are used by ARC and the 1494`static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be 1495better described using the ``objc_method_family`` attribute instead. 1496 1497**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``, 1498``ns_returns_autoreleased``, ``cf_returns_retained``, and 1499``cf_returns_not_retained`` attributes can be placed on methods and functions 1500that return Objective-C or CoreFoundation objects. They are commonly placed at 1501the end of a function prototype or method declaration: 1502 1503.. code-block:: objc 1504 1505 id foo() __attribute__((ns_returns_retained)); 1506 1507 - (NSString *)bar:(int)x __attribute__((ns_returns_retained)); 1508 1509The ``*_returns_retained`` attributes specify that the returned object has a +1 1510retain count. The ``*_returns_not_retained`` attributes specify that the return 1511object has a +0 retain count, even if the normal convention for its selector 1512would be +1. ``ns_returns_autoreleased`` specifies that the returned object is 1513+0, but is guaranteed to live at least as long as the next flush of an 1514autorelease pool. 1515 1516**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on 1517an parameter declaration; they specify that the argument is expected to have a 1518+1 retain count, which will be balanced in some way by the function or method. 1519The ``ns_consumes_self`` attribute can only be placed on an Objective-C 1520method; it specifies that the method expects its ``self`` parameter to have a 1521+1 retain count, which it will balance in some way. 1522 1523.. code-block:: objc 1524 1525 void foo(__attribute__((ns_consumed)) NSString *string); 1526 1527 - (void) bar __attribute__((ns_consumes_self)); 1528 - (void) baz:(id) __attribute__((ns_consumed)) x; 1529 1530Further examples of these attributes are available in the static analyzer's `list of annotations for analysis 1531<https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_. 1532 1533Query for these features with ``__has_attribute(ns_consumed)``, 1534``__has_attribute(ns_returns_retained)``, etc. 1535 1536Objective-C @available 1537---------------------- 1538 1539It is possible to use the newest SDK but still build a program that can run on 1540older versions of macOS and iOS by passing ``-mmacosx-version-min=`` / 1541``-miphoneos-version-min=``. 1542 1543Before LLVM 5.0, when calling a function that exists only in the OS that's 1544newer than the target OS (as determined by the minimum deployment version), 1545programmers had to carefully check if the function exists at runtime, using 1546null checks for weakly-linked C functions, ``+class`` for Objective-C classes, 1547and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for 1548Objective-C methods. If such a check was missed, the program would compile 1549fine, run fine on newer systems, but crash on older systems. 1550 1551As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes 1552<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together 1553with the new ``@available()`` keyword to assist with this issue. 1554When a method that's introduced in the OS newer than the target OS is called, a 1555-Wunguarded-availability warning is emitted if that call is not guarded: 1556 1557.. code-block:: objc 1558 1559 void my_fun(NSSomeClass* var) { 1560 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is 1561 // built with -mmacosx-version-min=10.11, then this unconditional call 1562 // will emit a -Wunguarded-availability warning: 1563 [var fancyNewMethod]; 1564 } 1565 1566To fix the warning and to avoid the crash on macOS 10.11, wrap it in 1567``if(@available())``: 1568 1569.. code-block:: objc 1570 1571 void my_fun(NSSomeClass* var) { 1572 if (@available(macOS 10.12, *)) { 1573 [var fancyNewMethod]; 1574 } else { 1575 // Put fallback behavior for old macOS versions (and for non-mac 1576 // platforms) here. 1577 } 1578 } 1579 1580The ``*`` is required and means that platforms not explicitly listed will take 1581the true branch, and the compiler will emit ``-Wunguarded-availability`` 1582warnings for unlisted platforms based on those platform's deployment target. 1583More than one platform can be listed in ``@available()``: 1584 1585.. code-block:: objc 1586 1587 void my_fun(NSSomeClass* var) { 1588 if (@available(macOS 10.12, iOS 10, *)) { 1589 [var fancyNewMethod]; 1590 } 1591 } 1592 1593If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called 1594on 10.12, then add an `availability attribute 1595<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it, 1596which will also suppress the warning and require that calls to my_fun() are 1597checked: 1598 1599.. code-block:: objc 1600 1601 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) { 1602 [var fancyNewMethod]; // Now ok. 1603 } 1604 1605``@available()`` is only available in Objective-C code. To use the feature 1606in C and C++ code, use the ``__builtin_available()`` spelling instead. 1607 1608If existing code uses null checks or ``-respondsToSelector:``, it should 1609be changed to use ``@available()`` (or ``__builtin_available``) instead. 1610 1611``-Wunguarded-availability`` is disabled by default, but 1612``-Wunguarded-availability-new``, which only emits this warning for APIs 1613that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and 1614tvOS >= 11, is enabled by default. 1615 1616.. _langext-overloading: 1617 1618Objective-C++ ABI: protocol-qualifier mangling of parameters 1619------------------------------------------------------------ 1620 1621Starting with LLVM 3.4, Clang produces a new mangling for parameters whose 1622type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such 1623parameters to be differentiated from those with the regular unqualified ``id`` 1624type. 1625 1626This was a non-backward compatible mangling change to the ABI. This change 1627allows proper overloading, and also prevents mangling conflicts with template 1628parameters of protocol-qualified type. 1629 1630Query the presence of this new mangling with 1631``__has_feature(objc_protocol_qualifier_mangling)``. 1632 1633 1634OpenCL Features 1635=============== 1636 1637C++ for OpenCL 1638-------------- 1639 1640This functionality is built on top of OpenCL C v2.0 and C++17 enabling most of 1641regular C++ features in OpenCL kernel code. Most functionality from OpenCL C 1642is inherited. This section describes minor differences to OpenCL C and any 1643limitations related to C++ support as well as interactions between OpenCL and 1644C++ features that are not documented elsewhere. 1645 1646Restrictions to C++17 1647^^^^^^^^^^^^^^^^^^^^^ 1648 1649The following features are not supported: 1650 1651- Virtual functions 1652- Exceptions 1653- ``dynamic_cast`` operator 1654- Non-placement ``new``/``delete`` operators 1655- Standard C++ libraries. Currently there is no solution for alternative C++ 1656 libraries provided. Future release will feature library support. 1657 1658 1659Interplay of OpenCL and C++ features 1660^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1661 1662Address space behavior 1663"""""""""""""""""""""" 1664 1665Address spaces are part of the type qualifiers; many rules are just inherited 1666from the qualifier behavior documented in OpenCL C v2.0 s6.5 and Embedded C 1667extension ISO/IEC JTC1 SC22 WG14 N1021 s3.1. Note that since the address space 1668behavior in C++ is not documented formally, Clang extends the existing concept 1669from C and OpenCL. For example conversion rules are extended from qualification 1670conversion but the compatibility is determined using notation of sets and 1671overlapping of address spaces from Embedded C (ISO/IEC JTC1 SC22 WG14 N1021 1672s3.1.3). For OpenCL it means that implicit conversions are allowed from 1673a named address space (except for ``__constant``) to ``__generic`` (OpenCL C 1674v2.0 6.5.5). Reverse conversion is only allowed explicitly. The ``__constant`` 1675address space does not overlap with any other and therefore no valid conversion 1676between ``__constant`` and other address spaces exists. Most of the rules 1677follow this logic. 1678 1679**Casts** 1680 1681C-style casts follow OpenCL C v2.0 rules (s6.5.5). All cast operators 1682permit conversion to ``__generic`` implicitly. However converting from 1683``__generic`` to named address spaces can only be done using ``addrspace_cast``. 1684Note that conversions between ``__constant`` and any other address space 1685are disallowed. 1686 1687.. _opencl_cpp_addrsp_deduction: 1688 1689**Deduction** 1690 1691Address spaces are not deduced for: 1692 1693- non-pointer/non-reference template parameters or any dependent types except 1694 for template specializations. 1695- non-pointer/non-reference class members except for static data members that are 1696 deduced to ``__global`` address space. 1697- non-pointer/non-reference alias declarations. 1698- ``decltype`` expressions. 1699 1700.. code-block:: c++ 1701 1702 template <typename T> 1703 void foo() { 1704 T m; // address space of m will be known at template instantiation time. 1705 T * ptr; // ptr points to __generic address space object. 1706 T & ref = ...; // ref references an object in __generic address space. 1707 }; 1708 1709 template <int N> 1710 struct S { 1711 int i; // i has no address space 1712 static int ii; // ii is in global address space 1713 int * ptr; // ptr points to __generic address space int. 1714 int & ref = ...; // ref references int in __generic address space. 1715 }; 1716 1717 template <int N> 1718 void bar() 1719 { 1720 S<N> s; // s is in __private address space 1721 } 1722 1723TODO: Add example for type alias and decltype! 1724 1725**References** 1726 1727Reference types can be qualified with an address space. 1728 1729.. code-block:: c++ 1730 1731 __private int & ref = ...; // references int in __private address space 1732 1733By default references will refer to ``__generic`` address space objects, except 1734for dependent types that are not template specializations 1735(see :ref:`Deduction <opencl_cpp_addrsp_deduction>`). Address space compatibility 1736checks are performed when references are bound to values. The logic follows the 1737rules from address space pointer conversion (OpenCL v2.0 s6.5.5). 1738 1739**Default address space** 1740 1741All non-static member functions take an implicit object parameter ``this`` that 1742is a pointer type. By default this pointer parameter is in the ``__generic`` 1743address space. All concrete objects passed as an argument to ``this`` parameter 1744will be converted to the ``__generic`` address space first if such conversion is 1745valid. Therefore programs using objects in the ``__constant`` address space will 1746not be compiled unless the address space is explicitly specified using address 1747space qualifiers on member functions 1748(see :ref:`Member function qualifier <opencl_cpp_addrspace_method_qual>`) as the 1749conversion between ``__constant`` and ``__generic`` is disallowed. Member function 1750qualifiers can also be used in case conversion to the ``__generic`` address space 1751is undesirable (even if it is legal). For example, a method can be implemented to 1752exploit memory access coalescing for segments with memory bank. This not only 1753applies to regular member functions but to constructors and destructors too. 1754 1755.. _opencl_cpp_addrspace_method_qual: 1756 1757**Member function qualifier** 1758 1759Clang allows specifying an address space qualifier on member functions to signal 1760that they are to be used with objects constructed in some specific address space. 1761This works just the same as qualifying member functions with ``const`` or any 1762other qualifiers. The overloading resolution will select the candidate with the 1763most specific address space if multiple candidates are provided. If there is no 1764conversion to an address space among candidates, compilation will fail with a 1765diagnostic. 1766 1767.. code-block:: c++ 1768 1769 struct C { 1770 void foo() __local; 1771 void foo(); 1772 }; 1773 1774 __kernel void bar() { 1775 __local C c1; 1776 C c2; 1777 __constant C c3; 1778 c1.foo(); // will resolve to the first foo 1779 c2.foo(); // will resolve to the second foo 1780 c3.foo(); // error due to mismatching address spaces - can't convert to 1781 // __local or __generic 1782 } 1783 1784**Implicit special members** 1785 1786All implicit special members (default, copy, or move constructor, copy or move 1787assignment, destructor) will be generated with the ``__generic`` address space. 1788 1789.. code-block:: c++ 1790 1791 class C { 1792 // Has the following implicit definition 1793 // void C() __generic; 1794 // void C(const __generic C &) __generic; 1795 // void C(__generic C &&) __generic; 1796 // operator= '__generic C &(__generic C &&)' 1797 // operator= '__generic C &(const __generic C &) __generic 1798 } 1799 1800**Builtin operators** 1801 1802All builtin operators are available in the specific address spaces, thus no 1803conversion to ``__generic`` is performed. 1804 1805**Templates** 1806 1807There is no deduction of address spaces in non-pointer/non-reference template 1808parameters and dependent types (see :ref:`Deduction <opencl_cpp_addrsp_deduction>`). 1809The address space of a template parameter is deduced during type deduction if 1810it is not explicitly provided in the instantiation. 1811 1812.. code-block:: c++ 1813 1814 1 template<typename T> 1815 2 void foo(T* i){ 1816 3 T var; 1817 4 } 1818 5 1819 6 __global int g; 1820 7 void bar(){ 1821 8 foo(&g); // error: template instantiation failed as function scope variable 1822 9 // appears to be declared in __global address space (see line 3) 1823 10 } 1824 1825It is not legal to specify multiple different address spaces between template 1826definition and instantiation. If multiple different address spaces are specified in 1827template definition and instantiation, compilation of such a program will fail with 1828a diagnostic. 1829 1830.. code-block:: c++ 1831 1832 template <typename T> 1833 void foo() { 1834 __private T var; 1835 } 1836 1837 void bar() { 1838 foo<__global int>(); // error: conflicting address space qualifiers are provided 1839 // __global and __private 1840 } 1841 1842Once a template has been instantiated, regular restrictions for address spaces will 1843apply. 1844 1845.. code-block:: c++ 1846 1847 template<typename T> 1848 void foo(){ 1849 T var; 1850 } 1851 1852 void bar(){ 1853 foo<__global int>(); // error: function scope variable cannot be declared in 1854 // __global address space 1855 } 1856 1857**Temporary materialization** 1858 1859All temporaries are materialized in the ``__private`` address space. If a 1860reference with another address space is bound to them, the conversion will be 1861generated in case it is valid, otherwise compilation will fail with a diagnostic. 1862 1863.. code-block:: c++ 1864 1865 int bar(const unsigned int &i); 1866 1867 void foo() { 1868 bar(1); // temporary is created in __private address space but converted 1869 // to __generic address space of parameter reference 1870 } 1871 1872 __global const int& f(__global float &ref) { 1873 return ref; // error: address space mismatch between temporary object 1874 // created to hold value converted float->int and return 1875 // value type (can't convert from __private to __global) 1876 } 1877 1878**Initialization of local and constant address space objects** 1879 1880TODO 1881 1882Constructing and destroying global objects 1883^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1884 1885Global objects must be constructed before the first kernel using the global 1886objects is executed and destroyed just after the last kernel using the 1887program objects is executed. In OpenCL v2.0 drivers there is no specific 1888API for invoking global constructors. However, an easy workaround would be 1889to enqueue a constructor initialization kernel that has a name 1890``@_GLOBAL__sub_I_<compiled file name>``. This kernel is only present if there 1891are any global objects to be initialized in the compiled binary. One way to 1892check this is by passing ``CL_PROGRAM_KERNEL_NAMES`` to ``clGetProgramInfo`` 1893(OpenCL v2.0 s5.8.7). 1894 1895Note that if multiple files are compiled and linked into libraries, multiple 1896kernels that initialize global objects for multiple modules would have to be 1897invoked. 1898 1899Applications are currently required to run initialization of global objects 1900manually before running any kernels in which the objects are used. 1901 1902.. code-block:: console 1903 1904 clang -cl-std=clc++ test.cl 1905 1906If there are any global objects to be initialized, the final binary will 1907contain the ``@_GLOBAL__sub_I_test.cl`` kernel to be enqueued. 1908 1909Global destructors can not be invoked in OpenCL v2.0 drivers. However, all 1910memory used for program scope objects is released on ``clReleaseProgram``. 1911 1912Initializer lists for complex numbers in C 1913========================================== 1914 1915clang supports an extension which allows the following in C: 1916 1917.. code-block:: c++ 1918 1919 #include <math.h> 1920 #include <complex.h> 1921 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 1922 1923This construct is useful because there is no way to separately initialize the 1924real and imaginary parts of a complex variable in standard C, given that clang 1925does not support ``_Imaginary``. (Clang also supports the ``__real__`` and 1926``__imag__`` extensions from gcc, which help in some cases, but are not usable 1927in static initializers.) 1928 1929Note that this extension does not allow eliding the braces; the meaning of the 1930following two lines is different: 1931 1932.. code-block:: c++ 1933 1934 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 1935 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 1936 1937This extension also works in C++ mode, as far as that goes, but does not apply 1938to the C++ ``std::complex``. (In C++11, list initialization allows the same 1939syntax to be used with ``std::complex`` with the same meaning.) 1940 1941Builtin Functions 1942================= 1943 1944Clang supports a number of builtin library functions with the same syntax as 1945GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``, 1946``__builtin_choose_expr``, ``__builtin_types_compatible_p``, 1947``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to 1948the GCC builtins, Clang supports a number of builtins that GCC does not, which 1949are listed here. 1950 1951Please note that Clang does not and will not support all of the GCC builtins 1952for vector operations. Instead of using builtins, you should use the functions 1953defined in target-specific header files like ``<xmmintrin.h>``, which define 1954portable wrappers for these. Many of the Clang versions of these functions are 1955implemented directly in terms of :ref:`extended vector support 1956<langext-vectors>` instead of builtins, in order to reduce the number of 1957builtins that we need to implement. 1958 1959``__builtin_assume`` 1960------------------------------ 1961 1962``__builtin_assume`` is used to provide the optimizer with a boolean 1963invariant that is defined to be true. 1964 1965**Syntax**: 1966 1967.. code-block:: c++ 1968 1969 __builtin_assume(bool) 1970 1971**Example of Use**: 1972 1973.. code-block:: c++ 1974 1975 int foo(int x) { 1976 __builtin_assume(x != 0); 1977 1978 // The optimizer may short-circuit this check using the invariant. 1979 if (x == 0) 1980 return do_something(); 1981 1982 return do_something_else(); 1983 } 1984 1985**Description**: 1986 1987The boolean argument to this function is defined to be true. The optimizer may 1988analyze the form of the expression provided as the argument and deduce from 1989that information used to optimize the program. If the condition is violated 1990during execution, the behavior is undefined. The argument itself is never 1991evaluated, so any side effects of the expression will be discarded. 1992 1993Query for this feature with ``__has_builtin(__builtin_assume)``. 1994 1995``__builtin_readcyclecounter`` 1996------------------------------ 1997 1998``__builtin_readcyclecounter`` is used to access the cycle counter register (or 1999a similar low-latency, high-accuracy clock) on those targets that support it. 2000 2001**Syntax**: 2002 2003.. code-block:: c++ 2004 2005 __builtin_readcyclecounter() 2006 2007**Example of Use**: 2008 2009.. code-block:: c++ 2010 2011 unsigned long long t0 = __builtin_readcyclecounter(); 2012 do_something(); 2013 unsigned long long t1 = __builtin_readcyclecounter(); 2014 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow 2015 2016**Description**: 2017 2018The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value, 2019which may be either global or process/thread-specific depending on the target. 2020As the backing counters often overflow quickly (on the order of seconds) this 2021should only be used for timing small intervals. When not supported by the 2022target, the return value is always zero. This builtin takes no arguments and 2023produces an unsigned long long result. 2024 2025Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note 2026that even if present, its use may depend on run-time privilege or other OS 2027controlled state. 2028 2029.. _langext-__builtin_shufflevector: 2030 2031``__builtin_shufflevector`` 2032--------------------------- 2033 2034``__builtin_shufflevector`` is used to express generic vector 2035permutation/shuffle/swizzle operations. This builtin is also very important 2036for the implementation of various target-specific header files like 2037``<xmmintrin.h>``. 2038 2039**Syntax**: 2040 2041.. code-block:: c++ 2042 2043 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 2044 2045**Examples**: 2046 2047.. code-block:: c++ 2048 2049 // identity operation - return 4-element vector v1. 2050 __builtin_shufflevector(v1, v1, 0, 1, 2, 3) 2051 2052 // "Splat" element 0 of V1 into a 4-element result. 2053 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 2054 2055 // Reverse 4-element vector V1. 2056 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 2057 2058 // Concatenate every other element of 4-element vectors V1 and V2. 2059 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 2060 2061 // Concatenate every other element of 8-element vectors V1 and V2. 2062 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 2063 2064 // Shuffle v1 with some elements being undefined 2065 __builtin_shufflevector(v1, v1, 3, -1, 1, -1) 2066 2067**Description**: 2068 2069The first two arguments to ``__builtin_shufflevector`` are vectors that have 2070the same element type. The remaining arguments are a list of integers that 2071specify the elements indices of the first two vectors that should be extracted 2072and returned in a new vector. These element indices are numbered sequentially 2073starting with the first vector, continuing into the second vector. Thus, if 2074``vec1`` is a 4-element vector, index 5 would refer to the second element of 2075``vec2``. An index of -1 can be used to indicate that the corresponding element 2076in the returned vector is a don't care and can be optimized by the backend. 2077 2078The result of ``__builtin_shufflevector`` is a vector with the same element 2079type as ``vec1``/``vec2`` but that has an element count equal to the number of 2080indices specified. 2081 2082Query for this feature with ``__has_builtin(__builtin_shufflevector)``. 2083 2084.. _langext-__builtin_convertvector: 2085 2086``__builtin_convertvector`` 2087--------------------------- 2088 2089``__builtin_convertvector`` is used to express generic vector 2090type-conversion operations. The input vector and the output vector 2091type must have the same number of elements. 2092 2093**Syntax**: 2094 2095.. code-block:: c++ 2096 2097 __builtin_convertvector(src_vec, dst_vec_type) 2098 2099**Examples**: 2100 2101.. code-block:: c++ 2102 2103 typedef double vector4double __attribute__((__vector_size__(32))); 2104 typedef float vector4float __attribute__((__vector_size__(16))); 2105 typedef short vector4short __attribute__((__vector_size__(8))); 2106 vector4float vf; vector4short vs; 2107 2108 // convert from a vector of 4 floats to a vector of 4 doubles. 2109 __builtin_convertvector(vf, vector4double) 2110 // equivalent to: 2111 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] } 2112 2113 // convert from a vector of 4 shorts to a vector of 4 floats. 2114 __builtin_convertvector(vs, vector4float) 2115 // equivalent to: 2116 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] } 2117 2118**Description**: 2119 2120The first argument to ``__builtin_convertvector`` is a vector, and the second 2121argument is a vector type with the same number of elements as the first 2122argument. 2123 2124The result of ``__builtin_convertvector`` is a vector with the same element 2125type as the second argument, with a value defined in terms of the action of a 2126C-style cast applied to each element of the first argument. 2127 2128Query for this feature with ``__has_builtin(__builtin_convertvector)``. 2129 2130``__builtin_bitreverse`` 2131------------------------ 2132 2133* ``__builtin_bitreverse8`` 2134* ``__builtin_bitreverse16`` 2135* ``__builtin_bitreverse32`` 2136* ``__builtin_bitreverse64`` 2137 2138**Syntax**: 2139 2140.. code-block:: c++ 2141 2142 __builtin_bitreverse32(x) 2143 2144**Examples**: 2145 2146.. code-block:: c++ 2147 2148 uint8_t rev_x = __builtin_bitreverse8(x); 2149 uint16_t rev_x = __builtin_bitreverse16(x); 2150 uint32_t rev_y = __builtin_bitreverse32(y); 2151 uint64_t rev_z = __builtin_bitreverse64(z); 2152 2153**Description**: 2154 2155The '``__builtin_bitreverse``' family of builtins is used to reverse 2156the bitpattern of an integer value; for example ``0b10110110`` becomes 2157``0b01101101``. 2158 2159``__builtin_rotateleft`` 2160------------------------ 2161 2162* ``__builtin_rotateleft8`` 2163* ``__builtin_rotateleft16`` 2164* ``__builtin_rotateleft32`` 2165* ``__builtin_rotateleft64`` 2166 2167**Syntax**: 2168 2169.. code-block:: c++ 2170 2171 __builtin_rotateleft32(x, y) 2172 2173**Examples**: 2174 2175.. code-block:: c++ 2176 2177 uint8_t rot_x = __builtin_rotateleft8(x, y); 2178 uint16_t rot_x = __builtin_rotateleft16(x, y); 2179 uint32_t rot_x = __builtin_rotateleft32(x, y); 2180 uint64_t rot_x = __builtin_rotateleft64(x, y); 2181 2182**Description**: 2183 2184The '``__builtin_rotateleft``' family of builtins is used to rotate 2185the bits in the first argument by the amount in the second argument. 2186For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``. 2187The shift value is treated as an unsigned amount modulo the size of 2188the arguments. Both arguments and the result have the bitwidth specified 2189by the name of the builtin. 2190 2191``__builtin_rotateright`` 2192------------------------- 2193 2194* ``__builtin_rotateright8`` 2195* ``__builtin_rotateright16`` 2196* ``__builtin_rotateright32`` 2197* ``__builtin_rotateright64`` 2198 2199**Syntax**: 2200 2201.. code-block:: c++ 2202 2203 __builtin_rotateright32(x, y) 2204 2205**Examples**: 2206 2207.. code-block:: c++ 2208 2209 uint8_t rot_x = __builtin_rotateright8(x, y); 2210 uint16_t rot_x = __builtin_rotateright16(x, y); 2211 uint32_t rot_x = __builtin_rotateright32(x, y); 2212 uint64_t rot_x = __builtin_rotateright64(x, y); 2213 2214**Description**: 2215 2216The '``__builtin_rotateright``' family of builtins is used to rotate 2217the bits in the first argument by the amount in the second argument. 2218For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``. 2219The shift value is treated as an unsigned amount modulo the size of 2220the arguments. Both arguments and the result have the bitwidth specified 2221by the name of the builtin. 2222 2223``__builtin_unreachable`` 2224------------------------- 2225 2226``__builtin_unreachable`` is used to indicate that a specific point in the 2227program cannot be reached, even if the compiler might otherwise think it can. 2228This is useful to improve optimization and eliminates certain warnings. For 2229example, without the ``__builtin_unreachable`` in the example below, the 2230compiler assumes that the inline asm can fall through and prints a "function 2231declared '``noreturn``' should not return" warning. 2232 2233**Syntax**: 2234 2235.. code-block:: c++ 2236 2237 __builtin_unreachable() 2238 2239**Example of use**: 2240 2241.. code-block:: c++ 2242 2243 void myabort(void) __attribute__((noreturn)); 2244 void myabort(void) { 2245 asm("int3"); 2246 __builtin_unreachable(); 2247 } 2248 2249**Description**: 2250 2251The ``__builtin_unreachable()`` builtin has completely undefined behavior. 2252Since it has undefined behavior, it is a statement that it is never reached and 2253the optimizer can take advantage of this to produce better code. This builtin 2254takes no arguments and produces a void result. 2255 2256Query for this feature with ``__has_builtin(__builtin_unreachable)``. 2257 2258``__builtin_unpredictable`` 2259--------------------------- 2260 2261``__builtin_unpredictable`` is used to indicate that a branch condition is 2262unpredictable by hardware mechanisms such as branch prediction logic. 2263 2264**Syntax**: 2265 2266.. code-block:: c++ 2267 2268 __builtin_unpredictable(long long) 2269 2270**Example of use**: 2271 2272.. code-block:: c++ 2273 2274 if (__builtin_unpredictable(x > 0)) { 2275 foo(); 2276 } 2277 2278**Description**: 2279 2280The ``__builtin_unpredictable()`` builtin is expected to be used with control 2281flow conditions such as in ``if`` and ``switch`` statements. 2282 2283Query for this feature with ``__has_builtin(__builtin_unpredictable)``. 2284 2285``__sync_swap`` 2286--------------- 2287 2288``__sync_swap`` is used to atomically swap integers or pointers in memory. 2289 2290**Syntax**: 2291 2292.. code-block:: c++ 2293 2294 type __sync_swap(type *ptr, type value, ...) 2295 2296**Example of Use**: 2297 2298.. code-block:: c++ 2299 2300 int old_value = __sync_swap(&value, new_value); 2301 2302**Description**: 2303 2304The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of 2305atomic intrinsics to allow code to atomically swap the current value with the 2306new value. More importantly, it helps developers write more efficient and 2307correct code by avoiding expensive loops around 2308``__sync_bool_compare_and_swap()`` or relying on the platform specific 2309implementation details of ``__sync_lock_test_and_set()``. The 2310``__sync_swap()`` builtin is a full barrier. 2311 2312``__builtin_addressof`` 2313----------------------- 2314 2315``__builtin_addressof`` performs the functionality of the built-in ``&`` 2316operator, ignoring any ``operator&`` overload. This is useful in constant 2317expressions in C++11, where there is no other way to take the address of an 2318object that overloads ``operator&``. 2319 2320**Example of use**: 2321 2322.. code-block:: c++ 2323 2324 template<typename T> constexpr T *addressof(T &value) { 2325 return __builtin_addressof(value); 2326 } 2327 2328``__builtin_operator_new`` and ``__builtin_operator_delete`` 2329------------------------------------------------------------ 2330 2331``__builtin_operator_new`` allocates memory just like a non-placement non-class 2332*new-expression*. This is exactly like directly calling the normal 2333non-placement ``::operator new``, except that it allows certain optimizations 2334that the C++ standard does not permit for a direct function call to 2335``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and 2336merging allocations). 2337 2338Likewise, ``__builtin_operator_delete`` deallocates memory just like a 2339non-class *delete-expression*, and is exactly like directly calling the normal 2340``::operator delete``, except that it permits optimizations. Only the unsized 2341form of ``__builtin_operator_delete`` is currently available. 2342 2343These builtins are intended for use in the implementation of ``std::allocator`` 2344and other similar allocation libraries, and are only available in C++. 2345 2346``__builtin_preserve_access_index`` 2347----------------------------------- 2348 2349``__builtin_preserve_access_index`` specifies a code section where 2350array subscript access and structure/union member access are relocatable 2351under bpf compile-once run-everywhere framework. Debuginfo (typically 2352with ``-g``) is needed, otherwise, the compiler will exit with an error. 2353The return type for the intrinsic is the same as the type of the 2354argument. 2355 2356**Syntax**: 2357 2358.. code-block:: c 2359 2360 type __builtin_preserve_access_index(type arg) 2361 2362**Example of Use**: 2363 2364.. code-block:: c 2365 2366 struct t { 2367 int i; 2368 int j; 2369 union { 2370 int a; 2371 int b; 2372 } c[4]; 2373 }; 2374 struct t *v = ...; 2375 int *pb =__builtin_preserve_access_index(&v->c[3].b); 2376 __builtin_preserve_access_index(v->j); 2377 2378Multiprecision Arithmetic Builtins 2379---------------------------------- 2380 2381Clang provides a set of builtins which expose multiprecision arithmetic in a 2382manner amenable to C. They all have the following form: 2383 2384.. code-block:: c 2385 2386 unsigned x = ..., y = ..., carryin = ..., carryout; 2387 unsigned sum = __builtin_addc(x, y, carryin, &carryout); 2388 2389Thus one can form a multiprecision addition chain in the following manner: 2390 2391.. code-block:: c 2392 2393 unsigned *x, *y, *z, carryin=0, carryout; 2394 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout); 2395 carryin = carryout; 2396 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout); 2397 carryin = carryout; 2398 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout); 2399 carryin = carryout; 2400 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout); 2401 2402The complete list of builtins are: 2403 2404.. code-block:: c 2405 2406 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 2407 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 2408 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 2409 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 2410 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 2411 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 2412 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 2413 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 2414 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 2415 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 2416 2417Checked Arithmetic Builtins 2418--------------------------- 2419 2420Clang provides a set of builtins that implement checked arithmetic for security 2421critical applications in a manner that is fast and easily expressable in C. As 2422an example of their usage: 2423 2424.. code-block:: c 2425 2426 errorcode_t security_critical_application(...) { 2427 unsigned x, y, result; 2428 ... 2429 if (__builtin_mul_overflow(x, y, &result)) 2430 return kErrorCodeHackers; 2431 ... 2432 use_multiply(result); 2433 ... 2434 } 2435 2436Clang provides the following checked arithmetic builtins: 2437 2438.. code-block:: c 2439 2440 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum); 2441 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff); 2442 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod); 2443 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum); 2444 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum); 2445 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum); 2446 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff); 2447 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff); 2448 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff); 2449 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod); 2450 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod); 2451 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod); 2452 bool __builtin_sadd_overflow (int x, int y, int *sum); 2453 bool __builtin_saddl_overflow (long x, long y, long *sum); 2454 bool __builtin_saddll_overflow(long long x, long long y, long long *sum); 2455 bool __builtin_ssub_overflow (int x, int y, int *diff); 2456 bool __builtin_ssubl_overflow (long x, long y, long *diff); 2457 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff); 2458 bool __builtin_smul_overflow (int x, int y, int *prod); 2459 bool __builtin_smull_overflow (long x, long y, long *prod); 2460 bool __builtin_smulll_overflow(long long x, long long y, long long *prod); 2461 2462Each builtin performs the specified mathematical operation on the 2463first two arguments and stores the result in the third argument. If 2464possible, the result will be equal to mathematically-correct result 2465and the builtin will return 0. Otherwise, the builtin will return 24661 and the result will be equal to the unique value that is equivalent 2467to the mathematically-correct result modulo two raised to the *k* 2468power, where *k* is the number of bits in the result type. The 2469behavior of these builtins is well-defined for all argument values. 2470 2471The first three builtins work generically for operands of any integer type, 2472including boolean types. The operands need not have the same type as each 2473other, or as the result. The other builtins may implicitly promote or 2474convert their operands before performing the operation. 2475 2476Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc. 2477 2478Floating point builtins 2479--------------------------------------- 2480 2481``__builtin_canonicalize`` 2482-------------------------- 2483 2484.. code-block:: c 2485 2486 double __builtin_canonicalize(double); 2487 float __builtin_canonicalizef(float); 2488 long double__builtin_canonicalizel(long double); 2489 2490Returns the platform specific canonical encoding of a floating point 2491number. This canonicalization is useful for implementing certain 2492numeric primitives such as frexp. See `LLVM canonicalize intrinsic 2493<https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for 2494more information on the semantics. 2495 2496String builtins 2497--------------- 2498 2499Clang provides constant expression evaluation support for builtins forms of 2500the following functions from the C standard library ``<string.h>`` header: 2501 2502* ``memchr`` 2503* ``memcmp`` 2504* ``strchr`` 2505* ``strcmp`` 2506* ``strlen`` 2507* ``strncmp`` 2508* ``wcschr`` 2509* ``wcscmp`` 2510* ``wcslen`` 2511* ``wcsncmp`` 2512* ``wmemchr`` 2513* ``wmemcmp`` 2514 2515In each case, the builtin form has the name of the C library function prefixed 2516by ``__builtin_``. Example: 2517 2518.. code-block:: c 2519 2520 void *p = __builtin_memchr("foobar", 'b', 5); 2521 2522In addition to the above, one further builtin is provided: 2523 2524.. code-block:: c 2525 2526 char *__builtin_char_memchr(const char *haystack, int needle, size_t size); 2527 2528``__builtin_char_memchr(a, b, c)`` is identical to 2529``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within 2530constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*`` 2531is disallowed in general). 2532 2533Support for constant expression evaluation for the above builtins be detected 2534with ``__has_feature(cxx_constexpr_string_builtins)``. 2535 2536Atomic Min/Max builtins with memory ordering 2537-------------------------------------------- 2538 2539There are two atomic builtins with min/max in-memory comparison and swap. 2540The syntax and semantics are similar to GCC-compatible __atomic_* builtins. 2541 2542* ``__atomic_fetch_min`` 2543* ``__atomic_fetch_max`` 2544 2545The builtins work with signed and unsigned integers and require to specify memory ordering. 2546The return value is the original value that was stored in memory before comparison. 2547 2548Example: 2549 2550.. code-block:: c 2551 2552 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED); 2553 2554The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``, 2555``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``, 2556``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics. 2557 2558In terms or aquire-release ordering barriers these two operations are always 2559considered as operations with *load-store* semantics, even when the original value 2560is not actually modified after comparison. 2561 2562.. _langext-__c11_atomic: 2563 2564__c11_atomic builtins 2565--------------------- 2566 2567Clang provides a set of builtins which are intended to be used to implement 2568C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the 2569``_explicit`` form of the corresponding C11 operation, and are named with a 2570``__c11_`` prefix. The supported operations, and the differences from 2571the corresponding C11 operations, are: 2572 2573* ``__c11_atomic_init`` 2574* ``__c11_atomic_thread_fence`` 2575* ``__c11_atomic_signal_fence`` 2576* ``__c11_atomic_is_lock_free`` (The argument is the size of the 2577 ``_Atomic(...)`` object, instead of its address) 2578* ``__c11_atomic_store`` 2579* ``__c11_atomic_load`` 2580* ``__c11_atomic_exchange`` 2581* ``__c11_atomic_compare_exchange_strong`` 2582* ``__c11_atomic_compare_exchange_weak`` 2583* ``__c11_atomic_fetch_add`` 2584* ``__c11_atomic_fetch_sub`` 2585* ``__c11_atomic_fetch_and`` 2586* ``__c11_atomic_fetch_or`` 2587* ``__c11_atomic_fetch_xor`` 2588 2589The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, 2590``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are 2591provided, with values corresponding to the enumerators of C11's 2592``memory_order`` enumeration. 2593 2594(Note that Clang additionally provides GCC-compatible ``__atomic_*`` 2595builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0 2596atomic builtins are an explicit form of the corresponding OpenCL 2.0 2597builtin function, and are named with a ``__opencl_`` prefix. The macros 2598``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``, 2599``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``, 2600and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values 2601corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.) 2602 2603Low-level ARM exclusive memory builtins 2604--------------------------------------- 2605 2606Clang provides overloaded builtins giving direct access to the three key ARM 2607instructions for implementing atomic operations. 2608 2609.. code-block:: c 2610 2611 T __builtin_arm_ldrex(const volatile T *addr); 2612 T __builtin_arm_ldaex(const volatile T *addr); 2613 int __builtin_arm_strex(T val, volatile T *addr); 2614 int __builtin_arm_stlex(T val, volatile T *addr); 2615 void __builtin_arm_clrex(void); 2616 2617The types ``T`` currently supported are: 2618 2619* Integer types with width at most 64 bits (or 128 bits on AArch64). 2620* Floating-point types 2621* Pointer types. 2622 2623Note that the compiler does not guarantee it will not insert stores which clear 2624the exclusive monitor in between an ``ldrex`` type operation and its paired 2625``strex``. In practice this is only usually a risk when the extra store is on 2626the same cache line as the variable being modified and Clang will only insert 2627stack stores on its own, so it is best not to use these operations on variables 2628with automatic storage duration. 2629 2630Also, loads and stores may be implicit in code written between the ``ldrex`` and 2631``strex``. Clang will not necessarily mitigate the effects of these either, so 2632care should be exercised. 2633 2634For these reasons the higher level atomic primitives should be preferred where 2635possible. 2636 2637Non-temporal load/store builtins 2638-------------------------------- 2639 2640Clang provides overloaded builtins allowing generation of non-temporal memory 2641accesses. 2642 2643.. code-block:: c 2644 2645 T __builtin_nontemporal_load(T *addr); 2646 void __builtin_nontemporal_store(T value, T *addr); 2647 2648The types ``T`` currently supported are: 2649 2650* Integer types. 2651* Floating-point types. 2652* Vector types. 2653 2654Note that the compiler does not guarantee that non-temporal loads or stores 2655will be used. 2656 2657C++ Coroutines support builtins 2658-------------------------------- 2659 2660.. warning:: 2661 This is a work in progress. Compatibility across Clang/LLVM releases is not 2662 guaranteed. 2663 2664Clang provides experimental builtins to support C++ Coroutines as defined by 2665https://wg21.link/P0057. The following four are intended to be used by the 2666standard library to implement `std::experimental::coroutine_handle` type. 2667 2668**Syntax**: 2669 2670.. code-block:: c 2671 2672 void __builtin_coro_resume(void *addr); 2673 void __builtin_coro_destroy(void *addr); 2674 bool __builtin_coro_done(void *addr); 2675 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise) 2676 2677**Example of use**: 2678 2679.. code-block:: c++ 2680 2681 template <> struct coroutine_handle<void> { 2682 void resume() const { __builtin_coro_resume(ptr); } 2683 void destroy() const { __builtin_coro_destroy(ptr); } 2684 bool done() const { return __builtin_coro_done(ptr); } 2685 // ... 2686 protected: 2687 void *ptr; 2688 }; 2689 2690 template <typename Promise> struct coroutine_handle : coroutine_handle<> { 2691 // ... 2692 Promise &promise() const { 2693 return *reinterpret_cast<Promise *>( 2694 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false)); 2695 } 2696 static coroutine_handle from_promise(Promise &promise) { 2697 coroutine_handle p; 2698 p.ptr = __builtin_coro_promise(&promise, alignof(Promise), 2699 /*from-promise=*/true); 2700 return p; 2701 } 2702 }; 2703 2704 2705Other coroutine builtins are either for internal clang use or for use during 2706development of the coroutine feature. See `Coroutines in LLVM 2707<https://llvm.org/docs/Coroutines.html#intrinsics>`_ for 2708more information on their semantics. Note that builtins matching the intrinsics 2709that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc, 2710llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to 2711an appropriate value during the emission. 2712 2713**Syntax**: 2714 2715.. code-block:: c 2716 2717 size_t __builtin_coro_size() 2718 void *__builtin_coro_frame() 2719 void *__builtin_coro_free(void *coro_frame) 2720 2721 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts) 2722 bool __builtin_coro_alloc() 2723 void *__builtin_coro_begin(void *memory) 2724 void __builtin_coro_end(void *coro_frame, bool unwind) 2725 char __builtin_coro_suspend(bool final) 2726 bool __builtin_coro_param(void *original, void *copy) 2727 2728Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM 2729automatically will insert one if the first argument to `llvm.coro.suspend` is 2730token `none`. If a user calls `__builin_suspend`, clang will insert `token none` 2731as the first argument to the intrinsic. 2732 2733Source location builtins 2734------------------------ 2735 2736Clang provides experimental builtins to support C++ standard library implementation 2737of ``std::experimental::source_location`` as specified in http://wg21.link/N4600. 2738With the exception of ``__builtin_COLUMN``, these builtins are also implemented by 2739GCC. 2740 2741**Syntax**: 2742 2743.. code-block:: c 2744 2745 const char *__builtin_FILE(); 2746 const char *__builtin_FUNCTION(); 2747 unsigned __builtin_LINE(); 2748 unsigned __builtin_COLUMN(); // Clang only 2749 2750**Example of use**: 2751 2752.. code-block:: c++ 2753 2754 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller 2755 const char* file = __builtin_FILE(), 2756 const char* function = __builtin_FUNCTION()) { 2757 if (pred) return; 2758 printf("%s:%d assertion failed in function %s\n", file, line, function); 2759 std::abort(); 2760 } 2761 2762 struct MyAggregateType { 2763 int x; 2764 int line = __builtin_LINE(); // captures line where aggregate initialization occurs 2765 }; 2766 static_assert(MyAggregateType{42}.line == __LINE__); 2767 2768 struct MyClassType { 2769 int line = __builtin_LINE(); // captures line of the constructor used during initialization 2770 constexpr MyClassType(int) { assert(line == __LINE__); } 2771 }; 2772 2773**Description**: 2774 2775The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return 2776the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and 2777``__FILE__`` respectively. These builtins are constant expressions. 2778 2779When the builtins appear as part of a default function argument the invocation 2780point is the location of the caller. When the builtins appear as part of a 2781default member initializer, the invocation point is the location of the 2782constructor or aggregate initialization used to create the object. Otherwise 2783the invocation point is the same as the location of the builtin. 2784 2785When the invocation point of ``__builtin_FUNCTION`` is not a function scope the 2786empty string is returned. 2787 2788Non-standard C++11 Attributes 2789============================= 2790 2791Clang's non-standard C++11 attributes live in the ``clang`` attribute 2792namespace. 2793 2794Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which 2795are accepted with the ``__attribute__((foo))`` syntax are also accepted as 2796``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 2797(see the list of `GCC function attributes 2798<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 2799attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 2800`GCC type attributes 2801<https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC 2802implementation, these attributes must appertain to the *declarator-id* in a 2803declaration, which means they must go either at the start of the declaration or 2804immediately after the name being declared. 2805 2806For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 2807also applies the GNU ``noreturn`` attribute to ``f``. 2808 2809.. code-block:: c++ 2810 2811 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 2812 2813Target-Specific Extensions 2814========================== 2815 2816Clang supports some language features conditionally on some targets. 2817 2818ARM/AArch64 Language Extensions 2819------------------------------- 2820 2821Memory Barrier Intrinsics 2822^^^^^^^^^^^^^^^^^^^^^^^^^ 2823Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined 2824in the `ARM C Language Extensions Release 2.0 2825<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_. 2826Note that these intrinsics are implemented as motion barriers that block 2827reordering of memory accesses and side effect instructions. Other instructions 2828like simple arithmetic may be reordered around the intrinsic. If you expect to 2829have no reordering at all, use inline assembly instead. 2830 2831X86/X86-64 Language Extensions 2832------------------------------ 2833 2834The X86 backend has these language extensions: 2835 2836Memory references to specified segments 2837^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2838 2839Annotating a pointer with address space #256 causes it to be code generated 2840relative to the X86 GS segment register, address space #257 causes it to be 2841relative to the X86 FS segment, and address space #258 causes it to be 2842relative to the X86 SS segment. Note that this is a very very low-level 2843feature that should only be used if you know what you're doing (for example in 2844an OS kernel). 2845 2846Here is an example: 2847 2848.. code-block:: c++ 2849 2850 #define GS_RELATIVE __attribute__((address_space(256))) 2851 int foo(int GS_RELATIVE *P) { 2852 return *P; 2853 } 2854 2855Which compiles to (on X86-32): 2856 2857.. code-block:: gas 2858 2859 _foo: 2860 movl 4(%esp), %eax 2861 movl %gs:(%eax), %eax 2862 ret 2863 2864You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for 2865the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS`` 2866indicate their support. 2867 2868PowerPC Language Extensions 2869------------------------------ 2870 2871Set the Floating Point Rounding Mode 2872^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2873PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set 2874the floating point rounding mode. This function will use the least significant 2875two bits of integer argument to set the floating point rounding mode. 2876 2877.. code-block:: c++ 2878 2879 double __builtin_setrnd(int mode); 2880 2881The effective values for mode are: 2882 2883 - 0 - round to nearest 2884 - 1 - round to zero 2885 - 2 - round to +infinity 2886 - 3 - round to -infinity 2887 2888Note that the mode argument will modulo 4, so if the integer argument is greater 2889than 3, it will only use the least significant two bits of the mode. 2890Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``. 2891 2892PowerPC cache builtins 2893^^^^^^^^^^^^^^^^^^^^^^ 2894 2895The PowerPC architecture specifies instructions implementing cache operations. 2896Clang provides builtins that give direct programmer access to these cache 2897instructions. 2898 2899Currently the following builtins are implemented in clang: 2900 2901``__builtin_dcbf`` copies the contents of a modified block from the data cache 2902to main memory and flushes the copy from the data cache. 2903 2904**Syntax**: 2905 2906.. code-block:: c 2907 2908 void __dcbf(const void* addr); /* Data Cache Block Flush */ 2909 2910**Example of Use**: 2911 2912.. code-block:: c 2913 2914 int a = 1; 2915 __builtin_dcbf (&a); 2916 2917Extensions for Static Analysis 2918============================== 2919 2920Clang supports additional attributes that are useful for documenting program 2921invariants and rules for static analysis tools, such as the `Clang Static 2922Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented 2923in the analyzer's `list of source-level annotations 2924<https://clang-analyzer.llvm.org/annotations.html>`_. 2925 2926 2927Extensions for Dynamic Analysis 2928=============================== 2929 2930Use ``__has_feature(address_sanitizer)`` to check if the code is being built 2931with :doc:`AddressSanitizer`. 2932 2933Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 2934with :doc:`ThreadSanitizer`. 2935 2936Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 2937with :doc:`MemorySanitizer`. 2938 2939Use ``__has_feature(safe_stack)`` to check if the code is being built 2940with :doc:`SafeStack`. 2941 2942 2943Extensions for selectively disabling optimization 2944================================================= 2945 2946Clang provides a mechanism for selectively disabling optimizations in functions 2947and methods. 2948 2949To disable optimizations in a single function definition, the GNU-style or C++11 2950non-standard attribute ``optnone`` can be used. 2951 2952.. code-block:: c++ 2953 2954 // The following functions will not be optimized. 2955 // GNU-style attribute 2956 __attribute__((optnone)) int foo() { 2957 // ... code 2958 } 2959 // C++11 attribute 2960 [[clang::optnone]] int bar() { 2961 // ... code 2962 } 2963 2964To facilitate disabling optimization for a range of function definitions, a 2965range-based pragma is provided. Its syntax is ``#pragma clang optimize`` 2966followed by ``off`` or ``on``. 2967 2968All function definitions in the region between an ``off`` and the following 2969``on`` will be decorated with the ``optnone`` attribute unless doing so would 2970conflict with explicit attributes already present on the function (e.g. the 2971ones that control inlining). 2972 2973.. code-block:: c++ 2974 2975 #pragma clang optimize off 2976 // This function will be decorated with optnone. 2977 int foo() { 2978 // ... code 2979 } 2980 2981 // optnone conflicts with always_inline, so bar() will not be decorated. 2982 __attribute__((always_inline)) int bar() { 2983 // ... code 2984 } 2985 #pragma clang optimize on 2986 2987If no ``on`` is found to close an ``off`` region, the end of the region is the 2988end of the compilation unit. 2989 2990Note that a stray ``#pragma clang optimize on`` does not selectively enable 2991additional optimizations when compiling at low optimization levels. This feature 2992can only be used to selectively disable optimizations. 2993 2994The pragma has an effect on functions only at the point of their definition; for 2995function templates, this means that the state of the pragma at the point of an 2996instantiation is not necessarily relevant. Consider the following example: 2997 2998.. code-block:: c++ 2999 3000 template<typename T> T twice(T t) { 3001 return 2 * t; 3002 } 3003 3004 #pragma clang optimize off 3005 template<typename T> T thrice(T t) { 3006 return 3 * t; 3007 } 3008 3009 int container(int a, int b) { 3010 return twice(a) + thrice(b); 3011 } 3012 #pragma clang optimize on 3013 3014In this example, the definition of the template function ``twice`` is outside 3015the pragma region, whereas the definition of ``thrice`` is inside the region. 3016The ``container`` function is also in the region and will not be optimized, but 3017it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of 3018these two instantiations, ``twice`` will be optimized (because its definition 3019was outside the region) and ``thrice`` will not be optimized. 3020 3021Extensions for loop hint optimizations 3022====================================== 3023 3024The ``#pragma clang loop`` directive is used to specify hints for optimizing the 3025subsequent for, while, do-while, or c++11 range-based for loop. The directive 3026provides options for vectorization, interleaving, predication, unrolling and 3027distribution. Loop hints can be specified before any loop and will be ignored if 3028the optimization is not safe to apply. 3029 3030There are loop hints that control transformations (e.g. vectorization, loop 3031unrolling) and there are loop hints that set transformation options (e.g. 3032``vectorize_width``, ``unroll_count``). Pragmas setting transformation options 3033imply the transformation is enabled, as if it was enabled via the corresponding 3034transformation pragma (e.g. ``vectorize(enable)``). If the transformation is 3035disabled (e.g. ``vectorize(disable)``), that takes precedence over 3036transformations option pragmas implying that transformation. 3037 3038Vectorization, Interleaving, and Predication 3039-------------------------------------------- 3040 3041A vectorized loop performs multiple iterations of the original loop 3042in parallel using vector instructions. The instruction set of the target 3043processor determines which vector instructions are available and their vector 3044widths. This restricts the types of loops that can be vectorized. The vectorizer 3045automatically determines if the loop is safe and profitable to vectorize. A 3046vector instruction cost model is used to select the vector width. 3047 3048Interleaving multiple loop iterations allows modern processors to further 3049improve instruction-level parallelism (ILP) using advanced hardware features, 3050such as multiple execution units and out-of-order execution. The vectorizer uses 3051a cost model that depends on the register pressure and generated code size to 3052select the interleaving count. 3053 3054Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled 3055by ``interleave(enable)``. This is useful when compiling with ``-Os`` to 3056manually enable vectorization or interleaving. 3057 3058.. code-block:: c++ 3059 3060 #pragma clang loop vectorize(enable) 3061 #pragma clang loop interleave(enable) 3062 for(...) { 3063 ... 3064 } 3065 3066The vector width is specified by ``vectorize_width(_value_)`` and the interleave 3067count is specified by ``interleave_count(_value_)``, where 3068_value_ is a positive integer. This is useful for specifying the optimal 3069width/count of the set of target architectures supported by your application. 3070 3071.. code-block:: c++ 3072 3073 #pragma clang loop vectorize_width(2) 3074 #pragma clang loop interleave_count(2) 3075 for(...) { 3076 ... 3077 } 3078 3079Specifying a width/count of 1 disables the optimization, and is equivalent to 3080``vectorize(disable)`` or ``interleave(disable)``. 3081 3082Vector predication is enabled by ``vectorize_predicate(enable)``, for example: 3083 3084.. code-block:: c++ 3085 3086 #pragma clang loop vectorize(enable) 3087 #pragma clang loop vectorize_predicate(enable) 3088 for(...) { 3089 ... 3090 } 3091 3092This predicates (masks) all instructions in the loop, which allows the scalar 3093remainder loop (the tail) to be folded into the main vectorized loop. This 3094might be more efficient when vector predication is efficiently supported by the 3095target platform. 3096 3097Loop Unrolling 3098-------------- 3099 3100Unrolling a loop reduces the loop control overhead and exposes more 3101opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling 3102eliminates the loop and replaces it with an enumerated sequence of loop 3103iterations. Full unrolling is only possible if the loop trip count is known at 3104compile time. Partial unrolling replicates the loop body within the loop and 3105reduces the trip count. 3106 3107If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the 3108loop if the trip count is known at compile time. If the fully unrolled code size 3109is greater than an internal limit the loop will be partially unrolled up to this 3110limit. If the trip count is not known at compile time the loop will be partially 3111unrolled with a heuristically chosen unroll factor. 3112 3113.. code-block:: c++ 3114 3115 #pragma clang loop unroll(enable) 3116 for(...) { 3117 ... 3118 } 3119 3120If ``unroll(full)`` is specified the unroller will attempt to fully unroll the 3121loop if the trip count is known at compile time identically to 3122``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled 3123if the loop count is not known at compile time. 3124 3125.. code-block:: c++ 3126 3127 #pragma clang loop unroll(full) 3128 for(...) { 3129 ... 3130 } 3131 3132The unroll count can be specified explicitly with ``unroll_count(_value_)`` where 3133_value_ is a positive integer. If this value is greater than the trip count the 3134loop will be fully unrolled. Otherwise the loop is partially unrolled subject 3135to the same code size limit as with ``unroll(enable)``. 3136 3137.. code-block:: c++ 3138 3139 #pragma clang loop unroll_count(8) 3140 for(...) { 3141 ... 3142 } 3143 3144Unrolling of a loop can be prevented by specifying ``unroll(disable)``. 3145 3146Loop Distribution 3147----------------- 3148 3149Loop Distribution allows splitting a loop into multiple loops. This is 3150beneficial for example when the entire loop cannot be vectorized but some of the 3151resulting loops can. 3152 3153If ``distribute(enable))`` is specified and the loop has memory dependencies 3154that inhibit vectorization, the compiler will attempt to isolate the offending 3155operations into a new loop. This optimization is not enabled by default, only 3156loops marked with the pragma are considered. 3157 3158.. code-block:: c++ 3159 3160 #pragma clang loop distribute(enable) 3161 for (i = 0; i < N; ++i) { 3162 S1: A[i + 1] = A[i] + B[i]; 3163 S2: C[i] = D[i] * E[i]; 3164 } 3165 3166This loop will be split into two loops between statements S1 and S2. The 3167second loop containing S2 will be vectorized. 3168 3169Loop Distribution is currently not enabled by default in the optimizer because 3170it can hurt performance in some cases. For example, instruction-level 3171parallelism could be reduced by sequentializing the execution of the 3172statements S1 and S2 above. 3173 3174If Loop Distribution is turned on globally with 3175``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can 3176be used the disable it on a per-loop basis. 3177 3178Additional Information 3179---------------------- 3180 3181For convenience multiple loop hints can be specified on a single line. 3182 3183.. code-block:: c++ 3184 3185 #pragma clang loop vectorize_width(4) interleave_count(8) 3186 for(...) { 3187 ... 3188 } 3189 3190If an optimization cannot be applied any hints that apply to it will be ignored. 3191For example, the hint ``vectorize_width(4)`` is ignored if the loop is not 3192proven safe to vectorize. To identify and diagnose optimization issues use 3193`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the 3194user guide for details. 3195 3196Extensions to specify floating-point flags 3197==================================================== 3198 3199The ``#pragma clang fp`` pragma allows floating-point options to be specified 3200for a section of the source code. This pragma can only appear at file scope or 3201at the start of a compound statement (excluding comments). When using within a 3202compound statement, the pragma is active within the scope of the compound 3203statement. 3204 3205Currently, only FP contraction can be controlled with the pragma. ``#pragma 3206clang fp contract`` specifies whether the compiler should contract a multiply 3207and an addition (or subtraction) into a fused FMA operation when supported by 3208the target. 3209 3210The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on`` 3211option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows 3212fusion as specified the language standard. The ``fast`` option allows fusiong 3213in cases when the language standard does not make this possible (e.g. across 3214statements in C) 3215 3216.. code-block:: c++ 3217 3218 for(...) { 3219 #pragma clang fp contract(fast) 3220 a = b[i] * c[i]; 3221 d[i] += a; 3222 } 3223 3224 3225The pragma can also be used with ``off`` which turns FP contraction off for a 3226section of the code. This can be useful when fast contraction is otherwise 3227enabled for the translation unit with the ``-ffp-contract=fast`` flag. 3228 3229Specifying an attribute for multiple declarations (#pragma clang attribute) 3230=========================================================================== 3231 3232The ``#pragma clang attribute`` directive can be used to apply an attribute to 3233multiple declarations. The ``#pragma clang attribute push`` variation of the 3234directive pushes a new "scope" of ``#pragma clang attribute`` that attributes 3235can be added to. The ``#pragma clang attribute (...)`` variation adds an 3236attribute to that scope, and the ``#pragma clang attribute pop`` variation pops 3237the scope. You can also use ``#pragma clang attribute push (...)``, which is a 3238shorthand for when you want to add one attribute to a new scope. Multiple push 3239directives can be nested inside each other. 3240 3241The attributes that are used in the ``#pragma clang attribute`` directives 3242can be written using the GNU-style syntax: 3243 3244.. code-block:: c++ 3245 3246 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function) 3247 3248 void function(); // The function now has the annotate("custom") attribute 3249 3250 #pragma clang attribute pop 3251 3252The attributes can also be written using the C++11 style syntax: 3253 3254.. code-block:: c++ 3255 3256 #pragma clang attribute push ([[noreturn]], apply_to = function) 3257 3258 void function(); // The function now has the [[noreturn]] attribute 3259 3260 #pragma clang attribute pop 3261 3262The ``__declspec`` style syntax is also supported: 3263 3264.. code-block:: c++ 3265 3266 #pragma clang attribute push (__declspec(dllexport), apply_to = function) 3267 3268 void function(); // The function now has the __declspec(dllexport) attribute 3269 3270 #pragma clang attribute pop 3271 3272A single push directive accepts only one attribute regardless of the syntax 3273used. 3274 3275Because multiple push directives can be nested, if you're writing a macro that 3276expands to ``_Pragma("clang attribute")`` it's good hygiene (though not 3277required) to add a namespace to your push/pop directives. A pop directive with a 3278namespace will pop the innermost push that has that same namespace. This will 3279ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note 3280that an ``pop`` without a namespace will pop the innermost ``push`` without a 3281namespace. ``push``es with a namespace can only be popped by ``pop`` with the 3282same namespace. For instance: 3283 3284.. code-block:: c++ 3285 3286 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)") 3287 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop") 3288 3289 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)") 3290 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop") 3291 3292 3293 ASSUME_NORETURN_BEGIN 3294 ASSUME_UNAVAILABLE_BEGIN 3295 void function(); // function has [[noreturn]] and __attribute__((unavailable)) 3296 ASSUME_NORETURN_END 3297 void other_function(); // function has __attribute__((unavailable)) 3298 ASSUME_UNAVAILABLE_END 3299 3300Without the namespaces on the macros, ``other_function`` will be annotated with 3301``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like 3302a contrived example, but its very possible for this kind of situation to appear 3303in real code if the pragmas are spread out across a large file. You can test if 3304your version of clang supports namespaces on ``#pragma clang attribute`` with 3305``__has_extension(pragma_clang_attribute_namespaces)``. 3306 3307Subject Match Rules 3308------------------- 3309 3310The set of declarations that receive a single attribute from the attribute stack 3311depends on the subject match rules that were specified in the pragma. Subject 3312match rules are specified after the attribute. The compiler expects an 3313identifier that corresponds to the subject set specifier. The ``apply_to`` 3314specifier is currently the only supported subject set specifier. It allows you 3315to specify match rules that form a subset of the attribute's allowed subject 3316set, i.e. the compiler doesn't require all of the attribute's subjects. For 3317example, an attribute like ``[[nodiscard]]`` whose subject set includes 3318``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at 3319least one of these rules after ``apply_to``: 3320 3321.. code-block:: c++ 3322 3323 #pragma clang attribute push([[nodiscard]], apply_to = enum) 3324 3325 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]] 3326 3327 struct Record1 { }; // The struct will *not* receive [[nodiscard]] 3328 3329 #pragma clang attribute pop 3330 3331 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum)) 3332 3333 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]] 3334 3335 struct Record2 { }; // The struct *will* receive [[nodiscard]] 3336 3337 #pragma clang attribute pop 3338 3339 // This is an error, since [[nodiscard]] can't be applied to namespaces: 3340 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace)) 3341 3342 #pragma clang attribute pop 3343 3344Multiple match rules can be specified using the ``any`` match rule, as shown 3345in the example above. The ``any`` rule applies attributes to all declarations 3346that are matched by at least one of the rules in the ``any``. It doesn't nest 3347and can't be used inside the other match rules. Redundant match rules or rules 3348that conflict with one another should not be used inside of ``any``. 3349 3350Clang supports the following match rules: 3351 3352- ``function``: Can be used to apply attributes to functions. This includes C++ 3353 member functions, static functions, operators, and constructors/destructors. 3354 3355- ``function(is_member)``: Can be used to apply attributes to C++ member 3356 functions. This includes members like static functions, operators, and 3357 constructors/destructors. 3358 3359- ``hasType(functionType)``: Can be used to apply attributes to functions, C++ 3360 member functions, and variables/fields whose type is a function pointer. It 3361 does not apply attributes to Objective-C methods or blocks. 3362 3363- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations 3364 and C++11 type aliases. 3365 3366- ``record``: Can be used to apply attributes to ``struct``, ``class``, and 3367 ``union`` declarations. 3368 3369- ``record(unless(is_union))``: Can be used to apply attributes only to 3370 ``struct`` and ``class`` declarations. 3371 3372- ``enum``: Can be be used to apply attributes to enumeration declarations. 3373 3374- ``enum_constant``: Can be used to apply attributes to enumerators. 3375 3376- ``variable``: Can be used to apply attributes to variables, including 3377 local variables, parameters, global variables, and static member variables. 3378 It does not apply attributes to instance member variables or Objective-C 3379 ivars. 3380 3381- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local 3382 variables only. 3383 3384- ``variable(is_global)``: Can be used to apply attributes to global variables 3385 only. 3386 3387- ``variable(is_parameter)``: Can be used to apply attributes to parameters 3388 only. 3389 3390- ``variable(unless(is_parameter))``: Can be used to apply attributes to all 3391 the variables that are not parameters. 3392 3393- ``field``: Can be used to apply attributes to non-static member variables 3394 in a record. This includes Objective-C ivars. 3395 3396- ``namespace``: Can be used to apply attributes to ``namespace`` declarations. 3397 3398- ``objc_interface``: Can be used to apply attributes to ``@interface`` 3399 declarations. 3400 3401- ``objc_protocol``: Can be used to apply attributes to ``@protocol`` 3402 declarations. 3403 3404- ``objc_category``: Can be used to apply attributes to category declarations, 3405 including class extensions. 3406 3407- ``objc_method``: Can be used to apply attributes to Objective-C methods, 3408 including instance and class methods. Implicit methods like implicit property 3409 getters and setters do not receive the attribute. 3410 3411- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C 3412 instance methods. 3413 3414- ``objc_property``: Can be used to apply attributes to ``@property`` 3415 declarations. 3416 3417- ``block``: Can be used to apply attributes to block declarations. This does 3418 not include variables/fields of block pointer type. 3419 3420The use of ``unless`` in match rules is currently restricted to a strict set of 3421sub-rules that are used by the supported attributes. That means that even though 3422``variable(unless(is_parameter))`` is a valid match rule, 3423``variable(unless(is_thread_local))`` is not. 3424 3425Supported Attributes 3426-------------------- 3427 3428Not all attributes can be used with the ``#pragma clang attribute`` directive. 3429Notably, statement attributes like ``[[fallthrough]]`` or type attributes 3430like ``address_space`` aren't supported by this directive. You can determine 3431whether or not an attribute is supported by the pragma by referring to the 3432:doc:`individual documentation for that attribute <AttributeReference>`. 3433 3434The attributes are applied to all matching declarations individually, even when 3435the attribute is semantically incorrect. The attributes that aren't applied to 3436any declaration are not verified semantically. 3437 3438Specifying section names for global objects (#pragma clang section) 3439=================================================================== 3440 3441The ``#pragma clang section`` directive provides a means to assign section-names 3442to global variables, functions and static variables. 3443 3444The section names can be specified as: 3445 3446.. code-block:: c++ 3447 3448 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText" 3449 3450The section names can be reverted back to default name by supplying an empty 3451string to the section kind, for example: 3452 3453.. code-block:: c++ 3454 3455 #pragma clang section bss="" data="" text="" rodata="" relro="" 3456 3457The ``#pragma clang section`` directive obeys the following rules: 3458 3459* The pragma applies to all global variable, statics and function declarations 3460 from the pragma to the end of the translation unit. 3461 3462* The pragma clang section is enabled automatically, without need of any flags. 3463 3464* This feature is only defined to work sensibly for ELF targets. 3465 3466* If section name is specified through _attribute_((section("myname"))), then 3467 the attribute name gains precedence. 3468 3469* Global variables that are initialized to zero will be placed in the named 3470 bss section, if one is present. 3471 3472* The ``#pragma clang section`` directive does not does try to infer section-kind 3473 from the name. For example, naming a section "``.bss.mySec``" does NOT mean 3474 it will be a bss section name. 3475 3476* The decision about which section-kind applies to each global is taken in the back-end. 3477 Once the section-kind is known, appropriate section name, as specified by the user using 3478 ``#pragma clang section`` directive, is applied to that global. 3479 3480Specifying Linker Options on ELF Targets 3481======================================== 3482 3483The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets. 3484The second parameter is the library name (without the traditional Unix prefix of 3485``lib``). This allows you to provide an implicit link of dependent libraries. 3486 3487Evaluating Object Size Dynamically 3488================================== 3489 3490Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are 3491the same as GCC's ``__builtin_object_size`` (which Clang also supports), but 3492``__builtin_dynamic_object_size`` can evaluate the object's size at runtime. 3493``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement 3494for ``__builtin_object_size`` in libraries that support it. 3495 3496For instance, here is a program that ``__builtin_dynamic_object_size`` will make 3497safer: 3498 3499.. code-block:: c 3500 3501 void copy_into_buffer(size_t size) { 3502 char* buffer = malloc(size); 3503 strlcpy(buffer, "some string", strlen("some string")); 3504 // Previous line preprocesses to: 3505 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0)) 3506 } 3507 3508Since the size of ``buffer`` can't be known at compile time, Clang will fold 3509``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written 3510as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into 3511``size``, providing some extra runtime safety. 3512