1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 <!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ --> 4 <html> 5 <head> 6 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7 <title>Clang Language Extensions</title> 8 <link type="text/css" rel="stylesheet" href="../menu.css"> 9 <link type="text/css" rel="stylesheet" href="../content.css"> 10 <style type="text/css"> 11 td { 12 vertical-align: top; 13 } 14 </style> 15 </head> 16 <body> 17 18 <!--#include virtual="../menu.html.incl"--> 19 20 <div id="content"> 21 22 <h1>Clang Language Extensions</h1> 23 24 <ul> 25 <li><a href="#intro">Introduction</a></li> 26 <li><a href="#feature_check">Feature Checking Macros</a></li> 27 <li><a href="#has_include">Include File Checking Macros</a></li> 28 <li><a href="#builtinmacros">Builtin Macros</a></li> 29 <li><a href="#vectors">Vectors and Extended Vectors</a></li> 30 <li><a href="#deprecated">Messages on <tt>deprecated</tt> and <tt>unavailable</tt> attributes</a></li> 31 <li><a href="#attributes-on-enumerators">Attributes on enumerators</a></li> 32 <li><a href="#checking_language_features">Checks for Standard Language Features</a> 33 <ul> 34 <li><a href="#cxx_exceptions">C++ exceptions</a></li> 35 <li><a href="#cxx_rtti">C++ RTTI</a></li> 36 </ul></li> 37 <li><a href="#checking_upcoming_features">Checks for Upcoming Standard Language Features</a> 38 <ul> 39 <li><a href="#cxx0x">C++11</a> 40 <ul> 41 <li><a href="#cxx_access_control_sfinae">C++11 SFINAE includes 42 access control</a></li> 43 <li><a href="#cxx_alias_templates">C++11 alias templates</a></li> 44 <li><a href="#cxx_alignas">C++11 alignment specifiers</a></li> 45 <li><a href="#cxx_attributes">C++11 attributes</a></li> 46 <li><a href="#cxx_constexpr">C++11 generalized constant expressions</a></li> 47 <li><a href="#cxx_decltype">C++11 <tt>decltype()</tt></a></li> 48 <li><a href="#cxx_default_function_template_args">C++11 default template arguments in function templates</a></li> 49 <li><a href="#cxx_delegating_constructor">C++11 delegating constructors</a></li> 50 <li><a href="#cxx_deleted_functions">C++11 deleted functions</a></li> 51 <li><a href="#cxx_explicit_conversions">C++11 explicit conversion functions</a></li> 52 <li><a href="#cxx_generalized_initializers">C++11 generalized initializers</a></li> 53 <li><a href="#cxx_implicit_moves">C++11 implicit move constructors/assignment operators</a></li> 54 <li><a href="#cxx_inheriting_constructors">C++11 inheriting constructors</a></li> 55 <li><a href="#cxx_inline_namespaces">C++11 inline namespaces</a></li> 56 <li><a href="#cxx_lambdas">C++11 lambdas</a></li> 57 <li><a href="#cxx_noexcept">C++11 noexcept specification</a></li> 58 <li><a href="#cxx_nonstatic_member_init">C++11 in-class non-static data member initialization</a></li> 59 <li><a href="#cxx_nullptr">C++11 nullptr</a></li> 60 <li><a href="#cxx_override_control">C++11 override control</a></li> 61 <li><a href="#cxx_range_for">C++11 range-based for loop</a></li> 62 <li><a href="#cxx_raw_string_literals">C++11 raw string literals</a></li> 63 <li><a href="#cxx_rvalue_references">C++11 rvalue references</a></li> 64 <li><a href="#cxx_reference_qualified_functions">C++11 reference-qualified functions</a></li> 65 <li><a href="#cxx_static_assert">C++11 <tt>static_assert()</tt></a></li> 66 <li><a href="#cxx_auto_type">C++11 type inference</a></li> 67 <li><a href="#cxx_strong_enums">C++11 strongly-typed enumerations</a></li> 68 <li><a href="#cxx_trailing_return">C++11 trailing return type</a></li> 69 <li><a href="#cxx_unicode_literals">C++11 Unicode string literals</a></li> 70 <li><a href="#cxx_unrestricted_unions">C++11 unrestricted unions</a></li> 71 <li><a href="#cxx_user_literals">C++11 user-defined literals</a></li> 72 <li><a href="#cxx_variadic_templates">C++11 variadic templates</a></li> 73 </ul></li> 74 <li><a href="#c1x">C1X</a> 75 <ul> 76 <li><a href="#c_alignas">C1X alignment specifiers</a></li> 77 <li><a href="#c_generic_selections">C1X generic selections</a></li> 78 <li><a href="#c_static_assert">C1X <tt>_Static_assert()</tt></a></li> 79 </ul></li> 80 </ul> </li> 81 <li><a href="#checking_type_traits">Checks for Type Traits</a></li> 82 <li><a href="#blocks">Blocks</a></li> 83 <li><a href="#objc_features">Objective-C Features</a> 84 <ul> 85 <li><a href="#objc_instancetype">Related result types</a></li> 86 <li><a href="#objc_arc">Automatic reference counting</a></li> 87 <li><a href="#objc_fixed_enum">Enumerations with a fixed underlying type</a></li> 88 </ul> 89 </li> 90 <li><a href="#overloading-in-c">Function Overloading in C</a></li> 91 <li><a href="#complex-list-init">Initializer lists for complex numbers in C</a></li> 92 <li><a href="#builtins">Builtin Functions</a> 93 <ul> 94 <li><a href="#__builtin_shufflevector">__builtin_shufflevector</a></li> 95 <li><a href="#__builtin_unreachable">__builtin_unreachable</a></li> 96 <li><a href="#__sync_swap">__sync_swap</a></li> 97 </ul> 98 </li> 99 <li><a href="#targetspecific">Target-Specific Extensions</a> 100 <ul> 101 <li><a href="#x86-specific">X86/X86-64 Language Extensions</a></li> 102 </ul> 103 </li> 104 <li><a href="#analyzerspecific">Static Analysis-Specific Extensions</a></li> 105 <li><a href="#threadsafety">Thread Safety Annotation Checking</a></li> 106 <ul> 107 <li><a href="#ts_noanal"><tt>no_thread_safety_analysis</tt></a></li> 108 <li><a href="#ts_lockable"><tt>lockable</tt></a></li> 109 <li><a href="#ts_scopedlockable"><tt>scoped_lockable</tt></a></li> 110 <li><a href="#ts_guardedvar"><tt>guarded_var</tt></a></li> 111 <li><a href="#ts_ptguardedvar"><tt>pt_guarded_var</tt></a></li> 112 <li><a href="#ts_guardedby"><tt>guarded_by(l)</tt></a></li> 113 <li><a href="#ts_ptguardedby"><tt>pt_guarded_by(l)</tt></a></li> 114 <li><a href="#ts_acquiredbefore"><tt>acquired_before(...)</tt></a></li> 115 <li><a href="#ts_acquiredafter"><tt>acquired_after(...)</tt></a></li> 116 <li><a href="#ts_elf"><tt>exclusive_lock_function(...)</tt></a></li> 117 <li><a href="#ts_slf"><tt>shared_lock_function(...)</tt></a></li> 118 <li><a href="#ts_etf"><tt>exclusive_trylock_function(...)</tt></a></li> 119 <li><a href="#ts_stf"><tt>shared_trylock_function(...)</tt></a></li> 120 <li><a href="#ts_uf"><tt>unlock_function(...)</tt></a></li> 121 <li><a href="#ts_lr"><tt>lock_returned(l)</tt></a></li> 122 <li><a href="#ts_le"><tt>locks_excluded(...)</tt></a></li> 123 <li><a href="#ts_elr"><tt>exclusive_locks_required(...)</tt></a></li> 124 <li><a href="#ts_slr"><tt>shared_locks_required(...)</tt></a></li> 125 </ul> 126 </ul> 127 128 <!-- ======================================================================= --> 129 <h2 id="intro">Introduction</h2> 130 <!-- ======================================================================= --> 131 132 <p>This document describes the language extensions provided by Clang. In 133 addition to the language extensions listed here, Clang aims to support a broad 134 range of GCC extensions. Please see the <a 135 href="http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html">GCC manual</a> for 136 more information on these extensions.</p> 137 138 <!-- ======================================================================= --> 139 <h2 id="feature_check">Feature Checking Macros</h2> 140 <!-- ======================================================================= --> 141 142 <p>Language extensions can be very useful, but only if you know you can depend 143 on them. In order to allow fine-grain features checks, we support three builtin 144 function-like macros. This allows you to directly test for a feature in your 145 code without having to resort to something like autoconf or fragile "compiler 146 version checks".</p> 147 148 <!-- ======================================================================= --> 149 <h3><a name="__has_builtin">__has_builtin</a></h3> 150 <!-- ======================================================================= --> 151 152 <p>This function-like macro takes a single identifier argument that is the name 153 of a builtin function. It evaluates to 1 if the builtin is supported or 0 if 154 not. It can be used like this:</p> 155 156 <blockquote> 157 <pre> 158 #ifndef __has_builtin // Optional of course. 159 #define __has_builtin(x) 0 // Compatibility with non-clang compilers. 160 #endif 161 162 ... 163 #if __has_builtin(__builtin_trap) 164 __builtin_trap(); 165 #else 166 abort(); 167 #endif 168 ... 169 </pre> 170 </blockquote> 171 172 173 <!-- ======================================================================= --> 174 <h3><a name="__has_feature_extension"> __has_feature and __has_extension</a></h3> 175 <!-- ======================================================================= --> 176 177 <p>These function-like macros take a single identifier argument that is the 178 name of a feature. <code>__has_feature</code> evaluates to 1 if the feature 179 is both supported by Clang and standardized in the current language standard 180 or 0 if not (but see <a href="#has_feature_back_compat">below</a>), while 181 <code>__has_extension</code> evaluates to 1 if the feature is supported by 182 Clang in the current language (either as a language extension or a standard 183 language feature) or 0 if not. They can be used like this:</p> 184 185 <blockquote> 186 <pre> 187 #ifndef __has_feature // Optional of course. 188 #define __has_feature(x) 0 // Compatibility with non-clang compilers. 189 #endif 190 #ifndef __has_extension 191 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers. 192 #endif 193 194 ... 195 #if __has_feature(cxx_rvalue_references) 196 // This code will only be compiled with the -std=c++11 and -std=gnu++11 197 // options, because rvalue references are only standardized in C++11. 198 #endif 199 200 #if __has_extension(cxx_rvalue_references) 201 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98 202 // and -std=gnu++98 options, because rvalue references are supported as a 203 // language extension in C++98. 204 #endif 205 </pre> 206 </blockquote> 207 208 <p id="has_feature_back_compat">For backwards compatibility reasons, 209 <code>__has_feature</code> can also be used to test for support for 210 non-standardized features, i.e. features not prefixed <code>c_</code>, 211 <code>cxx_</code> or <code>objc_</code>.</p> 212 213 <p>If the <code>-pedantic-errors</code> option is given, 214 <code>__has_extension</code> is equivalent to <code>__has_feature</code>.</p> 215 216 <p>The feature tag is described along with the language feature below.</p> 217 218 <!-- ======================================================================= --> 219 <h3><a name="__has_attribute">__has_attribute</a></h3> 220 <!-- ======================================================================= --> 221 222 <p>This function-like macro takes a single identifier argument that is the name 223 of an attribute. It evaluates to 1 if the attribute is supported or 0 if not. It 224 can be used like this:</p> 225 226 <blockquote> 227 <pre> 228 #ifndef __has_attribute // Optional of course. 229 #define __has_attribute(x) 0 // Compatibility with non-clang compilers. 230 #endif 231 232 ... 233 #if __has_attribute(always_inline) 234 #define ALWAYS_INLINE __attribute__((always_inline)) 235 #else 236 #define ALWAYS_INLINE 237 #endif 238 ... 239 </pre> 240 </blockquote> 241 242 <!-- ======================================================================= --> 243 <h2 id="has_include">Include File Checking Macros</h2> 244 <!-- ======================================================================= --> 245 246 <p>Not all developments systems have the same include files. 247 The <a href="#__has_include">__has_include</a> and 248 <a href="#__has_include_next">__has_include_next</a> macros allow you to 249 check for the existence of an include file before doing 250 a possibly failing #include directive.</p> 251 252 <!-- ======================================================================= --> 253 <h3><a name="__has_include">__has_include</a></h3> 254 <!-- ======================================================================= --> 255 256 <p>This function-like macro takes a single file name string argument that 257 is the name of an include file. It evaluates to 1 if the file can 258 be found using the include paths, or 0 otherwise:</p> 259 260 <blockquote> 261 <pre> 262 // Note the two possible file name string formats. 263 #if __has_include("myinclude.h") && __has_include(<stdint.h>) 264 # include "myinclude.h" 265 #endif 266 267 // To avoid problem with non-clang compilers not having this macro. 268 #if defined(__has_include) && __has_include("myinclude.h") 269 # include "myinclude.h" 270 #endif 271 </pre> 272 </blockquote> 273 274 <p>To test for this feature, use #if defined(__has_include).</p> 275 276 <!-- ======================================================================= --> 277 <h3><a name="__has_include_next">__has_include_next</a></h3> 278 <!-- ======================================================================= --> 279 280 <p>This function-like macro takes a single file name string argument that 281 is the name of an include file. It is like __has_include except that it 282 looks for the second instance of the given file found in the include 283 paths. It evaluates to 1 if the second instance of the file can 284 be found using the include paths, or 0 otherwise:</p> 285 286 <blockquote> 287 <pre> 288 // Note the two possible file name string formats. 289 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>) 290 # include_next "myinclude.h" 291 #endif 292 293 // To avoid problem with non-clang compilers not having this macro. 294 #if defined(__has_include_next) && __has_include_next("myinclude.h") 295 # include_next "myinclude.h" 296 #endif 297 </pre> 298 </blockquote> 299 300 <p>Note that __has_include_next, like the GNU extension 301 #include_next directive, is intended for use in headers only, 302 and will issue a warning if used in the top-level compilation 303 file. A warning will also be issued if an absolute path 304 is used in the file argument.</p> 305 306 307 <!-- ======================================================================= --> 308 <h3><a name="__has_warning">__has_warning</a></h3> 309 <!-- ======================================================================= --> 310 311 <p>This function-like macro takes a string literal that represents a command 312 line option for a warning and returns true if that is a valid warning 313 option.</p> 314 315 <blockquote> 316 <pre> 317 #if __has_warning("-Wformat") 318 ... 319 #endif 320 </pre> 321 </blockquote> 322 323 <!-- ======================================================================= --> 324 <h2 id="builtinmacros">Builtin Macros</h2> 325 <!-- ======================================================================= --> 326 327 <dl> 328 <dt><code>__BASE_FILE__</code></dt> 329 <dd>Defined to a string that contains the name of the main input 330 file passed to Clang.</dd> 331 332 <dt><code>__COUNTER__</code></dt> 333 <dd>Defined to an integer value that starts at zero and is 334 incremented each time the <code>__COUNTER__</code> macro is 335 expanded.</dd> 336 337 <dt><code>__INCLUDE_LEVEL__</code></dt> 338 <dd>Defined to an integral value that is the include depth of the 339 file currently being translated. For the main file, this value is 340 zero.</dd> 341 342 <dt><code>__TIMESTAMP__</code></dt> 343 <dd>Defined to the date and time of the last modification of the 344 current source file.</dd> 345 346 <dt><code>__clang__</code></dt> 347 <dd>Defined when compiling with Clang</dd> 348 349 <dt><code>__clang_major__</code></dt> 350 <dd>Defined to the major version number of Clang (e.g., the 2 in 351 2.0.1).</dd> 352 353 <dt><code>__clang_minor__</code></dt> 354 <dd>Defined to the minor version number of Clang (e.g., the 0 in 355 2.0.1).</dd> 356 357 <dt><code>__clang_patchlevel__</code></dt> 358 <dd>Defined to the patch level of Clang (e.g., the 1 in 2.0.1).</dd> 359 360 <dt><code>__clang_version__</code></dt> 361 <dd>Defined to a string that captures the Clang version, including 362 the Subversion tag or revision number, e.g., "1.5 (trunk 363 102332)".</dd> 364 </dl> 365 366 <!-- ======================================================================= --> 367 <h2 id="vectors">Vectors and Extended Vectors</h2> 368 <!-- ======================================================================= --> 369 370 <p>Supports the GCC vector extensions, plus some stuff like V[1].</p> 371 372 <p>Also supports <tt>ext_vector</tt>, which additionally support for V.xyzw 373 syntax and other tidbits as seen in OpenCL. An example is:</p> 374 375 <blockquote> 376 <pre> 377 typedef float float4 <b>__attribute__((ext_vector_type(4)))</b>; 378 typedef float float2 <b>__attribute__((ext_vector_type(2)))</b>; 379 380 float4 foo(float2 a, float2 b) { 381 float4 c; 382 c.xz = a; 383 c.yw = b; 384 return c; 385 } 386 </pre> 387 </blockquote> 388 389 <p>Query for this feature with __has_extension(attribute_ext_vector_type).</p> 390 391 <p>See also <a href="#__builtin_shufflevector">__builtin_shufflevector</a>.</p> 392 393 <!-- ======================================================================= --> 394 <h2 id="deprecated">Messages on <tt>deprecated</tt> and <tt>unavailable</tt> Attributes</h2> 395 <!-- ======================================================================= --> 396 397 <p>An optional string message can be added to the <tt>deprecated</tt> 398 and <tt>unavailable</tt> attributes. For example:</p> 399 400 <blockquote> 401 <pre>void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));</pre> 402 </blockquote> 403 404 <p>If the deprecated or unavailable declaration is used, the message 405 will be incorporated into the appropriate diagnostic:</p> 406 407 <blockquote> 408 <pre>harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! [-Wdeprecated-declarations] 409 explode(); 410 ^</pre> 411 </blockquote> 412 413 <p>Query for this feature 414 with <tt>__has_extension(attribute_deprecated_with_message)</tt> 415 and <tt>__has_extension(attribute_unavailable_with_message)</tt>.</p> 416 417 <!-- ======================================================================= --> 418 <h2 id="attributes-on-enumerators">Attributes on Enumerators</h2> 419 <!-- ======================================================================= --> 420 421 <p>Clang allows attributes to be written on individual enumerators. 422 This allows enumerators to be deprecated, made unavailable, etc. The 423 attribute must appear after the enumerator name and before any 424 initializer, like so:</p> 425 426 <blockquote> 427 <pre>enum OperationMode { 428 OM_Invalid, 429 OM_Normal, 430 OM_Terrified __attribute__((deprecated)), 431 OM_AbortOnError __attribute__((deprecated)) = 4 432 };</pre> 433 </blockquote> 434 435 <p>Attributes on the <tt>enum</tt> declaration do not apply to 436 individual enumerators.</p> 437 438 <p>Query for this feature with <tt>__has_extension(enumerator_attributes)</tt>.</p> 439 440 <!-- ======================================================================= --> 441 <h2 id="checking_language_features">Checks for Standard Language Features</h2> 442 <!-- ======================================================================= --> 443 444 <p>The <tt>__has_feature</tt> macro can be used to query if certain standard language features are 445 enabled. Those features are listed here.</p> 446 447 <h3 id="cxx_exceptions">C++ exceptions</h3> 448 449 <p>Use <tt>__has_feature(cxx_exceptions)</tt> to determine if C++ exceptions have been enabled. For 450 example, compiling code with <tt>-fexceptions</tt> enables C++ exceptions.</p> 451 452 <h3 id="cxx_rtti">C++ RTTI</h3> 453 454 <p>Use <tt>__has_feature(cxx_rtti)</tt> to determine if C++ RTTI has been enabled. For example, 455 compiling code with <tt>-fno-rtti</tt> disables the use of RTTI.</p> 456 457 <!-- ======================================================================= --> 458 <h2 id="checking_upcoming_features">Checks for Upcoming Standard Language Features</h2> 459 <!-- ======================================================================= --> 460 461 <p>The <tt>__has_feature</tt> or <tt>__has_extension</tt> macros can be used 462 to query if certain upcoming standard language features are enabled. Those 463 features are listed here. Features that are not yet implemented will be 464 noted.</p> 465 466 <h3 id="cxx0x">C++11</h3> 467 468 <p>The features listed below are slated for inclusion in the upcoming 469 C++11 standard. As a result, all these features are enabled 470 with the <tt>-std=c++11</tt> option when compiling C++ code.</p> 471 472 <h4 id="cxx_access_control_sfinae">C++11 SFINAE includes access control</h4> 473 474 <p>Use <tt>__has_feature(cxx_access_control_sfinae)</tt> or <tt>__has_extension(cxx_access_control_sfinae)</tt> to determine whether access-control errors (e.g., calling a private constructor) are considered to be template argument deduction errors (aka SFINAE errors), per <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170">C++ DR1170</a>.</p> 475 476 <h4 id="cxx_alias_templates">C++11 alias templates</h4> 477 478 <p>Use <tt>__has_feature(cxx_alias_templates)</tt> or 479 <tt>__has_extension(cxx_alias_templates)</tt> to determine if support for 480 C++11's alias declarations and alias templates is enabled.</p> 481 482 <h4 id="cxx_alignas">C++11 alignment specifiers</h4> 483 484 <p>Use <tt>__has_feature(cxx_alignas)</tt> or 485 <tt>__has_extension(cxx_alignas)</tt> to determine if support for alignment 486 specifiers using <tt>alignas</tt> is enabled.</p> 487 488 <h4 id="cxx_attributes">C++11 attributes</h4> 489 490 <p>Use <tt>__has_feature(cxx_attributes)</tt> or 491 <tt>__has_extension(cxx_attributes)</tt> to determine if support for attribute 492 parsing with C++11's square bracket notation is enabled.</p> 493 494 <h4 id="cxx_constexpr">C++11 generalized constant expressions</h4> 495 496 <p>Use <tt>__has_feature(cxx_constexpr)</tt> to determine if support 497 for generalized constant expressions (e.g., <tt>constexpr</tt>) is 498 enabled. Clang does not currently implement this feature.</p> 499 500 <h4 id="cxx_decltype">C++11 <tt>decltype()</tt></h4> 501 502 <p>Use <tt>__has_feature(cxx_decltype)</tt> or 503 <tt>__has_extension(cxx_decltype)</tt> to determine if support for the 504 <tt>decltype()</tt> specifier is enabled.</p> 505 506 <h4 id="cxx_default_function_template_args">C++11 default template arguments in function templates</h4> 507 508 <p>Use <tt>__has_feature(cxx_default_function_template_args)</tt> or 509 <tt>__has_extension(cxx_default_function_template_args)</tt> to determine 510 if support for default template arguments in function templates is enabled.</p> 511 512 <h4 id="cxx_delegating_constructors">C++11 delegating constructors</h4> 513 514 <p>Use <tt>__has_feature(cxx_delegating_constructors)</tt> to determine if 515 support for delegating constructors is enabled.</p> 516 517 <h4 id="cxx_deleted_functions">C++11 <tt>delete</tt>d functions</h4> 518 519 <p>Use <tt>__has_feature(cxx_deleted_functions)</tt> or 520 <tt>__has_extension(cxx_deleted_functions)</tt> to determine if support for 521 deleted function definitions (with <tt>= delete</tt>) is enabled.</p> 522 523 <h4 id="cxx_explicit_conversions">C++11 explicit conversion functions</h3> 524 <p>Use <tt>__has_feature(cxx_explicit_conversions)</tt> to determine if support for <tt>explicit</tt> conversion functions is enabled.</p> 525 526 <h4 id="cxx_generalized_initializers">C++11 generalized initializers</h4> 527 528 <p>Use <tt>__has_feature(cxx_generalized_initializers)</tt> to determine if 529 support for generalized initializers (using braced lists and 530 <tt>std::initializer_list</tt>) is enabled. Clang does not currently implement 531 this feature.</p> 532 533 <h4 id="cxx_implicit_moves">C++11 implicit move constructors/assignment operators</h4> 534 535 <p>Use <tt>__has_feature(cxx_implicit_moves)</tt> to determine if Clang will 536 implicitly generate move constructors and move assignment operators where needed.</p> 537 538 <h4 id="cxx_inheriting_constructors">C++11 inheriting constructors</h4> 539 540 <p>Use <tt>__has_feature(cxx_inheriting_constructors)</tt> to determine if support for inheriting constructors is enabled. Clang does not currently implement this feature.</p> 541 542 <h4 id="cxx_inline_namespaces">C++11 inline namespaces</h4> 543 544 <p>Use <tt>__has_feature(cxx_inline_namespaces)</tt> or 545 <tt>__has_extension(cxx_inline_namespaces)</tt> to determine if support for 546 inline namespaces is enabled.</p> 547 548 <h4 id="cxx_lambdas">C++11 lambdas</h4> 549 550 <p>Use <tt>__has_feature(cxx_lambdas)</tt> or 551 <tt>__has_extension(cxx_lambdas)</tt> to determine if support for lambdas 552 is enabled. Clang does not currently implement this feature.</p> 553 554 <h4 id="cxx_noexcept">C++11 noexcept</h4> 555 556 <p>Use <tt>__has_feature(cxx_noexcept)</tt> or 557 <tt>__has_extension(cxx_noexcept)</tt> to determine if support for noexcept 558 exception specifications is enabled.</p> 559 560 <h4 id="cxx_nonstatic_member_init">C++11 in-class non-static data member initialization</h4> 561 562 <p>Use <tt>__has_feature(cxx_nonstatic_member_init)</tt> to determine whether in-class initialization of non-static data members is enabled.</p> 563 564 <h4 id="cxx_nullptr">C++11 <tt>nullptr</tt></h4> 565 566 <p>Use <tt>__has_feature(cxx_nullptr)</tt> or 567 <tt>__has_extension(cxx_nullptr)</tt> to determine if support for 568 <tt>nullptr</tt> is enabled.</p> 569 570 <h4 id="cxx_override_control">C++11 <tt>override control</tt></h4> 571 572 <p>Use <tt>__has_feature(cxx_override_control)</tt> or 573 <tt>__has_extension(cxx_override_control)</tt> to determine if support for 574 the override control keywords is enabled.</p> 575 576 <h4 id="cxx_reference_qualified_functions">C++11 reference-qualified functions</h4> 577 <p>Use <tt>__has_feature(cxx_reference_qualified_functions)</tt> or 578 <tt>__has_extension(cxx_reference_qualified_functions)</tt> to determine 579 if support for reference-qualified functions (e.g., member functions with 580 <code>&</code> or <code>&&</code> applied to <code>*this</code>) 581 is enabled.</p> 582 583 <h4 id="cxx_range_for">C++11 range-based <tt>for</tt> loop</h4> 584 585 <p>Use <tt>__has_feature(cxx_range_for)</tt> or 586 <tt>__has_extension(cxx_range_for)</tt> to determine if support for the 587 range-based for loop is enabled. </p> 588 589 <h4 id="cxx_raw_string_literals">C++11 raw string literals</h4> 590 <p>Use <tt>__has_feature(cxx_raw_string_literals)</tt> to determine if support for raw string literals (e.g., <tt>R"foo\bar"</tt>) is enabled.</p> 591 592 <h4 id="cxx_rvalue_references">C++11 rvalue references</h4> 593 594 <p>Use <tt>__has_feature(cxx_rvalue_references)</tt> or 595 <tt>__has_extension(cxx_rvalue_references)</tt> to determine if support for 596 rvalue references is enabled. </p> 597 598 <h4 id="cxx_static_assert">C++11 <tt>static_assert()</tt></h4> 599 600 <p>Use <tt>__has_feature(cxx_static_assert)</tt> or 601 <tt>__has_extension(cxx_static_assert)</tt> to determine if support for 602 compile-time assertions using <tt>static_assert</tt> is enabled.</p> 603 604 <h4 id="cxx_auto_type">C++11 type inference</h4> 605 606 <p>Use <tt>__has_feature(cxx_auto_type)</tt> or 607 <tt>__has_extension(cxx_auto_type)</tt> to determine C++11 type inference is 608 supported using the <tt>auto</tt> specifier. If this is disabled, <tt>auto</tt> 609 will instead be a storage class specifier, as in C or C++98.</p> 610 611 <h4 id="cxx_strong_enums">C++11 strongly typed enumerations</h4> 612 613 <p>Use <tt>__has_feature(cxx_strong_enums)</tt> or 614 <tt>__has_extension(cxx_strong_enums)</tt> to determine if support for 615 strongly typed, scoped enumerations is enabled.</p> 616 617 <h4 id="cxx_trailing_return">C++11 trailing return type</h4> 618 619 <p>Use <tt>__has_feature(cxx_trailing_return)</tt> or 620 <tt>__has_extension(cxx_trailing_return)</tt> to determine if support for the 621 alternate function declaration syntax with trailing return type is enabled.</p> 622 623 <h4 id="cxx_unicode_literals">C++11 Unicode string literals</h4> 624 <p>Use <tt>__has_feature(cxx_unicode_literals)</tt> to determine if 625 support for Unicode string literals is enabled.</p> 626 627 <h4 id="cxx_unrestricted_unions">C++11 unrestricted unions</h4> 628 629 <p>Use <tt>__has_feature(cxx_unrestricted_unions)</tt> to determine if support for unrestricted unions is enabled. Clang does not currently support this feature.</p> 630 631 <h4 id="cxx_user_literals">C++11 user-defined literals</h4> 632 633 <p>Use <tt>__has_feature(cxx_user_literals)</tt> to determine if support for user-defined literals is enabled. Clang does not currently support this feature.</p> 634 635 <h4 id="cxx_variadic_templates">C++11 variadic templates</h4> 636 637 <p>Use <tt>__has_feature(cxx_variadic_templates)</tt> or 638 <tt>__has_extension(cxx_variadic_templates)</tt> to determine if support 639 for variadic templates is enabled.</p> 640 641 <h3 id="c1x">C1X</h3> 642 643 <p>The features listed below are slated for inclusion in the upcoming 644 C1X standard. As a result, all these features are enabled 645 with the <tt>-std=c1x</tt> option when compiling C code.</p> 646 647 <h4 id="c_alignas">C1X alignment specifiers</h4> 648 649 <p>Use <tt>__has_feature(c_alignas)</tt> or <tt>__has_extension(c_alignas)</tt> 650 to determine if support for alignment specifiers using <tt>_Alignas</tt> 651 is enabled.</p> 652 653 <h4 id="c_generic_selections">C1X generic selections</h4> 654 655 <p>Use <tt>__has_feature(c_generic_selections)</tt> or 656 <tt>__has_extension(c_generic_selections)</tt> to determine if support for 657 generic selections is enabled.</p> 658 659 <p>As an extension, the C1X generic selection expression is available in all 660 languages supported by Clang. The syntax is the same as that given in the 661 C1X draft standard.</p> 662 663 <p>In C, type compatibility is decided according to the rules given in the 664 appropriate standard, but in C++, which lacks the type compatibility rules 665 used in C, types are considered compatible only if they are equivalent.</p> 666 667 <h4 id="c_static_assert">C1X <tt>_Static_assert()</tt></h4> 668 669 <p>Use <tt>__has_feature(c_static_assert)</tt> or 670 <tt>__has_extension(c_static_assert)</tt> to determine if support for 671 compile-time assertions using <tt>_Static_assert</tt> is enabled.</p> 672 673 <!-- ======================================================================= --> 674 <h2 id="checking_type_traits">Checks for Type Traits</h2> 675 <!-- ======================================================================= --> 676 677 <p>Clang supports the <a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html">GNU C++ type traits</a> and a subset of the <a href="http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx">Microsoft Visual C++ Type traits</a>. For each supported type trait <code>__X</code>, <code>__has_extension(X)</code> indicates the presence of the type trait. For example: 678 <blockquote> 679 <pre> 680 #if __has_extension(is_convertible_to) 681 template<typename From, typename To> 682 struct is_convertible_to { 683 static const bool value = __is_convertible_to(From, To); 684 }; 685 #else 686 // Emulate type trait 687 #endif 688 </pre> 689 </blockquote> 690 691 <p>The following type traits are supported by Clang:</p> 692 <ul> 693 <li><code>__has_nothrow_assign</code> (GNU, Microsoft)</li> 694 <li><code>__has_nothrow_copy</code> (GNU, Microsoft)</li> 695 <li><code>__has_nothrow_constructor</code> (GNU, Microsoft)</li> 696 <li><code>__has_trivial_assign</code> (GNU, Microsoft)</li> 697 <li><code>__has_trivial_copy</code> (GNU, Microsoft)</li> 698 <li><code>__has_trivial_constructor</code> (GNU, Microsoft)</li> 699 <li><code>__has_trivial_destructor</code> (GNU, Microsoft)</li> 700 <li><code>__has_virtual_destructor</code> (GNU, Microsoft)</li> 701 <li><code>__is_abstract</code> (GNU, Microsoft)</li> 702 <li><code>__is_base_of</code> (GNU, Microsoft)</li> 703 <li><code>__is_class</code> (GNU, Microsoft)</li> 704 <li><code>__is_convertible_to</code> (Microsoft)</li> 705 <li><code>__is_empty</code> (GNU, Microsoft)</li> 706 <li><code>__is_enum</code> (GNU, Microsoft)</li> 707 <li><code>__is_pod</code> (GNU, Microsoft)</li> 708 <li><code>__is_polymorphic</code> (GNU, Microsoft)</li> 709 <li><code>__is_union</code> (GNU, Microsoft)</li> 710 <li><code>__is_literal(type)</code>: Determines whether the given type is a literal type</li> 711 <li><code>__underlying_type(type)</code>: Retrieves the underlying type for a given <code>enum</code> type. This trait is required to implement the C++11 standard library.</li> 712 </ul> 713 714 <!-- ======================================================================= --> 715 <h2 id="blocks">Blocks</h2> 716 <!-- ======================================================================= --> 717 718 <p>The syntax and high level language feature description is in <a 719 href="BlockLanguageSpec.txt">BlockLanguageSpec.txt</a>. Implementation and ABI 720 details for the clang implementation are in <a 721 href="Block-ABI-Apple.txt">Block-ABI-Apple.txt</a>.</p> 722 723 724 <p>Query for this feature with __has_extension(blocks).</p> 725 726 <!-- ======================================================================= --> 727 <h2 id="objc_features">Objective-C Features</h2> 728 <!-- ======================================================================= --> 729 730 <h3 id="objc_instancetype">Related result types</h3> 731 732 <p>According to Cocoa conventions, Objective-C methods with certain names ("init", "alloc", etc.) always return objects that are an instance of the receiving class's type. Such methods are said to have a "related result type", meaning that a message send to one of these methods will have the same static type as an instance of the receiver class. For example, given the following classes:</p> 733 734 <blockquote> 735 <pre> 736 @interface NSObject 737 + (id)alloc; 738 - (id)init; 739 @end 740 741 @interface NSArray : NSObject 742 @end 743 </pre> 744 </blockquote> 745 746 <p>and this common initialization pattern</p> 747 748 <blockquote> 749 <pre> 750 NSArray *array = [[NSArray alloc] init]; 751 </pre> 752 </blockquote> 753 754 <p>the type of the expression <code>[NSArray alloc]</code> is 755 <code>NSArray*</code> because <code>alloc</code> implicitly has a 756 related result type. Similarly, the type of the expression 757 <code>[[NSArray alloc] init]</code> is <code>NSArray*</code>, since 758 <code>init</code> has a related result type and its receiver is known 759 to have the type <code>NSArray *</code>. If neither <code>alloc</code> nor <code>init</code> had a related result type, the expressions would have had type <code>id</code>, as declared in the method signature.</p> 760 761 <p>A method with a related result type can be declared by using the 762 type <tt>instancetype</tt> as its result type. <tt>instancetype</tt> 763 is a contextual keyword that is only permitted in the result type of 764 an Objective-C method, e.g.</p> 765 766 <pre> 767 @interface A 768 + (<b>instancetype</b>)constructAnA; 769 @end 770 </pre> 771 772 <p>The related result type can also be inferred for some methods. 773 To determine whether a method has an inferred related result type, the first 774 word in the camel-case selector (e.g., "init" in "initWithObjects") is 775 considered, and the method will a related result type if its return 776 type is compatible with the type of its class and if</p> 777 778 <ul> 779 780 <li>the first word is "alloc" or "new", and the method is a class 781 method, or</li> 782 783 <li>the first word is "autorelease", "init", "retain", or "self", 784 and the method is an instance method.</li> 785 786 </ul> 787 788 <p>If a method with a related result type is overridden by a subclass 789 method, the subclass method must also return a type that is compatible 790 with the subclass type. For example:</p> 791 792 <blockquote> 793 <pre> 794 @interface NSString : NSObject 795 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 796 @end 797 </pre> 798 </blockquote> 799 800 <p>Related result types only affect the type of a message send or 801 property access via the given method. In all other respects, a method 802 with a related result type is treated the same way as method that 803 returns <tt>id</tt>.</p> 804 805 <p>Use <tt>__has_feature(objc_instancetype)</tt> to determine whether 806 the <tt>instancetype</tt> contextual keyword is available.</p> 807 808 <!-- ======================================================================= --> 809 <h2 id="objc_arc">Automatic reference counting </h2> 810 <!-- ======================================================================= --> 811 812 <p>Clang provides support for <a href="AutomaticReferenceCounting.html">automated reference counting</a> in Objective-C, which eliminates the need for manual retain/release/autorelease message sends. There are two feature macros associated with automatic reference counting: <code>__has_feature(objc_arc)</code> indicates the availability of automated reference counting in general, while <code>__has_feature(objc_arc_weak)</code> indicates that automated reference counting also includes support for <code>__weak</code> pointers to Objective-C objects.</p> 813 814 <!-- ======================================================================= --> 815 <h2 id="objc_fixed_enum">Enumerations with a fixed underlying type</h2> 816 <!-- ======================================================================= --> 817 818 <p>Clang provides support for C++11 enumerations with a fixed 819 underlying type within Objective-C. For example, one can write an 820 enumeration type as:</p> 821 822 <pre> 823 typedef enum : unsigned char { Red, Green, Blue } Color; 824 </pre> 825 826 <p>This specifies that the underlying type, which is used to store the 827 enumeration value, is <tt>unsigned char</tt>.</p> 828 829 <p>Use <tt>__has_feature(objc_fixed_enum)</tt> to determine whether 830 support for fixed underlying types is available in Objective-C.</p> 831 832 <!-- ======================================================================= --> 833 <h2 id="overloading-in-c">Function Overloading in C</h2> 834 <!-- ======================================================================= --> 835 836 <p>Clang provides support for C++ function overloading in C. Function 837 overloading in C is introduced using the <tt>overloadable</tt> attribute. For 838 example, one might provide several overloaded versions of a <tt>tgsin</tt> 839 function that invokes the appropriate standard function computing the sine of a 840 value with <tt>float</tt>, <tt>double</tt>, or <tt>long double</tt> 841 precision:</p> 842 843 <blockquote> 844 <pre> 845 #include <math.h> 846 float <b>__attribute__((overloadable))</b> tgsin(float x) { return sinf(x); } 847 double <b>__attribute__((overloadable))</b> tgsin(double x) { return sin(x); } 848 long double <b>__attribute__((overloadable))</b> tgsin(long double x) { return sinl(x); } 849 </pre> 850 </blockquote> 851 852 <p>Given these declarations, one can call <tt>tgsin</tt> with a 853 <tt>float</tt> value to receive a <tt>float</tt> result, with a 854 <tt>double</tt> to receive a <tt>double</tt> result, etc. Function 855 overloading in C follows the rules of C++ function overloading to pick 856 the best overload given the call arguments, with a few C-specific 857 semantics:</p> 858 <ul> 859 <li>Conversion from <tt>float</tt> or <tt>double</tt> to <tt>long 860 double</tt> is ranked as a floating-point promotion (per C99) rather 861 than as a floating-point conversion (as in C++).</li> 862 863 <li>A conversion from a pointer of type <tt>T*</tt> to a pointer of type 864 <tt>U*</tt> is considered a pointer conversion (with conversion 865 rank) if <tt>T</tt> and <tt>U</tt> are compatible types.</li> 866 867 <li>A conversion from type <tt>T</tt> to a value of type <tt>U</tt> 868 is permitted if <tt>T</tt> and <tt>U</tt> are compatible types. This 869 conversion is given "conversion" rank.</li> 870 </ul> 871 872 <p>The declaration of <tt>overloadable</tt> functions is restricted to 873 function declarations and definitions. Most importantly, if any 874 function with a given name is given the <tt>overloadable</tt> 875 attribute, then all function declarations and definitions with that 876 name (and in that scope) must have the <tt>overloadable</tt> 877 attribute. This rule even applies to redeclarations of functions whose original 878 declaration had the <tt>overloadable</tt> attribute, e.g.,</p> 879 880 <blockquote> 881 <pre> 882 int f(int) __attribute__((overloadable)); 883 float f(float); <i>// error: declaration of "f" must have the "overloadable" attribute</i> 884 885 int g(int) __attribute__((overloadable)); 886 int g(int) { } <i>// error: redeclaration of "g" must also have the "overloadable" attribute</i> 887 </pre> 888 </blockquote> 889 890 <p>Functions marked <tt>overloadable</tt> must have 891 prototypes. Therefore, the following code is ill-formed:</p> 892 893 <blockquote> 894 <pre> 895 int h() __attribute__((overloadable)); <i>// error: h does not have a prototype</i> 896 </pre> 897 </blockquote> 898 899 <p>However, <tt>overloadable</tt> functions are allowed to use a 900 ellipsis even if there are no named parameters (as is permitted in C++). This feature is particularly useful when combined with the <tt>unavailable</tt> attribute:</p> 901 902 <blockquote> 903 <pre> 904 void honeypot(...) __attribute__((overloadable, unavailable)); <i>// calling me is an error</i> 905 </pre> 906 </blockquote> 907 908 <p>Functions declared with the <tt>overloadable</tt> attribute have 909 their names mangled according to the same rules as C++ function 910 names. For example, the three <tt>tgsin</tt> functions in our 911 motivating example get the mangled names <tt>_Z5tgsinf</tt>, 912 <tt>_Z5tgsind</tt>, and <tt>_Z5tgsine</tt>, respectively. There are two 913 caveats to this use of name mangling:</p> 914 915 <ul> 916 917 <li>Future versions of Clang may change the name mangling of 918 functions overloaded in C, so you should not depend on an specific 919 mangling. To be completely safe, we strongly urge the use of 920 <tt>static inline</tt> with <tt>overloadable</tt> functions.</li> 921 922 <li>The <tt>overloadable</tt> attribute has almost no meaning when 923 used in C++, because names will already be mangled and functions are 924 already overloadable. However, when an <tt>overloadable</tt> 925 function occurs within an <tt>extern "C"</tt> linkage specification, 926 it's name <i>will</i> be mangled in the same way as it would in 927 C.</li> 928 </ul> 929 930 <p>Query for this feature with __has_extension(attribute_overloadable).</p> 931 932 <!-- ======================================================================= --> 933 <h2 id="complex-list-init">Initializer lists for complex numbers in C</h2> 934 <!-- ======================================================================= --> 935 936 <p>clang supports an extension which allows the following in C:</p> 937 938 <blockquote> 939 <pre> 940 #include <math.h> 941 #include <complex.h> 942 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf) 943 </pre> 944 </blockquote> 945 946 <p>This construct is useful because there is no way to separately 947 initialize the real and imaginary parts of a complex variable in 948 standard C, given that clang does not support <code>_Imaginary</code>. 949 (clang also supports the <code>__real__</code> and <code>__imag__</code> 950 extensions from gcc, which help in some cases, but are not usable in 951 static initializers.) 952 953 <p>Note that this extension does not allow eliding the braces; the 954 meaning of the following two lines is different:</p> 955 956 <blockquote> 957 <pre> 958 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1) 959 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0) 960 </pre> 961 </blockquote> 962 963 <p>This extension also works in C++ mode, as far as that goes, but does not 964 apply to the C++ <code>std::complex</code>. (In C++11, list 965 initialization allows the same syntax to be used with 966 <code>std::complex</code> with the same meaning.) 967 968 <!-- ======================================================================= --> 969 <h2 id="builtins">Builtin Functions</h2> 970 <!-- ======================================================================= --> 971 972 <p>Clang supports a number of builtin library functions with the same syntax as 973 GCC, including things like <tt>__builtin_nan</tt>, 974 <tt>__builtin_constant_p</tt>, <tt>__builtin_choose_expr</tt>, 975 <tt>__builtin_types_compatible_p</tt>, <tt>__sync_fetch_and_add</tt>, etc. In 976 addition to the GCC builtins, Clang supports a number of builtins that GCC does 977 not, which are listed here.</p> 978 979 <p>Please note that Clang does not and will not support all of the GCC builtins 980 for vector operations. Instead of using builtins, you should use the functions 981 defined in target-specific header files like <tt><xmmintrin.h></tt>, which 982 define portable wrappers for these. Many of the Clang versions of these 983 functions are implemented directly in terms of <a href="#vectors">extended 984 vector support</a> instead of builtins, in order to reduce the number of 985 builtins that we need to implement.</p> 986 987 <!-- ======================================================================= --> 988 <h3><a name="__builtin_shufflevector">__builtin_shufflevector</a></h3> 989 <!-- ======================================================================= --> 990 991 <p><tt>__builtin_shufflevector</tt> is used to express generic vector 992 permutation/shuffle/swizzle operations. This builtin is also very important for 993 the implementation of various target-specific header files like 994 <tt><xmmintrin.h></tt>. 995 </p> 996 997 <p><b>Syntax:</b></p> 998 999 <pre> 1000 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 1001 </pre> 1002 1003 <p><b>Examples:</b></p> 1004 1005 <pre> 1006 // Identity operation - return 4-element vector V1. 1007 __builtin_shufflevector(V1, V1, 0, 1, 2, 3) 1008 1009 // "Splat" element 0 of V1 into a 4-element result. 1010 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 1011 1012 // Reverse 4-element vector V1. 1013 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 1014 1015 // Concatenate every other element of 4-element vectors V1 and V2. 1016 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 1017 1018 // Concatenate every other element of 8-element vectors V1 and V2. 1019 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 1020 </pre> 1021 1022 <p><b>Description:</b></p> 1023 1024 <p>The first two arguments to __builtin_shufflevector are vectors that have the 1025 same element type. The remaining arguments are a list of integers that specify 1026 the elements indices of the first two vectors that should be extracted and 1027 returned in a new vector. These element indices are numbered sequentially 1028 starting with the first vector, continuing into the second vector. Thus, if 1029 vec1 is a 4-element vector, index 5 would refer to the second element of vec2. 1030 </p> 1031 1032 <p>The result of __builtin_shufflevector is a vector 1033 with the same element type as vec1/vec2 but that has an element count equal to 1034 the number of indices specified. 1035 </p> 1036 1037 <p>Query for this feature with __has_builtin(__builtin_shufflevector).</p> 1038 1039 <!-- ======================================================================= --> 1040 <h3><a name="__builtin_unreachable">__builtin_unreachable</a></h3> 1041 <!-- ======================================================================= --> 1042 1043 <p><tt>__builtin_unreachable</tt> is used to indicate that a specific point in 1044 the program cannot be reached, even if the compiler might otherwise think it 1045 can. This is useful to improve optimization and eliminates certain warnings. 1046 For example, without the <tt>__builtin_unreachable</tt> in the example below, 1047 the compiler assumes that the inline asm can fall through and prints a "function 1048 declared 'noreturn' should not return" warning. 1049 </p> 1050 1051 <p><b>Syntax:</b></p> 1052 1053 <pre> 1054 __builtin_unreachable() 1055 </pre> 1056 1057 <p><b>Example of Use:</b></p> 1058 1059 <pre> 1060 void myabort(void) __attribute__((noreturn)); 1061 void myabort(void) { 1062 asm("int3"); 1063 __builtin_unreachable(); 1064 } 1065 </pre> 1066 1067 <p><b>Description:</b></p> 1068 1069 <p>The __builtin_unreachable() builtin has completely undefined behavior. Since 1070 it has undefined behavior, it is a statement that it is never reached and the 1071 optimizer can take advantage of this to produce better code. This builtin takes 1072 no arguments and produces a void result. 1073 </p> 1074 1075 <p>Query for this feature with __has_builtin(__builtin_unreachable).</p> 1076 1077 <!-- ======================================================================= --> 1078 <h3><a name="__sync_swap">__sync_swap</a></h3> 1079 <!-- ======================================================================= --> 1080 1081 <p><tt>__sync_swap</tt> is used to atomically swap integers or pointers in 1082 memory. 1083 </p> 1084 1085 <p><b>Syntax:</b></p> 1086 1087 <pre> 1088 <i>type</i> __sync_swap(<i>type</i> *ptr, <i>type</i> value, ...) 1089 </pre> 1090 1091 <p><b>Example of Use:</b></p> 1092 1093 <pre> 1094 int old_value = __sync_swap(&value, new_value); 1095 </pre> 1096 1097 <p><b>Description:</b></p> 1098 1099 <p>The __sync_swap() builtin extends the existing __sync_*() family of atomic 1100 intrinsics to allow code to atomically swap the current value with the new 1101 value. More importantly, it helps developers write more efficient and correct 1102 code by avoiding expensive loops around __sync_bool_compare_and_swap() or 1103 relying on the platform specific implementation details of 1104 __sync_lock_test_and_set(). The __sync_swap() builtin is a full barrier. 1105 </p> 1106 1107 1108 <!-- ======================================================================= --> 1109 <h2 id="targetspecific">Target-Specific Extensions</h2> 1110 <!-- ======================================================================= --> 1111 1112 <p>Clang supports some language features conditionally on some targets.</p> 1113 1114 <!-- ======================================================================= --> 1115 <h3 id="x86-specific">X86/X86-64 Language Extensions</h3> 1116 <!-- ======================================================================= --> 1117 1118 <p>The X86 backend has these language extensions:</p> 1119 1120 <!-- ======================================================================= --> 1121 <h4 id="x86-gs-segment">Memory references off the GS segment</h4> 1122 <!-- ======================================================================= --> 1123 1124 <p>Annotating a pointer with address space #256 causes it to be code generated 1125 relative to the X86 GS segment register, and address space #257 causes it to be 1126 relative to the X86 FS segment. Note that this is a very very low-level 1127 feature that should only be used if you know what you're doing (for example in 1128 an OS kernel).</p> 1129 1130 <p>Here is an example:</p> 1131 1132 <pre> 1133 #define GS_RELATIVE __attribute__((address_space(256))) 1134 int foo(int GS_RELATIVE *P) { 1135 return *P; 1136 } 1137 </pre> 1138 1139 <p>Which compiles to (on X86-32):</p> 1140 1141 <pre> 1142 _foo: 1143 movl 4(%esp), %eax 1144 movl %gs:(%eax), %eax 1145 ret 1146 </pre> 1147 1148 <!-- ======================================================================= --> 1149 <h2 id="analyzerspecific">Static Analysis-Specific Extensions</h2> 1150 <!-- ======================================================================= --> 1151 1152 <p>Clang supports additional attributes that are useful for documenting program 1153 invariants and rules for static analysis tools. The extensions documented here 1154 are used by the <a 1155 href="http://clang.llvm.org/StaticAnalysis.html">path-sensitive static analyzer 1156 engine</a> that is part of Clang's Analysis library.</p> 1157 1158 <h3 id="attr_analyzer_noreturn">The <tt>analyzer_noreturn</tt> attribute</h3> 1159 1160 <p>Clang's static analysis engine understands the standard <tt>noreturn</tt> 1161 attribute. This attribute, which is typically affixed to a function prototype, 1162 indicates that a call to a given function never returns. Function prototypes for 1163 common functions like <tt>exit</tt> are typically annotated with this attribute, 1164 as well as a variety of common assertion handlers. Users can educate the static 1165 analyzer about their own custom assertion handles (thus cutting down on false 1166 positives due to false paths) by marking their own "panic" functions 1167 with this attribute.</p> 1168 1169 <p>While useful, <tt>noreturn</tt> is not applicable in all cases. Sometimes 1170 there are special functions that for all intents and purposes should be 1171 considered panic functions (i.e., they are only called when an internal program 1172 error occurs) but may actually return so that the program can fail gracefully. 1173 The <tt>analyzer_noreturn</tt> attribute allows one to annotate such functions 1174 as being interpreted as "no return" functions by the analyzer (thus 1175 pruning bogus paths) but will not affect compilation (as in the case of 1176 <tt>noreturn</tt>).</p> 1177 1178 <p><b>Usage</b>: The <tt>analyzer_noreturn</tt> attribute can be placed in the 1179 same places where the <tt>noreturn</tt> attribute can be placed. It is commonly 1180 placed at the end of function prototypes:</p> 1181 1182 <pre> 1183 void foo() <b>__attribute__((analyzer_noreturn))</b>; 1184 </pre> 1185 1186 <p>Query for this feature with 1187 <tt>__has_attribute(analyzer_noreturn)</tt>.</p> 1188 1189 <h3 id="attr_method_family">The <tt>objc_method_family</tt> attribute</h3> 1190 1191 <p>Many methods in Objective-C have conventional meanings determined 1192 by their selectors. For the purposes of static analysis, it is 1193 sometimes useful to be able to mark a method as having a particular 1194 conventional meaning despite not having the right selector, or as not 1195 having the conventional meaning that its selector would suggest. 1196 For these use cases, we provide an attribute to specifically describe 1197 the <q>method family</q> that a method belongs to.</p> 1198 1199 <p><b>Usage</b>: <tt>__attribute__((objc_method_family(X)))</tt>, 1200 where <tt>X</tt> is one of <tt>none</tt>, <tt>alloc</tt>, <tt>copy</tt>, 1201 <tt>init</tt>, <tt>mutableCopy</tt>, or <tt>new</tt>. This attribute 1202 can only be placed at the end of a method declaration:</p> 1203 1204 <pre> 1205 - (NSString*) initMyStringValue <b>__attribute__((objc_method_family(none)))</b>; 1206 </pre> 1207 1208 <p>Users who do not wish to change the conventional meaning of a 1209 method, and who merely want to document its non-standard retain and 1210 release semantics, should use the 1211 <a href="#attr_retain_release">retaining behavior attributes</a> 1212 described below.</p> 1213 1214 <p>Query for this feature with 1215 <tt>__has_attribute(objc_method_family)</tt>.</p> 1216 1217 <h3 id="attr_retain_release">Objective-C retaining behavior attributes</h3> 1218 1219 <p>In Objective-C, functions and methods are generally assumed to take 1220 and return objects with +0 retain counts, with some exceptions for 1221 special methods like <tt>+alloc</tt> and <tt>init</tt>. However, 1222 there are exceptions, and so Clang provides attributes to allow these 1223 exceptions to be documented, which helps the analyzer find leaks (and 1224 ignore non-leaks). Some exceptions may be better described using 1225 the <a href="#attr_method_family"><tt>objc_method_family</tt></a> 1226 attribute instead.</p> 1227 1228 <p><b>Usage</b>: The <tt>ns_returns_retained</tt>, <tt>ns_returns_not_retained</tt>, 1229 <tt>ns_returns_autoreleased</tt>, <tt>cf_returns_retained</tt>, 1230 and <tt>cf_returns_not_retained</tt> attributes can be placed on 1231 methods and functions that return Objective-C or CoreFoundation 1232 objects. They are commonly placed at the end of a function prototype 1233 or method declaration:</p> 1234 1235 <pre> 1236 id foo() <b>__attribute__((ns_returns_retained))</b>; 1237 1238 - (NSString*) bar: (int) x <b>__attribute__((ns_returns_retained))</b>; 1239 </pre> 1240 1241 <p>The <tt>*_returns_retained</tt> attributes specify that the 1242 returned object has a +1 retain count. 1243 The <tt>*_returns_not_retained</tt> attributes specify that the return 1244 object has a +0 retain count, even if the normal convention for its 1245 selector would be +1. <tt>ns_returns_autoreleased</tt> specifies that the 1246 returned object is +0, but is guaranteed to live at least as long as the 1247 next flush of an autorelease pool.</p> 1248 1249 <p><b>Usage</b>: The <tt>ns_consumed</tt> and <tt>cf_consumed</tt> 1250 attributes can be placed on an parameter declaration; they specify 1251 that the argument is expected to have a +1 retain count, which will be 1252 balanced in some way by the function or method. 1253 The <tt>ns_consumes_self</tt> attribute can only be placed on an 1254 Objective-C method; it specifies that the method expects 1255 its <tt>self</tt> parameter to have a +1 retain count, which it will 1256 balance in some way.</p> 1257 1258 <pre> 1259 void <b>foo(__attribute__((ns_consumed))</b> NSString *string); 1260 1261 - (void) bar <b>__attribute__((ns_consumes_self))</b>; 1262 - (void) baz: (id) <b>__attribute__((ns_consumed))</b> x; 1263 </pre> 1264 1265 <p>Query for these features with <tt>__has_attribute(ns_consumed)</tt>, 1266 <tt>__has_attribute(ns_returns_retained)</tt>, etc.</p> 1267 1268 1269 <!-- ======================================================================= --> 1270 <h2 id="threadsafety">Thread-Safety Annotation Checking</h2> 1271 <!-- ======================================================================= --> 1272 1273 <p>Clang supports additional attributes for checking basic locking policies in 1274 multithreaded programs. 1275 Clang currently parses the following list of attributes, although 1276 <b>the implementation for these annotations is currently in development.</b> 1277 For more details, see the 1278 <a href="http://gcc.gnu.org/wiki/ThreadSafetyAnnotation">GCC implementation</a>. 1279 </p> 1280 1281 <h4 id="ts_noanal">no_thread_safety_analysis</h4> 1282 1283 <p>Use <tt>__attribute__((no_thread_safety_analysis))</tt> on a function 1284 declaration to specify that the thread safety analysis should not be run on that 1285 function. This attribute provides an escape hatch (e.g. for situations when it 1286 is difficult to annotate the locking policy). </p> 1287 1288 <h4 id="ts_lockable">lockable</h4> 1289 1290 <p>Use <tt>__attribute__((lockable))</tt> on a class definition to specify 1291 that it has a lockable type (e.g. a Mutex class). This annotation is primarily 1292 used to check consistency.</p> 1293 1294 <h4 id="ts_scopedlockable">scoped_lockable</h4> 1295 1296 <p>Use <tt>__attribute__((scoped_lockable))</tt> on a class definition to 1297 specify that it has a "scoped" lockable type. Objects of this type will acquire 1298 the lock upon construction and release it upon going out of scope. 1299 This annotation is primarily used to check 1300 consistency.</p> 1301 1302 <h4 id="ts_guardedvar">guarded_var</h4> 1303 1304 <p>Use <tt>__attribute__((guarded_var))</tt> on a variable declaration to 1305 specify that the variable must be accessed while holding some lock.</p> 1306 1307 <h4 id="ts_ptguardedvar">pt_guarded_var</h4> 1308 1309 <p>Use <tt>__attribute__((pt_guarded_var))</tt> on a pointer declaration to 1310 specify that the pointer must be dereferenced while holding some lock.</p> 1311 1312 <h4 id="ts_guardedby">guarded_by(l)</h4> 1313 1314 <p>Use <tt>__attribute__((guarded_by(l)))</tt> on a variable declaration to 1315 specify that the variable must be accessed while holding lock <tt>l</tt>.</p> 1316 1317 <h4 id="ts_ptguardedby">pt_guarded_by(l)</h4> 1318 1319 <p>Use <tt>__attribute__((pt_guarded_by(l)))</tt> on a pointer declaration to 1320 specify that the pointer must be dereferenced while holding lock <tt>l</tt>.</p> 1321 1322 <h4 id="ts_acquiredbefore">acquired_before(...)</h4> 1323 1324 <p>Use <tt>__attribute__((acquired_before(...)))</tt> on a declaration 1325 of a lockable variable to specify that the lock must be acquired before all 1326 attribute arguments. Arguments must be lockable type, and there must be at 1327 least one argument.</p> 1328 1329 <h4 id="ts_acquiredafter">acquired_after(...)</h4> 1330 1331 <p>Use <tt>__attribute__((acquired_after(...)))</tt> on a declaration 1332 of a lockable variable to specify that the lock must be acquired after all 1333 attribute arguments. Arguments must be lockable type, and there must be at 1334 least one argument.</p> 1335 1336 <h4 id="ts_elf">exclusive_lock_function(...)</h4> 1337 1338 <p>Use <tt>__attribute__((exclusive_lock_function(...)))</tt> on a function 1339 declaration to specify that the function acquires all listed locks 1340 exclusively. This attribute takes zero or more arguments: either of lockable 1341 type or integers indexing into function parameters of lockable type. If no 1342 arguments are given, the acquired lock is implicitly <tt>this</tt> of the 1343 enclosing object.</p> 1344 1345 <h4 id="ts_slf">shared_lock_function(...)</h4> 1346 1347 <p>Use <tt>__attribute__((shared_lock_function(...)))</tt> on a function 1348 declaration to specify that the function acquires all listed locks, although 1349 the locks may be shared (e.g. read locks). This attribute takes zero or more 1350 arguments: either of lockable type or integers indexing into function 1351 parameters of lockable type. If no arguments are given, the acquired lock is 1352 implicitly <tt>this</tt> of the enclosing object.</p> 1353 1354 <h4 id="ts_etf">exclusive_trylock_function(...)</h4> 1355 1356 <p>Use <tt>__attribute__((exclusive_lock_function(...)))</tt> on a function 1357 declaration to specify that the function will try (without blocking) to acquire 1358 all listed locks exclusively. This attribute takes one or more arguments. The 1359 first argument is an integer or boolean value specifying the return value of a 1360 successful lock acquisition. The remaining arugments are either of lockable type 1361 or integers indexing into function parameters of lockable type. If only one 1362 argument is given, the acquired lock is implicitly <tt>this</tt> of the 1363 enclosing object.</p> 1364 1365 <h4 id="ts_stf">shared_trylock_function(...)</h4> 1366 1367 <p>Use <tt>__attribute__((shared_lock_function(...)))</tt> on a function 1368 declaration to specify that the function will try (without blocking) to acquire 1369 all listed locks, although the locks may be shared (e.g. read locks). This 1370 attribute takes one or more arguments. The first argument is an integer or 1371 boolean value specifying the return value of a successful lock acquisition. The 1372 remaining arugments are either of lockable type or integers indexing into 1373 function parameters of lockable type. If only one argument is given, the 1374 acquired lock is implicitly <tt>this</tt> of the enclosing object.</p> 1375 1376 <h4 id="ts_uf">unlock_function(...)</h4> 1377 1378 <p>Use <tt>__attribute__((unlock_function(...)))</tt> on a function 1379 declaration to specify that the function release all listed locks. This 1380 attribute takes zero or more arguments: either of lockable type or integers 1381 indexing into function parameters of lockable type. If no arguments are given, 1382 the acquired lock is implicitly <tt>this</tt> of the enclosing object.</p> 1383 1384 <h4 id="ts_lr">lock_returned(l)</h4> 1385 1386 <p>Use <tt>__attribute__((lock_returned(l)))</tt> on a function 1387 declaration to specify that the function returns lock <tt>l</tt> (<tt>l</tt> 1388 must be of lockable type). This annotation is used to aid in resolving lock 1389 expressions.</p> 1390 1391 <h4 id="ts_le">locks_excluded(...)</h4> 1392 1393 <p>Use <tt>__attribute__((locks_excluded(...)))</tt> on a function declaration 1394 to specify that the function must not be called with the listed locks. Arguments 1395 must be lockable type, and there must be at least one argument.</p> 1396 1397 <h4 id="ts_elr">exclusive_locks_required(...)</h4> 1398 1399 <p>Use <tt>__attribute__((exclusive_locks_required(...)))</tt> on a function 1400 declaration to specify that the function must be called while holding the listed 1401 exclusive locks. Arguments must be lockable type, and there must be at 1402 least one argument.</p> 1403 1404 <h4 id="ts_slr">shared_locks_required(...)</h4> 1405 1406 <p>Use <tt>__attribute__((shared_locks_required(...)))</tt> on a function 1407 declaration to specify that the function must be called while holding the listed 1408 shared locks. Arguments must be lockable type, and there must be at 1409 least one argument.</p> 1410 1411 </div> 1412 </body> 1413 </html> 1414