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<http://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. It evaluates to 1 if the builtin is supported or 0 if not. 42It can be used like this: 43 44.. code-block:: c++ 45 46 #ifndef __has_builtin // Optional of course. 47 #define __has_builtin(x) 0 // Compatibility with non-clang compilers. 48 #endif 49 50 ... 51 #if __has_builtin(__builtin_trap) 52 __builtin_trap(); 53 #else 54 abort(); 55 #endif 56 ... 57 58.. _langext-__has_feature-__has_extension: 59 60``__has_feature`` and ``__has_extension`` 61----------------------------------------- 62 63These function-like macros take a single identifier argument that is the name 64of a feature. ``__has_feature`` evaluates to 1 if the feature is both 65supported by Clang and standardized in the current language standard or 0 if 66not (but see :ref:`below <langext-has-feature-back-compat>`), while 67``__has_extension`` evaluates to 1 if the feature is supported by Clang in the 68current language (either as a language extension or a standard language 69feature) or 0 if not. They can be used like this: 70 71.. code-block:: c++ 72 73 #ifndef __has_feature // Optional of course. 74 #define __has_feature(x) 0 // Compatibility with non-clang compilers. 75 #endif 76 #ifndef __has_extension 77 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers. 78 #endif 79 80 ... 81 #if __has_feature(cxx_rvalue_references) 82 // This code will only be compiled with the -std=c++11 and -std=gnu++11 83 // options, because rvalue references are only standardized in C++11. 84 #endif 85 86 #if __has_extension(cxx_rvalue_references) 87 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98 88 // and -std=gnu++98 options, because rvalue references are supported as a 89 // language extension in C++98. 90 #endif 91 92.. _langext-has-feature-back-compat: 93 94For backward compatibility, ``__has_feature`` can also be used to test 95for support for non-standardized features, i.e. features not prefixed ``c_``, 96``cxx_`` or ``objc_``. 97 98Another use of ``__has_feature`` is to check for compiler features not related 99to the language standard, such as e.g. :doc:`AddressSanitizer 100<AddressSanitizer>`. 101 102If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent 103to ``__has_feature``. 104 105The feature tag is described along with the language feature below. 106 107The feature name or extension name can also be specified with a preceding and 108following ``__`` (double underscore) to avoid interference from a macro with 109the same name. For instance, ``__cxx_rvalue_references__`` can be used instead 110of ``cxx_rvalue_references``. 111 112``__has_cpp_attribute`` 113----------------------- 114 115This function-like macro takes a single argument that is the name of a 116C++11-style attribute. The argument can either be a single identifier, or a 117scoped identifier. If the attribute is supported, a nonzero value is returned. 118If the attribute is a standards-based attribute, this macro returns a nonzero 119value based on the year and month in which the attribute was voted into the 120working draft. If the attribute is not supported by the current compliation 121target, this macro evaluates to 0. It can be used like this: 122 123.. code-block:: c++ 124 125 #ifndef __has_cpp_attribute // Optional of course. 126 #define __has_cpp_attribute(x) 0 // Compatibility with non-clang compilers. 127 #endif 128 129 ... 130 #if __has_cpp_attribute(clang::fallthrough) 131 #define FALLTHROUGH [[clang::fallthrough]] 132 #else 133 #define FALLTHROUGH 134 #endif 135 ... 136 137The attribute identifier (but not scope) can also be specified with a preceding 138and following ``__`` (double underscore) to avoid interference from a macro with 139the same name. For instance, ``gnu::__const__`` can be used instead of 140``gnu::const``. 141 142``__has_attribute`` 143------------------- 144 145This function-like macro takes a single identifier argument that is the name of 146a GNU-style attribute. It evaluates to 1 if the attribute is supported by the 147current compilation target, or 0 if not. It can be used like this: 148 149.. code-block:: c++ 150 151 #ifndef __has_attribute // Optional of course. 152 #define __has_attribute(x) 0 // Compatibility with non-clang compilers. 153 #endif 154 155 ... 156 #if __has_attribute(always_inline) 157 #define ALWAYS_INLINE __attribute__((always_inline)) 158 #else 159 #define ALWAYS_INLINE 160 #endif 161 ... 162 163The attribute name can also be specified with a preceding and following ``__`` 164(double underscore) to avoid interference from a macro with the same name. For 165instance, ``__always_inline__`` can be used instead of ``always_inline``. 166 167 168``__has_declspec_attribute`` 169---------------------------- 170 171This function-like macro takes a single identifier argument that is the name of 172an attribute implemented as a Microsoft-style ``__declspec`` attribute. It 173evaluates to 1 if the attribute is supported by the current compilation target, 174or 0 if not. It can be used like this: 175 176.. code-block:: c++ 177 178 #ifndef __has_declspec_attribute // Optional of course. 179 #define __has_declspec_attribute(x) 0 // Compatibility with non-clang compilers. 180 #endif 181 182 ... 183 #if __has_declspec_attribute(dllexport) 184 #define DLLEXPORT __declspec(dllexport) 185 #else 186 #define DLLEXPORT 187 #endif 188 ... 189 190The attribute name can also be specified with a preceding and following ``__`` 191(double underscore) to avoid interference from a macro with the same name. For 192instance, ``__dllexport__`` can be used instead of ``dllexport``. 193 194``__is_identifier`` 195------------------- 196 197This function-like macro takes a single identifier argument that might be either 198a reserved word or a regular identifier. It evaluates to 1 if the argument is just 199a regular identifier and not a reserved word, in the sense that it can then be 200used as the name of a user-defined function or variable. Otherwise it evaluates 201to 0. It can be used like this: 202 203.. code-block:: c++ 204 205 ... 206 #ifdef __is_identifier // Compatibility with non-clang compilers. 207 #if __is_identifier(__wchar_t) 208 typedef wchar_t __wchar_t; 209 #endif 210 #endif 211 212 __wchar_t WideCharacter; 213 ... 214 215Include File Checking Macros 216============================ 217 218Not all developments systems have the same include files. The 219:ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow 220you to check for the existence of an include file before doing a possibly 221failing ``#include`` directive. Include file checking macros must be used 222as expressions in ``#if`` or ``#elif`` preprocessing directives. 223 224.. _langext-__has_include: 225 226``__has_include`` 227----------------- 228 229This function-like macro takes a single file name string argument that is the 230name of an include file. It evaluates to 1 if the file can be found using the 231include paths, or 0 otherwise: 232 233.. code-block:: c++ 234 235 // Note the two possible file name string formats. 236 #if __has_include("myinclude.h") && __has_include(<stdint.h>) 237 # include "myinclude.h" 238 #endif 239 240To test for this feature, use ``#if defined(__has_include)``: 241 242.. code-block:: c++ 243 244 // To avoid problem with non-clang compilers not having this macro. 245 #if defined(__has_include) 246 #if __has_include("myinclude.h") 247 # include "myinclude.h" 248 #endif 249 #endif 250 251.. _langext-__has_include_next: 252 253``__has_include_next`` 254---------------------- 255 256This function-like macro takes a single file name string argument that is the 257name of an include file. It is like ``__has_include`` except that it looks for 258the second instance of the given file found in the include paths. It evaluates 259to 1 if the second instance of the file can be found using the include paths, 260or 0 otherwise: 261 262.. code-block:: c++ 263 264 // Note the two possible file name string formats. 265 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>) 266 # include_next "myinclude.h" 267 #endif 268 269 // To avoid problem with non-clang compilers not having this macro. 270 #if defined(__has_include_next) 271 #if __has_include_next("myinclude.h") 272 # include_next "myinclude.h" 273 #endif 274 #endif 275 276Note that ``__has_include_next``, like the GNU extension ``#include_next`` 277directive, is intended for use in headers only, and will issue a warning if 278used in the top-level compilation file. A warning will also be issued if an 279absolute path is used in the file argument. 280 281``__has_warning`` 282----------------- 283 284This function-like macro takes a string literal that represents a command line 285option for a warning and returns true if that is a valid warning option. 286 287.. code-block:: c++ 288 289 #if __has_warning("-Wformat") 290 ... 291 #endif 292 293Builtin Macros 294============== 295 296``__BASE_FILE__`` 297 Defined to a string that contains the name of the main input file passed to 298 Clang. 299 300``__COUNTER__`` 301 Defined to an integer value that starts at zero and is incremented each time 302 the ``__COUNTER__`` macro is expanded. 303 304``__INCLUDE_LEVEL__`` 305 Defined to an integral value that is the include depth of the file currently 306 being translated. For the main file, this value is zero. 307 308``__TIMESTAMP__`` 309 Defined to the date and time of the last modification of the current source 310 file. 311 312``__clang__`` 313 Defined when compiling with Clang 314 315``__clang_major__`` 316 Defined to the major marketing version number of Clang (e.g., the 2 in 317 2.0.1). Note that marketing version numbers should not be used to check for 318 language features, as different vendors use different numbering schemes. 319 Instead, use the :ref:`langext-feature_check`. 320 321``__clang_minor__`` 322 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note 323 that marketing version numbers should not be used to check for language 324 features, as different vendors use different numbering schemes. Instead, use 325 the :ref:`langext-feature_check`. 326 327``__clang_patchlevel__`` 328 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1). 329 330``__clang_version__`` 331 Defined to a string that captures the Clang marketing version, including the 332 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``". 333 334.. _langext-vectors: 335 336Vectors and Extended Vectors 337============================ 338 339Supports the GCC, OpenCL, AltiVec and NEON vector extensions. 340 341OpenCL vector types are created using ``ext_vector_type`` attribute. It 342support for ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example 343is: 344 345.. code-block:: c++ 346 347 typedef float float4 __attribute__((ext_vector_type(4))); 348 typedef float float2 __attribute__((ext_vector_type(2))); 349 350 float4 foo(float2 a, float2 b) { 351 float4 c; 352 c.xz = a; 353 c.yw = b; 354 return c; 355 } 356 357Query for this feature with ``__has_extension(attribute_ext_vector_type)``. 358 359Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax 360and functions. For example: 361 362.. code-block:: c++ 363 364 vector float foo(vector int a) { 365 vector int b; 366 b = vec_add(a, a) + a; 367 return (vector float)b; 368 } 369 370NEON vector types are created using ``neon_vector_type`` and 371``neon_polyvector_type`` attributes. For example: 372 373.. code-block:: c++ 374 375 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t; 376 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t; 377 378 int8x8_t foo(int8x8_t a) { 379 int8x8_t v; 380 v = a; 381 return v; 382 } 383 384Vector Literals 385--------------- 386 387Vector literals can be used to create vectors from a set of scalars, or 388vectors. Either parentheses or braces form can be used. In the parentheses 389form the number of literal values specified must be one, i.e. referring to a 390scalar value, or must match the size of the vector type being created. If a 391single scalar literal value is specified, the scalar literal value will be 392replicated to all the components of the vector type. In the brackets form any 393number of literals can be specified. For example: 394 395.. code-block:: c++ 396 397 typedef int v4si __attribute__((__vector_size__(16))); 398 typedef float float4 __attribute__((ext_vector_type(4))); 399 typedef float float2 __attribute__((ext_vector_type(2))); 400 401 v4si vsi = (v4si){1, 2, 3, 4}; 402 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f); 403 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1). 404 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0). 405 vector int vi3 = (vector int)(1, 2); // error 406 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0). 407 vector int vi5 = (vector int)(1, 2, 3, 4); 408 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f)); 409 410Vector Operations 411----------------- 412 413The table below shows the support for each operation by vector extension. A 414dash indicates that an operation is not accepted according to a corresponding 415specification. 416 417============================== ======= ======= ======= ======= 418 Operator OpenCL AltiVec GCC NEON 419============================== ======= ======= ======= ======= 420[] yes yes yes -- 421unary operators +, -- yes yes yes -- 422++, -- -- yes yes yes -- 423+,--,*,/,% yes yes yes -- 424bitwise operators &,|,^,~ yes yes yes -- 425>>,<< yes yes yes -- 426!, &&, || yes -- -- -- 427==, !=, >, <, >=, <= yes yes -- -- 428= yes yes yes yes 429:? yes -- -- -- 430sizeof yes yes yes yes 431C-style cast yes yes yes no 432reinterpret_cast yes no yes no 433static_cast yes no yes no 434const_cast no no no no 435============================== ======= ======= ======= ======= 436 437See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`. 438 439Messages on ``deprecated`` and ``unavailable`` Attributes 440========================================================= 441 442An optional string message can be added to the ``deprecated`` and 443``unavailable`` attributes. For example: 444 445.. code-block:: c++ 446 447 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!"))); 448 449If the deprecated or unavailable declaration is used, the message will be 450incorporated into the appropriate diagnostic: 451 452.. code-block:: none 453 454 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! 455 [-Wdeprecated-declarations] 456 explode(); 457 ^ 458 459Query for this feature with 460``__has_extension(attribute_deprecated_with_message)`` and 461``__has_extension(attribute_unavailable_with_message)``. 462 463Attributes on Enumerators 464========================= 465 466Clang allows attributes to be written on individual enumerators. This allows 467enumerators to be deprecated, made unavailable, etc. The attribute must appear 468after the enumerator name and before any initializer, like so: 469 470.. code-block:: c++ 471 472 enum OperationMode { 473 OM_Invalid, 474 OM_Normal, 475 OM_Terrified __attribute__((deprecated)), 476 OM_AbortOnError __attribute__((deprecated)) = 4 477 }; 478 479Attributes on the ``enum`` declaration do not apply to individual enumerators. 480 481Query for this feature with ``__has_extension(enumerator_attributes)``. 482 483'User-Specified' System Frameworks 484================================== 485 486Clang provides a mechanism by which frameworks can be built in such a way that 487they will always be treated as being "system frameworks", even if they are not 488present in a system framework directory. This can be useful to system 489framework developers who want to be able to test building other applications 490with development builds of their framework, including the manner in which the 491compiler changes warning behavior for system headers. 492 493Framework developers can opt-in to this mechanism by creating a 494"``.system_framework``" file at the top-level of their framework. That is, the 495framework should have contents like: 496 497.. code-block:: none 498 499 .../TestFramework.framework 500 .../TestFramework.framework/.system_framework 501 .../TestFramework.framework/Headers 502 .../TestFramework.framework/Headers/TestFramework.h 503 ... 504 505Clang will treat the presence of this file as an indicator that the framework 506should be treated as a system framework, regardless of how it was found in the 507framework search path. For consistency, we recommend that such files never be 508included in installed versions of the framework. 509 510Checks for Standard Language Features 511===================================== 512 513The ``__has_feature`` macro can be used to query if certain standard language 514features are enabled. The ``__has_extension`` macro can be used to query if 515language features are available as an extension when compiling for a standard 516which does not provide them. The features which can be tested are listed here. 517 518Since Clang 3.4, the C++ SD-6 feature test macros are also supported. 519These are macros with names of the form ``__cpp_<feature_name>``, and are 520intended to be a portable way to query the supported features of the compiler. 521See `the C++ status page <http://clang.llvm.org/cxx_status.html#ts>`_ for 522information on the version of SD-6 supported by each Clang release, and the 523macros provided by that revision of the recommendations. 524 525C++98 526----- 527 528The features listed below are part of the C++98 standard. These features are 529enabled by default when compiling C++ code. 530 531C++ exceptions 532^^^^^^^^^^^^^^ 533 534Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been 535enabled. For example, compiling code with ``-fno-exceptions`` disables C++ 536exceptions. 537 538C++ RTTI 539^^^^^^^^ 540 541Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For 542example, compiling code with ``-fno-rtti`` disables the use of RTTI. 543 544C++11 545----- 546 547The features listed below are part of the C++11 standard. As a result, all 548these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option 549when compiling C++ code. 550 551C++11 SFINAE includes access control 552^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 553 554Use ``__has_feature(cxx_access_control_sfinae)`` or 555``__has_extension(cxx_access_control_sfinae)`` to determine whether 556access-control errors (e.g., calling a private constructor) are considered to 557be template argument deduction errors (aka SFINAE errors), per `C++ DR1170 558<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_. 559 560C++11 alias templates 561^^^^^^^^^^^^^^^^^^^^^ 562 563Use ``__has_feature(cxx_alias_templates)`` or 564``__has_extension(cxx_alias_templates)`` to determine if support for C++11's 565alias declarations and alias templates is enabled. 566 567C++11 alignment specifiers 568^^^^^^^^^^^^^^^^^^^^^^^^^^ 569 570Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to 571determine if support for alignment specifiers using ``alignas`` is enabled. 572 573Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to 574determine if support for the ``alignof`` keyword is enabled. 575 576C++11 attributes 577^^^^^^^^^^^^^^^^ 578 579Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to 580determine if support for attribute parsing with C++11's square bracket notation 581is enabled. 582 583C++11 generalized constant expressions 584^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 585 586Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized 587constant expressions (e.g., ``constexpr``) is enabled. 588 589C++11 ``decltype()`` 590^^^^^^^^^^^^^^^^^^^^ 591 592Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to 593determine if support for the ``decltype()`` specifier is enabled. C++11's 594``decltype`` does not require type-completeness of a function call expression. 595Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or 596``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if 597support for this feature is enabled. 598 599C++11 default template arguments in function templates 600^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 601 602Use ``__has_feature(cxx_default_function_template_args)`` or 603``__has_extension(cxx_default_function_template_args)`` to determine if support 604for default template arguments in function templates is enabled. 605 606C++11 ``default``\ ed functions 607^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 608 609Use ``__has_feature(cxx_defaulted_functions)`` or 610``__has_extension(cxx_defaulted_functions)`` to determine if support for 611defaulted function definitions (with ``= default``) is enabled. 612 613C++11 delegating constructors 614^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 615 616Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for 617delegating constructors is enabled. 618 619C++11 ``deleted`` functions 620^^^^^^^^^^^^^^^^^^^^^^^^^^^ 621 622Use ``__has_feature(cxx_deleted_functions)`` or 623``__has_extension(cxx_deleted_functions)`` to determine if support for deleted 624function definitions (with ``= delete``) is enabled. 625 626C++11 explicit conversion functions 627^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 628 629Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for 630``explicit`` conversion functions is enabled. 631 632C++11 generalized initializers 633^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 634 635Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for 636generalized initializers (using braced lists and ``std::initializer_list``) is 637enabled. 638 639C++11 implicit move constructors/assignment operators 640^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 641 642Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly 643generate move constructors and move assignment operators where needed. 644 645C++11 inheriting constructors 646^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 647 648Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for 649inheriting constructors is enabled. 650 651C++11 inline namespaces 652^^^^^^^^^^^^^^^^^^^^^^^ 653 654Use ``__has_feature(cxx_inline_namespaces)`` or 655``__has_extension(cxx_inline_namespaces)`` to determine if support for inline 656namespaces is enabled. 657 658C++11 lambdas 659^^^^^^^^^^^^^ 660 661Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to 662determine if support for lambdas is enabled. 663 664C++11 local and unnamed types as template arguments 665^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 666 667Use ``__has_feature(cxx_local_type_template_args)`` or 668``__has_extension(cxx_local_type_template_args)`` to determine if support for 669local and unnamed types as template arguments is enabled. 670 671C++11 noexcept 672^^^^^^^^^^^^^^ 673 674Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to 675determine if support for noexcept exception specifications is enabled. 676 677C++11 in-class non-static data member initialization 678^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 679 680Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class 681initialization of non-static data members is enabled. 682 683C++11 ``nullptr`` 684^^^^^^^^^^^^^^^^^ 685 686Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to 687determine if support for ``nullptr`` is enabled. 688 689C++11 ``override control`` 690^^^^^^^^^^^^^^^^^^^^^^^^^^ 691 692Use ``__has_feature(cxx_override_control)`` or 693``__has_extension(cxx_override_control)`` to determine if support for the 694override control keywords is enabled. 695 696C++11 reference-qualified functions 697^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 698 699Use ``__has_feature(cxx_reference_qualified_functions)`` or 700``__has_extension(cxx_reference_qualified_functions)`` to determine if support 701for reference-qualified functions (e.g., member functions with ``&`` or ``&&`` 702applied to ``*this``) is enabled. 703 704C++11 range-based ``for`` loop 705^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 706 707Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to 708determine if support for the range-based for loop is enabled. 709 710C++11 raw string literals 711^^^^^^^^^^^^^^^^^^^^^^^^^ 712 713Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw 714string literals (e.g., ``R"x(foo\bar)x"``) is enabled. 715 716C++11 rvalue references 717^^^^^^^^^^^^^^^^^^^^^^^ 718 719Use ``__has_feature(cxx_rvalue_references)`` or 720``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue 721references is enabled. 722 723C++11 ``static_assert()`` 724^^^^^^^^^^^^^^^^^^^^^^^^^ 725 726Use ``__has_feature(cxx_static_assert)`` or 727``__has_extension(cxx_static_assert)`` to determine if support for compile-time 728assertions using ``static_assert`` is enabled. 729 730C++11 ``thread_local`` 731^^^^^^^^^^^^^^^^^^^^^^ 732 733Use ``__has_feature(cxx_thread_local)`` to determine if support for 734``thread_local`` variables is enabled. 735 736C++11 type inference 737^^^^^^^^^^^^^^^^^^^^ 738 739Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to 740determine C++11 type inference is supported using the ``auto`` specifier. If 741this is disabled, ``auto`` will instead be a storage class specifier, as in C 742or C++98. 743 744C++11 strongly typed enumerations 745^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 746 747Use ``__has_feature(cxx_strong_enums)`` or 748``__has_extension(cxx_strong_enums)`` to determine if support for strongly 749typed, scoped enumerations is enabled. 750 751C++11 trailing return type 752^^^^^^^^^^^^^^^^^^^^^^^^^^ 753 754Use ``__has_feature(cxx_trailing_return)`` or 755``__has_extension(cxx_trailing_return)`` to determine if support for the 756alternate function declaration syntax with trailing return type is enabled. 757 758C++11 Unicode string literals 759^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 760 761Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode 762string literals is enabled. 763 764C++11 unrestricted unions 765^^^^^^^^^^^^^^^^^^^^^^^^^ 766 767Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for 768unrestricted unions is enabled. 769 770C++11 user-defined literals 771^^^^^^^^^^^^^^^^^^^^^^^^^^^ 772 773Use ``__has_feature(cxx_user_literals)`` to determine if support for 774user-defined literals is enabled. 775 776C++11 variadic templates 777^^^^^^^^^^^^^^^^^^^^^^^^ 778 779Use ``__has_feature(cxx_variadic_templates)`` or 780``__has_extension(cxx_variadic_templates)`` to determine if support for 781variadic templates is enabled. 782 783C++14 784----- 785 786The features listed below are part of the C++14 standard. As a result, all 787these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option 788when compiling C++ code. 789 790C++14 binary literals 791^^^^^^^^^^^^^^^^^^^^^ 792 793Use ``__has_feature(cxx_binary_literals)`` or 794``__has_extension(cxx_binary_literals)`` to determine whether 795binary literals (for instance, ``0b10010``) are recognized. Clang supports this 796feature as an extension in all language modes. 797 798C++14 contextual conversions 799^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 800 801Use ``__has_feature(cxx_contextual_conversions)`` or 802``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules 803are used when performing an implicit conversion for an array bound in a 804*new-expression*, the operand of a *delete-expression*, an integral constant 805expression, or a condition in a ``switch`` statement. 806 807C++14 decltype(auto) 808^^^^^^^^^^^^^^^^^^^^ 809 810Use ``__has_feature(cxx_decltype_auto)`` or 811``__has_extension(cxx_decltype_auto)`` to determine if support 812for the ``decltype(auto)`` placeholder type is enabled. 813 814C++14 default initializers for aggregates 815^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 816 817Use ``__has_feature(cxx_aggregate_nsdmi)`` or 818``__has_extension(cxx_aggregate_nsdmi)`` to determine if support 819for default initializers in aggregate members is enabled. 820 821C++14 digit separators 822^^^^^^^^^^^^^^^^^^^^^^ 823 824Use ``__cpp_digit_separators`` to determine if support for digit separators 825using single quotes (for instance, ``10'000``) is enabled. At this time, there 826is no corresponding ``__has_feature`` name 827 828C++14 generalized lambda capture 829^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 830 831Use ``__has_feature(cxx_init_captures)`` or 832``__has_extension(cxx_init_captures)`` to determine if support for 833lambda captures with explicit initializers is enabled 834(for instance, ``[n(0)] { return ++n; }``). 835 836C++14 generic lambdas 837^^^^^^^^^^^^^^^^^^^^^ 838 839Use ``__has_feature(cxx_generic_lambdas)`` or 840``__has_extension(cxx_generic_lambdas)`` to determine if support for generic 841(polymorphic) lambdas is enabled 842(for instance, ``[] (auto x) { return x + 1; }``). 843 844C++14 relaxed constexpr 845^^^^^^^^^^^^^^^^^^^^^^^ 846 847Use ``__has_feature(cxx_relaxed_constexpr)`` or 848``__has_extension(cxx_relaxed_constexpr)`` to determine if variable 849declarations, local variable modification, and control flow constructs 850are permitted in ``constexpr`` functions. 851 852C++14 return type deduction 853^^^^^^^^^^^^^^^^^^^^^^^^^^^ 854 855Use ``__has_feature(cxx_return_type_deduction)`` or 856``__has_extension(cxx_return_type_deduction)`` to determine if support 857for return type deduction for functions (using ``auto`` as a return type) 858is enabled. 859 860C++14 runtime-sized arrays 861^^^^^^^^^^^^^^^^^^^^^^^^^^ 862 863Use ``__has_feature(cxx_runtime_array)`` or 864``__has_extension(cxx_runtime_array)`` to determine if support 865for arrays of runtime bound (a restricted form of variable-length arrays) 866is enabled. 867Clang's implementation of this feature is incomplete. 868 869C++14 variable templates 870^^^^^^^^^^^^^^^^^^^^^^^^ 871 872Use ``__has_feature(cxx_variable_templates)`` or 873``__has_extension(cxx_variable_templates)`` to determine if support for 874templated variable declarations is enabled. 875 876C11 877--- 878 879The features listed below are part of the C11 standard. As a result, all these 880features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when 881compiling C code. Additionally, because these features are all 882backward-compatible, they are available as extensions in all language modes. 883 884C11 alignment specifiers 885^^^^^^^^^^^^^^^^^^^^^^^^ 886 887Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine 888if support for alignment specifiers using ``_Alignas`` is enabled. 889 890Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine 891if support for the ``_Alignof`` keyword is enabled. 892 893C11 atomic operations 894^^^^^^^^^^^^^^^^^^^^^ 895 896Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine 897if support for atomic types using ``_Atomic`` is enabled. Clang also provides 898:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement 899the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use 900``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header 901is available. 902 903Clang will use the system's ``<stdatomic.h>`` header when one is available, and 904will otherwise use its own. When using its own, implementations of the atomic 905operations are provided as macros. In the cases where C11 also requires a real 906function, this header provides only the declaration of that function (along 907with a shadowing macro implementation), and you must link to a library which 908provides a definition of the function if you use it instead of the macro. 909 910C11 generic selections 911^^^^^^^^^^^^^^^^^^^^^^ 912 913Use ``__has_feature(c_generic_selections)`` or 914``__has_extension(c_generic_selections)`` to determine if support for generic 915selections is enabled. 916 917As an extension, the C11 generic selection expression is available in all 918languages supported by Clang. The syntax is the same as that given in the C11 919standard. 920 921In C, type compatibility is decided according to the rules given in the 922appropriate standard, but in C++, which lacks the type compatibility rules used 923in C, types are considered compatible only if they are equivalent. 924 925C11 ``_Static_assert()`` 926^^^^^^^^^^^^^^^^^^^^^^^^ 927 928Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)`` 929to determine if support for compile-time assertions using ``_Static_assert`` is 930enabled. 931 932C11 ``_Thread_local`` 933^^^^^^^^^^^^^^^^^^^^^ 934 935Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)`` 936to determine if support for ``_Thread_local`` variables is enabled. 937 938Modules 939------- 940 941Use ``__has_feature(modules)`` to determine if Modules have been enabled. 942For example, compiling code with ``-fmodules`` enables the use of Modules. 943 944More information could be found `here <http://clang.llvm.org/docs/Modules.html>`_. 945 946Checks for Type Trait Primitives 947================================ 948 949Type trait primitives are special builtin constant expressions that can be used 950by the standard C++ library to facilitate or simplify the implementation of 951user-facing type traits in the <type_traits> header. 952 953They are not intended to be used directly by user code because they are 954implementation-defined and subject to change -- as such they're tied closely to 955the supported set of system headers, currently: 956 957* LLVM's own libc++ 958* GNU libstdc++ 959* The Microsoft standard C++ library 960 961Clang supports the `GNU C++ type traits 962<http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the 963`Microsoft Visual C++ Type traits 964<http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_. 965 966Feature detection is supported only for some of the primitives at present. User 967code should not use these checks because they bear no direct relation to the 968actual set of type traits supported by the C++ standard library. 969 970For type trait ``__X``, ``__has_extension(X)`` indicates the presence of the 971type trait primitive in the compiler. A simplistic usage example as might be 972seen in standard C++ headers follows: 973 974.. code-block:: c++ 975 976 #if __has_extension(is_convertible_to) 977 template<typename From, typename To> 978 struct is_convertible_to { 979 static const bool value = __is_convertible_to(From, To); 980 }; 981 #else 982 // Emulate type trait for compatibility with other compilers. 983 #endif 984 985The following type trait primitives are supported by Clang: 986 987* ``__has_nothrow_assign`` (GNU, Microsoft) 988* ``__has_nothrow_copy`` (GNU, Microsoft) 989* ``__has_nothrow_constructor`` (GNU, Microsoft) 990* ``__has_trivial_assign`` (GNU, Microsoft) 991* ``__has_trivial_copy`` (GNU, Microsoft) 992* ``__has_trivial_constructor`` (GNU, Microsoft) 993* ``__has_trivial_destructor`` (GNU, Microsoft) 994* ``__has_virtual_destructor`` (GNU, Microsoft) 995* ``__is_abstract`` (GNU, Microsoft) 996* ``__is_aggregate`` (GNU, Microsoft) 997* ``__is_base_of`` (GNU, Microsoft) 998* ``__is_class`` (GNU, Microsoft) 999* ``__is_convertible_to`` (Microsoft) 1000* ``__is_empty`` (GNU, Microsoft) 1001* ``__is_enum`` (GNU, Microsoft) 1002* ``__is_interface_class`` (Microsoft) 1003* ``__is_pod`` (GNU, Microsoft) 1004* ``__is_polymorphic`` (GNU, Microsoft) 1005* ``__is_union`` (GNU, Microsoft) 1006* ``__is_literal(type)``: Determines whether the given type is a literal type 1007* ``__is_final``: Determines whether the given type is declared with a 1008 ``final`` class-virt-specifier. 1009* ``__underlying_type(type)``: Retrieves the underlying type for a given 1010 ``enum`` type. This trait is required to implement the C++11 standard 1011 library. 1012* ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value 1013 of type ``totype`` can be assigned to from a value of type ``fromtype`` such 1014 that no non-trivial functions are called as part of that assignment. This 1015 trait is required to implement the C++11 standard library. 1016* ``__is_trivially_constructible(type, argtypes...)``: Determines whether a 1017 value of type ``type`` can be direct-initialized with arguments of types 1018 ``argtypes...`` such that no non-trivial functions are called as part of 1019 that initialization. This trait is required to implement the C++11 standard 1020 library. 1021* ``__is_destructible`` (MSVC 2013) 1022* ``__is_nothrow_destructible`` (MSVC 2013) 1023* ``__is_nothrow_assignable`` (MSVC 2013, clang) 1024* ``__is_constructible`` (MSVC 2013, clang) 1025* ``__is_nothrow_constructible`` (MSVC 2013, clang) 1026* ``__is_assignable`` (MSVC 2015, clang) 1027 1028Blocks 1029====== 1030 1031The syntax and high level language feature description is in 1032:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for 1033the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`. 1034 1035Query for this feature with ``__has_extension(blocks)``. 1036 1037Objective-C Features 1038==================== 1039 1040Related result types 1041-------------------- 1042 1043According to Cocoa conventions, Objective-C methods with certain names 1044("``init``", "``alloc``", etc.) always return objects that are an instance of 1045the receiving class's type. Such methods are said to have a "related result 1046type", meaning that a message send to one of these methods will have the same 1047static type as an instance of the receiver class. For example, given the 1048following classes: 1049 1050.. code-block:: objc 1051 1052 @interface NSObject 1053 + (id)alloc; 1054 - (id)init; 1055 @end 1056 1057 @interface NSArray : NSObject 1058 @end 1059 1060and this common initialization pattern 1061 1062.. code-block:: objc 1063 1064 NSArray *array = [[NSArray alloc] init]; 1065 1066the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because 1067``alloc`` implicitly has a related result type. Similarly, the type of the 1068expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a 1069related result type and its receiver is known to have the type ``NSArray *``. 1070If neither ``alloc`` nor ``init`` had a related result type, the expressions 1071would have had type ``id``, as declared in the method signature. 1072 1073A method with a related result type can be declared by using the type 1074``instancetype`` as its result type. ``instancetype`` is a contextual keyword 1075that is only permitted in the result type of an Objective-C method, e.g. 1076 1077.. code-block:: objc 1078 1079 @interface A 1080 + (instancetype)constructAnA; 1081 @end 1082 1083The related result type can also be inferred for some methods. To determine 1084whether a method has an inferred related result type, the first word in the 1085camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered, 1086and the method will have a related result type if its return type is compatible 1087with the type of its class and if: 1088 1089* the first word is "``alloc``" or "``new``", and the method is a class method, 1090 or 1091 1092* the first word is "``autorelease``", "``init``", "``retain``", or "``self``", 1093 and the method is an instance method. 1094 1095If a method with a related result type is overridden by a subclass method, the 1096subclass method must also return a type that is compatible with the subclass 1097type. For example: 1098 1099.. code-block:: objc 1100 1101 @interface NSString : NSObject 1102 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 1103 @end 1104 1105Related result types only affect the type of a message send or property access 1106via the given method. In all other respects, a method with a related result 1107type is treated the same way as method that returns ``id``. 1108 1109Use ``__has_feature(objc_instancetype)`` to determine whether the 1110``instancetype`` contextual keyword is available. 1111 1112Automatic reference counting 1113---------------------------- 1114 1115Clang provides support for :doc:`automated reference counting 1116<AutomaticReferenceCounting>` in Objective-C, which eliminates the need 1117for manual ``retain``/``release``/``autorelease`` message sends. There are two 1118feature macros associated with automatic reference counting: 1119``__has_feature(objc_arc)`` indicates the availability of automated reference 1120counting in general, while ``__has_feature(objc_arc_weak)`` indicates that 1121automated reference counting also includes support for ``__weak`` pointers to 1122Objective-C objects. 1123 1124.. _objc-fixed-enum: 1125 1126Enumerations with a fixed underlying type 1127----------------------------------------- 1128 1129Clang provides support for C++11 enumerations with a fixed underlying type 1130within Objective-C. For example, one can write an enumeration type as: 1131 1132.. code-block:: c++ 1133 1134 typedef enum : unsigned char { Red, Green, Blue } Color; 1135 1136This specifies that the underlying type, which is used to store the enumeration 1137value, is ``unsigned char``. 1138 1139Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed 1140underlying types is available in Objective-C. 1141 1142Interoperability with C++11 lambdas 1143----------------------------------- 1144 1145Clang provides interoperability between C++11 lambdas and blocks-based APIs, by 1146permitting a lambda to be implicitly converted to a block pointer with the 1147corresponding signature. For example, consider an API such as ``NSArray``'s 1148array-sorting method: 1149 1150.. code-block:: objc 1151 1152 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 1153 1154``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult 1155(^)(id, id)``, and parameters of this type are generally provided with block 1156literals as arguments. However, one can also use a C++11 lambda so long as it 1157provides the same signature (in this case, accepting two parameters of type 1158``id`` and returning an ``NSComparisonResult``): 1159 1160.. code-block:: objc 1161 1162 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11", 1163 @"String 02"]; 1164 const NSStringCompareOptions comparisonOptions 1165 = NSCaseInsensitiveSearch | NSNumericSearch | 1166 NSWidthInsensitiveSearch | NSForcedOrderingSearch; 1167 NSLocale *currentLocale = [NSLocale currentLocale]; 1168 NSArray *sorted 1169 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult { 1170 NSRange string1Range = NSMakeRange(0, [s1 length]); 1171 return [s1 compare:s2 options:comparisonOptions 1172 range:string1Range locale:currentLocale]; 1173 }]; 1174 NSLog(@"sorted: %@", sorted); 1175 1176This code relies on an implicit conversion from the type of the lambda 1177expression (an unnamed, local class type called the *closure type*) to the 1178corresponding block pointer type. The conversion itself is expressed by a 1179conversion operator in that closure type that produces a block pointer with the 1180same signature as the lambda itself, e.g., 1181 1182.. code-block:: objc 1183 1184 operator NSComparisonResult (^)(id, id)() const; 1185 1186This conversion function returns a new block that simply forwards the two 1187parameters to the lambda object (which it captures by copy), then returns the 1188result. The returned block is first copied (with ``Block_copy``) and then 1189autoreleased. As an optimization, if a lambda expression is immediately 1190converted to a block pointer (as in the first example, above), then the block 1191is not copied and autoreleased: rather, it is given the same lifetime as a 1192block literal written at that point in the program, which avoids the overhead 1193of copying a block to the heap in the common case. 1194 1195The conversion from a lambda to a block pointer is only available in 1196Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory 1197management (autorelease). 1198 1199Object Literals and Subscripting 1200-------------------------------- 1201 1202Clang provides support for :doc:`Object Literals and Subscripting 1203<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C 1204programming patterns, makes programs more concise, and improves the safety of 1205container creation. There are several feature macros associated with object 1206literals and subscripting: ``__has_feature(objc_array_literals)`` tests the 1207availability of array literals; ``__has_feature(objc_dictionary_literals)`` 1208tests the availability of dictionary literals; 1209``__has_feature(objc_subscripting)`` tests the availability of object 1210subscripting. 1211 1212Objective-C Autosynthesis of Properties 1213--------------------------------------- 1214 1215Clang provides support for autosynthesis of declared properties. Using this 1216feature, clang provides default synthesis of those properties not declared 1217@dynamic and not having user provided backing getter and setter methods. 1218``__has_feature(objc_default_synthesize_properties)`` checks for availability 1219of this feature in version of clang being used. 1220 1221.. _langext-objc-retain-release: 1222 1223Objective-C retaining behavior attributes 1224----------------------------------------- 1225 1226In Objective-C, functions and methods are generally assumed to follow the 1227`Cocoa Memory Management 1228<http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_ 1229conventions for ownership of object arguments and 1230return values. However, there are exceptions, and so Clang provides attributes 1231to allow these exceptions to be documented. This are used by ARC and the 1232`static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be 1233better described using the ``objc_method_family`` attribute instead. 1234 1235**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``, 1236``ns_returns_autoreleased``, ``cf_returns_retained``, and 1237``cf_returns_not_retained`` attributes can be placed on methods and functions 1238that return Objective-C or CoreFoundation objects. They are commonly placed at 1239the end of a function prototype or method declaration: 1240 1241.. code-block:: objc 1242 1243 id foo() __attribute__((ns_returns_retained)); 1244 1245 - (NSString *)bar:(int)x __attribute__((ns_returns_retained)); 1246 1247The ``*_returns_retained`` attributes specify that the returned object has a +1 1248retain count. The ``*_returns_not_retained`` attributes specify that the return 1249object has a +0 retain count, even if the normal convention for its selector 1250would be +1. ``ns_returns_autoreleased`` specifies that the returned object is 1251+0, but is guaranteed to live at least as long as the next flush of an 1252autorelease pool. 1253 1254**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on 1255an parameter declaration; they specify that the argument is expected to have a 1256+1 retain count, which will be balanced in some way by the function or method. 1257The ``ns_consumes_self`` attribute can only be placed on an Objective-C 1258method; it specifies that the method expects its ``self`` parameter to have a 1259+1 retain count, which it will balance in some way. 1260 1261.. code-block:: objc 1262 1263 void foo(__attribute__((ns_consumed)) NSString *string); 1264 1265 - (void) bar __attribute__((ns_consumes_self)); 1266 - (void) baz:(id) __attribute__((ns_consumed)) x; 1267 1268Further examples of these attributes are available in the static analyzer's `list of annotations for analysis 1269<http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_. 1270 1271Query for these features with ``__has_attribute(ns_consumed)``, 1272``__has_attribute(ns_returns_retained)``, etc. 1273 1274Objective-C @available 1275---------------------- 1276 1277It is possible to use the newest SDK but still build a program that can run on 1278older versions of macOS and iOS by passing ``-mmacosx-version-min=`` / 1279``-miphoneos-version-min=``. 1280 1281Before LLVM 5.0, when calling a function that exists only in the OS that's 1282newer than the target OS (as determined by the minimum deployment version), 1283programmers had to carefully check if the function exists at runtime, using 1284null checks for weakly-linked C functions, ``+class`` for Objective-C classes, 1285and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for 1286Objective-C methods. If such a check was missed, the program would compile 1287fine, run fine on newer systems, but crash on older systems. 1288 1289As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes 1290<http://clang.llvm.org/docs/AttributeReference.html#availability>`_ together 1291with the new ``@available()`` keyword to assist with this issue. 1292When a method that's introduced in the OS newer than the target OS is called, a 1293-Wunguarded-availability warning is emitted if that call is not guarded: 1294 1295.. code-block:: objc 1296 1297 void my_fun(NSSomeClass* var) { 1298 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is 1299 // built with -mmacosx-version-min=10.11, then this unconditional call 1300 // will emit a -Wunguarded-availability warning: 1301 [var fancyNewMethod]; 1302 } 1303 1304To fix the warning and to avoid the crash on macOS 10.11, wrap it in 1305``if(@available())``: 1306 1307.. code-block:: objc 1308 1309 void my_fun(NSSomeClass* var) { 1310 if (@available(macOS 10.12, *)) { 1311 [var fancyNewMethod]; 1312 } else { 1313 // Put fallback behavior for old macOS versions (and for non-mac 1314 // platforms) here. 1315 } 1316 } 1317 1318The ``*`` is required and means that platforms not explicitly listed will take 1319the true branch, and the compiler will emit ``-Wunguarded-availability`` 1320warnings for unlisted platforms based on those platform's deployment target. 1321More than one platform can be listed in ``@available()``: 1322 1323.. code-block:: objc 1324 1325 void my_fun(NSSomeClass* var) { 1326 if (@available(macOS 10.12, iOS 10, *)) { 1327 [var fancyNewMethod]; 1328 } 1329 } 1330 1331If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called 1332on 10.12, then add an `availability attribute 1333<http://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it, 1334which will also suppress the warning and require that calls to my_fun() are 1335checked: 1336 1337.. code-block:: objc 1338 1339 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) { 1340 [var fancyNewMethod]; // Now ok. 1341 } 1342 1343``@available()`` is only available in Objective-C code. To use the feature 1344in C and C++ code, use the ``__builtin_available()`` spelling instead. 1345 1346If existing code uses null checks or ``-respondsToSelector:``, it should 1347be changed to use ``@available()`` (or ``__builtin_available``) instead. 1348 1349``-Wunguarded-availability`` is disabled by default, but 1350``-Wunguarded-availability-new``, which only emits this warning for APIs 1351that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and 1352tvOS >= 11, is enabled by default. 1353 1354.. _langext-overloading: 1355 1356Objective-C++ ABI: protocol-qualifier mangling of parameters 1357------------------------------------------------------------ 1358 1359Starting with LLVM 3.4, Clang produces a new mangling for parameters whose 1360type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such 1361parameters to be differentiated from those with the regular unqualified ``id`` 1362type. 1363 1364This was a non-backward compatible mangling change to the ABI. This change 1365allows proper overloading, and also prevents mangling conflicts with template 1366parameters of protocol-qualified type. 1367 1368Query the presence of this new mangling with 1369``__has_feature(objc_protocol_qualifier_mangling)``. 1370 1371Initializer lists for complex numbers in C 1372========================================== 1373 1374clang supports an extension which allows the following in C: 1375 1376.. code-block:: c++ 1377 1378 #include <math.h> 1379 #include <complex.h> 1380 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 1381 1382This construct is useful because there is no way to separately initialize the 1383real and imaginary parts of a complex variable in standard C, given that clang 1384does not support ``_Imaginary``. (Clang also supports the ``__real__`` and 1385``__imag__`` extensions from gcc, which help in some cases, but are not usable 1386in static initializers.) 1387 1388Note that this extension does not allow eliding the braces; the meaning of the 1389following two lines is different: 1390 1391.. code-block:: c++ 1392 1393 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 1394 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 1395 1396This extension also works in C++ mode, as far as that goes, but does not apply 1397to the C++ ``std::complex``. (In C++11, list initialization allows the same 1398syntax to be used with ``std::complex`` with the same meaning.) 1399 1400Builtin Functions 1401================= 1402 1403Clang supports a number of builtin library functions with the same syntax as 1404GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``, 1405``__builtin_choose_expr``, ``__builtin_types_compatible_p``, 1406``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to 1407the GCC builtins, Clang supports a number of builtins that GCC does not, which 1408are listed here. 1409 1410Please note that Clang does not and will not support all of the GCC builtins 1411for vector operations. Instead of using builtins, you should use the functions 1412defined in target-specific header files like ``<xmmintrin.h>``, which define 1413portable wrappers for these. Many of the Clang versions of these functions are 1414implemented directly in terms of :ref:`extended vector support 1415<langext-vectors>` instead of builtins, in order to reduce the number of 1416builtins that we need to implement. 1417 1418``__builtin_assume`` 1419------------------------------ 1420 1421``__builtin_assume`` is used to provide the optimizer with a boolean 1422invariant that is defined to be true. 1423 1424**Syntax**: 1425 1426.. code-block:: c++ 1427 1428 __builtin_assume(bool) 1429 1430**Example of Use**: 1431 1432.. code-block:: c++ 1433 1434 int foo(int x) { 1435 __builtin_assume(x != 0); 1436 1437 // The optimizer may short-circuit this check using the invariant. 1438 if (x == 0) 1439 return do_something(); 1440 1441 return do_something_else(); 1442 } 1443 1444**Description**: 1445 1446The boolean argument to this function is defined to be true. The optimizer may 1447analyze the form of the expression provided as the argument and deduce from 1448that information used to optimize the program. If the condition is violated 1449during execution, the behavior is undefined. The argument itself is never 1450evaluated, so any side effects of the expression will be discarded. 1451 1452Query for this feature with ``__has_builtin(__builtin_assume)``. 1453 1454``__builtin_readcyclecounter`` 1455------------------------------ 1456 1457``__builtin_readcyclecounter`` is used to access the cycle counter register (or 1458a similar low-latency, high-accuracy clock) on those targets that support it. 1459 1460**Syntax**: 1461 1462.. code-block:: c++ 1463 1464 __builtin_readcyclecounter() 1465 1466**Example of Use**: 1467 1468.. code-block:: c++ 1469 1470 unsigned long long t0 = __builtin_readcyclecounter(); 1471 do_something(); 1472 unsigned long long t1 = __builtin_readcyclecounter(); 1473 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow 1474 1475**Description**: 1476 1477The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value, 1478which may be either global or process/thread-specific depending on the target. 1479As the backing counters often overflow quickly (on the order of seconds) this 1480should only be used for timing small intervals. When not supported by the 1481target, the return value is always zero. This builtin takes no arguments and 1482produces an unsigned long long result. 1483 1484Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note 1485that even if present, its use may depend on run-time privilege or other OS 1486controlled state. 1487 1488.. _langext-__builtin_shufflevector: 1489 1490``__builtin_shufflevector`` 1491--------------------------- 1492 1493``__builtin_shufflevector`` is used to express generic vector 1494permutation/shuffle/swizzle operations. This builtin is also very important 1495for the implementation of various target-specific header files like 1496``<xmmintrin.h>``. 1497 1498**Syntax**: 1499 1500.. code-block:: c++ 1501 1502 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 1503 1504**Examples**: 1505 1506.. code-block:: c++ 1507 1508 // identity operation - return 4-element vector v1. 1509 __builtin_shufflevector(v1, v1, 0, 1, 2, 3) 1510 1511 // "Splat" element 0 of V1 into a 4-element result. 1512 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 1513 1514 // Reverse 4-element vector V1. 1515 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 1516 1517 // Concatenate every other element of 4-element vectors V1 and V2. 1518 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 1519 1520 // Concatenate every other element of 8-element vectors V1 and V2. 1521 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 1522 1523 // Shuffle v1 with some elements being undefined 1524 __builtin_shufflevector(v1, v1, 3, -1, 1, -1) 1525 1526**Description**: 1527 1528The first two arguments to ``__builtin_shufflevector`` are vectors that have 1529the same element type. The remaining arguments are a list of integers that 1530specify the elements indices of the first two vectors that should be extracted 1531and returned in a new vector. These element indices are numbered sequentially 1532starting with the first vector, continuing into the second vector. Thus, if 1533``vec1`` is a 4-element vector, index 5 would refer to the second element of 1534``vec2``. An index of -1 can be used to indicate that the corresponding element 1535in the returned vector is a don't care and can be optimized by the backend. 1536 1537The result of ``__builtin_shufflevector`` is a vector with the same element 1538type as ``vec1``/``vec2`` but that has an element count equal to the number of 1539indices specified. 1540 1541Query for this feature with ``__has_builtin(__builtin_shufflevector)``. 1542 1543.. _langext-__builtin_convertvector: 1544 1545``__builtin_convertvector`` 1546--------------------------- 1547 1548``__builtin_convertvector`` is used to express generic vector 1549type-conversion operations. The input vector and the output vector 1550type must have the same number of elements. 1551 1552**Syntax**: 1553 1554.. code-block:: c++ 1555 1556 __builtin_convertvector(src_vec, dst_vec_type) 1557 1558**Examples**: 1559 1560.. code-block:: c++ 1561 1562 typedef double vector4double __attribute__((__vector_size__(32))); 1563 typedef float vector4float __attribute__((__vector_size__(16))); 1564 typedef short vector4short __attribute__((__vector_size__(8))); 1565 vector4float vf; vector4short vs; 1566 1567 // convert from a vector of 4 floats to a vector of 4 doubles. 1568 __builtin_convertvector(vf, vector4double) 1569 // equivalent to: 1570 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] } 1571 1572 // convert from a vector of 4 shorts to a vector of 4 floats. 1573 __builtin_convertvector(vs, vector4float) 1574 // equivalent to: 1575 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] } 1576 1577**Description**: 1578 1579The first argument to ``__builtin_convertvector`` is a vector, and the second 1580argument is a vector type with the same number of elements as the first 1581argument. 1582 1583The result of ``__builtin_convertvector`` is a vector with the same element 1584type as the second argument, with a value defined in terms of the action of a 1585C-style cast applied to each element of the first argument. 1586 1587Query for this feature with ``__has_builtin(__builtin_convertvector)``. 1588 1589``__builtin_bitreverse`` 1590------------------------ 1591 1592* ``__builtin_bitreverse8`` 1593* ``__builtin_bitreverse16`` 1594* ``__builtin_bitreverse32`` 1595* ``__builtin_bitreverse64`` 1596 1597**Syntax**: 1598 1599.. code-block:: c++ 1600 1601 __builtin_bitreverse32(x) 1602 1603**Examples**: 1604 1605.. code-block:: c++ 1606 1607 uint8_t rev_x = __builtin_bitreverse8(x); 1608 uint16_t rev_x = __builtin_bitreverse16(x); 1609 uint32_t rev_y = __builtin_bitreverse32(y); 1610 uint64_t rev_z = __builtin_bitreverse64(z); 1611 1612**Description**: 1613 1614The '``__builtin_bitreverse``' family of builtins is used to reverse 1615the bitpattern of an integer value; for example ``0b10110110`` becomes 1616``0b01101101``. 1617 1618``__builtin_unreachable`` 1619------------------------- 1620 1621``__builtin_unreachable`` is used to indicate that a specific point in the 1622program cannot be reached, even if the compiler might otherwise think it can. 1623This is useful to improve optimization and eliminates certain warnings. For 1624example, without the ``__builtin_unreachable`` in the example below, the 1625compiler assumes that the inline asm can fall through and prints a "function 1626declared '``noreturn``' should not return" warning. 1627 1628**Syntax**: 1629 1630.. code-block:: c++ 1631 1632 __builtin_unreachable() 1633 1634**Example of use**: 1635 1636.. code-block:: c++ 1637 1638 void myabort(void) __attribute__((noreturn)); 1639 void myabort(void) { 1640 asm("int3"); 1641 __builtin_unreachable(); 1642 } 1643 1644**Description**: 1645 1646The ``__builtin_unreachable()`` builtin has completely undefined behavior. 1647Since it has undefined behavior, it is a statement that it is never reached and 1648the optimizer can take advantage of this to produce better code. This builtin 1649takes no arguments and produces a void result. 1650 1651Query for this feature with ``__has_builtin(__builtin_unreachable)``. 1652 1653``__builtin_unpredictable`` 1654--------------------------- 1655 1656``__builtin_unpredictable`` is used to indicate that a branch condition is 1657unpredictable by hardware mechanisms such as branch prediction logic. 1658 1659**Syntax**: 1660 1661.. code-block:: c++ 1662 1663 __builtin_unpredictable(long long) 1664 1665**Example of use**: 1666 1667.. code-block:: c++ 1668 1669 if (__builtin_unpredictable(x > 0)) { 1670 foo(); 1671 } 1672 1673**Description**: 1674 1675The ``__builtin_unpredictable()`` builtin is expected to be used with control 1676flow conditions such as in ``if`` and ``switch`` statements. 1677 1678Query for this feature with ``__has_builtin(__builtin_unpredictable)``. 1679 1680``__sync_swap`` 1681--------------- 1682 1683``__sync_swap`` is used to atomically swap integers or pointers in memory. 1684 1685**Syntax**: 1686 1687.. code-block:: c++ 1688 1689 type __sync_swap(type *ptr, type value, ...) 1690 1691**Example of Use**: 1692 1693.. code-block:: c++ 1694 1695 int old_value = __sync_swap(&value, new_value); 1696 1697**Description**: 1698 1699The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of 1700atomic intrinsics to allow code to atomically swap the current value with the 1701new value. More importantly, it helps developers write more efficient and 1702correct code by avoiding expensive loops around 1703``__sync_bool_compare_and_swap()`` or relying on the platform specific 1704implementation details of ``__sync_lock_test_and_set()``. The 1705``__sync_swap()`` builtin is a full barrier. 1706 1707``__builtin_addressof`` 1708----------------------- 1709 1710``__builtin_addressof`` performs the functionality of the built-in ``&`` 1711operator, ignoring any ``operator&`` overload. This is useful in constant 1712expressions in C++11, where there is no other way to take the address of an 1713object that overloads ``operator&``. 1714 1715**Example of use**: 1716 1717.. code-block:: c++ 1718 1719 template<typename T> constexpr T *addressof(T &value) { 1720 return __builtin_addressof(value); 1721 } 1722 1723``__builtin_operator_new`` and ``__builtin_operator_delete`` 1724------------------------------------------------------------ 1725 1726``__builtin_operator_new`` allocates memory just like a non-placement non-class 1727*new-expression*. This is exactly like directly calling the normal 1728non-placement ``::operator new``, except that it allows certain optimizations 1729that the C++ standard does not permit for a direct function call to 1730``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and 1731merging allocations). 1732 1733Likewise, ``__builtin_operator_delete`` deallocates memory just like a 1734non-class *delete-expression*, and is exactly like directly calling the normal 1735``::operator delete``, except that it permits optimizations. Only the unsized 1736form of ``__builtin_operator_delete`` is currently available. 1737 1738These builtins are intended for use in the implementation of ``std::allocator`` 1739and other similar allocation libraries, and are only available in C++. 1740 1741Multiprecision Arithmetic Builtins 1742---------------------------------- 1743 1744Clang provides a set of builtins which expose multiprecision arithmetic in a 1745manner amenable to C. They all have the following form: 1746 1747.. code-block:: c 1748 1749 unsigned x = ..., y = ..., carryin = ..., carryout; 1750 unsigned sum = __builtin_addc(x, y, carryin, &carryout); 1751 1752Thus one can form a multiprecision addition chain in the following manner: 1753 1754.. code-block:: c 1755 1756 unsigned *x, *y, *z, carryin=0, carryout; 1757 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout); 1758 carryin = carryout; 1759 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout); 1760 carryin = carryout; 1761 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout); 1762 carryin = carryout; 1763 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout); 1764 1765The complete list of builtins are: 1766 1767.. code-block:: c 1768 1769 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 1770 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1771 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1772 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1773 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1774 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout); 1775 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1776 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1777 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1778 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1779 1780Checked Arithmetic Builtins 1781--------------------------- 1782 1783Clang provides a set of builtins that implement checked arithmetic for security 1784critical applications in a manner that is fast and easily expressable in C. As 1785an example of their usage: 1786 1787.. code-block:: c 1788 1789 errorcode_t security_critical_application(...) { 1790 unsigned x, y, result; 1791 ... 1792 if (__builtin_mul_overflow(x, y, &result)) 1793 return kErrorCodeHackers; 1794 ... 1795 use_multiply(result); 1796 ... 1797 } 1798 1799Clang provides the following checked arithmetic builtins: 1800 1801.. code-block:: c 1802 1803 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum); 1804 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff); 1805 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod); 1806 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum); 1807 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum); 1808 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum); 1809 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff); 1810 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff); 1811 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff); 1812 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod); 1813 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod); 1814 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod); 1815 bool __builtin_sadd_overflow (int x, int y, int *sum); 1816 bool __builtin_saddl_overflow (long x, long y, long *sum); 1817 bool __builtin_saddll_overflow(long long x, long long y, long long *sum); 1818 bool __builtin_ssub_overflow (int x, int y, int *diff); 1819 bool __builtin_ssubl_overflow (long x, long y, long *diff); 1820 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff); 1821 bool __builtin_smul_overflow (int x, int y, int *prod); 1822 bool __builtin_smull_overflow (long x, long y, long *prod); 1823 bool __builtin_smulll_overflow(long long x, long long y, long long *prod); 1824 1825Each builtin performs the specified mathematical operation on the 1826first two arguments and stores the result in the third argument. If 1827possible, the result will be equal to mathematically-correct result 1828and the builtin will return 0. Otherwise, the builtin will return 18291 and the result will be equal to the unique value that is equivalent 1830to the mathematically-correct result modulo two raised to the *k* 1831power, where *k* is the number of bits in the result type. The 1832behavior of these builtins is well-defined for all argument values. 1833 1834The first three builtins work generically for operands of any integer type, 1835including boolean types. The operands need not have the same type as each 1836other, or as the result. The other builtins may implicitly promote or 1837convert their operands before performing the operation. 1838 1839Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc. 1840 1841Floating point builtins 1842--------------------------------------- 1843 1844``__builtin_canonicalize`` 1845-------------------------- 1846 1847.. code-block:: c 1848 1849 double __builtin_canonicalize(double); 1850 float __builtin_canonicalizef(float); 1851 long double__builtin_canonicalizel(long double); 1852 1853Returns the platform specific canonical encoding of a floating point 1854number. This canonicalization is useful for implementing certain 1855numeric primitives such as frexp. See `LLVM canonicalize intrinsic 1856<http://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for 1857more information on the semantics. 1858 1859String builtins 1860--------------- 1861 1862Clang provides constant expression evaluation support for builtins forms of 1863the following functions from the C standard library ``<string.h>`` header: 1864 1865* ``memchr`` 1866* ``memcmp`` 1867* ``strchr`` 1868* ``strcmp`` 1869* ``strlen`` 1870* ``strncmp`` 1871* ``wcschr`` 1872* ``wcscmp`` 1873* ``wcslen`` 1874* ``wcsncmp`` 1875* ``wmemchr`` 1876* ``wmemcmp`` 1877 1878In each case, the builtin form has the name of the C library function prefixed 1879by ``__builtin_``. Example: 1880 1881.. code-block:: c 1882 1883 void *p = __builtin_memchr("foobar", 'b', 5); 1884 1885In addition to the above, one further builtin is provided: 1886 1887.. code-block:: c 1888 1889 char *__builtin_char_memchr(const char *haystack, int needle, size_t size); 1890 1891``__builtin_char_memchr(a, b, c)`` is identical to 1892``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within 1893constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*`` 1894is disallowed in general). 1895 1896Support for constant expression evaluation for the above builtins be detected 1897with ``__has_feature(cxx_constexpr_string_builtins)``. 1898 1899.. _langext-__c11_atomic: 1900 1901__c11_atomic builtins 1902--------------------- 1903 1904Clang provides a set of builtins which are intended to be used to implement 1905C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the 1906``_explicit`` form of the corresponding C11 operation, and are named with a 1907``__c11_`` prefix. The supported operations, and the differences from 1908the corresponding C11 operations, are: 1909 1910* ``__c11_atomic_init`` 1911* ``__c11_atomic_thread_fence`` 1912* ``__c11_atomic_signal_fence`` 1913* ``__c11_atomic_is_lock_free`` (The argument is the size of the 1914 ``_Atomic(...)`` object, instead of its address) 1915* ``__c11_atomic_store`` 1916* ``__c11_atomic_load`` 1917* ``__c11_atomic_exchange`` 1918* ``__c11_atomic_compare_exchange_strong`` 1919* ``__c11_atomic_compare_exchange_weak`` 1920* ``__c11_atomic_fetch_add`` 1921* ``__c11_atomic_fetch_sub`` 1922* ``__c11_atomic_fetch_and`` 1923* ``__c11_atomic_fetch_or`` 1924* ``__c11_atomic_fetch_xor`` 1925 1926The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, 1927``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are 1928provided, with values corresponding to the enumerators of C11's 1929``memory_order`` enumeration. 1930 1931(Note that Clang additionally provides GCC-compatible ``__atomic_*`` 1932builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0 1933atomic builtins are an explicit form of the corresponding OpenCL 2.0 1934builtin function, and are named with a ``__opencl_`` prefix. The macros 1935``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``, 1936``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``, 1937and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values 1938corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.) 1939 1940Low-level ARM exclusive memory builtins 1941--------------------------------------- 1942 1943Clang provides overloaded builtins giving direct access to the three key ARM 1944instructions for implementing atomic operations. 1945 1946.. code-block:: c 1947 1948 T __builtin_arm_ldrex(const volatile T *addr); 1949 T __builtin_arm_ldaex(const volatile T *addr); 1950 int __builtin_arm_strex(T val, volatile T *addr); 1951 int __builtin_arm_stlex(T val, volatile T *addr); 1952 void __builtin_arm_clrex(void); 1953 1954The types ``T`` currently supported are: 1955 1956* Integer types with width at most 64 bits (or 128 bits on AArch64). 1957* Floating-point types 1958* Pointer types. 1959 1960Note that the compiler does not guarantee it will not insert stores which clear 1961the exclusive monitor in between an ``ldrex`` type operation and its paired 1962``strex``. In practice this is only usually a risk when the extra store is on 1963the same cache line as the variable being modified and Clang will only insert 1964stack stores on its own, so it is best not to use these operations on variables 1965with automatic storage duration. 1966 1967Also, loads and stores may be implicit in code written between the ``ldrex`` and 1968``strex``. Clang will not necessarily mitigate the effects of these either, so 1969care should be exercised. 1970 1971For these reasons the higher level atomic primitives should be preferred where 1972possible. 1973 1974Non-temporal load/store builtins 1975-------------------------------- 1976 1977Clang provides overloaded builtins allowing generation of non-temporal memory 1978accesses. 1979 1980.. code-block:: c 1981 1982 T __builtin_nontemporal_load(T *addr); 1983 void __builtin_nontemporal_store(T value, T *addr); 1984 1985The types ``T`` currently supported are: 1986 1987* Integer types. 1988* Floating-point types. 1989* Vector types. 1990 1991Note that the compiler does not guarantee that non-temporal loads or stores 1992will be used. 1993 1994C++ Coroutines support builtins 1995-------------------------------- 1996 1997.. warning:: 1998 This is a work in progress. Compatibility across Clang/LLVM releases is not 1999 guaranteed. 2000 2001Clang provides experimental builtins to support C++ Coroutines as defined by 2002http://wg21.link/P0057. The following four are intended to be used by the 2003standard library to implement `std::experimental::coroutine_handle` type. 2004 2005**Syntax**: 2006 2007.. code-block:: c 2008 2009 void __builtin_coro_resume(void *addr); 2010 void __builtin_coro_destroy(void *addr); 2011 bool __builtin_coro_done(void *addr); 2012 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise) 2013 2014**Example of use**: 2015 2016.. code-block:: c++ 2017 2018 template <> struct coroutine_handle<void> { 2019 void resume() const { __builtin_coro_resume(ptr); } 2020 void destroy() const { __builtin_coro_destroy(ptr); } 2021 bool done() const { return __builtin_coro_done(ptr); } 2022 // ... 2023 protected: 2024 void *ptr; 2025 }; 2026 2027 template <typename Promise> struct coroutine_handle : coroutine_handle<> { 2028 // ... 2029 Promise &promise() const { 2030 return *reinterpret_cast<Promise *>( 2031 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false)); 2032 } 2033 static coroutine_handle from_promise(Promise &promise) { 2034 coroutine_handle p; 2035 p.ptr = __builtin_coro_promise(&promise, alignof(Promise), 2036 /*from-promise=*/true); 2037 return p; 2038 } 2039 }; 2040 2041 2042Other coroutine builtins are either for internal clang use or for use during 2043development of the coroutine feature. See `Coroutines in LLVM 2044<http://llvm.org/docs/Coroutines.html#intrinsics>`_ for 2045more information on their semantics. Note that builtins matching the intrinsics 2046that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc, 2047llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to 2048an appropriate value during the emission. 2049 2050**Syntax**: 2051 2052.. code-block:: c 2053 2054 size_t __builtin_coro_size() 2055 void *__builtin_coro_frame() 2056 void *__builtin_coro_free(void *coro_frame) 2057 2058 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts) 2059 bool __builtin_coro_alloc() 2060 void *__builtin_coro_begin(void *memory) 2061 void __builtin_coro_end(void *coro_frame, bool unwind) 2062 char __builtin_coro_suspend(bool final) 2063 bool __builtin_coro_param(void *original, void *copy) 2064 2065Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM 2066automatically will insert one if the first argument to `llvm.coro.suspend` is 2067token `none`. If a user calls `__builin_suspend`, clang will insert `token none` 2068as the first argument to the intrinsic. 2069 2070Non-standard C++11 Attributes 2071============================= 2072 2073Clang's non-standard C++11 attributes live in the ``clang`` attribute 2074namespace. 2075 2076Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which 2077are accepted with the ``__attribute__((foo))`` syntax are also accepted as 2078``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 2079(see the list of `GCC function attributes 2080<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 2081attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 2082`GCC type attributes 2083<http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC 2084implementation, these attributes must appertain to the *declarator-id* in a 2085declaration, which means they must go either at the start of the declaration or 2086immediately after the name being declared. 2087 2088For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 2089also applies the GNU ``noreturn`` attribute to ``f``. 2090 2091.. code-block:: c++ 2092 2093 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 2094 2095Target-Specific Extensions 2096========================== 2097 2098Clang supports some language features conditionally on some targets. 2099 2100ARM/AArch64 Language Extensions 2101------------------------------- 2102 2103Memory Barrier Intrinsics 2104^^^^^^^^^^^^^^^^^^^^^^^^^ 2105Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined 2106in the `ARM C Language Extensions Release 2.0 2107<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_. 2108Note that these intrinsics are implemented as motion barriers that block 2109reordering of memory accesses and side effect instructions. Other instructions 2110like simple arithmetic may be reordered around the intrinsic. If you expect to 2111have no reordering at all, use inline assembly instead. 2112 2113X86/X86-64 Language Extensions 2114------------------------------ 2115 2116The X86 backend has these language extensions: 2117 2118Memory references to specified segments 2119^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2120 2121Annotating a pointer with address space #256 causes it to be code generated 2122relative to the X86 GS segment register, address space #257 causes it to be 2123relative to the X86 FS segment, and address space #258 causes it to be 2124relative to the X86 SS segment. Note that this is a very very low-level 2125feature that should only be used if you know what you're doing (for example in 2126an OS kernel). 2127 2128Here is an example: 2129 2130.. code-block:: c++ 2131 2132 #define GS_RELATIVE __attribute__((address_space(256))) 2133 int foo(int GS_RELATIVE *P) { 2134 return *P; 2135 } 2136 2137Which compiles to (on X86-32): 2138 2139.. code-block:: gas 2140 2141 _foo: 2142 movl 4(%esp), %eax 2143 movl %gs:(%eax), %eax 2144 ret 2145 2146Extensions for Static Analysis 2147============================== 2148 2149Clang supports additional attributes that are useful for documenting program 2150invariants and rules for static analysis tools, such as the `Clang Static 2151Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented 2152in the analyzer's `list of source-level annotations 2153<http://clang-analyzer.llvm.org/annotations.html>`_. 2154 2155 2156Extensions for Dynamic Analysis 2157=============================== 2158 2159Use ``__has_feature(address_sanitizer)`` to check if the code is being built 2160with :doc:`AddressSanitizer`. 2161 2162Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 2163with :doc:`ThreadSanitizer`. 2164 2165Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 2166with :doc:`MemorySanitizer`. 2167 2168Use ``__has_feature(safe_stack)`` to check if the code is being built 2169with :doc:`SafeStack`. 2170 2171 2172Extensions for selectively disabling optimization 2173================================================= 2174 2175Clang provides a mechanism for selectively disabling optimizations in functions 2176and methods. 2177 2178To disable optimizations in a single function definition, the GNU-style or C++11 2179non-standard attribute ``optnone`` can be used. 2180 2181.. code-block:: c++ 2182 2183 // The following functions will not be optimized. 2184 // GNU-style attribute 2185 __attribute__((optnone)) int foo() { 2186 // ... code 2187 } 2188 // C++11 attribute 2189 [[clang::optnone]] int bar() { 2190 // ... code 2191 } 2192 2193To facilitate disabling optimization for a range of function definitions, a 2194range-based pragma is provided. Its syntax is ``#pragma clang optimize`` 2195followed by ``off`` or ``on``. 2196 2197All function definitions in the region between an ``off`` and the following 2198``on`` will be decorated with the ``optnone`` attribute unless doing so would 2199conflict with explicit attributes already present on the function (e.g. the 2200ones that control inlining). 2201 2202.. code-block:: c++ 2203 2204 #pragma clang optimize off 2205 // This function will be decorated with optnone. 2206 int foo() { 2207 // ... code 2208 } 2209 2210 // optnone conflicts with always_inline, so bar() will not be decorated. 2211 __attribute__((always_inline)) int bar() { 2212 // ... code 2213 } 2214 #pragma clang optimize on 2215 2216If no ``on`` is found to close an ``off`` region, the end of the region is the 2217end of the compilation unit. 2218 2219Note that a stray ``#pragma clang optimize on`` does not selectively enable 2220additional optimizations when compiling at low optimization levels. This feature 2221can only be used to selectively disable optimizations. 2222 2223The pragma has an effect on functions only at the point of their definition; for 2224function templates, this means that the state of the pragma at the point of an 2225instantiation is not necessarily relevant. Consider the following example: 2226 2227.. code-block:: c++ 2228 2229 template<typename T> T twice(T t) { 2230 return 2 * t; 2231 } 2232 2233 #pragma clang optimize off 2234 template<typename T> T thrice(T t) { 2235 return 3 * t; 2236 } 2237 2238 int container(int a, int b) { 2239 return twice(a) + thrice(b); 2240 } 2241 #pragma clang optimize on 2242 2243In this example, the definition of the template function ``twice`` is outside 2244the pragma region, whereas the definition of ``thrice`` is inside the region. 2245The ``container`` function is also in the region and will not be optimized, but 2246it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of 2247these two instantiations, ``twice`` will be optimized (because its definition 2248was outside the region) and ``thrice`` will not be optimized. 2249 2250Extensions for loop hint optimizations 2251====================================== 2252 2253The ``#pragma clang loop`` directive is used to specify hints for optimizing the 2254subsequent for, while, do-while, or c++11 range-based for loop. The directive 2255provides options for vectorization, interleaving, unrolling and 2256distribution. Loop hints can be specified before any loop and will be ignored if 2257the optimization is not safe to apply. 2258 2259Vectorization and Interleaving 2260------------------------------ 2261 2262A vectorized loop performs multiple iterations of the original loop 2263in parallel using vector instructions. The instruction set of the target 2264processor determines which vector instructions are available and their vector 2265widths. This restricts the types of loops that can be vectorized. The vectorizer 2266automatically determines if the loop is safe and profitable to vectorize. A 2267vector instruction cost model is used to select the vector width. 2268 2269Interleaving multiple loop iterations allows modern processors to further 2270improve instruction-level parallelism (ILP) using advanced hardware features, 2271such as multiple execution units and out-of-order execution. The vectorizer uses 2272a cost model that depends on the register pressure and generated code size to 2273select the interleaving count. 2274 2275Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled 2276by ``interleave(enable)``. This is useful when compiling with ``-Os`` to 2277manually enable vectorization or interleaving. 2278 2279.. code-block:: c++ 2280 2281 #pragma clang loop vectorize(enable) 2282 #pragma clang loop interleave(enable) 2283 for(...) { 2284 ... 2285 } 2286 2287The vector width is specified by ``vectorize_width(_value_)`` and the interleave 2288count is specified by ``interleave_count(_value_)``, where 2289_value_ is a positive integer. This is useful for specifying the optimal 2290width/count of the set of target architectures supported by your application. 2291 2292.. code-block:: c++ 2293 2294 #pragma clang loop vectorize_width(2) 2295 #pragma clang loop interleave_count(2) 2296 for(...) { 2297 ... 2298 } 2299 2300Specifying a width/count of 1 disables the optimization, and is equivalent to 2301``vectorize(disable)`` or ``interleave(disable)``. 2302 2303Loop Unrolling 2304-------------- 2305 2306Unrolling a loop reduces the loop control overhead and exposes more 2307opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling 2308eliminates the loop and replaces it with an enumerated sequence of loop 2309iterations. Full unrolling is only possible if the loop trip count is known at 2310compile time. Partial unrolling replicates the loop body within the loop and 2311reduces the trip count. 2312 2313If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the 2314loop if the trip count is known at compile time. If the fully unrolled code size 2315is greater than an internal limit the loop will be partially unrolled up to this 2316limit. If the trip count is not known at compile time the loop will be partially 2317unrolled with a heuristically chosen unroll factor. 2318 2319.. code-block:: c++ 2320 2321 #pragma clang loop unroll(enable) 2322 for(...) { 2323 ... 2324 } 2325 2326If ``unroll(full)`` is specified the unroller will attempt to fully unroll the 2327loop if the trip count is known at compile time identically to 2328``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled 2329if the loop count is not known at compile time. 2330 2331.. code-block:: c++ 2332 2333 #pragma clang loop unroll(full) 2334 for(...) { 2335 ... 2336 } 2337 2338The unroll count can be specified explicitly with ``unroll_count(_value_)`` where 2339_value_ is a positive integer. If this value is greater than the trip count the 2340loop will be fully unrolled. Otherwise the loop is partially unrolled subject 2341to the same code size limit as with ``unroll(enable)``. 2342 2343.. code-block:: c++ 2344 2345 #pragma clang loop unroll_count(8) 2346 for(...) { 2347 ... 2348 } 2349 2350Unrolling of a loop can be prevented by specifying ``unroll(disable)``. 2351 2352Loop Distribution 2353----------------- 2354 2355Loop Distribution allows splitting a loop into multiple loops. This is 2356beneficial for example when the entire loop cannot be vectorized but some of the 2357resulting loops can. 2358 2359If ``distribute(enable))`` is specified and the loop has memory dependencies 2360that inhibit vectorization, the compiler will attempt to isolate the offending 2361operations into a new loop. This optimization is not enabled by default, only 2362loops marked with the pragma are considered. 2363 2364.. code-block:: c++ 2365 2366 #pragma clang loop distribute(enable) 2367 for (i = 0; i < N; ++i) { 2368 S1: A[i + 1] = A[i] + B[i]; 2369 S2: C[i] = D[i] * E[i]; 2370 } 2371 2372This loop will be split into two loops between statements S1 and S2. The 2373second loop containing S2 will be vectorized. 2374 2375Loop Distribution is currently not enabled by default in the optimizer because 2376it can hurt performance in some cases. For example, instruction-level 2377parallelism could be reduced by sequentializing the execution of the 2378statements S1 and S2 above. 2379 2380If Loop Distribution is turned on globally with 2381``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can 2382be used the disable it on a per-loop basis. 2383 2384Additional Information 2385---------------------- 2386 2387For convenience multiple loop hints can be specified on a single line. 2388 2389.. code-block:: c++ 2390 2391 #pragma clang loop vectorize_width(4) interleave_count(8) 2392 for(...) { 2393 ... 2394 } 2395 2396If an optimization cannot be applied any hints that apply to it will be ignored. 2397For example, the hint ``vectorize_width(4)`` is ignored if the loop is not 2398proven safe to vectorize. To identify and diagnose optimization issues use 2399`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the 2400user guide for details. 2401 2402Extensions to specify floating-point flags 2403==================================================== 2404 2405The ``#pragma clang fp`` pragma allows floating-point options to be specified 2406for a section of the source code. This pragma can only appear at file scope or 2407at the start of a compound statement (excluding comments). When using within a 2408compound statement, the pragma is active within the scope of the compound 2409statement. 2410 2411Currently, only FP contraction can be controlled with the pragma. ``#pragma 2412clang fp contract`` specifies whether the compiler should contract a multiply 2413and an addition (or subtraction) into a fused FMA operation when supported by 2414the target. 2415 2416The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on`` 2417option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows 2418fusion as specified the language standard. The ``fast`` option allows fusiong 2419in cases when the language standard does not make this possible (e.g. across 2420statements in C) 2421 2422.. code-block:: c++ 2423 2424 for(...) { 2425 #pragma clang fp contract(fast) 2426 a = b[i] * c[i]; 2427 d[i] += a; 2428 } 2429 2430 2431The pragma can also be used with ``off`` which turns FP contraction off for a 2432section of the code. This can be useful when fast contraction is otherwise 2433enabled for the translation unit with the ``-ffp-contract=fast`` flag. 2434 2435Specifying an attribute for multiple declarations (#pragma clang attribute) 2436=========================================================================== 2437 2438The ``#pragma clang attribute`` directive can be used to apply an attribute to 2439multiple declarations. The ``#pragma clang attribute push`` variation of the 2440directive pushes a new attribute to the attribute stack. The declarations that 2441follow the pragma receive the attributes that are on the attribute stack, until 2442the stack is cleared using a ``#pragma clang attribute pop`` directive. Multiple 2443push directives can be nested inside each other. 2444 2445The attributes that are used in the ``#pragma clang attribute`` directives 2446can be written using the GNU-style syntax: 2447 2448.. code-block:: c++ 2449 2450 #pragma clang attribute push(__attribute__((annotate("custom"))), apply_to = function) 2451 2452 void function(); // The function now has the annotate("custom") attribute 2453 2454 #pragma clang attribute pop 2455 2456The attributes can also be written using the C++11 style syntax: 2457 2458.. code-block:: c++ 2459 2460 #pragma clang attribute push([[noreturn]], apply_to = function) 2461 2462 void function(); // The function now has the [[noreturn]] attribute 2463 2464 #pragma clang attribute pop 2465 2466The ``__declspec`` style syntax is also supported: 2467 2468.. code-block:: c++ 2469 2470 #pragma clang attribute push(__declspec(dllexport), apply_to = function) 2471 2472 void function(); // The function now has the __declspec(dllexport) attribute 2473 2474 #pragma clang attribute pop 2475 2476A single push directive accepts only one attribute regardless of the syntax 2477used. 2478 2479Subject Match Rules 2480------------------- 2481 2482The set of declarations that receive a single attribute from the attribute stack 2483depends on the subject match rules that were specified in the pragma. Subject 2484match rules are specified after the attribute. The compiler expects an 2485identifier that corresponds to the subject set specifier. The ``apply_to`` 2486specifier is currently the only supported subject set specifier. It allows you 2487to specify match rules that form a subset of the attribute's allowed subject 2488set, i.e. the compiler doesn't require all of the attribute's subjects. For 2489example, an attribute like ``[[nodiscard]]`` whose subject set includes 2490``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at 2491least one of these rules after ``apply_to``: 2492 2493.. code-block:: c++ 2494 2495 #pragma clang attribute push([[nodiscard]], apply_to = enum) 2496 2497 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]] 2498 2499 struct Record1 { }; // The struct will *not* receive [[nodiscard]] 2500 2501 #pragma clang attribute pop 2502 2503 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum)) 2504 2505 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]] 2506 2507 struct Record2 { }; // The struct *will* receive [[nodiscard]] 2508 2509 #pragma clang attribute pop 2510 2511 // This is an error, since [[nodiscard]] can't be applied to namespaces: 2512 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace)) 2513 2514 #pragma clang attribute pop 2515 2516Multiple match rules can be specified using the ``any`` match rule, as shown 2517in the example above. The ``any`` rule applies attributes to all declarations 2518that are matched by at least one of the rules in the ``any``. It doesn't nest 2519and can't be used inside the other match rules. Redundant match rules or rules 2520that conflict with one another should not be used inside of ``any``. 2521 2522Clang supports the following match rules: 2523 2524- ``function``: Can be used to apply attributes to functions. This includes C++ 2525 member functions, static functions, operators, and constructors/destructors. 2526 2527- ``function(is_member)``: Can be used to apply attributes to C++ member 2528 functions. This includes members like static functions, operators, and 2529 constructors/destructors. 2530 2531- ``hasType(functionType)``: Can be used to apply attributes to functions, C++ 2532 member functions, and variables/fields whose type is a function pointer. It 2533 does not apply attributes to Objective-C methods or blocks. 2534 2535- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations 2536 and C++11 type aliases. 2537 2538- ``record``: Can be used to apply attributes to ``struct``, ``class``, and 2539 ``union`` declarations. 2540 2541- ``record(unless(is_union))``: Can be used to apply attributes only to 2542 ``struct`` and ``class`` declarations. 2543 2544- ``enum``: Can be be used to apply attributes to enumeration declarations. 2545 2546- ``enum_constant``: Can be used to apply attributes to enumerators. 2547 2548- ``variable``: Can be used to apply attributes to variables, including 2549 local variables, parameters, global variables, and static member variables. 2550 It does not apply attributes to instance member variables or Objective-C 2551 ivars. 2552 2553- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local 2554 variables only. 2555 2556- ``variable(is_global)``: Can be used to apply attributes to global variables 2557 only. 2558 2559- ``variable(is_parameter)``: Can be used to apply attributes to parameters 2560 only. 2561 2562- ``variable(unless(is_parameter))``: Can be used to apply attributes to all 2563 the variables that are not parameters. 2564 2565- ``field``: Can be used to apply attributes to non-static member variables 2566 in a record. This includes Objective-C ivars. 2567 2568- ``namespace``: Can be used to apply attributes to ``namespace`` declarations. 2569 2570- ``objc_interface``: Can be used to apply attributes to ``@interface`` 2571 declarations. 2572 2573- ``objc_protocol``: Can be used to apply attributes to ``@protocol`` 2574 declarations. 2575 2576- ``objc_category``: Can be used to apply attributes to category declarations, 2577 including class extensions. 2578 2579- ``objc_method``: Can be used to apply attributes to Objective-C methods, 2580 including instance and class methods. Implicit methods like implicit property 2581 getters and setters do not receive the attribute. 2582 2583- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C 2584 instance methods. 2585 2586- ``objc_property``: Can be used to apply attributes to ``@property`` 2587 declarations. 2588 2589- ``block``: Can be used to apply attributes to block declarations. This does 2590 not include variables/fields of block pointer type. 2591 2592The use of ``unless`` in match rules is currently restricted to a strict set of 2593sub-rules that are used by the supported attributes. That means that even though 2594``variable(unless(is_parameter))`` is a valid match rule, 2595``variable(unless(is_thread_local))`` is not. 2596 2597Supported Attributes 2598-------------------- 2599 2600Not all attributes can be used with the ``#pragma clang attribute`` directive. 2601Notably, statement attributes like ``[[fallthrough]]`` or type attributes 2602like ``address_space`` aren't supported by this directive. You can determine 2603whether or not an attribute is supported by the pragma by referring to the 2604:doc:`individual documentation for that attribute <AttributeReference>`. 2605 2606The attributes are applied to all matching declarations individually, even when 2607the attribute is semantically incorrect. The attributes that aren't applied to 2608any declaration are not verified semantically. 2609 2610Specifying section names for global objects (#pragma clang section) 2611=================================================================== 2612 2613The ``#pragma clang section`` directive provides a means to assign section-names 2614to global variables, functions and static variables. 2615 2616The section names can be specified as: 2617 2618.. code-block:: c++ 2619 2620 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" text="myText" 2621 2622The section names can be reverted back to default name by supplying an empty 2623string to the section kind, for example: 2624 2625.. code-block:: c++ 2626 2627 #pragma clang section bss="" data="" text="" rodata="" 2628 2629The ``#pragma clang section`` directive obeys the following rules: 2630 2631* The pragma applies to all global variable, statics and function declarations 2632 from the pragma to the end of the translation unit. 2633 2634* The pragma clang section is enabled automatically, without need of any flags. 2635 2636* This feature is only defined to work sensibly for ELF targets. 2637 2638* If section name is specified through _attribute_((section("myname"))), then 2639 the attribute name gains precedence. 2640 2641* Global variables that are initialized to zero will be placed in the named 2642 bss section, if one is present. 2643 2644* The ``#pragma clang section`` directive does not does try to infer section-kind 2645 from the name. For example, naming a section "``.bss.mySec``" does NOT mean 2646 it will be a bss section name. 2647 2648* The decision about which section-kind applies to each global is taken in the back-end. 2649 Once the section-kind is known, appropriate section name, as specified by the user using 2650 ``#pragma clang section`` directive, is applied to that global. 2651