Home | History | Annotate | Download | only in docs
      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") &amp;&amp; __has_include(&lt;stdint.h&gt;)
    264 # include "myinclude.h"
    265 #endif
    266 
    267 // To avoid problem with non-clang compilers not having this macro.
    268 #if defined(__has_include) &amp;&amp; __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") &amp;&amp; __has_include_next(&lt;stdint.h&gt;)
    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) &amp;&amp; __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>&amp;</code> or <code>&amp;&amp;</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&lt;typename From, typename To&gt;
    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 &lt;math.h&gt;
    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 &lt;math.h&gt;
    941 #include &lt;complex.h&gt;
    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>&lt;xmmintrin.h&gt;</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>&lt;xmmintrin.h&gt;</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(&amp;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 &quot;panic&quot; 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 &quot;no return&quot; 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