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 782C++1y 783----- 784 785The features listed below are part of the committee draft for the C++1y 786standard. As a result, all these features are enabled with the ``-std=c++1y`` 787or ``-std=gnu++1y`` option when compiling C++ code. 788 789C++1y binary literals 790^^^^^^^^^^^^^^^^^^^^^ 791 792Use ``__has_feature(cxx_binary_literals)`` or 793``__has_extension(cxx_binary_literals)`` to determine whether 794binary literals (for instance, ``0b10010``) are recognized. Clang supports this 795feature as an extension in all language modes. 796 797C++1y contextual conversions 798^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 799 800Use ``__has_feature(cxx_contextual_conversions)`` or 801``__has_extension(cxx_contextual_conversions)`` to determine if the C++1y rules 802are used when performing an implicit conversion for an array bound in a 803*new-expression*, the operand of a *delete-expression*, an integral constant 804expression, or a condition in a ``switch`` statement. Clang does not yet 805support this feature. 806 807C++1y decltype(auto) 808^^^^^^^^^^^^^^^^^^^^ 809 810Use ``__has_feature(cxx_decltype_auto)`` or 811``__has_extension(cxx_decltype_auto)`` to determine if support 812for the ``decltype(auto)`` placeholder type is enabled. 813 814C++1y default initializers for aggregates 815^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 816 817Use ``__has_feature(cxx_aggregate_nsdmi)`` or 818``__has_extension(cxx_aggregate_nsdmi)`` to determine if support 819for default initializers in aggregate members is enabled. 820 821C++1y generalized lambda capture 822^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 823 824Use ``__has_feature(cxx_generalized_capture)`` or 825``__has_extension(cxx_generalized_capture`` to determine if support for 826generalized lambda captures is enabled 827(for instance, ``[n(0)] { return ++n; }``). 828Clang does not yet support this feature. 829 830C++1y generic lambdas 831^^^^^^^^^^^^^^^^^^^^^ 832 833Use ``__has_feature(cxx_generic_lambda)`` or 834``__has_extension(cxx_generic_lambda)`` to determine if support for generic 835(polymorphic) lambdas is enabled 836(for instance, ``[] (auto x) { return x + 1; }``). 837Clang does not yet support this feature. 838 839C++1y relaxed constexpr 840^^^^^^^^^^^^^^^^^^^^^^^ 841 842Use ``__has_feature(cxx_relaxed_constexpr)`` or 843``__has_extension(cxx_relaxed_constexpr)`` to determine if variable 844declarations, local variable modification, and control flow constructs 845are permitted in ``constexpr`` functions. 846Clang's implementation of this feature is incomplete. 847 848C++1y return type deduction 849^^^^^^^^^^^^^^^^^^^^^^^^^^^ 850 851Use ``__has_feature(cxx_return_type_deduction)`` or 852``__has_extension(cxx_return_type_deduction)`` to determine if support 853for return type deduction for functions (using ``auto`` as a return type) 854is enabled. 855 856C++1y runtime-sized arrays 857^^^^^^^^^^^^^^^^^^^^^^^^^^ 858 859Use ``__has_feature(cxx_runtime_array)`` or 860``__has_extension(cxx_runtime_array)`` to determine if support 861for arrays of runtime bound (a restricted form of variable-length arrays) 862is enabled. 863Clang's implementation of this feature is incomplete. 864 865C++1y variable templates 866^^^^^^^^^^^^^^^^^^^^^^^^ 867 868Use ``__has_feature(cxx_variable_templates)`` or 869``__has_extension(cxx_variable_templates)`` to determine if support for 870templated variable declarations is enabled. 871Clang does not yet support this feature. 872 873C11 874--- 875 876The features listed below are part of the C11 standard. As a result, all these 877features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when 878compiling C code. Additionally, because these features are all 879backward-compatible, they are available as extensions in all language modes. 880 881C11 alignment specifiers 882^^^^^^^^^^^^^^^^^^^^^^^^ 883 884Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine 885if support for alignment specifiers using ``_Alignas`` is enabled. 886 887C11 atomic operations 888^^^^^^^^^^^^^^^^^^^^^ 889 890Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine 891if support for atomic types using ``_Atomic`` is enabled. Clang also provides 892:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement 893the ``<stdatomic.h>`` operations on ``_Atomic`` types. 894 895C11 generic selections 896^^^^^^^^^^^^^^^^^^^^^^ 897 898Use ``__has_feature(c_generic_selections)`` or 899``__has_extension(c_generic_selections)`` to determine if support for generic 900selections is enabled. 901 902As an extension, the C11 generic selection expression is available in all 903languages supported by Clang. The syntax is the same as that given in the C11 904standard. 905 906In C, type compatibility is decided according to the rules given in the 907appropriate standard, but in C++, which lacks the type compatibility rules used 908in C, types are considered compatible only if they are equivalent. 909 910C11 ``_Static_assert()`` 911^^^^^^^^^^^^^^^^^^^^^^^^ 912 913Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)`` 914to determine if support for compile-time assertions using ``_Static_assert`` is 915enabled. 916 917C11 ``_Thread_local`` 918^^^^^^^^^^^^^^^^^^^^^ 919 920Use ``__has_feature(c_thread_local)`` to determine if support for 921``_Thread_local`` variables is enabled. 922 923Checks for Type Traits 924====================== 925 926Clang supports the `GNU C++ type traits 927<http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the 928`Microsoft Visual C++ Type traits 929<http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_. For each 930supported type trait ``__X``, ``__has_extension(X)`` indicates the presence of 931the type trait. For example: 932 933.. code-block:: c++ 934 935 #if __has_extension(is_convertible_to) 936 template<typename From, typename To> 937 struct is_convertible_to { 938 static const bool value = __is_convertible_to(From, To); 939 }; 940 #else 941 // Emulate type trait 942 #endif 943 944The following type traits are supported by Clang: 945 946* ``__has_nothrow_assign`` (GNU, Microsoft) 947* ``__has_nothrow_copy`` (GNU, Microsoft) 948* ``__has_nothrow_constructor`` (GNU, Microsoft) 949* ``__has_trivial_assign`` (GNU, Microsoft) 950* ``__has_trivial_copy`` (GNU, Microsoft) 951* ``__has_trivial_constructor`` (GNU, Microsoft) 952* ``__has_trivial_destructor`` (GNU, Microsoft) 953* ``__has_virtual_destructor`` (GNU, Microsoft) 954* ``__is_abstract`` (GNU, Microsoft) 955* ``__is_base_of`` (GNU, Microsoft) 956* ``__is_class`` (GNU, Microsoft) 957* ``__is_convertible_to`` (Microsoft) 958* ``__is_empty`` (GNU, Microsoft) 959* ``__is_enum`` (GNU, Microsoft) 960* ``__is_interface_class`` (Microsoft) 961* ``__is_pod`` (GNU, Microsoft) 962* ``__is_polymorphic`` (GNU, Microsoft) 963* ``__is_union`` (GNU, Microsoft) 964* ``__is_literal(type)``: Determines whether the given type is a literal type 965* ``__is_final``: Determines whether the given type is declared with a 966 ``final`` class-virt-specifier. 967* ``__underlying_type(type)``: Retrieves the underlying type for a given 968 ``enum`` type. This trait is required to implement the C++11 standard 969 library. 970* ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value 971 of type ``totype`` can be assigned to from a value of type ``fromtype`` such 972 that no non-trivial functions are called as part of that assignment. This 973 trait is required to implement the C++11 standard library. 974* ``__is_trivially_constructible(type, argtypes...)``: Determines whether a 975 value of type ``type`` can be direct-initialized with arguments of types 976 ``argtypes...`` such that no non-trivial functions are called as part of 977 that initialization. This trait is required to implement the C++11 standard 978 library. 979 980Blocks 981====== 982 983The syntax and high level language feature description is in 984:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for 985the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`. 986 987Query for this feature with ``__has_extension(blocks)``. 988 989Objective-C Features 990==================== 991 992Related result types 993-------------------- 994 995According to Cocoa conventions, Objective-C methods with certain names 996("``init``", "``alloc``", etc.) always return objects that are an instance of 997the receiving class's type. Such methods are said to have a "related result 998type", meaning that a message send to one of these methods will have the same 999static type as an instance of the receiver class. For example, given the 1000following classes: 1001 1002.. code-block:: objc 1003 1004 @interface NSObject 1005 + (id)alloc; 1006 - (id)init; 1007 @end 1008 1009 @interface NSArray : NSObject 1010 @end 1011 1012and this common initialization pattern 1013 1014.. code-block:: objc 1015 1016 NSArray *array = [[NSArray alloc] init]; 1017 1018the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because 1019``alloc`` implicitly has a related result type. Similarly, the type of the 1020expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a 1021related result type and its receiver is known to have the type ``NSArray *``. 1022If neither ``alloc`` nor ``init`` had a related result type, the expressions 1023would have had type ``id``, as declared in the method signature. 1024 1025A method with a related result type can be declared by using the type 1026``instancetype`` as its result type. ``instancetype`` is a contextual keyword 1027that is only permitted in the result type of an Objective-C method, e.g. 1028 1029.. code-block:: objc 1030 1031 @interface A 1032 + (instancetype)constructAnA; 1033 @end 1034 1035The related result type can also be inferred for some methods. To determine 1036whether a method has an inferred related result type, the first word in the 1037camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered, 1038and the method will have a related result type if its return type is compatible 1039with the type of its class and if: 1040 1041* the first word is "``alloc``" or "``new``", and the method is a class method, 1042 or 1043 1044* the first word is "``autorelease``", "``init``", "``retain``", or "``self``", 1045 and the method is an instance method. 1046 1047If a method with a related result type is overridden by a subclass method, the 1048subclass method must also return a type that is compatible with the subclass 1049type. For example: 1050 1051.. code-block:: objc 1052 1053 @interface NSString : NSObject 1054 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 1055 @end 1056 1057Related result types only affect the type of a message send or property access 1058via the given method. In all other respects, a method with a related result 1059type is treated the same way as method that returns ``id``. 1060 1061Use ``__has_feature(objc_instancetype)`` to determine whether the 1062``instancetype`` contextual keyword is available. 1063 1064Automatic reference counting 1065---------------------------- 1066 1067Clang provides support for :doc:`automated reference counting 1068<AutomaticReferenceCounting>` in Objective-C, which eliminates the need 1069for manual ``retain``/``release``/``autorelease`` message sends. There are two 1070feature macros associated with automatic reference counting: 1071``__has_feature(objc_arc)`` indicates the availability of automated reference 1072counting in general, while ``__has_feature(objc_arc_weak)`` indicates that 1073automated reference counting also includes support for ``__weak`` pointers to 1074Objective-C objects. 1075 1076.. _objc-fixed-enum: 1077 1078Enumerations with a fixed underlying type 1079----------------------------------------- 1080 1081Clang provides support for C++11 enumerations with a fixed underlying type 1082within Objective-C. For example, one can write an enumeration type as: 1083 1084.. code-block:: c++ 1085 1086 typedef enum : unsigned char { Red, Green, Blue } Color; 1087 1088This specifies that the underlying type, which is used to store the enumeration 1089value, is ``unsigned char``. 1090 1091Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed 1092underlying types is available in Objective-C. 1093 1094Interoperability with C++11 lambdas 1095----------------------------------- 1096 1097Clang provides interoperability between C++11 lambdas and blocks-based APIs, by 1098permitting a lambda to be implicitly converted to a block pointer with the 1099corresponding signature. For example, consider an API such as ``NSArray``'s 1100array-sorting method: 1101 1102.. code-block:: objc 1103 1104 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr; 1105 1106``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult 1107(^)(id, id)``, and parameters of this type are generally provided with block 1108literals as arguments. However, one can also use a C++11 lambda so long as it 1109provides the same signature (in this case, accepting two parameters of type 1110``id`` and returning an ``NSComparisonResult``): 1111 1112.. code-block:: objc 1113 1114 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11", 1115 @"String 02"]; 1116 const NSStringCompareOptions comparisonOptions 1117 = NSCaseInsensitiveSearch | NSNumericSearch | 1118 NSWidthInsensitiveSearch | NSForcedOrderingSearch; 1119 NSLocale *currentLocale = [NSLocale currentLocale]; 1120 NSArray *sorted 1121 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult { 1122 NSRange string1Range = NSMakeRange(0, [s1 length]); 1123 return [s1 compare:s2 options:comparisonOptions 1124 range:string1Range locale:currentLocale]; 1125 }]; 1126 NSLog(@"sorted: %@", sorted); 1127 1128This code relies on an implicit conversion from the type of the lambda 1129expression (an unnamed, local class type called the *closure type*) to the 1130corresponding block pointer type. The conversion itself is expressed by a 1131conversion operator in that closure type that produces a block pointer with the 1132same signature as the lambda itself, e.g., 1133 1134.. code-block:: objc 1135 1136 operator NSComparisonResult (^)(id, id)() const; 1137 1138This conversion function returns a new block that simply forwards the two 1139parameters to the lambda object (which it captures by copy), then returns the 1140result. The returned block is first copied (with ``Block_copy``) and then 1141autoreleased. As an optimization, if a lambda expression is immediately 1142converted to a block pointer (as in the first example, above), then the block 1143is not copied and autoreleased: rather, it is given the same lifetime as a 1144block literal written at that point in the program, which avoids the overhead 1145of copying a block to the heap in the common case. 1146 1147The conversion from a lambda to a block pointer is only available in 1148Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory 1149management (autorelease). 1150 1151Object Literals and Subscripting 1152-------------------------------- 1153 1154Clang provides support for :doc:`Object Literals and Subscripting 1155<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C 1156programming patterns, makes programs more concise, and improves the safety of 1157container creation. There are several feature macros associated with object 1158literals and subscripting: ``__has_feature(objc_array_literals)`` tests the 1159availability of array literals; ``__has_feature(objc_dictionary_literals)`` 1160tests the availability of dictionary literals; 1161``__has_feature(objc_subscripting)`` tests the availability of object 1162subscripting. 1163 1164Objective-C Autosynthesis of Properties 1165--------------------------------------- 1166 1167Clang provides support for autosynthesis of declared properties. Using this 1168feature, clang provides default synthesis of those properties not declared 1169@dynamic and not having user provided backing getter and setter methods. 1170``__has_feature(objc_default_synthesize_properties)`` checks for availability 1171of this feature in version of clang being used. 1172 1173.. _langext-objc_method_family: 1174 1175The ``objc_method_family`` attribute 1176------------------------------------ 1177 1178Many methods in Objective-C have conventional meanings determined by their 1179selectors. It is sometimes useful to be able to mark a method as having a 1180particular conventional meaning despite not having the right selector, or as 1181not having the conventional meaning that its selector would suggest. For these 1182use cases, we provide an attribute to specifically describe the "method family" 1183that a method belongs to. 1184 1185**Usage**: ``__attribute__((objc_method_family(X)))``, where ``X`` is one of 1186``none``, ``alloc``, ``copy``, ``init``, ``mutableCopy``, or ``new``. This 1187attribute can only be placed at the end of a method declaration: 1188 1189.. code-block:: objc 1190 1191 - (NSString *)initMyStringValue __attribute__((objc_method_family(none))); 1192 1193Users who do not wish to change the conventional meaning of a method, and who 1194merely want to document its non-standard retain and release semantics, should 1195use the :ref:`retaining behavior attributes <langext-objc-retain-release>` 1196described below. 1197 1198Query for this feature with ``__has_attribute(objc_method_family)``. 1199 1200.. _langext-objc-retain-release: 1201 1202Objective-C retaining behavior attributes 1203----------------------------------------- 1204 1205In Objective-C, functions and methods are generally assumed to follow the 1206`Cocoa Memory Management 1207<http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_ 1208conventions for ownership of object arguments and 1209return values. However, there are exceptions, and so Clang provides attributes 1210to allow these exceptions to be documented. This are used by ARC and the 1211`static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be 1212better described using the :ref:`objc_method_family 1213<langext-objc_method_family>` attribute instead. 1214 1215**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``, 1216``ns_returns_autoreleased``, ``cf_returns_retained``, and 1217``cf_returns_not_retained`` attributes can be placed on methods and functions 1218that return Objective-C or CoreFoundation objects. They are commonly placed at 1219the end of a function prototype or method declaration: 1220 1221.. code-block:: objc 1222 1223 id foo() __attribute__((ns_returns_retained)); 1224 1225 - (NSString *)bar:(int)x __attribute__((ns_returns_retained)); 1226 1227The ``*_returns_retained`` attributes specify that the returned object has a +1 1228retain count. The ``*_returns_not_retained`` attributes specify that the return 1229object has a +0 retain count, even if the normal convention for its selector 1230would be +1. ``ns_returns_autoreleased`` specifies that the returned object is 1231+0, but is guaranteed to live at least as long as the next flush of an 1232autorelease pool. 1233 1234**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on 1235an parameter declaration; they specify that the argument is expected to have a 1236+1 retain count, which will be balanced in some way by the function or method. 1237The ``ns_consumes_self`` attribute can only be placed on an Objective-C 1238method; it specifies that the method expects its ``self`` parameter to have a 1239+1 retain count, which it will balance in some way. 1240 1241.. code-block:: objc 1242 1243 void foo(__attribute__((ns_consumed)) NSString *string); 1244 1245 - (void) bar __attribute__((ns_consumes_self)); 1246 - (void) baz:(id) __attribute__((ns_consumed)) x; 1247 1248Further examples of these attributes are available in the static analyzer's `list of annotations for analysis 1249<http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_. 1250 1251Query for these features with ``__has_attribute(ns_consumed)``, 1252``__has_attribute(ns_returns_retained)``, etc. 1253 1254 1255Function Overloading in C 1256========================= 1257 1258Clang provides support for C++ function overloading in C. Function overloading 1259in C is introduced using the ``overloadable`` attribute. For example, one 1260might provide several overloaded versions of a ``tgsin`` function that invokes 1261the appropriate standard function computing the sine of a value with ``float``, 1262``double``, or ``long double`` precision: 1263 1264.. code-block:: c 1265 1266 #include <math.h> 1267 float __attribute__((overloadable)) tgsin(float x) { return sinf(x); } 1268 double __attribute__((overloadable)) tgsin(double x) { return sin(x); } 1269 long double __attribute__((overloadable)) tgsin(long double x) { return sinl(x); } 1270 1271Given these declarations, one can call ``tgsin`` with a ``float`` value to 1272receive a ``float`` result, with a ``double`` to receive a ``double`` result, 1273etc. Function overloading in C follows the rules of C++ function overloading 1274to pick the best overload given the call arguments, with a few C-specific 1275semantics: 1276 1277* Conversion from ``float`` or ``double`` to ``long double`` is ranked as a 1278 floating-point promotion (per C99) rather than as a floating-point conversion 1279 (as in C++). 1280 1281* A conversion from a pointer of type ``T*`` to a pointer of type ``U*`` is 1282 considered a pointer conversion (with conversion rank) if ``T`` and ``U`` are 1283 compatible types. 1284 1285* A conversion from type ``T`` to a value of type ``U`` is permitted if ``T`` 1286 and ``U`` are compatible types. This conversion is given "conversion" rank. 1287 1288The declaration of ``overloadable`` functions is restricted to function 1289declarations and definitions. Most importantly, if any function with a given 1290name is given the ``overloadable`` attribute, then all function declarations 1291and definitions with that name (and in that scope) must have the 1292``overloadable`` attribute. This rule even applies to redeclarations of 1293functions whose original declaration had the ``overloadable`` attribute, e.g., 1294 1295.. code-block:: c 1296 1297 int f(int) __attribute__((overloadable)); 1298 float f(float); // error: declaration of "f" must have the "overloadable" attribute 1299 1300 int g(int) __attribute__((overloadable)); 1301 int g(int) { } // error: redeclaration of "g" must also have the "overloadable" attribute 1302 1303Functions marked ``overloadable`` must have prototypes. Therefore, the 1304following code is ill-formed: 1305 1306.. code-block:: c 1307 1308 int h() __attribute__((overloadable)); // error: h does not have a prototype 1309 1310However, ``overloadable`` functions are allowed to use a ellipsis even if there 1311are no named parameters (as is permitted in C++). This feature is particularly 1312useful when combined with the ``unavailable`` attribute: 1313 1314.. code-block:: c++ 1315 1316 void honeypot(...) __attribute__((overloadable, unavailable)); // calling me is an error 1317 1318Functions declared with the ``overloadable`` attribute have their names mangled 1319according to the same rules as C++ function names. For example, the three 1320``tgsin`` functions in our motivating example get the mangled names 1321``_Z5tgsinf``, ``_Z5tgsind``, and ``_Z5tgsine``, respectively. There are two 1322caveats to this use of name mangling: 1323 1324* Future versions of Clang may change the name mangling of functions overloaded 1325 in C, so you should not depend on an specific mangling. To be completely 1326 safe, we strongly urge the use of ``static inline`` with ``overloadable`` 1327 functions. 1328 1329* The ``overloadable`` attribute has almost no meaning when used in C++, 1330 because names will already be mangled and functions are already overloadable. 1331 However, when an ``overloadable`` function occurs within an ``extern "C"`` 1332 linkage specification, it's name *will* be mangled in the same way as it 1333 would in C. 1334 1335Query for this feature with ``__has_extension(attribute_overloadable)``. 1336 1337Initializer lists for complex numbers in C 1338========================================== 1339 1340clang supports an extension which allows the following in C: 1341 1342.. code-block:: c++ 1343 1344 #include <math.h> 1345 #include <complex.h> 1346 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 1347 1348This construct is useful because there is no way to separately initialize the 1349real and imaginary parts of a complex variable in standard C, given that clang 1350does not support ``_Imaginary``. (Clang also supports the ``__real__`` and 1351``__imag__`` extensions from gcc, which help in some cases, but are not usable 1352in static initializers.) 1353 1354Note that this extension does not allow eliding the braces; the meaning of the 1355following two lines is different: 1356 1357.. code-block:: c++ 1358 1359 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 1360 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 1361 1362This extension also works in C++ mode, as far as that goes, but does not apply 1363to the C++ ``std::complex``. (In C++11, list initialization allows the same 1364syntax to be used with ``std::complex`` with the same meaning.) 1365 1366Builtin Functions 1367================= 1368 1369Clang supports a number of builtin library functions with the same syntax as 1370GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``, 1371``__builtin_choose_expr``, ``__builtin_types_compatible_p``, 1372``__sync_fetch_and_add``, etc. In addition to the GCC builtins, Clang supports 1373a number of builtins that GCC does not, which are listed here. 1374 1375Please note that Clang does not and will not support all of the GCC builtins 1376for vector operations. Instead of using builtins, you should use the functions 1377defined in target-specific header files like ``<xmmintrin.h>``, which define 1378portable wrappers for these. Many of the Clang versions of these functions are 1379implemented directly in terms of :ref:`extended vector support 1380<langext-vectors>` instead of builtins, in order to reduce the number of 1381builtins that we need to implement. 1382 1383``__builtin_readcyclecounter`` 1384------------------------------ 1385 1386``__builtin_readcyclecounter`` is used to access the cycle counter register (or 1387a similar low-latency, high-accuracy clock) on those targets that support it. 1388 1389**Syntax**: 1390 1391.. code-block:: c++ 1392 1393 __builtin_readcyclecounter() 1394 1395**Example of Use**: 1396 1397.. code-block:: c++ 1398 1399 unsigned long long t0 = __builtin_readcyclecounter(); 1400 do_something(); 1401 unsigned long long t1 = __builtin_readcyclecounter(); 1402 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow 1403 1404**Description**: 1405 1406The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value, 1407which may be either global or process/thread-specific depending on the target. 1408As the backing counters often overflow quickly (on the order of seconds) this 1409should only be used for timing small intervals. When not supported by the 1410target, the return value is always zero. This builtin takes no arguments and 1411produces an unsigned long long result. 1412 1413Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note 1414that even if present, its use may depend on run-time privilege or other OS 1415controlled state. 1416 1417.. _langext-__builtin_shufflevector: 1418 1419``__builtin_shufflevector`` 1420--------------------------- 1421 1422``__builtin_shufflevector`` is used to express generic vector 1423permutation/shuffle/swizzle operations. This builtin is also very important 1424for the implementation of various target-specific header files like 1425``<xmmintrin.h>``. 1426 1427**Syntax**: 1428 1429.. code-block:: c++ 1430 1431 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 1432 1433**Examples**: 1434 1435.. code-block:: c++ 1436 1437 // Identity operation - return 4-element vector V1. 1438 __builtin_shufflevector(V1, V1, 0, 1, 2, 3) 1439 1440 // "Splat" element 0 of V1 into a 4-element result. 1441 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 1442 1443 // Reverse 4-element vector V1. 1444 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 1445 1446 // Concatenate every other element of 4-element vectors V1 and V2. 1447 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 1448 1449 // Concatenate every other element of 8-element vectors V1 and V2. 1450 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 1451 1452**Description**: 1453 1454The first two arguments to ``__builtin_shufflevector`` are vectors that have 1455the same element type. The remaining arguments are a list of integers that 1456specify the elements indices of the first two vectors that should be extracted 1457and returned in a new vector. These element indices are numbered sequentially 1458starting with the first vector, continuing into the second vector. Thus, if 1459``vec1`` is a 4-element vector, index 5 would refer to the second element of 1460``vec2``. 1461 1462The result of ``__builtin_shufflevector`` is a vector with the same element 1463type as ``vec1``/``vec2`` but that has an element count equal to the number of 1464indices specified. 1465 1466Query for this feature with ``__has_builtin(__builtin_shufflevector)``. 1467 1468``__builtin_unreachable`` 1469------------------------- 1470 1471``__builtin_unreachable`` is used to indicate that a specific point in the 1472program cannot be reached, even if the compiler might otherwise think it can. 1473This is useful to improve optimization and eliminates certain warnings. For 1474example, without the ``__builtin_unreachable`` in the example below, the 1475compiler assumes that the inline asm can fall through and prints a "function 1476declared '``noreturn``' should not return" warning. 1477 1478**Syntax**: 1479 1480.. code-block:: c++ 1481 1482 __builtin_unreachable() 1483 1484**Example of use**: 1485 1486.. code-block:: c++ 1487 1488 void myabort(void) __attribute__((noreturn)); 1489 void myabort(void) { 1490 asm("int3"); 1491 __builtin_unreachable(); 1492 } 1493 1494**Description**: 1495 1496The ``__builtin_unreachable()`` builtin has completely undefined behavior. 1497Since it has undefined behavior, it is a statement that it is never reached and 1498the optimizer can take advantage of this to produce better code. This builtin 1499takes no arguments and produces a void result. 1500 1501Query for this feature with ``__has_builtin(__builtin_unreachable)``. 1502 1503``__sync_swap`` 1504--------------- 1505 1506``__sync_swap`` is used to atomically swap integers or pointers in memory. 1507 1508**Syntax**: 1509 1510.. code-block:: c++ 1511 1512 type __sync_swap(type *ptr, type value, ...) 1513 1514**Example of Use**: 1515 1516.. code-block:: c++ 1517 1518 int old_value = __sync_swap(&value, new_value); 1519 1520**Description**: 1521 1522The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of 1523atomic intrinsics to allow code to atomically swap the current value with the 1524new value. More importantly, it helps developers write more efficient and 1525correct code by avoiding expensive loops around 1526``__sync_bool_compare_and_swap()`` or relying on the platform specific 1527implementation details of ``__sync_lock_test_and_set()``. The 1528``__sync_swap()`` builtin is a full barrier. 1529 1530Multiprecision Arithmetic Builtins 1531---------------------------------- 1532 1533Clang provides a set of builtins which expose multiprecision arithmetic in a 1534manner amenable to C. They all have the following form: 1535 1536.. code-block:: c 1537 1538 unsigned x = ..., y = ..., carryin = ..., carryout; 1539 unsigned sum = __builtin_addc(x, y, carryin, &carryout); 1540 1541Thus one can form a multiprecision addition chain in the following manner: 1542 1543.. code-block:: c 1544 1545 unsigned *x, *y, *z, carryin=0, carryout; 1546 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout); 1547 carryin = carryout; 1548 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout); 1549 carryin = carryout; 1550 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout); 1551 carryin = carryout; 1552 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout); 1553 1554The complete list of builtins are: 1555 1556.. code-block:: c 1557 1558 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1559 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1560 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1561 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1562 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout); 1563 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout); 1564 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout); 1565 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout); 1566 1567.. _langext-__c11_atomic: 1568 1569__c11_atomic builtins 1570--------------------- 1571 1572Clang provides a set of builtins which are intended to be used to implement 1573C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the 1574``_explicit`` form of the corresponding C11 operation, and are named with a 1575``__c11_`` prefix. The supported operations are: 1576 1577* ``__c11_atomic_init`` 1578* ``__c11_atomic_thread_fence`` 1579* ``__c11_atomic_signal_fence`` 1580* ``__c11_atomic_is_lock_free`` 1581* ``__c11_atomic_store`` 1582* ``__c11_atomic_load`` 1583* ``__c11_atomic_exchange`` 1584* ``__c11_atomic_compare_exchange_strong`` 1585* ``__c11_atomic_compare_exchange_weak`` 1586* ``__c11_atomic_fetch_add`` 1587* ``__c11_atomic_fetch_sub`` 1588* ``__c11_atomic_fetch_and`` 1589* ``__c11_atomic_fetch_or`` 1590* ``__c11_atomic_fetch_xor`` 1591 1592Non-standard C++11 Attributes 1593============================= 1594 1595Clang's non-standard C++11 attributes live in the ``clang`` attribute 1596namespace. 1597 1598The ``clang::fallthrough`` attribute 1599------------------------------------ 1600 1601The ``clang::fallthrough`` attribute is used along with the 1602``-Wimplicit-fallthrough`` argument to annotate intentional fall-through 1603between switch labels. It can only be applied to a null statement placed at a 1604point of execution between any statement and the next switch label. It is 1605common to mark these places with a specific comment, but this attribute is 1606meant to replace comments with a more strict annotation, which can be checked 1607by the compiler. This attribute doesn't change semantics of the code and can 1608be used wherever an intended fall-through occurs. It is designed to mimic 1609control-flow statements like ``break;``, so it can be placed in most places 1610where ``break;`` can, but only if there are no statements on the execution path 1611between it and the next switch label. 1612 1613Here is an example: 1614 1615.. code-block:: c++ 1616 1617 // compile with -Wimplicit-fallthrough 1618 switch (n) { 1619 case 22: 1620 case 33: // no warning: no statements between case labels 1621 f(); 1622 case 44: // warning: unannotated fall-through 1623 g(); 1624 [[clang::fallthrough]]; 1625 case 55: // no warning 1626 if (x) { 1627 h(); 1628 break; 1629 } 1630 else { 1631 i(); 1632 [[clang::fallthrough]]; 1633 } 1634 case 66: // no warning 1635 p(); 1636 [[clang::fallthrough]]; // warning: fallthrough annotation does not 1637 // directly precede case label 1638 q(); 1639 case 77: // warning: unannotated fall-through 1640 r(); 1641 } 1642 1643``gnu::`` attributes 1644-------------------- 1645 1646Clang also supports GCC's ``gnu`` attribute namespace. All GCC attributes which 1647are accepted with the ``__attribute__((foo))`` syntax are also accepted as 1648``[[gnu::foo]]``. This only extends to attributes which are specified by GCC 1649(see the list of `GCC function attributes 1650<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable 1651attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and 1652`GCC type attributes 1653<http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_. As with the GCC 1654implementation, these attributes must appertain to the *declarator-id* in a 1655declaration, which means they must go either at the start of the declaration or 1656immediately after the name being declared. 1657 1658For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and 1659also applies the GNU ``noreturn`` attribute to ``f``. 1660 1661.. code-block:: c++ 1662 1663 [[gnu::unused]] int a, f [[gnu::noreturn]] (); 1664 1665Target-Specific Extensions 1666========================== 1667 1668Clang supports some language features conditionally on some targets. 1669 1670X86/X86-64 Language Extensions 1671------------------------------ 1672 1673The X86 backend has these language extensions: 1674 1675Memory references off the GS segment 1676^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1677 1678Annotating a pointer with address space #256 causes it to be code generated 1679relative to the X86 GS segment register, and address space #257 causes it to be 1680relative to the X86 FS segment. Note that this is a very very low-level 1681feature that should only be used if you know what you're doing (for example in 1682an OS kernel). 1683 1684Here is an example: 1685 1686.. code-block:: c++ 1687 1688 #define GS_RELATIVE __attribute__((address_space(256))) 1689 int foo(int GS_RELATIVE *P) { 1690 return *P; 1691 } 1692 1693Which compiles to (on X86-32): 1694 1695.. code-block:: gas 1696 1697 _foo: 1698 movl 4(%esp), %eax 1699 movl %gs:(%eax), %eax 1700 ret 1701 1702Extensions for Static Analysis 1703============================== 1704 1705Clang supports additional attributes that are useful for documenting program 1706invariants and rules for static analysis tools, such as the `Clang Static 1707Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented 1708in the analyzer's `list of source-level annotations 1709<http://clang-analyzer.llvm.org/annotations.html>`_. 1710 1711 1712Extensions for Dynamic Analysis 1713=============================== 1714 1715.. _langext-address_sanitizer: 1716 1717AddressSanitizer 1718---------------- 1719 1720Use ``__has_feature(address_sanitizer)`` to check if the code is being built 1721with :doc:`AddressSanitizer`. 1722 1723Use ``__attribute__((no_sanitize_address))`` 1724on a function declaration 1725to specify that address safety instrumentation (e.g. AddressSanitizer) should 1726not be applied to that function. 1727 1728.. _langext-thread_sanitizer: 1729 1730ThreadSanitizer 1731---------------- 1732 1733Use ``__has_feature(thread_sanitizer)`` to check if the code is being built 1734with :doc:`ThreadSanitizer`. 1735 1736Use ``__attribute__((no_sanitize_thread))`` on a function declaration 1737to specify that checks for data races on plain (non-atomic) memory accesses 1738should not be inserted by ThreadSanitizer. 1739The function may still be instrumented by the tool 1740to avoid false positives in other places. 1741 1742.. _langext-memory_sanitizer: 1743 1744MemorySanitizer 1745---------------- 1746Use ``__has_feature(memory_sanitizer)`` to check if the code is being built 1747with :doc:`MemorySanitizer`. 1748 1749Use ``__attribute__((no_sanitize_memory))`` on a function declaration 1750to specify that checks for uninitialized memory should not be inserted 1751(e.g. by MemorySanitizer). The function may still be instrumented by the tool 1752to avoid false positives in other places. 1753 1754 1755Thread-Safety Annotation Checking 1756================================= 1757 1758Clang supports additional attributes for checking basic locking policies in 1759multithreaded programs. Clang currently parses the following list of 1760attributes, although **the implementation for these annotations is currently in 1761development.** For more details, see the `GCC implementation 1762<http://gcc.gnu.org/wiki/ThreadSafetyAnnotation>`_. 1763 1764``no_thread_safety_analysis`` 1765----------------------------- 1766 1767Use ``__attribute__((no_thread_safety_analysis))`` on a function declaration to 1768specify that the thread safety analysis should not be run on that function. 1769This attribute provides an escape hatch (e.g. for situations when it is 1770difficult to annotate the locking policy). 1771 1772``lockable`` 1773------------ 1774 1775Use ``__attribute__((lockable))`` on a class definition to specify that it has 1776a lockable type (e.g. a Mutex class). This annotation is primarily used to 1777check consistency. 1778 1779``scoped_lockable`` 1780------------------- 1781 1782Use ``__attribute__((scoped_lockable))`` on a class definition to specify that 1783it has a "scoped" lockable type. Objects of this type will acquire the lock 1784upon construction and release it upon going out of scope. This annotation is 1785primarily used to check consistency. 1786 1787``guarded_var`` 1788--------------- 1789 1790Use ``__attribute__((guarded_var))`` on a variable declaration to specify that 1791the variable must be accessed while holding some lock. 1792 1793``pt_guarded_var`` 1794------------------ 1795 1796Use ``__attribute__((pt_guarded_var))`` on a pointer declaration to specify 1797that the pointer must be dereferenced while holding some lock. 1798 1799``guarded_by(l)`` 1800----------------- 1801 1802Use ``__attribute__((guarded_by(l)))`` on a variable declaration to specify 1803that the variable must be accessed while holding lock ``l``. 1804 1805``pt_guarded_by(l)`` 1806-------------------- 1807 1808Use ``__attribute__((pt_guarded_by(l)))`` on a pointer declaration to specify 1809that the pointer must be dereferenced while holding lock ``l``. 1810 1811``acquired_before(...)`` 1812------------------------ 1813 1814Use ``__attribute__((acquired_before(...)))`` on a declaration of a lockable 1815variable to specify that the lock must be acquired before all attribute 1816arguments. Arguments must be lockable type, and there must be at least one 1817argument. 1818 1819``acquired_after(...)`` 1820----------------------- 1821 1822Use ``__attribute__((acquired_after(...)))`` on a declaration of a lockable 1823variable to specify that the lock must be acquired after all attribute 1824arguments. Arguments must be lockable type, and there must be at least one 1825argument. 1826 1827``exclusive_lock_function(...)`` 1828-------------------------------- 1829 1830Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration 1831to specify that the function acquires all listed locks exclusively. This 1832attribute takes zero or more arguments: either of lockable type or integers 1833indexing into function parameters of lockable type. If no arguments are given, 1834the acquired lock is implicitly ``this`` of the enclosing object. 1835 1836``shared_lock_function(...)`` 1837----------------------------- 1838 1839Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to 1840specify that the function acquires all listed locks, although the locks may be 1841shared (e.g. read locks). This attribute takes zero or more arguments: either 1842of lockable type or integers indexing into function parameters of lockable 1843type. If no arguments are given, the acquired lock is implicitly ``this`` of 1844the enclosing object. 1845 1846``exclusive_trylock_function(...)`` 1847----------------------------------- 1848 1849Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration 1850to specify that the function will try (without blocking) to acquire all listed 1851locks exclusively. This attribute takes one or more arguments. The first 1852argument is an integer or boolean value specifying the return value of a 1853successful lock acquisition. The remaining arugments are either of lockable 1854type or integers indexing into function parameters of lockable type. If only 1855one argument is given, the acquired lock is implicitly ``this`` of the 1856enclosing object. 1857 1858``shared_trylock_function(...)`` 1859-------------------------------- 1860 1861Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to 1862specify that the function will try (without blocking) to acquire all listed 1863locks, although the locks may be shared (e.g. read locks). This attribute 1864takes one or more arguments. The first argument is an integer or boolean value 1865specifying the return value of a successful lock acquisition. The remaining 1866arugments are either of lockable type or integers indexing into function 1867parameters of lockable type. If only one argument is given, the acquired lock 1868is implicitly ``this`` of the enclosing object. 1869 1870``unlock_function(...)`` 1871------------------------ 1872 1873Use ``__attribute__((unlock_function(...)))`` on a function declaration to 1874specify that the function release all listed locks. This attribute takes zero 1875or more arguments: either of lockable type or integers indexing into function 1876parameters of lockable type. If no arguments are given, the acquired lock is 1877implicitly ``this`` of the enclosing object. 1878 1879``lock_returned(l)`` 1880-------------------- 1881 1882Use ``__attribute__((lock_returned(l)))`` on a function declaration to specify 1883that the function returns lock ``l`` (``l`` must be of lockable type). This 1884annotation is used to aid in resolving lock expressions. 1885 1886``locks_excluded(...)`` 1887----------------------- 1888 1889Use ``__attribute__((locks_excluded(...)))`` on a function declaration to 1890specify that the function must not be called with the listed locks. Arguments 1891must be lockable type, and there must be at least one argument. 1892 1893``exclusive_locks_required(...)`` 1894--------------------------------- 1895 1896Use ``__attribute__((exclusive_locks_required(...)))`` on a function 1897declaration to specify that the function must be called while holding the 1898listed exclusive locks. Arguments must be lockable type, and there must be at 1899least one argument. 1900 1901``shared_locks_required(...)`` 1902------------------------------ 1903 1904Use ``__attribute__((shared_locks_required(...)))`` on a function declaration 1905to specify that the function must be called while holding the listed shared 1906locks. Arguments must be lockable type, and there must be at least one 1907argument. 1908 1909Type Safety Checking 1910==================== 1911 1912Clang supports additional attributes to enable checking type safety properties 1913that can't be enforced by C type system. Usecases include: 1914 1915* MPI library implementations, where these attributes enable checking that 1916 buffer type matches the passed ``MPI_Datatype``; 1917* for HDF5 library there is a similar usecase as MPI; 1918* checking types of variadic functions' arguments for functions like 1919 ``fcntl()`` and ``ioctl()``. 1920 1921You can detect support for these attributes with ``__has_attribute()``. For 1922example: 1923 1924.. code-block:: c++ 1925 1926 #if defined(__has_attribute) 1927 # if __has_attribute(argument_with_type_tag) && \ 1928 __has_attribute(pointer_with_type_tag) && \ 1929 __has_attribute(type_tag_for_datatype) 1930 # define ATTR_MPI_PWT(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(mpi,buffer_idx,type_idx))) 1931 /* ... other macros ... */ 1932 # endif 1933 #endif 1934 1935 #if !defined(ATTR_MPI_PWT) 1936 # define ATTR_MPI_PWT(buffer_idx, type_idx) 1937 #endif 1938 1939 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */) 1940 ATTR_MPI_PWT(1,3); 1941 1942``argument_with_type_tag(...)`` 1943------------------------------- 1944 1945Use ``__attribute__((argument_with_type_tag(arg_kind, arg_idx, 1946type_tag_idx)))`` on a function declaration to specify that the function 1947accepts a type tag that determines the type of some other argument. 1948``arg_kind`` is an identifier that should be used when annotating all 1949applicable type tags. 1950 1951This attribute is primarily useful for checking arguments of variadic functions 1952(``pointer_with_type_tag`` can be used in most of non-variadic cases). 1953 1954For example: 1955 1956.. code-block:: c++ 1957 1958 int fcntl(int fd, int cmd, ...) 1959 __attribute__(( argument_with_type_tag(fcntl,3,2) )); 1960 1961``pointer_with_type_tag(...)`` 1962------------------------------ 1963 1964Use ``__attribute__((pointer_with_type_tag(ptr_kind, ptr_idx, type_tag_idx)))`` 1965on a function declaration to specify that the function accepts a type tag that 1966determines the pointee type of some other pointer argument. 1967 1968For example: 1969 1970.. code-block:: c++ 1971 1972 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */) 1973 __attribute__(( pointer_with_type_tag(mpi,1,3) )); 1974 1975``type_tag_for_datatype(...)`` 1976------------------------------ 1977 1978Clang supports annotating type tags of two forms. 1979 1980* **Type tag that is an expression containing a reference to some declared 1981 identifier.** Use ``__attribute__((type_tag_for_datatype(kind, type)))`` on a 1982 declaration with that identifier: 1983 1984 .. code-block:: c++ 1985 1986 extern struct mpi_datatype mpi_datatype_int 1987 __attribute__(( type_tag_for_datatype(mpi,int) )); 1988 #define MPI_INT ((MPI_Datatype) &mpi_datatype_int) 1989 1990* **Type tag that is an integral literal.** Introduce a ``static const`` 1991 variable with a corresponding initializer value and attach 1992 ``__attribute__((type_tag_for_datatype(kind, type)))`` on that declaration, 1993 for example: 1994 1995 .. code-block:: c++ 1996 1997 #define MPI_INT ((MPI_Datatype) 42) 1998 static const MPI_Datatype mpi_datatype_int 1999 __attribute__(( type_tag_for_datatype(mpi,int) )) = 42 2000 2001The attribute also accepts an optional third argument that determines how the 2002expression is compared to the type tag. There are two supported flags: 2003 2004* ``layout_compatible`` will cause types to be compared according to 2005 layout-compatibility rules (C++11 [class.mem] p 17, 18). This is 2006 implemented to support annotating types like ``MPI_DOUBLE_INT``. 2007 2008 For example: 2009 2010 .. code-block:: c++ 2011 2012 /* In mpi.h */ 2013 struct internal_mpi_double_int { double d; int i; }; 2014 extern struct mpi_datatype mpi_datatype_double_int 2015 __attribute__(( type_tag_for_datatype(mpi, struct internal_mpi_double_int, layout_compatible) )); 2016 2017 #define MPI_DOUBLE_INT ((MPI_Datatype) &mpi_datatype_double_int) 2018 2019 /* In user code */ 2020 struct my_pair { double a; int b; }; 2021 struct my_pair *buffer; 2022 MPI_Send(buffer, 1, MPI_DOUBLE_INT /*, ... */); // no warning 2023 2024 struct my_int_pair { int a; int b; } 2025 struct my_int_pair *buffer2; 2026 MPI_Send(buffer2, 1, MPI_DOUBLE_INT /*, ... */); // warning: actual buffer element 2027 // type 'struct my_int_pair' 2028 // doesn't match specified MPI_Datatype 2029 2030* ``must_be_null`` specifies that the expression should be a null pointer 2031 constant, for example: 2032 2033 .. code-block:: c++ 2034 2035 /* In mpi.h */ 2036 extern struct mpi_datatype mpi_datatype_null 2037 __attribute__(( type_tag_for_datatype(mpi, void, must_be_null) )); 2038 2039 #define MPI_DATATYPE_NULL ((MPI_Datatype) &mpi_datatype_null) 2040 2041 /* In user code */ 2042 MPI_Send(buffer, 1, MPI_DATATYPE_NULL /*, ... */); // warning: MPI_DATATYPE_NULL 2043 // was specified but buffer 2044 // is not a null pointer 2045 2046Format String Checking 2047====================== 2048 2049Clang supports the ``format`` attribute, which indicates that the function 2050accepts a ``printf`` or ``scanf``-like format string and corresponding 2051arguments or a ``va_list`` that contains these arguments. 2052 2053Please see `GCC documentation about format attribute 2054<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ to find details 2055about attribute syntax. 2056 2057Clang implements two kinds of checks with this attribute. 2058 2059#. Clang checks that the function with the ``format`` attribute is called with 2060 a format string that uses format specifiers that are allowed, and that 2061 arguments match the format string. This is the ``-Wformat`` warning, it is 2062 on by default. 2063 2064#. Clang checks that the format string argument is a literal string. This is 2065 the ``-Wformat-nonliteral`` warning, it is off by default. 2066 2067 Clang implements this mostly the same way as GCC, but there is a difference 2068 for functions that accept a ``va_list`` argument (for example, ``vprintf``). 2069 GCC does not emit ``-Wformat-nonliteral`` warning for calls to such 2070 fuctions. Clang does not warn if the format string comes from a function 2071 parameter, where the function is annotated with a compatible attribute, 2072 otherwise it warns. For example: 2073 2074 .. code-block:: c 2075 2076 __attribute__((__format__ (__scanf__, 1, 3))) 2077 void foo(const char* s, char *buf, ...) { 2078 va_list ap; 2079 va_start(ap, buf); 2080 2081 vprintf(s, ap); // warning: format string is not a string literal 2082 } 2083 2084 In this case we warn because ``s`` contains a format string for a 2085 ``scanf``-like function, but it is passed to a ``printf``-like function. 2086 2087 If the attribute is removed, clang still warns, because the format string is 2088 not a string literal. 2089 2090 Another example: 2091 2092 .. code-block:: c 2093 2094 __attribute__((__format__ (__printf__, 1, 3))) 2095 void foo(const char* s, char *buf, ...) { 2096 va_list ap; 2097 va_start(ap, buf); 2098 2099 vprintf(s, ap); // warning 2100 } 2101 2102 In this case Clang does not warn because the format string ``s`` and 2103 the corresponding arguments are annotated. If the arguments are 2104 incorrect, the caller of ``foo`` will receive a warning. 2105