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