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 backwards compatibility reasons, ``__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_attribute`` 113------------------- 114 115This function-like macro takes a single identifier argument that is the name of 116an attribute. It evaluates to 1 if the attribute is supported or 0 if not. It 117can be used like this: 118 119.. code-block:: c++ 120 121 #ifndef __has_attribute // Optional of course. 122 #define __has_attribute(x) 0 // Compatibility with non-clang compilers. 123 #endif 124 125 ... 126 #if __has_attribute(always_inline) 127 #define ALWAYS_INLINE __attribute__((always_inline)) 128 #else 129 #define ALWAYS_INLINE 130 #endif 131 ... 132 133The attribute name can also be specified with a preceding and following ``__`` 134(double underscore) to avoid interference from a macro with the same name. For 135instance, ``__always_inline__`` can be used instead of ``always_inline``. 136 137Include File Checking Macros 138============================ 139 140Not all developments systems have the same include files. The 141:ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow 142you to check for the existence of an include file before doing a possibly 143failing ``#include`` directive. Include file checking macros must be used 144as expressions in ``#if`` or ``#elif`` preprocessing directives. 145 146.. _langext-__has_include: 147 148``__has_include`` 149----------------- 150 151This function-like macro takes a single file name string argument that is the 152name of an include file. It evaluates to 1 if the file can be found using the 153include paths, or 0 otherwise: 154 155.. code-block:: c++ 156 157 // Note the two possible file name string formats. 158 #if __has_include("myinclude.h") && __has_include(<stdint.h>) 159 # include "myinclude.h" 160 #endif 161 162 // To avoid problem with non-clang compilers not having this macro. 163 #if defined(__has_include) && __has_include("myinclude.h") 164 # include "myinclude.h" 165 #endif 166 167To test for this feature, use ``#if defined(__has_include)``. 168 169.. _langext-__has_include_next: 170 171``__has_include_next`` 172---------------------- 173 174This function-like macro takes a single file name string argument that is the 175name of an include file. It is like ``__has_include`` except that it looks for 176the second instance of the given file found in the include paths. It evaluates 177to 1 if the second instance of the file can be found using the include paths, 178or 0 otherwise: 179 180.. code-block:: c++ 181 182 // Note the two possible file name string formats. 183 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>) 184 # include_next "myinclude.h" 185 #endif 186 187 // To avoid problem with non-clang compilers not having this macro. 188 #if defined(__has_include_next) && __has_include_next("myinclude.h") 189 # include_next "myinclude.h" 190 #endif 191 192Note that ``__has_include_next``, like the GNU extension ``#include_next`` 193directive, is intended for use in headers only, and will issue a warning if 194used in the top-level compilation file. A warning will also be issued if an 195absolute path is used in the file argument. 196 197``__has_warning`` 198----------------- 199 200This function-like macro takes a string literal that represents a command line 201option for a warning and returns true if that is a valid warning option. 202 203.. code-block:: c++ 204 205 #if __has_warning("-Wformat") 206 ... 207 #endif 208 209Builtin Macros 210============== 211 212``__BASE_FILE__`` 213 Defined to a string that contains the name of the main input file passed to 214 Clang. 215 216``__COUNTER__`` 217 Defined to an integer value that starts at zero and is incremented each time 218 the ``__COUNTER__`` macro is expanded. 219 220``__INCLUDE_LEVEL__`` 221 Defined to an integral value that is the include depth of the file currently 222 being translated. For the main file, this value is zero. 223 224``__TIMESTAMP__`` 225 Defined to the date and time of the last modification of the current source 226 file. 227 228``__clang__`` 229 Defined when compiling with Clang 230 231``__clang_major__`` 232 Defined to the major marketing version number of Clang (e.g., the 2 in 233 2.0.1). Note that marketing version numbers should not be used to check for 234 language features, as different vendors use different numbering schemes. 235 Instead, use the :ref:`langext-feature_check`. 236 237``__clang_minor__`` 238 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note 239 that marketing version numbers should not be used to check for language 240 features, as different vendors use different numbering schemes. Instead, use 241 the :ref:`langext-feature_check`. 242 243``__clang_patchlevel__`` 244 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1). 245 246``__clang_version__`` 247 Defined to a string that captures the Clang marketing version, including the 248 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``". 249 250.. _langext-vectors: 251 252Vectors and Extended Vectors 253============================ 254 255Supports the GCC, OpenCL, AltiVec and NEON vector extensions. 256 257OpenCL vector types are created using ``ext_vector_type`` attribute. It 258support for ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example 259is: 260 261.. code-block:: c++ 262 263 typedef float float4 __attribute__((ext_vector_type(4))); 264 typedef float float2 __attribute__((ext_vector_type(2))); 265 266 float4 foo(float2 a, float2 b) { 267 float4 c; 268 c.xz = a; 269 c.yw = b; 270 return c; 271 } 272 273Query for this feature with ``__has_extension(attribute_ext_vector_type)``. 274 275Giving ``-faltivec`` option to clang enables support for AltiVec vector syntax 276and functions. For example: 277 278.. code-block:: c++ 279 280 vector float foo(vector int a) { 281 vector int b; 282 b = vec_add(a, a) + a; 283 return (vector float)b; 284 } 285 286NEON vector types are created using ``neon_vector_type`` and 287``neon_polyvector_type`` attributes. For example: 288 289.. code-block:: c++ 290 291 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t; 292 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t; 293 294 int8x8_t foo(int8x8_t a) { 295 int8x8_t v; 296 v = a; 297 return v; 298 } 299 300Vector Literals 301--------------- 302 303Vector literals can be used to create vectors from a set of scalars, or 304vectors. Either parentheses or braces form can be used. In the parentheses 305form the number of literal values specified must be one, i.e. referring to a 306scalar value, or must match the size of the vector type being created. If a 307single scalar literal value is specified, the scalar literal value will be 308replicated to all the components of the vector type. In the brackets form any 309number of literals can be specified. For example: 310 311.. code-block:: c++ 312 313 typedef int v4si __attribute__((__vector_size__(16))); 314 typedef float float4 __attribute__((ext_vector_type(4))); 315 typedef float float2 __attribute__((ext_vector_type(2))); 316 317 v4si vsi = (v4si){1, 2, 3, 4}; 318 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f); 319 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1). 320 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0). 321 vector int vi3 = (vector int)(1, 2); // error 322 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0). 323 vector int vi5 = (vector int)(1, 2, 3, 4); 324 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f)); 325 326Vector Operations 327----------------- 328 329The table below shows the support for each operation by vector extension. A 330dash indicates that an operation is not accepted according to a corresponding 331specification. 332 333============================== ====== ======= === ==== 334 Opeator OpenCL AltiVec GCC NEON 335============================== ====== ======= === ==== 336[] yes yes yes -- 337unary operators +, -- yes yes yes -- 338++, -- -- yes yes yes -- 339+,--,*,/,% yes yes yes -- 340bitwise operators &,|,^,~ yes yes yes -- 341>>,<< yes yes yes -- 342!, &&, || no -- -- -- 343==, !=, >, <, >=, <= yes yes -- -- 344= yes yes yes yes 345:? yes -- -- -- 346sizeof yes yes yes yes 347============================== ====== ======= === ==== 348 349See also :ref:`langext-__builtin_shufflevector`. 350 351Messages on ``deprecated`` and ``unavailable`` Attributes 352========================================================= 353 354An optional string message can be added to the ``deprecated`` and 355``unavailable`` attributes. For example: 356 357.. code-block:: c++ 358 359 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!"))); 360 361If the deprecated or unavailable declaration is used, the message will be 362incorporated into the appropriate diagnostic: 363 364.. code-block:: c++ 365 366 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! 367 [-Wdeprecated-declarations] 368 explode(); 369 ^ 370 371Query for this feature with 372``__has_extension(attribute_deprecated_with_message)`` and 373``__has_extension(attribute_unavailable_with_message)``. 374 375Attributes on Enumerators 376========================= 377 378Clang allows attributes to be written on individual enumerators. This allows 379enumerators to be deprecated, made unavailable, etc. The attribute must appear 380after the enumerator name and before any initializer, like so: 381 382.. code-block:: c++ 383 384 enum OperationMode { 385 OM_Invalid, 386 OM_Normal, 387 OM_Terrified __attribute__((deprecated)), 388 OM_AbortOnError __attribute__((deprecated)) = 4 389 }; 390 391Attributes on the ``enum`` declaration do not apply to individual enumerators. 392 393Query for this feature with ``__has_extension(enumerator_attributes)``. 394 395'User-Specified' System Frameworks 396================================== 397 398Clang provides a mechanism by which frameworks can be built in such a way that 399they will always be treated as being "system frameworks", even if they are not 400present in a system framework directory. This can be useful to system 401framework developers who want to be able to test building other applications 402with development builds of their framework, including the manner in which the 403compiler changes warning behavior for system headers. 404 405Framework developers can opt-in to this mechanism by creating a 406"``.system_framework``" file at the top-level of their framework. That is, the 407framework should have contents like: 408 409.. code-block:: none 410 411 .../TestFramework.framework 412 .../TestFramework.framework/.system_framework 413 .../TestFramework.framework/Headers 414 .../TestFramework.framework/Headers/TestFramework.h 415 ... 416 417Clang will treat the presence of this file as an indicator that the framework 418should be treated as a system framework, regardless of how it was found in the 419framework search path. For consistency, we recommend that such files never be 420included in installed versions of the framework. 421 422Availability attribute 423====================== 424 425Clang introduces the ``availability`` attribute, which can be placed on 426declarations to describe the lifecycle of that declaration relative to 427operating system versions. Consider the function declaration for a 428hypothetical function ``f``: 429 430.. code-block:: c++ 431 432 void f(void) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,obsoleted=10.7))); 433 434The availability attribute states that ``f`` was introduced in Mac OS X 10.4, 435deprecated in Mac OS X 10.6, and obsoleted in Mac OS X 10.7. This information 436is used by Clang to determine when it is safe to use ``f``: for example, if 437Clang is instructed to compile code for Mac OS X 10.5, a call to ``f()`` 438succeeds. If Clang is instructed to compile code for Mac OS X 10.6, the call 439succeeds but Clang emits a warning specifying that the function is deprecated. 440Finally, if Clang is instructed to compile code for Mac OS X 10.7, the call 441fails because ``f()`` is no longer available. 442 443The availability attribute is a comma-separated list starting with the 444platform name and then including clauses specifying important milestones in the 445declaration's lifetime (in any order) along with additional information. Those 446clauses can be: 447 448introduced=\ *version* 449 The first version in which this declaration was introduced. 450 451deprecated=\ *version* 452 The first version in which this declaration was deprecated, meaning that 453 users should migrate away from this API. 454 455obsoleted=\ *version* 456 The first version in which this declaration was obsoleted, meaning that it 457 was removed completely and can no longer be used. 458 459unavailable 460 This declaration is never available on this platform. 461 462message=\ *string-literal* 463 Additional message text that Clang will provide when emitting a warning or 464 error about use of a deprecated or obsoleted declaration. Useful to direct 465 users to replacement APIs. 466 467Multiple availability attributes can be placed on a declaration, which may 468correspond to different platforms. Only the availability attribute with the 469platform corresponding to the target platform will be used; any others will be 470ignored. If no availability attribute specifies availability for the current 471target platform, the availability attributes are ignored. Supported platforms 472are: 473 474``ios`` 475 Apple's iOS operating system. The minimum deployment target is specified by 476 the ``-mios-version-min=*version*`` or ``-miphoneos-version-min=*version*`` 477 command-line arguments. 478 479``macosx`` 480 Apple's Mac OS X operating system. The minimum deployment target is 481 specified by the ``-mmacosx-version-min=*version*`` command-line argument. 482 483A declaration can be used even when deploying back to a platform version prior 484to when the declaration was introduced. When this happens, the declaration is 485`weakly linked 486<https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html>`_, 487as if the ``weak_import`` attribute were added to the declaration. A 488weakly-linked declaration may or may not be present a run-time, and a program 489can determine whether the declaration is present by checking whether the 490address of that declaration is non-NULL. 491 492If there are multiple declarations of the same entity, the availability 493attributes must either match on a per-platform basis or later 494declarations must not have availability attributes for that 495platform. For example: 496 497.. code-block:: c 498 499 void g(void) __attribute__((availability(macosx,introduced=10.4))); 500 void g(void) __attribute__((availability(macosx,introduced=10.4))); // okay, matches 501 void g(void) __attribute__((availability(ios,introduced=4.0))); // okay, adds a new platform 502 void g(void); // okay, inherits both macosx and ios availability from above. 503 void g(void) __attribute__((availability(macosx,introduced=10.5))); // error: mismatch 504 505When one method overrides another, the overriding method can be more widely available than the overridden method, e.g.,: 506 507.. code-block:: objc 508 509 @interface A 510 - (id)method __attribute__((availability(macosx,introduced=10.4))); 511 - (id)method2 __attribute__((availability(macosx,introduced=10.4))); 512 @end 513 514 @interface B : A 515 - (id)method __attribute__((availability(macosx,introduced=10.3))); // okay: method moved into base class later 516 - (id)method __attribute__((availability(macosx,introduced=10.5))); // error: this method was available via the base class in 10.4 517 @end 518 519Checks for Standard Language Features 520===================================== 521 522The ``__has_feature`` macro can be used to query if certain standard language 523features are enabled. The ``__has_extension`` macro can be used to query if 524language features are available as an extension when compiling for a standard 525which does not provide them. The features which can be tested are listed here. 526 527C++98 528----- 529 530The features listed below are part of the C++98 standard. These features are 531enabled by default when compiling C++ code. 532 533C++ exceptions 534^^^^^^^^^^^^^^ 535 536Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been 537enabled. For example, compiling code with ``-fno-exceptions`` disables C++ 538exceptions. 539 540C++ RTTI 541^^^^^^^^ 542 543Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For 544example, compiling code with ``-fno-rtti`` disables the use of RTTI. 545 546C++11 547----- 548 549The features listed below are part of the C++11 standard. As a result, all 550these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option 551when compiling C++ code. 552 553C++11 SFINAE includes access control 554^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 555 556Use ``__has_feature(cxx_access_control_sfinae)`` or 557``__has_extension(cxx_access_control_sfinae)`` to determine whether 558access-control errors (e.g., calling a private constructor) are considered to 559be template argument deduction errors (aka SFINAE errors), per `C++ DR1170 560<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_. 561 562C++11 alias templates 563^^^^^^^^^^^^^^^^^^^^^ 564 565Use ``__has_feature(cxx_alias_templates)`` or 566``__has_extension(cxx_alias_templates)`` to determine if support for C++11's 567alias declarations and alias templates is enabled. 568 569C++11 alignment specifiers 570^^^^^^^^^^^^^^^^^^^^^^^^^^ 571 572Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to 573determine if support for alignment specifiers using ``alignas`` is enabled. 574 575C++11 attributes 576^^^^^^^^^^^^^^^^ 577 578Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to 579determine if support for attribute parsing with C++11's square bracket notation 580is enabled. 581 582C++11 generalized constant expressions 583^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 584 585Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized 586constant expressions (e.g., ``constexpr``) is enabled. 587 588C++11 ``decltype()`` 589^^^^^^^^^^^^^^^^^^^^ 590 591Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to 592determine if support for the ``decltype()`` specifier is enabled. C++11's 593``decltype`` does not require type-completeness of a function call expression. 594Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or 595``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if 596support for this feature is enabled. 597 598C++11 default template arguments in function templates 599^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 600 601Use ``__has_feature(cxx_default_function_template_args)`` or 602``__has_extension(cxx_default_function_template_args)`` to determine if support 603for default template arguments in function templates is enabled. 604 605C++11 ``default``\ ed functions 606^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 607 608Use ``__has_feature(cxx_defaulted_functions)`` or 609``__has_extension(cxx_defaulted_functions)`` to determine if support for 610defaulted function definitions (with ``= default``) is enabled. 611 612C++11 delegating constructors 613^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 614 615Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for 616delegating constructors is enabled. 617 618C++11 ``deleted`` functions 619^^^^^^^^^^^^^^^^^^^^^^^^^^^ 620 621Use ``__has_feature(cxx_deleted_functions)`` or 622``__has_extension(cxx_deleted_functions)`` to determine if support for deleted 623function definitions (with ``= delete``) is enabled. 624 625C++11 explicit conversion functions 626^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 627 628Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for 629``explicit`` conversion functions is enabled. 630 631C++11 generalized initializers 632^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 633 634Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for 635generalized initializers (using braced lists and ``std::initializer_list``) is 636enabled. 637 638C++11 implicit move constructors/assignment operators 639^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 640 641Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly 642generate move constructors and move assignment operators where needed. 643 644C++11 inheriting constructors 645^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 646 647Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for 648inheriting constructors is enabled. 649 650C++11 inline namespaces 651^^^^^^^^^^^^^^^^^^^^^^^ 652 653Use ``__has_feature(cxx_inline_namespaces)`` or 654``__has_extension(cxx_inline_namespaces)`` to determine if support for inline 655namespaces is enabled. 656 657C++11 lambdas 658^^^^^^^^^^^^^ 659 660Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to 661determine if support for lambdas is enabled. 662 663C++11 local and unnamed types as template arguments 664^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 665 666Use ``__has_feature(cxx_local_type_template_args)`` or 667``__has_extension(cxx_local_type_template_args)`` to determine if support for 668local and unnamed types as template arguments is enabled. 669 670C++11 noexcept 671^^^^^^^^^^^^^^ 672 673Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to 674determine if support for noexcept exception specifications is enabled. 675 676C++11 in-class non-static data member initialization 677^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 678 679Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class 680initialization of non-static data members is enabled. 681 682C++11 ``nullptr`` 683^^^^^^^^^^^^^^^^^ 684 685Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to 686determine if support for ``nullptr`` is enabled. 687 688C++11 ``override control`` 689^^^^^^^^^^^^^^^^^^^^^^^^^^ 690 691Use ``__has_feature(cxx_override_control)`` or 692``__has_extension(cxx_override_control)`` to determine if support for the 693override control keywords is enabled. 694 695C++11 reference-qualified functions 696^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 697 698Use ``__has_feature(cxx_reference_qualified_functions)`` or 699``__has_extension(cxx_reference_qualified_functions)`` to determine if support 700for reference-qualified functions (e.g., member functions with ``&`` or ``&&`` 701applied to ``*this``) is enabled. 702 703C++11 range-based ``for`` loop 704^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 705 706Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to 707determine if support for the range-based for loop is enabled. 708 709C++11 raw string literals 710^^^^^^^^^^^^^^^^^^^^^^^^^ 711 712Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw 713string literals (e.g., ``R"x(foo\bar)x"``) is enabled. 714 715C++11 rvalue references 716^^^^^^^^^^^^^^^^^^^^^^^ 717 718Use ``__has_feature(cxx_rvalue_references)`` or 719``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue 720references is enabled. 721 722C++11 ``static_assert()`` 723^^^^^^^^^^^^^^^^^^^^^^^^^ 724 725Use ``__has_feature(cxx_static_assert)`` or 726``__has_extension(cxx_static_assert)`` to determine if support for compile-time 727assertions using ``static_assert`` is enabled. 728 729C++11 ``thread_local`` 730^^^^^^^^^^^^^^^^^^^^^^ 731 732Use ``__has_feature(cxx_thread_local)`` to determine if support for 733``thread_local`` variables is enabled. 734 735C++11 type inference 736^^^^^^^^^^^^^^^^^^^^ 737 738Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to 739determine C++11 type inference is supported using the ``auto`` specifier. If 740this is disabled, ``auto`` will instead be a storage class specifier, as in C 741or C++98. 742 743C++11 strongly typed enumerations 744^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 745 746Use ``__has_feature(cxx_strong_enums)`` or 747``__has_extension(cxx_strong_enums)`` to determine if support for strongly 748typed, scoped enumerations is enabled. 749 750C++11 trailing return type 751^^^^^^^^^^^^^^^^^^^^^^^^^^ 752 753Use ``__has_feature(cxx_trailing_return)`` or 754``__has_extension(cxx_trailing_return)`` to determine if support for the 755alternate function declaration syntax with trailing return type is enabled. 756 757C++11 Unicode string literals 758^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 759 760Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode 761string literals is enabled. 762 763C++11 unrestricted unions 764^^^^^^^^^^^^^^^^^^^^^^^^^ 765 766Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for 767unrestricted unions is enabled. 768 769C++11 user-defined literals 770^^^^^^^^^^^^^^^^^^^^^^^^^^^ 771 772Use ``__has_feature(cxx_user_literals)`` to determine if support for 773user-defined literals is enabled. 774 775C++11 variadic templates 776^^^^^^^^^^^^^^^^^^^^^^^^ 777 778Use ``__has_feature(cxx_variadic_templates)`` or 779``__has_extension(cxx_variadic_templates)`` to determine if support for 780variadic templates is enabled. 781 782C11 783--- 784 785The features listed below are part of the C11 standard. As a result, all these 786features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when 787compiling C code. Additionally, because these features are all 788backward-compatible, they are available as extensions in all language modes. 789 790C11 alignment specifiers 791^^^^^^^^^^^^^^^^^^^^^^^^ 792 793Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine 794if support for alignment specifiers using ``_Alignas`` is enabled. 795 796C11 atomic operations 797^^^^^^^^^^^^^^^^^^^^^ 798 799Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine 800if support for atomic types using ``_Atomic`` is enabled. Clang also provides 801:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement 802the ``<stdatomic.h>`` operations on ``_Atomic`` types. 803 804C11 generic selections 805^^^^^^^^^^^^^^^^^^^^^^ 806 807Use ``__has_feature(c_generic_selections)`` or 808``__has_extension(c_generic_selections)`` to determine if support for generic 809selections is enabled. 810 811As an extension, the C11 generic selection expression is available in all 812languages supported by Clang. The syntax is the same as that given in the C11 813standard. 814 815In C, type compatibility is decided according to the rules given in the 816appropriate standard, but in C++, which lacks the type compatibility rules used 817in C, types are considered compatible only if they are equivalent. 818 819C11 ``_Static_assert()`` 820^^^^^^^^^^^^^^^^^^^^^^^^ 821 822Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)`` 823to determine if support for compile-time assertions using ``_Static_assert`` is 824enabled. 825 826C11 ``_Thread_local`` 827^^^^^^^^^^^^^^^^^^^^^ 828 829Use ``__has_feature(c_thread_local)`` to determine if support for 830``_Thread_local`` variables is enabled. 831 832Checks for Type Traits 833====================== 834 835Clang supports the `GNU C++ type traits 836<http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the 837`Microsoft Visual C++ Type traits 838<http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_. For each 839supported type trait ``__X``, ``__has_extension(X)`` indicates the presence of 840the type trait. For example: 841 842.. code-block:: c++ 843 844 #if __has_extension(is_convertible_to) 845 template<typename From, typename To> 846 struct is_convertible_to { 847 static const bool value = __is_convertible_to(From, To); 848 }; 849 #else 850 // Emulate type trait 851 #endif 852 853The following type traits are supported by Clang: 854 855* ``__has_nothrow_assign`` (GNU, Microsoft) 856* ``__has_nothrow_copy`` (GNU, Microsoft) 857* ``__has_nothrow_constructor`` (GNU, Microsoft) 858* ``__has_trivial_assign`` (GNU, Microsoft) 859* ``__has_trivial_copy`` (GNU, Microsoft) 860* ``__has_trivial_constructor`` (GNU, Microsoft) 861* ``__has_trivial_destructor`` (GNU, Microsoft) 862* ``__has_virtual_destructor`` (GNU, Microsoft) 863* ``__is_abstract`` (GNU, Microsoft) 864* ``__is_base_of`` (GNU, Microsoft) 865* ``__is_class`` (GNU, Microsoft) 866* ``__is_convertible_to`` (Microsoft) 867* ``__is_empty`` (GNU, Microsoft) 868* ``__is_enum`` (GNU, Microsoft) 869* ``__is_interface_class`` (Microsoft) 870* ``__is_pod`` (GNU, Microsoft) 871* ``__is_polymorphic`` (GNU, Microsoft) 872* ``__is_union`` (GNU, Microsoft) 873* ``__is_literal(type)``: Determines whether the given type is a literal type 874* ``__is_final``: Determines whether the given type is declared with a 875 ``final`` class-virt-specifier. 876* ``__underlying_type(type)``: Retrieves the underlying type for a given 877 ``enum`` type. This trait is required to implement the C++11 standard 878 library. 879* ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value 880 of type ``totype`` can be assigned to from a value of type ``fromtype`` such 881 that no non-trivial functions are called as part of that assignment. This 882 trait is required to implement the C++11 standard library. 883* ``__is_trivially_constructible(type, argtypes...)``: Determines whether a 884 value of type ``type`` can be direct-initialized with arguments of types 885 ``argtypes...`` such that no non-trivial functions are called as part of 886 that initialization. This trait is required to implement the C++11 standard 887 library. 888 889Blocks 890====== 891 892The syntax and high level language feature description is in 893:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for 894the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`. 895 896Query for this feature with ``__has_extension(blocks)``. 897 898Objective-C Features 899==================== 900 901Related result types 902-------------------- 903 904According to Cocoa conventions, Objective-C methods with certain names 905("``init``", "``alloc``", etc.) always return objects that are an instance of 906the receiving class's type. Such methods are said to have a "related result 907type", meaning that a message send to one of these methods will have the same 908static type as an instance of the receiver class. For example, given the 909following classes: 910 911.. code-block:: objc 912 913 @interface NSObject 914 + (id)alloc; 915 - (id)init; 916 @end 917 918 @interface NSArray : NSObject 919 @end 920 921and this common initialization pattern 922 923.. code-block:: objc 924 925 NSArray *array = [[NSArray alloc] init]; 926 927the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because 928``alloc`` implicitly has a related result type. Similarly, the type of the 929expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a 930related result type and its receiver is known to have the type ``NSArray *``. 931If neither ``alloc`` nor ``init`` had a related result type, the expressions 932would have had type ``id``, as declared in the method signature. 933 934A method with a related result type can be declared by using the type 935``instancetype`` as its result type. ``instancetype`` is a contextual keyword 936that is only permitted in the result type of an Objective-C method, e.g. 937 938.. code-block:: objc 939 940 @interface A 941 + (instancetype)constructAnA; 942 @end 943 944The related result type can also be inferred for some methods. To determine 945whether a method has an inferred related result type, the first word in the 946camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered, 947and the method will have a related result type if its return type is compatible 948with the type of its class and if: 949 950* the first word is "``alloc``" or "``new``", and the method is a class method, 951 or 952 953* the first word is "``autorelease``", "``init``", "``retain``", or "``self``", 954 and the method is an instance method. 955 956If a method with a related result type is overridden by a subclass method, the 957subclass method must also return a type that is compatible with the subclass 958type. For example: 959 960.. code-block:: objc 961 962 @interface NSString : NSObject 963 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 964 @end 965 966Related result types only affect the type of a message send or property access 967via the given method. In all other respects, a method with a related result 968type is treated the same way as method that returns ``id``. 969 970Use ``__has_feature(objc_instancetype)`` to determine whether the 971``instancetype`` contextual keyword is available. 972 973Automatic reference counting 974---------------------------- 975 976Clang provides support for :doc:`automated reference counting 977<AutomaticReferenceCounting>` in Objective-C, which eliminates the need 978for manual ``retain``/``release``/``autorelease`` message sends. There are two 979feature macros associated with automatic reference counting: 980``__has_feature(objc_arc)`` indicates the availability of automated reference 981counting in general, while ``__has_feature(objc_arc_weak)`` indicates that 982automated reference counting also includes support for ``__weak`` pointers to 983Objective-C objects. 984 985.. _objc-fixed-enum: 986 987Enumerations with a fixed underlying type 988----------------------------------------- 989 990Clang provides support for C++11 enumerations with a fixed underlying type 991within Objective-C. For example, one can write an enumeration type as: 992 993.. code-block:: c++ 994 995 typedef enum : unsigned char { Red, Green, Blue } Color; 996 997This specifies that the underlying type, which is used to store the enumeration 998value, is ``unsigned char``. 999 1000Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed 1001underlying types is available in Objective-C. 1002 1003Interoperability with C++11 lambdas 1004----------------------------------- 1005 1006Clang provides interoperability between C++11 lambdas and blocks-based APIs, by 1007permitting a lambda to be implicitly converted to a block pointer with the 1008corresponding signature. For example, consider an API such as ``NSArray``'s 1009array-sorting method: 1010 1011.. code-block:: objc 1012 1013 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 1014 1015``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult 1016(^)(id, id)``, and parameters of this type are generally provided with block 1017literals as arguments. However, one can also use a C++11 lambda so long as it 1018provides the same signature (in this case, accepting two parameters of type 1019``id`` and returning an ``NSComparisonResult``): 1020 1021.. code-block:: objc 1022 1023 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11", 1024 @"String 02"]; 1025 const NSStringCompareOptions comparisonOptions 1026 = NSCaseInsensitiveSearch | NSNumericSearch | 1027 NSWidthInsensitiveSearch | NSForcedOrderingSearch; 1028 NSLocale *currentLocale = [NSLocale currentLocale]; 1029 NSArray *sorted 1030 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult { 1031 NSRange string1Range = NSMakeRange(0, [s1 length]); 1032 return [s1 compare:s2 options:comparisonOptions 1033 range:string1Range locale:currentLocale]; 1034 }]; 1035 NSLog(@"sorted: %@", sorted); 1036 1037This code relies on an implicit conversion from the type of the lambda 1038expression (an unnamed, local class type called the *closure type*) to the 1039corresponding block pointer type. The conversion itself is expressed by a 1040conversion operator in that closure type that produces a block pointer with the 1041same signature as the lambda itself, e.g., 1042 1043.. code-block:: objc 1044 1045 operator NSComparisonResult (^)(id, id)() const; 1046 1047This conversion function returns a new block that simply forwards the two 1048parameters to the lambda object (which it captures by copy), then returns the 1049result. The returned block is first copied (with ``Block_copy``) and then 1050autoreleased. As an optimization, if a lambda expression is immediately 1051converted to a block pointer (as in the first example, above), then the block 1052is not copied and autoreleased: rather, it is given the same lifetime as a 1053block literal written at that point in the program, which avoids the overhead 1054of copying a block to the heap in the common case. 1055 1056The conversion from a lambda to a block pointer is only available in 1057Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory 1058management (autorelease). 1059 1060Object Literals and Subscripting 1061-------------------------------- 1062 1063Clang provides support for :doc:`Object Literals and Subscripting 1064<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C 1065programming patterns, makes programs more concise, and improves the safety of 1066container creation. There are several feature macros associated with object 1067literals and subscripting: ``__has_feature(objc_array_literals)`` tests the 1068availability of array literals; ``__has_feature(objc_dictionary_literals)`` 1069tests the availability of dictionary literals; 1070``__has_feature(objc_subscripting)`` tests the availability of object 1071subscripting. 1072 1073Objective-C Autosynthesis of Properties 1074--------------------------------------- 1075 1076Clang provides support for autosynthesis of declared properties. Using this 1077feature, clang provides default synthesis of those properties not declared 1078@dynamic and not having user provided backing getter and setter methods. 1079``__has_feature(objc_default_synthesize_properties)`` checks for availability 1080of this feature in version of clang being used. 1081 1082.. _langext-objc_method_family: 1083 1084The ``objc_method_family`` attribute 1085------------------------------------ 1086 1087Many methods in Objective-C have conventional meanings determined by their 1088selectors. It is sometimes useful to be able to mark a method as having a 1089particular conventional meaning despite not having the right selector, or as 1090not having the conventional meaning that its selector would suggest. For these 1091use cases, we provide an attribute to specifically describe the "method family" 1092that a method belongs to. 1093 1094**Usage**: ``__attribute__((objc_method_family(X)))``, where ``X`` is one of 1095``none``, ``alloc``, ``copy``, ``init``, ``mutableCopy``, or ``new``. This 1096attribute can only be placed at the end of a method declaration: 1097 1098.. code-block:: objc 1099 1100 - (NSString *)initMyStringValue __attribute__((objc_method_family(none))); 1101 1102Users who do not wish to change the conventional meaning of a method, and who 1103merely want to document its non-standard retain and release semantics, should 1104use the :ref:`retaining behavior attributes <langext-objc-retain-release>` 1105described below. 1106 1107Query for this feature with ``__has_attribute(objc_method_family)``. 1108 1109.. _langext-objc-retain-release: 1110 1111Objective-C retaining behavior attributes 1112----------------------------------------- 1113 1114In Objective-C, functions and methods are generally assumed to follow the 1115`Cocoa Memory Management 1116<http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_ 1117conventions for ownership of object arguments and 1118return values. However, there are exceptions, and so Clang provides attributes 1119to allow these exceptions to be documented. This are used by ARC and the 1120`static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be 1121better described using the :ref:`objc_method_family 1122<langext-objc_method_family>` attribute instead. 1123 1124**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``, 1125``ns_returns_autoreleased``, ``cf_returns_retained``, and 1126``cf_returns_not_retained`` attributes can be placed on methods and functions 1127that return Objective-C or CoreFoundation objects. They are commonly placed at 1128the end of a function prototype or method declaration: 1129 1130.. code-block:: objc 1131 1132 id foo() __attribute__((ns_returns_retained)); 1133 1134 - (NSString *)bar:(int)x __attribute__((ns_returns_retained)); 1135 1136The ``*_returns_retained`` attributes specify that the returned object has a +1 1137retain count. The ``*_returns_not_retained`` attributes specify that the return 1138object has a +0 retain count, even if the normal convention for its selector 1139would be +1. ``ns_returns_autoreleased`` specifies that the returned object is 1140+0, but is guaranteed to live at least as long as the next flush of an 1141autorelease pool. 1142 1143**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on 1144an parameter declaration; they specify that the argument is expected to have a 1145+1 retain count, which will be balanced in some way by the function or method. 1146The ``ns_consumes_self`` attribute can only be placed on an Objective-C 1147method; it specifies that the method expects its ``self`` parameter to have a 1148+1 retain count, which it will balance in some way. 1149 1150.. code-block:: objc 1151 1152 void foo(__attribute__((ns_consumed)) NSString *string); 1153 1154 - (void) bar __attribute__((ns_consumes_self)); 1155 - (void) baz:(id) __attribute__((ns_consumed)) x; 1156 1157Further examples of these attributes are available in the static analyzer's `list of annotations for analysis 1158<http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_. 1159 1160Query for these features with ``__has_attribute(ns_consumed)``, 1161``__has_attribute(ns_returns_retained)``, etc. 1162 1163 1164Function Overloading in C 1165========================= 1166 1167Clang provides support for C++ function overloading in C. Function overloading 1168in C is introduced using the ``overloadable`` attribute. For example, one 1169might provide several overloaded versions of a ``tgsin`` function that invokes 1170the appropriate standard function computing the sine of a value with ``float``, 1171``double``, or ``long double`` precision: 1172 1173.. code-block:: c 1174 1175 #include <math.h> 1176 float __attribute__((overloadable)) tgsin(float x) { return sinf(x); } 1177 double __attribute__((overloadable)) tgsin(double x) { return sin(x); } 1178 long double __attribute__((overloadable)) tgsin(long double x) { return sinl(x); } 1179 1180Given these declarations, one can call ``tgsin`` with a ``float`` value to 1181receive a ``float`` result, with a ``double`` to receive a ``double`` result, 1182etc. Function overloading in C follows the rules of C++ function overloading 1183to pick the best overload given the call arguments, with a few C-specific 1184semantics: 1185 1186* Conversion from ``float`` or ``double`` to ``long double`` is ranked as a 1187 floating-point promotion (per C99) rather than as a floating-point conversion 1188 (as in C++). 1189 1190* A conversion from a pointer of type ``T*`` to a pointer of type ``U*`` is 1191 considered a pointer conversion (with conversion rank) if ``T`` and ``U`` are 1192 compatible types. 1193 1194* A conversion from type ``T`` to a value of type ``U`` is permitted if ``T`` 1195 and ``U`` are compatible types. This conversion is given "conversion" rank. 1196 1197The declaration of ``overloadable`` functions is restricted to function 1198declarations and definitions. Most importantly, if any function with a given 1199name is given the ``overloadable`` attribute, then all function declarations 1200and definitions with that name (and in that scope) must have the 1201``overloadable`` attribute. This rule even applies to redeclarations of 1202functions whose original declaration had the ``overloadable`` attribute, e.g., 1203 1204.. code-block:: c 1205 1206 int f(int) __attribute__((overloadable)); 1207 float f(float); // error: declaration of "f" must have the "overloadable" attribute 1208 1209 int g(int) __attribute__((overloadable)); 1210 int g(int) { } // error: redeclaration of "g" must also have the "overloadable" attribute 1211 1212Functions marked ``overloadable`` must have prototypes. Therefore, the 1213following code is ill-formed: 1214 1215.. code-block:: c 1216 1217 int h() __attribute__((overloadable)); // error: h does not have a prototype 1218 1219However, ``overloadable`` functions are allowed to use a ellipsis even if there 1220are no named parameters (as is permitted in C++). This feature is particularly 1221useful when combined with the ``unavailable`` attribute: 1222 1223.. code-block:: c++ 1224 1225 void honeypot(...) __attribute__((overloadable, unavailable)); // calling me is an error 1226 1227Functions declared with the ``overloadable`` attribute have their names mangled 1228according to the same rules as C++ function names. For example, the three 1229``tgsin`` functions in our motivating example get the mangled names 1230``_Z5tgsinf``, ``_Z5tgsind``, and ``_Z5tgsine``, respectively. There are two 1231caveats to this use of name mangling: 1232 1233* Future versions of Clang may change the name mangling of functions overloaded 1234 in C, so you should not depend on an specific mangling. To be completely 1235 safe, we strongly urge the use of ``static inline`` with ``overloadable`` 1236 functions. 1237 1238* The ``overloadable`` attribute has almost no meaning when used in C++, 1239 because names will already be mangled and functions are already overloadable. 1240 However, when an ``overloadable`` function occurs within an ``extern "C"`` 1241 linkage specification, it's name *will* be mangled in the same way as it 1242 would in C. 1243 1244Query for this feature with ``__has_extension(attribute_overloadable)``. 1245 1246Initializer lists for complex numbers in C 1247========================================== 1248 1249clang supports an extension which allows the following in C: 1250 1251.. code-block:: c++ 1252 1253 #include <math.h> 1254 #include <complex.h> 1255 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 1256 1257This construct is useful because there is no way to separately initialize the 1258real and imaginary parts of a complex variable in standard C, given that clang 1259does not support ``_Imaginary``. (Clang also supports the ``__real__`` and 1260``__imag__`` extensions from gcc, which help in some cases, but are not usable 1261in static initializers.) 1262 1263Note that this extension does not allow eliding the braces; the meaning of the 1264following two lines is different: 1265 1266.. code-block:: c++ 1267 1268 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 1269 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 1270 1271This extension also works in C++ mode, as far as that goes, but does not apply 1272to the C++ ``std::complex``. (In C++11, list initialization allows the same 1273syntax to be used with ``std::complex`` with the same meaning.) 1274 1275Builtin Functions 1276================= 1277 1278Clang supports a number of builtin library functions with the same syntax as 1279GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``, 1280``__builtin_choose_expr``, ``__builtin_types_compatible_p``, 1281``__sync_fetch_and_add``, etc. In addition to the GCC builtins, Clang supports 1282a number of builtins that GCC does not, which are listed here. 1283 1284Please note that Clang does not and will not support all of the GCC builtins 1285for vector operations. Instead of using builtins, you should use the functions 1286defined in target-specific header files like ``<xmmintrin.h>``, which define 1287portable wrappers for these. Many of the Clang versions of these functions are 1288implemented directly in terms of :ref:`extended vector support 1289<langext-vectors>` instead of builtins, in order to reduce the number of 1290builtins that we need to implement. 1291 1292``__builtin_readcyclecounter`` 1293------------------------------ 1294 1295``__builtin_readcyclecounter`` is used to access the cycle counter register (or 1296a similar low-latency, high-accuracy clock) on those targets that support it. 1297 1298**Syntax**: 1299 1300.. code-block:: c++ 1301 1302 __builtin_readcyclecounter() 1303 1304**Example of Use**: 1305 1306.. code-block:: c++ 1307 1308 unsigned long long t0 = __builtin_readcyclecounter(); 1309 do_something(); 1310 unsigned long long t1 = __builtin_readcyclecounter(); 1311 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow 1312 1313**Description**: 1314 1315The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value, 1316which may be either global or process/thread-specific depending on the target. 1317As the backing counters often overflow quickly (on the order of seconds) this 1318should only be used for timing small intervals. When not supported by the 1319target, the return value is always zero. This builtin takes no arguments and 1320produces an unsigned long long result. 1321 1322Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. 1323 1324.. _langext-__builtin_shufflevector: 1325 1326``__builtin_shufflevector`` 1327--------------------------- 1328 1329``__builtin_shufflevector`` is used to express generic vector 1330permutation/shuffle/swizzle operations. This builtin is also very important 1331for the implementation of various target-specific header files like 1332``<xmmintrin.h>``. 1333 1334**Syntax**: 1335 1336.. code-block:: c++ 1337 1338 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 1339 1340**Examples**: 1341 1342.. code-block:: c++ 1343 1344 // Identity operation - return 4-element vector V1. 1345 __builtin_shufflevector(V1, V1, 0, 1, 2, 3) 1346 1347 // "Splat" element 0 of V1 into a 4-element result. 1348 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 1349 1350 // Reverse 4-element vector V1. 1351 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 1352 1353 // Concatenate every other element of 4-element vectors V1 and V2. 1354 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 1355 1356 // Concatenate every other element of 8-element vectors V1 and V2. 1357 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 1358 1359**Description**: 1360 1361The first two arguments to ``__builtin_shufflevector`` are vectors that have 1362the same element type. The remaining arguments are a list of integers that 1363specify the elements indices of the first two vectors that should be extracted 1364and returned in a new vector. These element indices are numbered sequentially 1365starting with the first vector, continuing into the second vector. Thus, if 1366``vec1`` is a 4-element vector, index 5 would refer to the second element of 1367``vec2``. 1368 1369The result of ``__builtin_shufflevector`` is a vector with the same element 1370type as ``vec1``/``vec2`` but that has an element count equal to the number of 1371indices specified. 1372 1373Query for this feature with ``__has_builtin(__builtin_shufflevector)``. 1374 1375``__builtin_unreachable`` 1376------------------------- 1377 1378``__builtin_unreachable`` is used to indicate that a specific point in the 1379program cannot be reached, even if the compiler might otherwise think it can. 1380This is useful to improve optimization and eliminates certain warnings. For 1381example, without the ``__builtin_unreachable`` in the example below, the 1382compiler assumes that the inline asm can fall through and prints a "function 1383declared '``noreturn``' should not return" warning. 1384 1385**Syntax**: 1386 1387.. code-block:: c++ 1388 1389 __builtin_unreachable() 1390 1391**Example of use**: 1392 1393.. code-block:: c++ 1394 1395 void myabort(void) __attribute__((noreturn)); 1396 void myabort(void) { 1397 asm("int3"); 1398 __builtin_unreachable(); 1399 } 1400 1401**Description**: 1402 1403The ``__builtin_unreachable()`` builtin has completely undefined behavior. 1404Since it has undefined behavior, it is a statement that it is never reached and 1405the optimizer can take advantage of this to produce better code. This builtin 1406takes no arguments and produces a void result. 1407 1408Query for this feature with ``__has_builtin(__builtin_unreachable)``. 1409 1410``__sync_swap`` 1411--------------- 1412 1413``__sync_swap`` is used to atomically swap integers or pointers in memory. 1414 1415**Syntax**: 1416 1417.. code-block:: c++ 1418 1419 type __sync_swap(type *ptr, type value, ...) 1420 1421**Example of Use**: 1422 1423.. code-block:: c++ 1424 1425 int old_value = __sync_swap(&value, new_value); 1426 1427**Description**: 1428 1429The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of 1430atomic intrinsics to allow code to atomically swap the current value with the 1431new value. More importantly, it helps developers write more efficient and 1432correct code by avoiding expensive loops around 1433``__sync_bool_compare_and_swap()`` or relying on the platform specific 1434implementation details of ``__sync_lock_test_and_set()``. The 1435``__sync_swap()`` builtin is a full barrier. 1436 1437Multiprecision Arithmetic Builtins 1438---------------------------------- 1439 1440Clang provides a set of builtins which expose multiprecision arithmetic in a 1441manner amenable to C. They all have the following form: 1442 1443.. code-block:: c 1444 1445 unsigned x = ..., y = ..., carryin = ..., carryout; 1446 unsigned sum = __builtin_addc(x, y, carryin, &carryout); 1447 1448Thus one can form a multiprecision addition chain in the following manner: 1449 1450.. code-block:: c 1451 1452 unsigned *x, *y, *z, carryin=0, carryout; 1453 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout); 1454 carryin = carryout; 1455 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout); 1456 carryin = carryout; 1457 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout); 1458 carryin = carryout; 1459 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout); 1460 1461The complete list of builtins are: 1462 1463.. code-block:: c 1464 1465 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1466 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1467 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1468 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1469 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1470 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1471 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1472 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1473 1474.. _langext-__c11_atomic: 1475 1476__c11_atomic builtins 1477--------------------- 1478 1479Clang provides a set of builtins which are intended to be used to implement 1480C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the 1481``_explicit`` form of the corresponding C11 operation, and are named with a 1482``__c11_`` prefix. The supported operations are: 1483 1484* ``__c11_atomic_init`` 1485* ``__c11_atomic_thread_fence`` 1486* ``__c11_atomic_signal_fence`` 1487* ``__c11_atomic_is_lock_free`` 1488* ``__c11_atomic_store`` 1489* ``__c11_atomic_load`` 1490* ``__c11_atomic_exchange`` 1491* ``__c11_atomic_compare_exchange_strong`` 1492* ``__c11_atomic_compare_exchange_weak`` 1493* ``__c11_atomic_fetch_add`` 1494* ``__c11_atomic_fetch_sub`` 1495* ``__c11_atomic_fetch_and`` 1496* ``__c11_atomic_fetch_or`` 1497* ``__c11_atomic_fetch_xor`` 1498 1499Non-standard C++11 Attributes 1500============================= 1501 1502Clang's non-standard C++11 attributes live in the ``clang`` attribute 1503namespace. 1504 1505The ``clang::fallthrough`` attribute 1506------------------------------------ 1507 1508The ``clang::fallthrough`` attribute is used along with the 1509``-Wimplicit-fallthrough`` argument to annotate intentional fall-through 1510between switch labels. It can only be applied to a null statement placed at a 1511point of execution between any statement and the next switch label. It is 1512common to mark these places with a specific comment, but this attribute is 1513meant to replace comments with a more strict annotation, which can be checked 1514by the compiler. This attribute doesn't change semantics of the code and can 1515be used wherever an intended fall-through occurs. It is designed to mimic 1516control-flow statements like ``break;``, so it can be placed in most places 1517where ``break;`` can, but only if there are no statements on the execution path 1518between it and the next switch label. 1519 1520Here is an example: 1521 1522.. code-block:: c++ 1523 1524 // compile with -Wimplicit-fallthrough 1525 switch (n) { 1526 case 22: 1527 case 33: // no warning: no statements between case labels 1528 f(); 1529 case 44: // warning: unannotated fall-through 1530 g(); 1531 [[clang::fallthrough]]; 1532 case 55: // no warning 1533 if (x) { 1534 h(); 1535 break; 1536 } 1537 else { 1538 i(); 1539 [[clang::fallthrough]]; 1540 } 1541 case 66: // no warning 1542 p(); 1543 [[clang::fallthrough]]; // warning: fallthrough annotation does not 1544 // directly precede case label 1545 q(); 1546 case 77: // warning: unannotated fall-through 1547 r(); 1548 } 1549 1550``gnu::`` attributes 1551-------------------- 1552 1553Clang also supports GCC's ``gnu`` attribute namespace. All GCC attributes which 1554are accepted with the ``__attribute__((foo))`` syntax are also accepted as 1555``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 1556(see the list of `GCC function attributes 1557<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 1558attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 1559`GCC type attributes 1560<http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_. As with the GCC 1561implementation, these attributes must appertain to the *declarator-id* in a 1562declaration, which means they must go either at the start of the declaration or 1563immediately after the name being declared. 1564 1565For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 1566also applies the GNU ``noreturn`` attribute to ``f``. 1567 1568.. code-block:: c++ 1569 1570 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 1571 1572Target-Specific Extensions 1573========================== 1574 1575Clang supports some language features conditionally on some targets. 1576 1577X86/X86-64 Language Extensions 1578------------------------------ 1579 1580The X86 backend has these language extensions: 1581 1582Memory references off the GS segment 1583^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1584 1585Annotating a pointer with address space #256 causes it to be code generated 1586relative to the X86 GS segment register, and address space #257 causes it to be 1587relative to the X86 FS segment. Note that this is a very very low-level 1588feature that should only be used if you know what you're doing (for example in 1589an OS kernel). 1590 1591Here is an example: 1592 1593.. code-block:: c++ 1594 1595 #define GS_RELATIVE __attribute__((address_space(256))) 1596 int foo(int GS_RELATIVE *P) { 1597 return *P; 1598 } 1599 1600Which compiles to (on X86-32): 1601 1602.. code-block:: gas 1603 1604 _foo: 1605 movl 4(%esp), %eax 1606 movl %gs:(%eax), %eax 1607 ret 1608 1609Extensions for Static Analysis 1610============================== 1611 1612Clang supports additional attributes that are useful for documenting program 1613invariants and rules for static analysis tools, such as the `Clang Static 1614Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented 1615in the analyzer's `list of source-level annotations 1616<http://clang-analyzer.llvm.org/annotations.html>`_. 1617 1618 1619Extensions for Dynamic Analysis 1620=============================== 1621 1622.. _langext-address_sanitizer: 1623 1624AddressSanitizer 1625---------------- 1626 1627Use ``__has_feature(address_sanitizer)`` to check if the code is being built 1628with :doc:`AddressSanitizer`. 1629 1630Use ``__attribute__((no_sanitize_address))`` 1631on a function declaration 1632to specify that address safety instrumentation (e.g. AddressSanitizer) should 1633not be applied to that function. 1634 1635.. _langext-thread_sanitizer: 1636 1637ThreadSanitizer 1638---------------- 1639 1640Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 1641with :doc:`ThreadSanitizer`. 1642 1643Use ``__attribute__((no_sanitize_thread))`` on a function declaration 1644to specify that checks for data races on plain (non-atomic) memory accesses 1645should not be inserted by ThreadSanitizer. 1646The function may still be instrumented by the tool 1647to avoid false positives in other places. 1648 1649.. _langext-memory_sanitizer: 1650 1651MemorySanitizer 1652---------------- 1653Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 1654with :doc:`MemorySanitizer`. 1655 1656Use ``__attribute__((no_sanitize_memory))`` on a function declaration 1657to specify that checks for uninitialized memory should not be inserted 1658(e.g. by MemorySanitizer). The function may still be instrumented by the tool 1659to avoid false positives in other places. 1660 1661 1662Thread-Safety Annotation Checking 1663================================= 1664 1665Clang supports additional attributes for checking basic locking policies in 1666multithreaded programs. Clang currently parses the following list of 1667attributes, although **the implementation for these annotations is currently in 1668development.** For more details, see the `GCC implementation 1669<http://gcc.gnu.org/wiki/ThreadSafetyAnnotation>`_. 1670 1671``no_thread_safety_analysis`` 1672----------------------------- 1673 1674Use ``__attribute__((no_thread_safety_analysis))`` on a function declaration to 1675specify that the thread safety analysis should not be run on that function. 1676This attribute provides an escape hatch (e.g. for situations when it is 1677difficult to annotate the locking policy). 1678 1679``lockable`` 1680------------ 1681 1682Use ``__attribute__((lockable))`` on a class definition to specify that it has 1683a lockable type (e.g. a Mutex class). This annotation is primarily used to 1684check consistency. 1685 1686``scoped_lockable`` 1687------------------- 1688 1689Use ``__attribute__((scoped_lockable))`` on a class definition to specify that 1690it has a "scoped" lockable type. Objects of this type will acquire the lock 1691upon construction and release it upon going out of scope. This annotation is 1692primarily used to check consistency. 1693 1694``guarded_var`` 1695--------------- 1696 1697Use ``__attribute__((guarded_var))`` on a variable declaration to specify that 1698the variable must be accessed while holding some lock. 1699 1700``pt_guarded_var`` 1701------------------ 1702 1703Use ``__attribute__((pt_guarded_var))`` on a pointer declaration to specify 1704that the pointer must be dereferenced while holding some lock. 1705 1706``guarded_by(l)`` 1707----------------- 1708 1709Use ``__attribute__((guarded_by(l)))`` on a variable declaration to specify 1710that the variable must be accessed while holding lock ``l``. 1711 1712``pt_guarded_by(l)`` 1713-------------------- 1714 1715Use ``__attribute__((pt_guarded_by(l)))`` on a pointer declaration to specify 1716that the pointer must be dereferenced while holding lock ``l``. 1717 1718``acquired_before(...)`` 1719------------------------ 1720 1721Use ``__attribute__((acquired_before(...)))`` on a declaration of a lockable 1722variable to specify that the lock must be acquired before all attribute 1723arguments. Arguments must be lockable type, and there must be at least one 1724argument. 1725 1726``acquired_after(...)`` 1727----------------------- 1728 1729Use ``__attribute__((acquired_after(...)))`` on a declaration of a lockable 1730variable to specify that the lock must be acquired after all attribute 1731arguments. Arguments must be lockable type, and there must be at least one 1732argument. 1733 1734``exclusive_lock_function(...)`` 1735-------------------------------- 1736 1737Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration 1738to specify that the function acquires all listed locks exclusively. This 1739attribute takes zero or more arguments: either of lockable type or integers 1740indexing into function parameters of lockable type. If no arguments are given, 1741the acquired lock is implicitly ``this`` of the enclosing object. 1742 1743``shared_lock_function(...)`` 1744----------------------------- 1745 1746Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to 1747specify that the function acquires all listed locks, although the locks may be 1748shared (e.g. read locks). This attribute takes zero or more arguments: either 1749of lockable type or integers indexing into function parameters of lockable 1750type. If no arguments are given, the acquired lock is implicitly ``this`` of 1751the enclosing object. 1752 1753``exclusive_trylock_function(...)`` 1754----------------------------------- 1755 1756Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration 1757to specify that the function will try (without blocking) to acquire all listed 1758locks exclusively. This attribute takes one or more arguments. The first 1759argument is an integer or boolean value specifying the return value of a 1760successful lock acquisition. The remaining arugments are either of lockable 1761type or integers indexing into function parameters of lockable type. If only 1762one argument is given, the acquired lock is implicitly ``this`` of the 1763enclosing object. 1764 1765``shared_trylock_function(...)`` 1766-------------------------------- 1767 1768Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to 1769specify that the function will try (without blocking) to acquire all listed 1770locks, although the locks may be shared (e.g. read locks). This attribute 1771takes one or more arguments. The first argument is an integer or boolean value 1772specifying the return value of a successful lock acquisition. The remaining 1773arugments are either of lockable type or integers indexing into function 1774parameters of lockable type. If only one argument is given, the acquired lock 1775is implicitly ``this`` of the enclosing object. 1776 1777``unlock_function(...)`` 1778------------------------ 1779 1780Use ``__attribute__((unlock_function(...)))`` on a function declaration to 1781specify that the function release all listed locks. This attribute takes zero 1782or more arguments: either of lockable type or integers indexing into function 1783parameters of lockable type. If no arguments are given, the acquired lock is 1784implicitly ``this`` of the enclosing object. 1785 1786``lock_returned(l)`` 1787-------------------- 1788 1789Use ``__attribute__((lock_returned(l)))`` on a function declaration to specify 1790that the function returns lock ``l`` (``l`` must be of lockable type). This 1791annotation is used to aid in resolving lock expressions. 1792 1793``locks_excluded(...)`` 1794----------------------- 1795 1796Use ``__attribute__((locks_excluded(...)))`` on a function declaration to 1797specify that the function must not be called with the listed locks. Arguments 1798must be lockable type, and there must be at least one argument. 1799 1800``exclusive_locks_required(...)`` 1801--------------------------------- 1802 1803Use ``__attribute__((exclusive_locks_required(...)))`` on a function 1804declaration to specify that the function must be called while holding the 1805listed exclusive locks. Arguments must be lockable type, and there must be at 1806least one argument. 1807 1808``shared_locks_required(...)`` 1809------------------------------ 1810 1811Use ``__attribute__((shared_locks_required(...)))`` on a function declaration 1812to specify that the function must be called while holding the listed shared 1813locks. Arguments must be lockable type, and there must be at least one 1814argument. 1815 1816Type Safety Checking 1817==================== 1818 1819Clang supports additional attributes to enable checking type safety properties 1820that can't be enforced by C type system. Usecases include: 1821 1822* MPI library implementations, where these attributes enable checking that 1823 buffer type matches the passed ``MPI_Datatype``; 1824* for HDF5 library there is a similar usecase as MPI; 1825* checking types of variadic functions' arguments for functions like 1826 ``fcntl()`` and ``ioctl()``. 1827 1828You can detect support for these attributes with ``__has_attribute()``. For 1829example: 1830 1831.. code-block:: c++ 1832 1833 #if defined(__has_attribute) 1834 # if __has_attribute(argument_with_type_tag) && \ 1835 __has_attribute(pointer_with_type_tag) && \ 1836 __has_attribute(type_tag_for_datatype) 1837 # define ATTR_MPI_PWT(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(mpi,buffer_idx,type_idx))) 1838 /* ... other macros ... */ 1839 # endif 1840 #endif 1841 1842 #if !defined(ATTR_MPI_PWT) 1843 # define ATTR_MPI_PWT(buffer_idx, type_idx) 1844 #endif 1845 1846 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */) 1847 ATTR_MPI_PWT(1,3); 1848 1849``argument_with_type_tag(...)`` 1850------------------------------- 1851 1852Use ``__attribute__((argument_with_type_tag(arg_kind, arg_idx, 1853type_tag_idx)))`` on a function declaration to specify that the function 1854accepts a type tag that determines the type of some other argument. 1855``arg_kind`` is an identifier that should be used when annotating all 1856applicable type tags. 1857 1858This attribute is primarily useful for checking arguments of variadic functions 1859(``pointer_with_type_tag`` can be used in most of non-variadic cases). 1860 1861For example: 1862 1863.. code-block:: c++ 1864 1865 int fcntl(int fd, int cmd, ...) 1866 __attribute__(( argument_with_type_tag(fcntl,3,2) )); 1867 1868``pointer_with_type_tag(...)`` 1869------------------------------ 1870 1871Use ``__attribute__((pointer_with_type_tag(ptr_kind, ptr_idx, type_tag_idx)))`` 1872on a function declaration to specify that the function accepts a type tag that 1873determines the pointee type of some other pointer argument. 1874 1875For example: 1876 1877.. code-block:: c++ 1878 1879 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */) 1880 __attribute__(( pointer_with_type_tag(mpi,1,3) )); 1881 1882``type_tag_for_datatype(...)`` 1883------------------------------ 1884 1885Clang supports annotating type tags of two forms. 1886 1887* **Type tag that is an expression containing a reference to some declared 1888 identifier.** Use ``__attribute__((type_tag_for_datatype(kind, type)))`` on a 1889 declaration with that identifier: 1890 1891 .. code-block:: c++ 1892 1893 extern struct mpi_datatype mpi_datatype_int 1894 __attribute__(( type_tag_for_datatype(mpi,int) )); 1895 #define MPI_INT ((MPI_Datatype) &mpi_datatype_int) 1896 1897* **Type tag that is an integral literal.** Introduce a ``static const`` 1898 variable with a corresponding initializer value and attach 1899 ``__attribute__((type_tag_for_datatype(kind, type)))`` on that declaration, 1900 for example: 1901 1902 .. code-block:: c++ 1903 1904 #define MPI_INT ((MPI_Datatype) 42) 1905 static const MPI_Datatype mpi_datatype_int 1906 __attribute__(( type_tag_for_datatype(mpi,int) )) = 42 1907 1908The attribute also accepts an optional third argument that determines how the 1909expression is compared to the type tag. There are two supported flags: 1910 1911* ``layout_compatible`` will cause types to be compared according to 1912 layout-compatibility rules (C++11 [class.mem] p 17, 18). This is 1913 implemented to support annotating types like ``MPI_DOUBLE_INT``. 1914 1915 For example: 1916 1917 .. code-block:: c++ 1918 1919 /* In mpi.h */ 1920 struct internal_mpi_double_int { double d; int i; }; 1921 extern struct mpi_datatype mpi_datatype_double_int 1922 __attribute__(( type_tag_for_datatype(mpi, struct internal_mpi_double_int, layout_compatible) )); 1923 1924 #define MPI_DOUBLE_INT ((MPI_Datatype) &mpi_datatype_double_int) 1925 1926 /* In user code */ 1927 struct my_pair { double a; int b; }; 1928 struct my_pair *buffer; 1929 MPI_Send(buffer, 1, MPI_DOUBLE_INT /*, ... */); // no warning 1930 1931 struct my_int_pair { int a; int b; } 1932 struct my_int_pair *buffer2; 1933 MPI_Send(buffer2, 1, MPI_DOUBLE_INT /*, ... */); // warning: actual buffer element 1934 // type 'struct my_int_pair' 1935 // doesn't match specified MPI_Datatype 1936 1937* ``must_be_null`` specifies that the expression should be a null pointer 1938 constant, for example: 1939 1940 .. code-block:: c++ 1941 1942 /* In mpi.h */ 1943 extern struct mpi_datatype mpi_datatype_null 1944 __attribute__(( type_tag_for_datatype(mpi, void, must_be_null) )); 1945 1946 #define MPI_DATATYPE_NULL ((MPI_Datatype) &mpi_datatype_null) 1947 1948 /* In user code */ 1949 MPI_Send(buffer, 1, MPI_DATATYPE_NULL /*, ... */); // warning: MPI_DATATYPE_NULL 1950 // was specified but buffer 1951 // is not a null pointer 1952 1953Format String Checking 1954====================== 1955 1956Clang supports the ``format`` attribute, which indicates that the function 1957accepts a ``printf`` or ``scanf``-like format string and corresponding 1958arguments or a ``va_list`` that contains these arguments. 1959 1960Please see `GCC documentation about format attribute 1961<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ to find details 1962about attribute syntax. 1963 1964Clang implements two kinds of checks with this attribute. 1965 1966#. Clang checks that the function with the ``format`` attribute is called with 1967 a format string that uses format specifiers that are allowed, and that 1968 arguments match the format string. This is the ``-Wformat`` warning, it is 1969 on by default. 1970 1971#. Clang checks that the format string argument is a literal string. This is 1972 the ``-Wformat-nonliteral`` warning, it is off by default. 1973 1974 Clang implements this mostly the same way as GCC, but there is a difference 1975 for functions that accept a ``va_list`` argument (for example, ``vprintf``). 1976 GCC does not emit ``-Wformat-nonliteral`` warning for calls to such 1977 fuctions. Clang does not warn if the format string comes from a function 1978 parameter, where the function is annotated with a compatible attribute, 1979 otherwise it warns. For example: 1980 1981 .. code-block:: c 1982 1983 __attribute__((__format__ (__scanf__, 1, 3))) 1984 void foo(const char* s, char *buf, ...) { 1985 va_list ap; 1986 va_start(ap, buf); 1987 1988 vprintf(s, ap); // warning: format string is not a string literal 1989 } 1990 1991 In this case we warn because ``s`` contains a format string for a 1992 ``scanf``-like function, but it is passed to a ``printf``-like function. 1993 1994 If the attribute is removed, clang still warns, because the format string is 1995 not a string literal. 1996 1997 Another example: 1998 1999 .. code-block:: c 2000 2001 __attribute__((__format__ (__printf__, 1, 3))) 2002 void foo(const char* s, char *buf, ...) { 2003 va_list ap; 2004 va_start(ap, buf); 2005 2006 vprintf(s, ap); // warning 2007 } 2008 2009 In this case Clang does not warn because the format string ``s`` and 2010 the corresponding arguments are annotated. If the arguments are 2011 incorrect, the caller of ``foo`` will receive a warning. 2012