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 LanguageExtensions</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++0x</a> 40 <ul> 41 <li><a href="#cxx_decltype">C++0x <tt>decltype()</tt></a></li> 42 <li><a href="#cxx_access_control_sfinae">C++0x SFINAE includes access control</a></li> 43 <li><a href="#cxx_alias_templates">C++0x alias templates</a></li> 44 <li><a href="#cxx_attributes">C++0x attributes</a></li> 45 <li><a href="#cxx_default_function_template_args">C++0x default template arguments in function templates</a></li> 46 <li><a href="#cxx_delegating_constructor">C++0x delegating constructors</a></li> 47 <li><a href="#cxx_deleted_functions">C++0x deleted functions</a></li> 48 <li><a href="#cxx_lambdas">C++0x lambdas</a></li> 49 <li><a href="#cxx_nullptr">C++0x nullptr</a></li> 50 <li><a href="#cxx_override_control">C++0x override control</a></li> 51 <li><a href="#cxx_range_for">C++0x range-based for loop</a></li> 52 <li><a href="#cxx_rvalue_references">C++0x rvalue references</a></li> 53 <li><a href="#cxx_reference_qualified_functions">C++0x reference-qualified functions</a></li> 54 <li><a href="#cxx_static_assert">C++0x <tt>static_assert()</tt></a></li> 55 <li><a href="#cxx_auto_type">C++0x type inference</a></li> 56 <li><a href="#cxx_variadic_templates">C++0x variadic templates</a></li> 57 <li><a href="#cxx_inline_namespaces">C++0x inline namespaces</a></li> 58 <li><a href="#cxx_strong_enums">C++0x strongly-typed enumerations</a></li> 59 <li><a href="#cxx_trailing_return">C++0x trailing return type</a></li> 60 <li><a href="#cxx_noexcept">C++0x noexcept specification</a></li> 61 </ul></li> 62 <li><a href="#c1x">C1X</a> 63 <ul> 64 <li><a href="#c_generic_selections">C1X generic selections</a></li> 65 <li><a href="#c_static_assert">C1X <tt>_Static_assert()</tt></a></li> 66 </ul></li> 67 </ul> </li> 68 <li><a href="#checking_type_traits">Checks for Type Traits</a></li> 69 <li><a href="#blocks">Blocks</a></li> 70 <li><a href="#objc_features">Objective-C Features</a> 71 <ul> 72 <li><a href="#objc_instancetype">Related result types</a></li> 73 <li><a href="#objc_arc">Automatic reference counting</a></li> 74 </ul> 75 </li> 76 <li><a href="#overloading-in-c">Function Overloading in C</a></li> 77 <li><a href="#builtins">Builtin Functions</a> 78 <ul> 79 <li><a href="#__builtin_shufflevector">__builtin_shufflevector</a></li> 80 <li><a href="#__builtin_unreachable">__builtin_unreachable</a></li> 81 <li><a href="#__sync_swap">__sync_swap</a></li> 82 </ul> 83 </li> 84 <li><a href="#targetspecific">Target-Specific Extensions</a> 85 <ul> 86 <li><a href="#x86-specific">X86/X86-64 Language Extensions</a></li> 87 </ul> 88 </li> 89 <li><a href="#analyzerspecific">Static Analysis-Specific Extensions</a></li> 90 </ul> 91 92 <!-- ======================================================================= --> 93 <h2 id="intro">Introduction</h2> 94 <!-- ======================================================================= --> 95 96 <p>This document describes the language extensions provided by Clang. In 97 addition to the language extensions listed here, Clang aims to support a broad 98 range of GCC extensions. Please see the <a 99 href="http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html">GCC manual</a> for 100 more information on these extensions.</p> 101 102 <!-- ======================================================================= --> 103 <h2 id="feature_check">Feature Checking Macros</h2> 104 <!-- ======================================================================= --> 105 106 <p>Language extensions can be very useful, but only if you know you can depend 107 on them. In order to allow fine-grain features checks, we support three builtin 108 function-like macros. This allows you to directly test for a feature in your 109 code without having to resort to something like autoconf or fragile "compiler 110 version checks".</p> 111 112 <!-- ======================================================================= --> 113 <h3><a name="__has_builtin">__has_builtin</a></h3> 114 <!-- ======================================================================= --> 115 116 <p>This function-like macro takes a single identifier argument that is the name 117 of a builtin function. It evaluates to 1 if the builtin is supported or 0 if 118 not. It can be used like this:</p> 119 120 <blockquote> 121 <pre> 122 #ifndef __has_builtin // Optional of course. 123 #define __has_builtin(x) 0 // Compatibility with non-clang compilers. 124 #endif 125 126 ... 127 #if __has_builtin(__builtin_trap) 128 __builtin_trap(); 129 #else 130 abort(); 131 #endif 132 ... 133 </pre> 134 </blockquote> 135 136 137 <!-- ======================================================================= --> 138 <h3><a name="__has_feature_extension"> __has_feature and __has_extension</a></h3> 139 <!-- ======================================================================= --> 140 141 <p>These function-like macros take a single identifier argument that is the 142 name of a feature. <code>__has_feature</code> evaluates to 1 if the feature 143 is both supported by Clang and standardized in the current language standard 144 or 0 if not (but see <a href="#has_feature_back_compat">below</a>), while 145 <code>__has_extension</code> evaluates to 1 if the feature is supported by 146 Clang in the current language (either as a language extension or a standard 147 language feature) or 0 if not. They can be used like this:</p> 148 149 <blockquote> 150 <pre> 151 #ifndef __has_feature // Optional of course. 152 #define __has_feature(x) 0 // Compatibility with non-clang compilers. 153 #endif 154 #ifndef __has_extension 155 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers. 156 #endif 157 158 ... 159 #if __has_feature(cxx_rvalue_references) 160 // This code will only be compiled with the -std=c++0x and -std=gnu++0x 161 // options, because rvalue references are only standardized in C++0x. 162 #endif 163 164 #if __has_extension(cxx_rvalue_references) 165 // This code will be compiled with the -std=c++0x, -std=gnu++0x, -std=c++98 166 // and -std=gnu++98 options, because rvalue references are supported as a 167 // language extension in C++98. 168 #endif 169 </pre> 170 </blockquote> 171 172 <p id="has_feature_back_compat">For backwards compatibility reasons, 173 <code>__has_feature</code> can also be used to test for support for 174 non-standardized features, i.e. features not prefixed <code>c_</code>, 175 <code>cxx_</code> or <code>objc_</code>.</p> 176 177 <p>If the <code>-pedantic-errors</code> option is given, 178 <code>__has_extension</code> is equivalent to <code>__has_feature</code>.</p> 179 180 <p>The feature tag is described along with the language feature below.</p> 181 182 <!-- ======================================================================= --> 183 <h3><a name="__has_attribute">__has_attribute</a></h3> 184 <!-- ======================================================================= --> 185 186 <p>This function-like macro takes a single identifier argument that is the name 187 of an attribute. It evaluates to 1 if the attribute is supported or 0 if not. It 188 can be used like this:</p> 189 190 <blockquote> 191 <pre> 192 #ifndef __has_attribute // Optional of course. 193 #define __has_attribute(x) 0 // Compatibility with non-clang compilers. 194 #endif 195 196 ... 197 #if __has_attribute(always_inline) 198 #define ALWAYS_INLINE __attribute__((always_inline)) 199 #else 200 #define ALWAYS_INLINE 201 #endif 202 ... 203 </pre> 204 </blockquote> 205 206 <!-- ======================================================================= --> 207 <h2 id="has_include">Include File Checking Macros</h2> 208 <!-- ======================================================================= --> 209 210 <p>Not all developments systems have the same include files. 211 The <a href="#__has_include">__has_include</a> and 212 <a href="#__has_include_next">__has_include_next</a> macros allow you to 213 check for the existence of an include file before doing 214 a possibly failing #include directive.</p> 215 216 <!-- ======================================================================= --> 217 <h3><a name="__has_include">__has_include</a></h3> 218 <!-- ======================================================================= --> 219 220 <p>This function-like macro takes a single file name string argument that 221 is the name of an include file. It evaluates to 1 if the file can 222 be found using the include paths, or 0 otherwise:</p> 223 224 <blockquote> 225 <pre> 226 // Note the two possible file name string formats. 227 #if __has_include("myinclude.h") && __has_include(<stdint.h>) 228 # include "myinclude.h" 229 #endif 230 231 // To avoid problem with non-clang compilers not having this macro. 232 #if defined(__has_include) && __has_include("myinclude.h") 233 # include "myinclude.h" 234 #endif 235 </pre> 236 </blockquote> 237 238 <p>To test for this feature, use #if defined(__has_include).</p> 239 240 <!-- ======================================================================= --> 241 <h3><a name="__has_include_next">__has_include_next</a></h3> 242 <!-- ======================================================================= --> 243 244 <p>This function-like macro takes a single file name string argument that 245 is the name of an include file. It is like __has_include except that it 246 looks for the second instance of the given file found in the include 247 paths. It evaluates to 1 if the second instance of the file can 248 be found using the include paths, or 0 otherwise:</p> 249 250 <blockquote> 251 <pre> 252 // Note the two possible file name string formats. 253 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>) 254 # include_next "myinclude.h" 255 #endif 256 257 // To avoid problem with non-clang compilers not having this macro. 258 #if defined(__has_include_next) && __has_include_next("myinclude.h") 259 # include_next "myinclude.h" 260 #endif 261 </pre> 262 </blockquote> 263 264 <p>Note that __has_include_next, like the GNU extension 265 #include_next directive, is intended for use in headers only, 266 and will issue a warning if used in the top-level compilation 267 file. A warning will also be issued if an absolute path 268 is used in the file argument.</p> 269 270 <!-- ======================================================================= --> 271 <h2 id="builtinmacros">Builtin Macros</h2> 272 <!-- ======================================================================= --> 273 274 <dl> 275 <dt><code>__BASE_FILE__</code></dt> 276 <dd>Defined to a string that contains the name of the main input 277 file passed to Clang.</dd> 278 279 <dt><code>__COUNTER__</code></dt> 280 <dd>Defined to an integer value that starts at zero and is 281 incremented each time the <code>__COUNTER__</code> macro is 282 expanded.</dd> 283 284 <dt><code>__INCLUDE_LEVEL__</code></dt> 285 <dd>Defined to an integral value that is the include depth of the 286 file currently being translated. For the main file, this value is 287 zero.</dd> 288 289 <dt><code>__TIMESTAMP__</code></dt> 290 <dd>Defined to the date and time of the last modification of the 291 current source file.</dd> 292 293 <dt><code>__clang__</code></dt> 294 <dd>Defined when compiling with Clang</dd> 295 296 <dt><code>__clang_major__</code></dt> 297 <dd>Defined to the major version number of Clang (e.g., the 2 in 298 2.0.1).</dd> 299 300 <dt><code>__clang_minor__</code></dt> 301 <dd>Defined to the minor version number of Clang (e.g., the 0 in 302 2.0.1).</dd> 303 304 <dt><code>__clang_patchlevel__</code></dt> 305 <dd>Defined to the patch level of Clang (e.g., the 1 in 2.0.1).</dd> 306 307 <dt><code>__clang_version__</code></dt> 308 <dd>Defined to a string that captures the Clang version, including 309 the Subversion tag or revision number, e.g., "1.5 (trunk 310 102332)".</dd> 311 </dl> 312 313 <!-- ======================================================================= --> 314 <h2 id="vectors">Vectors and Extended Vectors</h2> 315 <!-- ======================================================================= --> 316 317 <p>Supports the GCC vector extensions, plus some stuff like V[1].</p> 318 319 <p>Also supports <tt>ext_vector</tt>, which additionally support for V.xyzw 320 syntax and other tidbits as seen in OpenCL. An example is:</p> 321 322 <blockquote> 323 <pre> 324 typedef float float4 <b>__attribute__((ext_vector_type(4)))</b>; 325 typedef float float2 <b>__attribute__((ext_vector_type(2)))</b>; 326 327 float4 foo(float2 a, float2 b) { 328 float4 c; 329 c.xz = a; 330 c.yw = b; 331 return c; 332 } 333 </pre> 334 </blockquote> 335 336 <p>Query for this feature with __has_extension(attribute_ext_vector_type).</p> 337 338 <p>See also <a href="#__builtin_shufflevector">__builtin_shufflevector</a>.</p> 339 340 <!-- ======================================================================= --> 341 <h2 id="deprecated">Messages on <tt>deprecated</tt> and <tt>unavailable</tt> Attributes</h2> 342 <!-- ======================================================================= --> 343 344 <p>An optional string message can be added to the <tt>deprecated</tt> 345 and <tt>unavailable</tt> attributes. For example:</p> 346 347 <blockquote> 348 <pre>void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));</pre> 349 </blockquote> 350 351 <p>If the deprecated or unavailable declaration is used, the message 352 will be incorporated into the appropriate diagnostic:</p> 353 354 <blockquote> 355 <pre>harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! [-Wdeprecated-declarations] 356 explode(); 357 ^</pre> 358 </blockquote> 359 360 <p>Query for this feature 361 with <tt>__has_extension(attribute_deprecated_with_message)</tt> 362 and <tt>__has_extension(attribute_unavailable_with_message)</tt>.</p> 363 364 <!-- ======================================================================= --> 365 <h2 id="attributes-on-enumerators">Attributes on Enumerators</h2> 366 <!-- ======================================================================= --> 367 368 <p>Clang allows attributes to be written on individual enumerators. 369 This allows enumerators to be deprecated, made unavailable, etc. The 370 attribute must appear after the enumerator name and before any 371 initializer, like so:</p> 372 373 <blockquote> 374 <pre>enum OperationMode { 375 OM_Invalid, 376 OM_Normal, 377 OM_Terrified __attribute__((deprecated)), 378 OM_AbortOnError __attribute__((deprecated)) = 4 379 };</pre> 380 </blockquote> 381 382 <p>Attributes on the <tt>enum</tt> declaration do not apply to 383 individual enumerators.</p> 384 385 <p>Query for this feature with <tt>__has_extension(enumerator_attributes)</tt>.</p> 386 387 <!-- ======================================================================= --> 388 <h2 id="checking_language_features">Checks for Standard Language Features</h2> 389 <!-- ======================================================================= --> 390 391 <p>The <tt>__has_feature</tt> macro can be used to query if certain standard language features are 392 enabled. Those features are listed here.</p> 393 394 <h3 id="cxx_exceptions">C++ exceptions</h3> 395 396 <p>Use <tt>__has_feature(cxx_exceptions)</tt> to determine if C++ exceptions have been enabled. For 397 example, compiling code with <tt>-fexceptions</tt> enables C++ exceptions.</p> 398 399 <h3 id="cxx_rtti">C++ RTTI</h3> 400 401 <p>Use <tt>__has_feature(cxx_rtti)</tt> to determine if C++ RTTI has been enabled. For example, 402 compiling code with <tt>-fno-rtti</tt> disables the use of RTTI.</p> 403 404 <!-- ======================================================================= --> 405 <h2 id="checking_upcoming_features">Checks for Upcoming Standard Language Features</h2> 406 <!-- ======================================================================= --> 407 408 <p>The <tt>__has_feature</tt> or <tt>__has_extension</tt> macros can be used 409 to query if certain upcoming standard language features are enabled. Those 410 features are listed here. Features that are not yet implemented will be 411 noted.</p> 412 413 <h3 id="cxx0x">C++0x</h3> 414 415 <p>The features listed below are slated for inclusion in the upcoming 416 C++0x standard. As a result, all these features are enabled 417 with the <tt>-std=c++0x</tt> option when compiling C++ code.</p> 418 419 <h4 id="cxx_decltype">C++0x <tt>decltype()</tt></h4> 420 421 <p>Use <tt>__has_feature(cxx_decltype)</tt> or 422 <tt>__has_extension(cxx_decltype)</tt> to determine if support for the 423 <tt>decltype()</tt> specifier is enabled.</p> 424 425 <h4 id="cxx_access_control_sfinae">C++0x SFINAE includes access control</h4> 426 427 <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> 428 429 <h4 id="cxx_alias_templates">C++0x alias templates</h4> 430 431 <p>Use <tt>__has_feature(cxx_alias_templates)</tt> or 432 <tt>__has_extension(cxx_alias_templates)</tt> to determine if support for 433 C++0x's alias declarations and alias templates is enabled.</p> 434 435 <h4 id="cxx_attributes">C++0x attributes</h4> 436 437 <p>Use <tt>__has_feature(cxx_attributes)</tt> or 438 <tt>__has_extension(cxx_attributes)</tt> to determine if support for attribute 439 parsing with C++0x's square bracket notation is enabled.</p> 440 441 <h4 id="cxx_default_function_template_args">C++0x default template arguments in function templates</h4> 442 443 <p>Use <tt>__has_feature(cxx_default_function_template_args)</tt> or 444 <tt>__has_extension(cxx_default_function_template_args)</tt> to determine 445 if support for default template arguments in function templates is enabled.</p> 446 447 <h4 id="cxx_delegating_constructors">C++0x delegating constructors</h4> 448 449 <p>Use <tt>__has_feature(cxx_delegating_constructors)</tt> to determine if 450 support for delegating constructors is enabled.</p> 451 452 <h4 id="cxx_deleted_functions">C++0x <tt>delete</tt>d functions</h4> 453 454 <p>Use <tt>__has_feature(cxx_deleted_functions)</tt> or 455 <tt>__has_extension(cxx_deleted_functions)</tt> to determine if support for 456 deleted function definitions (with <tt>= delete</tt>) is enabled.</p> 457 458 <h4 id="cxx_lambdas">C++0x lambdas</h4> 459 460 <p>Use <tt>__has_feature(cxx_lambdas)</tt> or 461 <tt>__has_extension(cxx_lambdas)</tt> to determine if support for lambdas 462 is enabled. clang does not currently implement this feature.</p> 463 464 <h4 id="cxx_nullptr">C++0x <tt>nullptr</tt></h4> 465 466 <p>Use <tt>__has_feature(cxx_nullptr)</tt> or 467 <tt>__has_extension(cxx_nullptr)</tt> to determine if support for 468 <tt>nullptr</tt> is enabled.</p> 469 470 <h4 id="cxx_override_control">C++0x <tt>override control</tt></h4> 471 472 <p>Use <tt>__has_feature(cxx_override_control)</tt> or 473 <tt>__has_extension(cxx_override_control)</tt> to determine if support for 474 the override control keywords is enabled.</p> 475 476 <h4 id="cxx_reference_qualified_functions">C++0x reference-qualified functions</h4> 477 <p>Use <tt>__has_feature(cxx_reference_qualified_functions)</tt> or 478 <tt>__has_extension(cxx_reference_qualified_functions)</tt> to determine 479 if support for reference-qualified functions (e.g., member functions with 480 <code>&</code> or <code>&&</code> applied to <code>*this</code>) 481 is enabled.</p> 482 483 <h4 id="cxx_range_for">C++0x range-based <tt>for</tt> loop</h4> 484 485 <p>Use <tt>__has_feature(cxx_range_for)</tt> or 486 <tt>__has_extension(cxx_range_for)</tt> to determine if support for the 487 range-based for loop is enabled. </p> 488 489 <h4 id="cxx_rvalue_references">C++0x rvalue references</h4> 490 491 <p>Use <tt>__has_feature(cxx_rvalue_references)</tt> or 492 <tt>__has_extension(cxx_rvalue_references)</tt> to determine if support for 493 rvalue references is enabled. </p> 494 495 <h4 id="cxx_static_assert">C++0x <tt>static_assert()</tt></h4> 496 497 <p>Use <tt>__has_feature(cxx_static_assert)</tt> or 498 <tt>__has_extension(cxx_static_assert)</tt> to determine if support for 499 compile-time assertions using <tt>static_assert</tt> is enabled.</p> 500 501 <h4 id="cxx_auto_type">C++0x type inference</h4> 502 503 <p>Use <tt>__has_feature(cxx_auto_type)</tt> or 504 <tt>__has_extension(cxx_auto_type)</tt> to determine C++0x type inference is 505 supported using the <tt>auto</tt> specifier. If this is disabled, <tt>auto</tt> 506 will instead be a storage class specifier, as in C or C++98.</p> 507 508 <h4 id="cxx_variadic_templates">C++0x variadic templates</h4> 509 510 <p>Use <tt>__has_feature(cxx_variadic_templates)</tt> or 511 <tt>__has_extension(cxx_variadic_templates)</tt> to determine if support 512 for variadic templates is enabled.</p> 513 514 <h4 id="cxx_inline_namespaces">C++0x inline namespaces</h4> 515 516 <p>Use <tt>__has_feature(cxx_inline_namespaces)</tt> or 517 <tt>__has_extension(cxx_inline_namespaces)</tt> to determine if support for 518 inline namespaces is enabled.</p> 519 520 <h4 id="cxx_trailing_return">C++0x trailing return type</h4> 521 522 <p>Use <tt>__has_feature(cxx_trailing_return)</tt> or 523 <tt>__has_extension(cxx_trailing_return)</tt> to determine if support for the 524 alternate function declaration syntax with trailing return type is enabled.</p> 525 526 <h4 id="cxx_noexcept">C++0x noexcept</h4> 527 528 <p>Use <tt>__has_feature(cxx_noexcept)</tt> or 529 <tt>__has_extension(cxx_noexcept)</tt> to determine if support for noexcept 530 exception specifications is enabled.</p> 531 532 <h4 id="cxx_strong_enums">C++0x strongly typed enumerations</h4> 533 534 <p>Use <tt>__has_feature(cxx_strong_enums)</tt> or 535 <tt>__has_extension(cxx_strong_enums)</tt> to determine if support for 536 strongly typed, scoped enumerations is enabled.</p> 537 538 <h3 id="c1x">C1X</h3> 539 540 <p>The features listed below are slated for inclusion in the upcoming 541 C1X standard. As a result, all these features are enabled 542 with the <tt>-std=c1x</tt> option when compiling C code.</p> 543 544 <h4 id="c_generic_selections">C1X generic selections</h4> 545 546 <p>Use <tt>__has_feature(c_generic_selections)</tt> or 547 <tt>__has_extension(c_generic_selections)</tt> to determine if support for 548 generic selections is enabled.</p> 549 550 <p>As an extension, the C1X generic selection expression is available in all 551 languages supported by Clang. The syntax is the same as that given in the 552 C1X draft standard.</p> 553 554 <p>In C, type compatibility is decided according to the rules given in the 555 appropriate standard, but in C++, which lacks the type compatibility rules 556 used in C, types are considered compatible only if they are equivalent.</p> 557 558 <h4 id="c_static_assert">C1X <tt>_Static_assert()</tt></h4> 559 560 <p>Use <tt>__has_feature(c_static_assert)</tt> or 561 <tt>__has_extension(c_static_assert)</tt> to determine if support for 562 compile-time assertions using <tt>_Static_assert</tt> is enabled.</p> 563 564 <!-- ======================================================================= --> 565 <h2 id="checking_type_traits">Checks for Type Traits</h2> 566 <!-- ======================================================================= --> 567 568 <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: 569 <blockquote> 570 <pre> 571 #if __has_extension(is_convertible_to) 572 template<typename From, typename To> 573 struct is_convertible_to { 574 static const bool value = __is_convertible_to(From, To); 575 }; 576 #else 577 // Emulate type trait 578 #endif 579 </pre> 580 </blockquote> 581 582 <p>The following type traits are supported by Clang:</p> 583 <ul> 584 <li><code>__has_nothrow_assign</code> (GNU, Microsoft)</li> 585 <li><code>__has_nothrow_copy</code> (GNU, Microsoft)</li> 586 <li><code>__has_nothrow_constructor</code> (GNU, Microsoft)</li> 587 <li><code>__has_trivial_assign</code> (GNU, Microsoft)</li> 588 <li><code>__has_trivial_copy</code> (GNU, Microsoft)</li> 589 <li><code>__has_trivial_constructor</code> (GNU, Microsoft)</li> 590 <li><code>__has_trivial_destructor</code> (GNU, Microsoft)</li> 591 <li><code>__has_virtual_destructor</code> (GNU, Microsoft)</li> 592 <li><code>__is_abstract</code> (GNU, Microsoft)</li> 593 <li><code>__is_base_of</code> (GNU, Microsoft)</li> 594 <li><code>__is_class</code> (GNU, Microsoft)</li> 595 <li><code>__is_convertible_to</code> (Microsoft)</li> 596 <li><code>__is_empty</code> (GNU, Microsoft)</li> 597 <li><code>__is_enum</code> (GNU, Microsoft)</li> 598 <li><code>__is_pod</code> (GNU, Microsoft)</li> 599 <li><code>__is_polymorphic</code> (GNU, Microsoft)</li> 600 <li><code>__is_union</code> (GNU, Microsoft)</li> 601 <li><code>__is_literal(type)</code>: Determines whether the given type is a literal type</li> 602 <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++0x standard library.</li> 603 </ul> 604 605 <!-- ======================================================================= --> 606 <h2 id="blocks">Blocks</h2> 607 <!-- ======================================================================= --> 608 609 <p>The syntax and high level language feature description is in <a 610 href="BlockLanguageSpec.txt">BlockLanguageSpec.txt</a>. Implementation and ABI 611 details for the clang implementation are in <a 612 href="Block-ABI-Apple.txt">Block-ABI-Apple.txt</a>.</p> 613 614 615 <p>Query for this feature with __has_extension(blocks).</p> 616 617 <!-- ======================================================================= --> 618 <h2 id="objc_features">Objective-C Features</h2> 619 <!-- ======================================================================= --> 620 621 <h3 id="objc_instancetype">Related result types</h3> 622 623 <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> 624 625 <blockquote> 626 <pre> 627 @interface NSObject 628 + (id)alloc; 629 - (id)init; 630 @end 631 632 @interface NSArray : NSObject 633 @end 634 </pre> 635 </blockquote> 636 637 <p>and this common initialization pattern</p> 638 639 <blockquote> 640 <pre> 641 NSArray *array = [[NSArray alloc] init]; 642 </pre> 643 </blockquote> 644 645 <p>the type of the expression <code>[NSArray alloc]</code> is 646 <code>NSArray*</code> because <code>alloc</code> implicitly has a 647 related result type. Similarly, the type of the expression 648 <code>[[NSArray alloc] init]</code> is <code>NSArray*</code>, since 649 <code>init</code> has a related result type and its receiver is known 650 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> 651 652 <p>To determine whether a method has a related result type, the first 653 word in the camel-case selector (e.g., "init" in "initWithObjects") is 654 considered, and the method will a related result type if its return 655 type is compatible with the type of its class and if</p> 656 657 <ul> 658 659 <li>the first word is "alloc" or "new", and the method is a class 660 method, or</li> 661 662 <li>the first word is "autorelease", "init", "retain", or "self", 663 and the method is an instance method.</li> 664 665 </ul> 666 667 <p>If a method with a related result type is overridden by a subclass 668 method, the subclass method must also return a type that is compatible 669 with the subclass type. For example:</p> 670 671 <blockquote> 672 <pre> 673 @interface NSString : NSObject 674 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString 675 @end 676 </pre> 677 </blockquote> 678 679 <p>Related result types only affect the type of a message send or 680 property access via the given method. In all other respects, a method 681 with a related result type is treated the same way as method without a 682 related result type.</p> 683 684 <!-- ======================================================================= --> 685 <h2 id="objc_arc">Automatic reference counting </h2> 686 <!-- ======================================================================= --> 687 688 <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> 689 690 <!-- ======================================================================= --> 691 <h2 id="overloading-in-c">Function Overloading in C</h2> 692 <!-- ======================================================================= --> 693 694 <p>Clang provides support for C++ function overloading in C. Function 695 overloading in C is introduced using the <tt>overloadable</tt> attribute. For 696 example, one might provide several overloaded versions of a <tt>tgsin</tt> 697 function that invokes the appropriate standard function computing the sine of a 698 value with <tt>float</tt>, <tt>double</tt>, or <tt>long double</tt> 699 precision:</p> 700 701 <blockquote> 702 <pre> 703 #include <math.h> 704 float <b>__attribute__((overloadable))</b> tgsin(float x) { return sinf(x); } 705 double <b>__attribute__((overloadable))</b> tgsin(double x) { return sin(x); } 706 long double <b>__attribute__((overloadable))</b> tgsin(long double x) { return sinl(x); } 707 </pre> 708 </blockquote> 709 710 <p>Given these declarations, one can call <tt>tgsin</tt> with a 711 <tt>float</tt> value to receive a <tt>float</tt> result, with a 712 <tt>double</tt> to receive a <tt>double</tt> result, etc. Function 713 overloading in C follows the rules of C++ function overloading to pick 714 the best overload given the call arguments, with a few C-specific 715 semantics:</p> 716 <ul> 717 <li>Conversion from <tt>float</tt> or <tt>double</tt> to <tt>long 718 double</tt> is ranked as a floating-point promotion (per C99) rather 719 than as a floating-point conversion (as in C++).</li> 720 721 <li>A conversion from a pointer of type <tt>T*</tt> to a pointer of type 722 <tt>U*</tt> is considered a pointer conversion (with conversion 723 rank) if <tt>T</tt> and <tt>U</tt> are compatible types.</li> 724 725 <li>A conversion from type <tt>T</tt> to a value of type <tt>U</tt> 726 is permitted if <tt>T</tt> and <tt>U</tt> are compatible types. This 727 conversion is given "conversion" rank.</li> 728 </ul> 729 730 <p>The declaration of <tt>overloadable</tt> functions is restricted to 731 function declarations and definitions. Most importantly, if any 732 function with a given name is given the <tt>overloadable</tt> 733 attribute, then all function declarations and definitions with that 734 name (and in that scope) must have the <tt>overloadable</tt> 735 attribute. This rule even applies to redeclarations of functions whose original 736 declaration had the <tt>overloadable</tt> attribute, e.g.,</p> 737 738 <blockquote> 739 <pre> 740 int f(int) __attribute__((overloadable)); 741 float f(float); <i>// error: declaration of "f" must have the "overloadable" attribute</i> 742 743 int g(int) __attribute__((overloadable)); 744 int g(int) { } <i>// error: redeclaration of "g" must also have the "overloadable" attribute</i> 745 </pre> 746 </blockquote> 747 748 <p>Functions marked <tt>overloadable</tt> must have 749 prototypes. Therefore, the following code is ill-formed:</p> 750 751 <blockquote> 752 <pre> 753 int h() __attribute__((overloadable)); <i>// error: h does not have a prototype</i> 754 </pre> 755 </blockquote> 756 757 <p>However, <tt>overloadable</tt> functions are allowed to use a 758 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> 759 760 <blockquote> 761 <pre> 762 void honeypot(...) __attribute__((overloadable, unavailable)); <i>// calling me is an error</i> 763 </pre> 764 </blockquote> 765 766 <p>Functions declared with the <tt>overloadable</tt> attribute have 767 their names mangled according to the same rules as C++ function 768 names. For example, the three <tt>tgsin</tt> functions in our 769 motivating example get the mangled names <tt>_Z5tgsinf</tt>, 770 <tt>_Z5tgsind</tt>, and <tt>_Z5tgsine</tt>, respectively. There are two 771 caveats to this use of name mangling:</p> 772 773 <ul> 774 775 <li>Future versions of Clang may change the name mangling of 776 functions overloaded in C, so you should not depend on an specific 777 mangling. To be completely safe, we strongly urge the use of 778 <tt>static inline</tt> with <tt>overloadable</tt> functions.</li> 779 780 <li>The <tt>overloadable</tt> attribute has almost no meaning when 781 used in C++, because names will already be mangled and functions are 782 already overloadable. However, when an <tt>overloadable</tt> 783 function occurs within an <tt>extern "C"</tt> linkage specification, 784 it's name <i>will</i> be mangled in the same way as it would in 785 C.</li> 786 </ul> 787 788 <p>Query for this feature with __has_extension(attribute_overloadable).</p> 789 790 791 <!-- ======================================================================= --> 792 <h2 id="builtins">Builtin Functions</h2> 793 <!-- ======================================================================= --> 794 795 <p>Clang supports a number of builtin library functions with the same syntax as 796 GCC, including things like <tt>__builtin_nan</tt>, 797 <tt>__builtin_constant_p</tt>, <tt>__builtin_choose_expr</tt>, 798 <tt>__builtin_types_compatible_p</tt>, <tt>__sync_fetch_and_add</tt>, etc. In 799 addition to the GCC builtins, Clang supports a number of builtins that GCC does 800 not, which are listed here.</p> 801 802 <p>Please note that Clang does not and will not support all of the GCC builtins 803 for vector operations. Instead of using builtins, you should use the functions 804 defined in target-specific header files like <tt><xmmintrin.h></tt>, which 805 define portable wrappers for these. Many of the Clang versions of these 806 functions are implemented directly in terms of <a href="#vectors">extended 807 vector support</a> instead of builtins, in order to reduce the number of 808 builtins that we need to implement.</p> 809 810 <!-- ======================================================================= --> 811 <h3><a name="__builtin_shufflevector">__builtin_shufflevector</a></h3> 812 <!-- ======================================================================= --> 813 814 <p><tt>__builtin_shufflevector</tt> is used to express generic vector 815 permutation/shuffle/swizzle operations. This builtin is also very important for 816 the implementation of various target-specific header files like 817 <tt><xmmintrin.h></tt>. 818 </p> 819 820 <p><b>Syntax:</b></p> 821 822 <pre> 823 __builtin_shufflevector(vec1, vec2, index1, index2, ...) 824 </pre> 825 826 <p><b>Examples:</b></p> 827 828 <pre> 829 // Identity operation - return 4-element vector V1. 830 __builtin_shufflevector(V1, V1, 0, 1, 2, 3) 831 832 // "Splat" element 0 of V1 into a 4-element result. 833 __builtin_shufflevector(V1, V1, 0, 0, 0, 0) 834 835 // Reverse 4-element vector V1. 836 __builtin_shufflevector(V1, V1, 3, 2, 1, 0) 837 838 // Concatenate every other element of 4-element vectors V1 and V2. 839 __builtin_shufflevector(V1, V2, 0, 2, 4, 6) 840 841 // Concatenate every other element of 8-element vectors V1 and V2. 842 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14) 843 </pre> 844 845 <p><b>Description:</b></p> 846 847 <p>The first two arguments to __builtin_shufflevector are vectors that have the 848 same element type. The remaining arguments are a list of integers that specify 849 the elements indices of the first two vectors that should be extracted and 850 returned in a new vector. These element indices are numbered sequentially 851 starting with the first vector, continuing into the second vector. Thus, if 852 vec1 is a 4-element vector, index 5 would refer to the second element of vec2. 853 </p> 854 855 <p>The result of __builtin_shufflevector is a vector 856 with the same element type as vec1/vec2 but that has an element count equal to 857 the number of indices specified. 858 </p> 859 860 <p>Query for this feature with __has_builtin(__builtin_shufflevector).</p> 861 862 <!-- ======================================================================= --> 863 <h3><a name="__builtin_unreachable">__builtin_unreachable</a></h3> 864 <!-- ======================================================================= --> 865 866 <p><tt>__builtin_unreachable</tt> is used to indicate that a specific point in 867 the program cannot be reached, even if the compiler might otherwise think it 868 can. This is useful to improve optimization and eliminates certain warnings. 869 For example, without the <tt>__builtin_unreachable</tt> in the example below, 870 the compiler assumes that the inline asm can fall through and prints a "function 871 declared 'noreturn' should not return" warning. 872 </p> 873 874 <p><b>Syntax:</b></p> 875 876 <pre> 877 __builtin_unreachable() 878 </pre> 879 880 <p><b>Example of Use:</b></p> 881 882 <pre> 883 void myabort(void) __attribute__((noreturn)); 884 void myabort(void) { 885 asm("int3"); 886 __builtin_unreachable(); 887 } 888 </pre> 889 890 <p><b>Description:</b></p> 891 892 <p>The __builtin_unreachable() builtin has completely undefined behavior. Since 893 it has undefined behavior, it is a statement that it is never reached and the 894 optimizer can take advantage of this to produce better code. This builtin takes 895 no arguments and produces a void result. 896 </p> 897 898 <p>Query for this feature with __has_builtin(__builtin_unreachable).</p> 899 900 <!-- ======================================================================= --> 901 <h3><a name="__sync_swap">__sync_swap</a></h3> 902 <!-- ======================================================================= --> 903 904 <p><tt>__sync_swap</tt> is used to atomically swap integers or pointers in 905 memory. 906 </p> 907 908 <p><b>Syntax:</b></p> 909 910 <pre> 911 <i>type</i> __sync_swap(<i>type</i> *ptr, <i>type</i> value, ...) 912 </pre> 913 914 <p><b>Example of Use:</b></p> 915 916 <pre> 917 int old_value = __sync_swap(&value, new_value); 918 </pre> 919 920 <p><b>Description:</b></p> 921 922 <p>The __sync_swap() builtin extends the existing __sync_*() family of atomic 923 intrinsics to allow code to atomically swap the current value with the new 924 value. More importantly, it helps developers write more efficient and correct 925 code by avoiding expensive loops around __sync_bool_compare_and_swap() or 926 relying on the platform specific implementation details of 927 __sync_lock_test_and_set(). The __sync_swap() builtin is a full barrier. 928 </p> 929 930 931 <!-- ======================================================================= --> 932 <h2 id="targetspecific">Target-Specific Extensions</h2> 933 <!-- ======================================================================= --> 934 935 <p>Clang supports some language features conditionally on some targets.</p> 936 937 <!-- ======================================================================= --> 938 <h3 id="x86-specific">X86/X86-64 Language Extensions</h3> 939 <!-- ======================================================================= --> 940 941 <p>The X86 backend has these language extensions:</p> 942 943 <!-- ======================================================================= --> 944 <h4 id="x86-gs-segment">Memory references off the GS segment</h4> 945 <!-- ======================================================================= --> 946 947 <p>Annotating a pointer with address space #256 causes it to be code generated 948 relative to the X86 GS segment register, and address space #257 causes it to be 949 relative to the X86 FS segment. Note that this is a very very low-level 950 feature that should only be used if you know what you're doing (for example in 951 an OS kernel).</p> 952 953 <p>Here is an example:</p> 954 955 <pre> 956 #define GS_RELATIVE __attribute__((address_space(256))) 957 int foo(int GS_RELATIVE *P) { 958 return *P; 959 } 960 </pre> 961 962 <p>Which compiles to (on X86-32):</p> 963 964 <pre> 965 _foo: 966 movl 4(%esp), %eax 967 movl %gs:(%eax), %eax 968 ret 969 </pre> 970 971 <!-- ======================================================================= --> 972 <h2 id="analyzerspecific">Static Analysis-Specific Extensions</h2> 973 <!-- ======================================================================= --> 974 975 <p>Clang supports additional attributes that are useful for documenting program 976 invariants and rules for static analysis tools. The extensions documented here 977 are used by the <a 978 href="http://clang.llvm.org/StaticAnalysis.html">path-sensitive static analyzer 979 engine</a> that is part of Clang's Analysis library.</p> 980 981 <h3 id="attr_analyzer_noreturn">The <tt>analyzer_noreturn</tt> attribute</h3> 982 983 <p>Clang's static analysis engine understands the standard <tt>noreturn</tt> 984 attribute. This attribute, which is typically affixed to a function prototype, 985 indicates that a call to a given function never returns. Function prototypes for 986 common functions like <tt>exit</tt> are typically annotated with this attribute, 987 as well as a variety of common assertion handlers. Users can educate the static 988 analyzer about their own custom assertion handles (thus cutting down on false 989 positives due to false paths) by marking their own "panic" functions 990 with this attribute.</p> 991 992 <p>While useful, <tt>noreturn</tt> is not applicable in all cases. Sometimes 993 there are special functions that for all intents and purposes should be 994 considered panic functions (i.e., they are only called when an internal program 995 error occurs) but may actually return so that the program can fail gracefully. 996 The <tt>analyzer_noreturn</tt> attribute allows one to annotate such functions 997 as being interpreted as "no return" functions by the analyzer (thus 998 pruning bogus paths) but will not affect compilation (as in the case of 999 <tt>noreturn</tt>).</p> 1000 1001 <p><b>Usage</b>: The <tt>analyzer_noreturn</tt> attribute can be placed in the 1002 same places where the <tt>noreturn</tt> attribute can be placed. It is commonly 1003 placed at the end of function prototypes:</p> 1004 1005 <pre> 1006 void foo() <b>__attribute__((analyzer_noreturn))</b>; 1007 </pre> 1008 1009 <p>Query for this feature with 1010 <tt>__has_attribute(analyzer_noreturn)</tt>.</p> 1011 1012 <h3 id="attr_method_family">The <tt>objc_method_family</tt> attribute</h3> 1013 1014 <p>Many methods in Objective-C have conventional meanings determined 1015 by their selectors. For the purposes of static analysis, it is 1016 sometimes useful to be able to mark a method as having a particular 1017 conventional meaning despite not having the right selector, or as not 1018 having the conventional meaning that its selector would suggest. 1019 For these use cases, we provide an attribute to specifically describe 1020 the <q>method family</q> that a method belongs to.</p> 1021 1022 <p><b>Usage</b>: <tt>__attribute__((objc_method_family(X)))</tt>, 1023 where <tt>X</tt> is one of <tt>none</tt>, <tt>alloc</tt>, <tt>copy</tt>, 1024 <tt>init</tt>, <tt>mutableCopy</tt>, or <tt>new</tt>. This attribute 1025 can only be placed at the end of a method declaration:</p> 1026 1027 <pre> 1028 - (NSString*) initMyStringValue <b>__attribute__((objc_method_family(none)))</b>; 1029 </pre> 1030 1031 <p>Users who do not wish to change the conventional meaning of a 1032 method, and who merely want to document its non-standard retain and 1033 release semantics, should use the 1034 <a href="#attr_retain_release">retaining behavior attributes</a> 1035 described below.</p> 1036 1037 <p>Query for this feature with 1038 <tt>__has_attribute(objc_method_family)</tt>.</p> 1039 1040 <h3 id="attr_retain_release">Objective-C retaining behavior attributes</h3> 1041 1042 <p>In Objective-C, functions and methods are generally assumed to take 1043 and return objects with +0 retain counts, with some exceptions for 1044 special methods like <tt>+alloc</tt> and <tt>init</tt>. However, 1045 there are exceptions, and so Clang provides attributes to allow these 1046 exceptions to be documented, which helps the analyzer find leaks (and 1047 ignore non-leaks). Some exceptions may be better described using 1048 the <a href="#attr_method_family"><tt>objc_method_family</tt></a> 1049 attribute instead.</p> 1050 1051 <p><b>Usage</b>: The <tt>ns_returns_retained</tt>, <tt>ns_returns_not_retained</tt>, 1052 <tt>ns_returns_autoreleased</tt>, <tt>cf_returns_retained</tt>, 1053 and <tt>cf_returns_not_retained</tt> attributes can be placed on 1054 methods and functions that return Objective-C or CoreFoundation 1055 objects. They are commonly placed at the end of a function prototype 1056 or method declaration:</p> 1057 1058 <pre> 1059 id foo() <b>__attribute__((ns_returns_retained))</b>; 1060 1061 - (NSString*) bar: (int) x <b>__attribute__((ns_returns_retained))</b>; 1062 </pre> 1063 1064 <p>The <tt>*_returns_retained</tt> attributes specify that the 1065 returned object has a +1 retain count. 1066 The <tt>*_returns_not_retained</tt> attributes specify that the return 1067 object has a +0 retain count, even if the normal convention for its 1068 selector would be +1. <tt>ns_returns_autoreleased</tt> specifies that the 1069 returned object is +0, but is guaranteed to live at least as long as the 1070 next flush of an autorelease pool.</p> 1071 1072 <p><b>Usage</b>: The <tt>ns_consumed</tt> and <tt>cf_consumed</tt> 1073 attributes can be placed on an parameter declaration; they specify 1074 that the argument is expected to have a +1 retain count, which will be 1075 balanced in some way by the function or method. 1076 The <tt>ns_consumes_self</tt> attribute can only be placed on an 1077 Objective-C method; it specifies that the method expects 1078 its <tt>self</tt> parameter to have a +1 retain count, which it will 1079 balance in some way.</p> 1080 1081 <pre> 1082 void <b>foo(__attribute__((ns_consumed))</b> NSString *string); 1083 1084 - (void) bar <b>__attribute__((ns_consumes_self))</b>; 1085 - (void) baz: (id) <b>__attribute__((ns_consumed))</b> x; 1086 </pre> 1087 1088 <p>Query for these features with <tt>__has_attribute(ns_consumed)</tt>, 1089 <tt>__has_attribute(ns_returns_retained)</tt>, etc.</p> 1090 1091 </div> 1092 </body> 1093 </html> 1094