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/ -->
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">
18 <!--#include virtual="../menu.html.incl"-->
22 <h1>Clang Language Extensions</h1>
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>
34 <li><a href="#cxx_exceptions">C++ exceptions</a></li>
35 <li><a href="#cxx_rtti">C++ RTTI</a></li>
37 <li><a href="#checking_upcoming_features">Checks for Upcoming Standard Language Features</a>
39 <li><a href="#cxx0x">C++11</a>
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_defaulted_functions">C++11 defaulted functions</a></li>
50 <li><a href="#cxx_delegating_constructor">C++11 delegating constructors</a></li>
51 <li><a href="#cxx_deleted_functions">C++11 deleted functions</a></li>
52 <li><a href="#cxx_explicit_conversions">C++11 explicit conversion functions</a></li>
53 <li><a href="#cxx_generalized_initializers">C++11 generalized initializers</a></li>
54 <li><a href="#cxx_implicit_moves">C++11 implicit move constructors/assignment operators</a></li>
55 <li><a href="#cxx_inheriting_constructors">C++11 inheriting constructors</a></li>
56 <li><a href="#cxx_inline_namespaces">C++11 inline namespaces</a></li>
57 <li><a href="#cxx_lambdas">C++11 lambdas</a></li>
58 <li><a href="#cxx_noexcept">C++11 noexcept specification</a></li>
59 <li><a href="#cxx_nonstatic_member_init">C++11 in-class non-static data member initialization</a></li>
60 <li><a href="#cxx_nullptr">C++11 nullptr</a></li>
61 <li><a href="#cxx_override_control">C++11 override control</a></li>
62 <li><a href="#cxx_range_for">C++11 range-based for loop</a></li>
63 <li><a href="#cxx_raw_string_literals">C++11 raw string literals</a></li>
64 <li><a href="#cxx_rvalue_references">C++11 rvalue references</a></li>
65 <li><a href="#cxx_reference_qualified_functions">C++11 reference-qualified functions</a></li>
66 <li><a href="#cxx_static_assert">C++11 <tt>static_assert()</tt></a></li>
67 <li><a href="#cxx_auto_type">C++11 type inference</a></li>
68 <li><a href="#cxx_strong_enums">C++11 strongly-typed enumerations</a></li>
69 <li><a href="#cxx_trailing_return">C++11 trailing return type</a></li>
70 <li><a href="#cxx_unicode_literals">C++11 Unicode string literals</a></li>
71 <li><a href="#cxx_unrestricted_unions">C++11 unrestricted unions</a></li>
72 <li><a href="#cxx_user_literals">C++11 user-defined literals</a></li>
73 <li><a href="#cxx_variadic_templates">C++11 variadic templates</a></li>
75 <li><a href="#c11">C11</a>
77 <li><a href="#c_alignas">C11 alignment specifiers</a></li>
78 <li><a href="#c_generic_selections">C11 generic selections</a></li>
79 <li><a href="#c_static_assert">C11 <tt>_Static_assert()</tt></a></li>
82 <li><a href="#checking_type_traits">Checks for Type Traits</a></li>
83 <li><a href="#blocks">Blocks</a></li>
84 <li><a href="#objc_features">Objective-C Features</a>
86 <li><a href="#objc_instancetype">Related result types</a></li>
87 <li><a href="#objc_arc">Automatic reference counting</a></li>
88 <li><a href="#objc_fixed_enum">Enumerations with a fixed underlying type</a></li>
91 <li><a href="#overloading-in-c">Function Overloading in C</a></li>
92 <li><a href="#complex-list-init">Initializer lists for complex numbers in C</a></li>
93 <li><a href="#builtins">Builtin Functions</a>
95 <li><a href="#__builtin_shufflevector">__builtin_shufflevector</a></li>
96 <li><a href="#__builtin_unreachable">__builtin_unreachable</a></li>
97 <li><a href="#__sync_swap">__sync_swap</a></li>
100 <li><a href="#targetspecific">Target-Specific Extensions</a>
102 <li><a href="#x86-specific">X86/X86-64 Language Extensions</a></li>
105 <li><a href="#analyzerspecific">Static Analysis-Specific Extensions</a></li>
106 <li><a href="#dynamicanalyzerspecific">Dynamic Analysis-Specific Extensions</a>
108 <li><a href="#address_sanitizer">AddressSanitizer</a></li>
111 <li><a href="#threadsafety">Thread Safety Annotation Checking</a>
113 <li><a href="#ts_noanal"><tt>no_thread_safety_analysis</tt></a></li>
114 <li><a href="#ts_lockable"><tt>lockable</tt></a></li>
115 <li><a href="#ts_scopedlockable"><tt>scoped_lockable</tt></a></li>
116 <li><a href="#ts_guardedvar"><tt>guarded_var</tt></a></li>
117 <li><a href="#ts_ptguardedvar"><tt>pt_guarded_var</tt></a></li>
118 <li><a href="#ts_guardedby"><tt>guarded_by(l)</tt></a></li>
119 <li><a href="#ts_ptguardedby"><tt>pt_guarded_by(l)</tt></a></li>
120 <li><a href="#ts_acquiredbefore"><tt>acquired_before(...)</tt></a></li>
121 <li><a href="#ts_acquiredafter"><tt>acquired_after(...)</tt></a></li>
122 <li><a href="#ts_elf"><tt>exclusive_lock_function(...)</tt></a></li>
123 <li><a href="#ts_slf"><tt>shared_lock_function(...)</tt></a></li>
124 <li><a href="#ts_etf"><tt>exclusive_trylock_function(...)</tt></a></li>
125 <li><a href="#ts_stf"><tt>shared_trylock_function(...)</tt></a></li>
126 <li><a href="#ts_uf"><tt>unlock_function(...)</tt></a></li>
127 <li><a href="#ts_lr"><tt>lock_returned(l)</tt></a></li>
128 <li><a href="#ts_le"><tt>locks_excluded(...)</tt></a></li>
129 <li><a href="#ts_elr"><tt>exclusive_locks_required(...)</tt></a></li>
130 <li><a href="#ts_slr"><tt>shared_locks_required(...)</tt></a></li>
135 <!-- ======================================================================= -->
136 <h2 id="intro">Introduction</h2>
137 <!-- ======================================================================= -->
139 <p>This document describes the language extensions provided by Clang. In
140 addition to the language extensions listed here, Clang aims to support a broad
141 range of GCC extensions. Please see the <a
142 href="http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html">GCC manual</a> for
143 more information on these extensions.</p>
145 <!-- ======================================================================= -->
146 <h2 id="feature_check">Feature Checking Macros</h2>
147 <!-- ======================================================================= -->
149 <p>Language extensions can be very useful, but only if you know you can depend
150 on them. In order to allow fine-grain features checks, we support three builtin
151 function-like macros. This allows you to directly test for a feature in your
152 code without having to resort to something like autoconf or fragile "compiler
155 <!-- ======================================================================= -->
156 <h3><a name="__has_builtin">__has_builtin</a></h3>
157 <!-- ======================================================================= -->
159 <p>This function-like macro takes a single identifier argument that is the name
160 of a builtin function. It evaluates to 1 if the builtin is supported or 0 if
161 not. It can be used like this:</p>
165 #ifndef __has_builtin // Optional of course.
166 #define __has_builtin(x) 0 // Compatibility with non-clang compilers.
170 #if __has_builtin(__builtin_trap)
180 <!-- ======================================================================= -->
181 <h3><a name="__has_feature_extension"> __has_feature and __has_extension</a></h3>
182 <!-- ======================================================================= -->
184 <p>These function-like macros take a single identifier argument that is the
185 name of a feature. <code>__has_feature</code> evaluates to 1 if the feature
186 is both supported by Clang and standardized in the current language standard
187 or 0 if not (but see <a href="#has_feature_back_compat">below</a>), while
188 <code>__has_extension</code> evaluates to 1 if the feature is supported by
189 Clang in the current language (either as a language extension or a standard
190 language feature) or 0 if not. They can be used like this:</p>
194 #ifndef __has_feature // Optional of course.
195 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
197 #ifndef __has_extension
198 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
202 #if __has_feature(cxx_rvalue_references)
203 // This code will only be compiled with the -std=c++11 and -std=gnu++11
204 // options, because rvalue references are only standardized in C++11.
207 #if __has_extension(cxx_rvalue_references)
208 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
209 // and -std=gnu++98 options, because rvalue references are supported as a
210 // language extension in C++98.
215 <p id="has_feature_back_compat">For backwards compatibility reasons,
216 <code>__has_feature</code> can also be used to test for support for
217 non-standardized features, i.e. features not prefixed <code>c_</code>,
218 <code>cxx_</code> or <code>objc_</code>.</p>
220 <p id="has_feature_for_non_language_features">
221 Another use of <code>__has_feature</code> is to check for compiler features
222 not related to the language standard, such as e.g.
223 <a href="AddressSanitizer.html">AddressSanitizer</a>.
225 <p>If the <code>-pedantic-errors</code> option is given,
226 <code>__has_extension</code> is equivalent to <code>__has_feature</code>.</p>
228 <p>The feature tag is described along with the language feature below.</p>
230 <!-- ======================================================================= -->
231 <h3><a name="__has_attribute">__has_attribute</a></h3>
232 <!-- ======================================================================= -->
234 <p>This function-like macro takes a single identifier argument that is the name
235 of an attribute. It evaluates to 1 if the attribute is supported or 0 if not. It
236 can be used like this:</p>
240 #ifndef __has_attribute // Optional of course.
241 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
245 #if __has_attribute(always_inline)
246 #define ALWAYS_INLINE __attribute__((always_inline))
248 #define ALWAYS_INLINE
254 <!-- ======================================================================= -->
255 <h2 id="has_include">Include File Checking Macros</h2>
256 <!-- ======================================================================= -->
258 <p>Not all developments systems have the same include files.
259 The <a href="#__has_include">__has_include</a> and
260 <a href="#__has_include_next">__has_include_next</a> macros allow you to
261 check for the existence of an include file before doing
262 a possibly failing #include directive.</p>
264 <!-- ======================================================================= -->
265 <h3><a name="__has_include">__has_include</a></h3>
266 <!-- ======================================================================= -->
268 <p>This function-like macro takes a single file name string argument that
269 is the name of an include file. It evaluates to 1 if the file can
270 be found using the include paths, or 0 otherwise:</p>
274 // Note the two possible file name string formats.
275 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
276 # include "myinclude.h"
279 // To avoid problem with non-clang compilers not having this macro.
280 #if defined(__has_include) && __has_include("myinclude.h")
281 # include "myinclude.h"
286 <p>To test for this feature, use #if defined(__has_include).</p>
288 <!-- ======================================================================= -->
289 <h3><a name="__has_include_next">__has_include_next</a></h3>
290 <!-- ======================================================================= -->
292 <p>This function-like macro takes a single file name string argument that
293 is the name of an include file. It is like __has_include except that it
294 looks for the second instance of the given file found in the include
295 paths. It evaluates to 1 if the second instance of the file can
296 be found using the include paths, or 0 otherwise:</p>
300 // Note the two possible file name string formats.
301 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
302 # include_next "myinclude.h"
305 // To avoid problem with non-clang compilers not having this macro.
306 #if defined(__has_include_next) && __has_include_next("myinclude.h")
307 # include_next "myinclude.h"
312 <p>Note that __has_include_next, like the GNU extension
313 #include_next directive, is intended for use in headers only,
314 and will issue a warning if used in the top-level compilation
315 file. A warning will also be issued if an absolute path
316 is used in the file argument.</p>
319 <!-- ======================================================================= -->
320 <h3><a name="__has_warning">__has_warning</a></h3>
321 <!-- ======================================================================= -->
323 <p>This function-like macro takes a string literal that represents a command
324 line option for a warning and returns true if that is a valid warning
329 #if __has_warning("-Wformat")
335 <!-- ======================================================================= -->
336 <h2 id="builtinmacros">Builtin Macros</h2>
337 <!-- ======================================================================= -->
340 <dt><code>__BASE_FILE__</code></dt>
341 <dd>Defined to a string that contains the name of the main input
342 file passed to Clang.</dd>
344 <dt><code>__COUNTER__</code></dt>
345 <dd>Defined to an integer value that starts at zero and is
346 incremented each time the <code>__COUNTER__</code> macro is
349 <dt><code>__INCLUDE_LEVEL__</code></dt>
350 <dd>Defined to an integral value that is the include depth of the
351 file currently being translated. For the main file, this value is
354 <dt><code>__TIMESTAMP__</code></dt>
355 <dd>Defined to the date and time of the last modification of the
356 current source file.</dd>
358 <dt><code>__clang__</code></dt>
359 <dd>Defined when compiling with Clang</dd>
361 <dt><code>__clang_major__</code></dt>
362 <dd>Defined to the major marketing version number of Clang (e.g., the
363 2 in 2.0.1). Note that marketing version numbers should not be used to
364 check for language features, as different vendors use different numbering
365 schemes. Instead, use the <a href="#feature_check">feature checking
368 <dt><code>__clang_minor__</code></dt>
369 <dd>Defined to the minor version number of Clang (e.g., the 0 in
370 2.0.1). Note that marketing version numbers should not be used to
371 check for language features, as different vendors use different numbering
372 schemes. Instead, use the <a href="#feature_check">feature checking
375 <dt><code>__clang_patchlevel__</code></dt>
376 <dd>Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).</dd>
378 <dt><code>__clang_version__</code></dt>
379 <dd>Defined to a string that captures the Clang marketing version, including
380 the Subversion tag or revision number, e.g., "1.5 (trunk 102332)".</dd>
383 <!-- ======================================================================= -->
384 <h2 id="vectors">Vectors and Extended Vectors</h2>
385 <!-- ======================================================================= -->
387 <p>Supports the GCC vector extensions, plus some stuff like V[1].</p>
389 <p>Also supports <tt>ext_vector</tt>, which additionally support for V.xyzw
390 syntax and other tidbits as seen in OpenCL. An example is:</p>
394 typedef float float4 <b>__attribute__((ext_vector_type(4)))</b>;
395 typedef float float2 <b>__attribute__((ext_vector_type(2)))</b>;
397 float4 foo(float2 a, float2 b) {
406 <p>Query for this feature with __has_extension(attribute_ext_vector_type).</p>
408 <p>See also <a href="#__builtin_shufflevector">__builtin_shufflevector</a>.</p>
410 <!-- ======================================================================= -->
411 <h2 id="deprecated">Messages on <tt>deprecated</tt> and <tt>unavailable</tt> Attributes</h2>
412 <!-- ======================================================================= -->
414 <p>An optional string message can be added to the <tt>deprecated</tt>
415 and <tt>unavailable</tt> attributes. For example:</p>
418 <pre>void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));</pre>
421 <p>If the deprecated or unavailable declaration is used, the message
422 will be incorporated into the appropriate diagnostic:</p>
425 <pre>harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!! [-Wdeprecated-declarations]
430 <p>Query for this feature
431 with <tt>__has_extension(attribute_deprecated_with_message)</tt>
432 and <tt>__has_extension(attribute_unavailable_with_message)</tt>.</p>
434 <!-- ======================================================================= -->
435 <h2 id="attributes-on-enumerators">Attributes on Enumerators</h2>
436 <!-- ======================================================================= -->
438 <p>Clang allows attributes to be written on individual enumerators.
439 This allows enumerators to be deprecated, made unavailable, etc. The
440 attribute must appear after the enumerator name and before any
441 initializer, like so:</p>
444 <pre>enum OperationMode {
447 OM_Terrified __attribute__((deprecated)),
448 OM_AbortOnError __attribute__((deprecated)) = 4
452 <p>Attributes on the <tt>enum</tt> declaration do not apply to
453 individual enumerators.</p>
455 <p>Query for this feature with <tt>__has_extension(enumerator_attributes)</tt>.</p>
457 <!-- ======================================================================= -->
458 <h2 id="checking_language_features">Checks for Standard Language Features</h2>
459 <!-- ======================================================================= -->
461 <p>The <tt>__has_feature</tt> macro can be used to query if certain standard language features are
462 enabled. Those features are listed here.</p>
464 <h3 id="cxx_exceptions">C++ exceptions</h3>
466 <p>Use <tt>__has_feature(cxx_exceptions)</tt> to determine if C++ exceptions have been enabled. For
467 example, compiling code with <tt>-fexceptions</tt> enables C++ exceptions.</p>
469 <h3 id="cxx_rtti">C++ RTTI</h3>
471 <p>Use <tt>__has_feature(cxx_rtti)</tt> to determine if C++ RTTI has been enabled. For example,
472 compiling code with <tt>-fno-rtti</tt> disables the use of RTTI.</p>
474 <!-- ======================================================================= -->
475 <h2 id="checking_upcoming_features">Checks for Upcoming Standard Language Features</h2>
476 <!-- ======================================================================= -->
478 <p>The <tt>__has_feature</tt> or <tt>__has_extension</tt> macros can be used
479 to query if certain upcoming standard language features are enabled. Those
480 features are listed here. Features that are not yet implemented will be
483 <h3 id="cxx0x">C++11</h3>
485 <p>The features listed below are slated for inclusion in the upcoming
486 C++11 standard. As a result, all these features are enabled
487 with the <tt>-std=c++11</tt> option when compiling C++ code.</p>
489 <h4 id="cxx_access_control_sfinae">C++11 SFINAE includes access control</h4>
491 <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>
493 <h4 id="cxx_alias_templates">C++11 alias templates</h4>
495 <p>Use <tt>__has_feature(cxx_alias_templates)</tt> or
496 <tt>__has_extension(cxx_alias_templates)</tt> to determine if support for
497 C++11's alias declarations and alias templates is enabled.</p>
499 <h4 id="cxx_alignas">C++11 alignment specifiers</h4>
501 <p>Use <tt>__has_feature(cxx_alignas)</tt> or
502 <tt>__has_extension(cxx_alignas)</tt> to determine if support for alignment
503 specifiers using <tt>alignas</tt> is enabled.</p>
505 <h4 id="cxx_attributes">C++11 attributes</h4>
507 <p>Use <tt>__has_feature(cxx_attributes)</tt> or
508 <tt>__has_extension(cxx_attributes)</tt> to determine if support for attribute
509 parsing with C++11's square bracket notation is enabled.</p>
511 <h4 id="cxx_constexpr">C++11 generalized constant expressions</h4>
513 <p>Use <tt>__has_feature(cxx_constexpr)</tt> to determine if support
514 for generalized constant expressions (e.g., <tt>constexpr</tt>) is
515 enabled. Clang does not currently implement this feature.</p>
517 <h4 id="cxx_decltype">C++11 <tt>decltype()</tt></h4>
519 <p>Use <tt>__has_feature(cxx_decltype)</tt> or
520 <tt>__has_extension(cxx_decltype)</tt> to determine if support for the
521 <tt>decltype()</tt> specifier is enabled.</p>
523 <h4 id="cxx_default_function_template_args">C++11 default template arguments in function templates</h4>
525 <p>Use <tt>__has_feature(cxx_default_function_template_args)</tt> or
526 <tt>__has_extension(cxx_default_function_template_args)</tt> to determine
527 if support for default template arguments in function templates is enabled.</p>
529 <h4 id="cxx_defaulted_functions">C++11 <tt>default</tt>ed functions</h4>
531 <p>Use <tt>__has_feature(cxx_defaulted_functions)</tt> or
532 <tt>__has_extension(cxx_defaulted_functions)</tt> to determine if support for
533 defaulted function definitions (with <tt>= default</tt>) is enabled.</p>
535 <h4 id="cxx_delegating_constructors">C++11 delegating constructors</h4>
537 <p>Use <tt>__has_feature(cxx_delegating_constructors)</tt> to determine if
538 support for delegating constructors is enabled.</p>
540 <h4 id="cxx_deleted_functions">C++11 <tt>delete</tt>d functions</h4>
542 <p>Use <tt>__has_feature(cxx_deleted_functions)</tt> or
543 <tt>__has_extension(cxx_deleted_functions)</tt> to determine if support for
544 deleted function definitions (with <tt>= delete</tt>) is enabled.</p>
546 <h4 id="cxx_explicit_conversions">C++11 explicit conversion functions</h4>
547 <p>Use <tt>__has_feature(cxx_explicit_conversions)</tt> to determine if support for <tt>explicit</tt> conversion functions is enabled.</p>
549 <h4 id="cxx_generalized_initializers">C++11 generalized initializers</h4>
551 <p>Use <tt>__has_feature(cxx_generalized_initializers)</tt> to determine if
552 support for generalized initializers (using braced lists and
553 <tt>std::initializer_list</tt>) is enabled. Clang does not currently implement
556 <h4 id="cxx_implicit_moves">C++11 implicit move constructors/assignment operators</h4>
558 <p>Use <tt>__has_feature(cxx_implicit_moves)</tt> to determine if Clang will
559 implicitly generate move constructors and move assignment operators where needed.</p>
561 <h4 id="cxx_inheriting_constructors">C++11 inheriting constructors</h4>
563 <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>
565 <h4 id="cxx_inline_namespaces">C++11 inline namespaces</h4>
567 <p>Use <tt>__has_feature(cxx_inline_namespaces)</tt> or
568 <tt>__has_extension(cxx_inline_namespaces)</tt> to determine if support for
569 inline namespaces is enabled.</p>
571 <h4 id="cxx_lambdas">C++11 lambdas</h4>
573 <p>Use <tt>__has_feature(cxx_lambdas)</tt> or
574 <tt>__has_extension(cxx_lambdas)</tt> to determine if support for lambdas
575 is enabled. Clang does not currently implement this feature.</p>
577 <h4 id="cxx_noexcept">C++11 noexcept</h4>
579 <p>Use <tt>__has_feature(cxx_noexcept)</tt> or
580 <tt>__has_extension(cxx_noexcept)</tt> to determine if support for noexcept
581 exception specifications is enabled.</p>
583 <h4 id="cxx_nonstatic_member_init">C++11 in-class non-static data member initialization</h4>
585 <p>Use <tt>__has_feature(cxx_nonstatic_member_init)</tt> to determine whether in-class initialization of non-static data members is enabled.</p>
587 <h4 id="cxx_nullptr">C++11 <tt>nullptr</tt></h4>
589 <p>Use <tt>__has_feature(cxx_nullptr)</tt> or
590 <tt>__has_extension(cxx_nullptr)</tt> to determine if support for
591 <tt>nullptr</tt> is enabled.</p>
593 <h4 id="cxx_override_control">C++11 <tt>override control</tt></h4>
595 <p>Use <tt>__has_feature(cxx_override_control)</tt> or
596 <tt>__has_extension(cxx_override_control)</tt> to determine if support for
597 the override control keywords is enabled.</p>
599 <h4 id="cxx_reference_qualified_functions">C++11 reference-qualified functions</h4>
600 <p>Use <tt>__has_feature(cxx_reference_qualified_functions)</tt> or
601 <tt>__has_extension(cxx_reference_qualified_functions)</tt> to determine
602 if support for reference-qualified functions (e.g., member functions with
603 <code>&</code> or <code>&&</code> applied to <code>*this</code>)
606 <h4 id="cxx_range_for">C++11 range-based <tt>for</tt> loop</h4>
608 <p>Use <tt>__has_feature(cxx_range_for)</tt> or
609 <tt>__has_extension(cxx_range_for)</tt> to determine if support for the
610 range-based for loop is enabled. </p>
612 <h4 id="cxx_raw_string_literals">C++11 raw string literals</h4>
613 <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>
615 <h4 id="cxx_rvalue_references">C++11 rvalue references</h4>
617 <p>Use <tt>__has_feature(cxx_rvalue_references)</tt> or
618 <tt>__has_extension(cxx_rvalue_references)</tt> to determine if support for
619 rvalue references is enabled. </p>
621 <h4 id="cxx_static_assert">C++11 <tt>static_assert()</tt></h4>
623 <p>Use <tt>__has_feature(cxx_static_assert)</tt> or
624 <tt>__has_extension(cxx_static_assert)</tt> to determine if support for
625 compile-time assertions using <tt>static_assert</tt> is enabled.</p>
627 <h4 id="cxx_auto_type">C++11 type inference</h4>
629 <p>Use <tt>__has_feature(cxx_auto_type)</tt> or
630 <tt>__has_extension(cxx_auto_type)</tt> to determine C++11 type inference is
631 supported using the <tt>auto</tt> specifier. If this is disabled, <tt>auto</tt>
632 will instead be a storage class specifier, as in C or C++98.</p>
634 <h4 id="cxx_strong_enums">C++11 strongly typed enumerations</h4>
636 <p>Use <tt>__has_feature(cxx_strong_enums)</tt> or
637 <tt>__has_extension(cxx_strong_enums)</tt> to determine if support for
638 strongly typed, scoped enumerations is enabled.</p>
640 <h4 id="cxx_trailing_return">C++11 trailing return type</h4>
642 <p>Use <tt>__has_feature(cxx_trailing_return)</tt> or
643 <tt>__has_extension(cxx_trailing_return)</tt> to determine if support for the
644 alternate function declaration syntax with trailing return type is enabled.</p>
646 <h4 id="cxx_unicode_literals">C++11 Unicode string literals</h4>
647 <p>Use <tt>__has_feature(cxx_unicode_literals)</tt> to determine if
648 support for Unicode string literals is enabled.</p>
650 <h4 id="cxx_unrestricted_unions">C++11 unrestricted unions</h4>
652 <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>
654 <h4 id="cxx_user_literals">C++11 user-defined literals</h4>
656 <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>
658 <h4 id="cxx_variadic_templates">C++11 variadic templates</h4>
660 <p>Use <tt>__has_feature(cxx_variadic_templates)</tt> or
661 <tt>__has_extension(cxx_variadic_templates)</tt> to determine if support
662 for variadic templates is enabled.</p>
664 <h3 id="c11">C11</h3>
666 <p>The features listed below are slated for inclusion in the upcoming
667 C11 standard. As a result, all these features are enabled
668 with the <tt>-std=c11</tt> option when compiling C code.</p>
670 <h4 id="c_alignas">C11 alignment specifiers</h4>
672 <p>Use <tt>__has_feature(c_alignas)</tt> or <tt>__has_extension(c_alignas)</tt>
673 to determine if support for alignment specifiers using <tt>_Alignas</tt>
676 <h4 id="c_generic_selections">C11 generic selections</h4>
678 <p>Use <tt>__has_feature(c_generic_selections)</tt> or
679 <tt>__has_extension(c_generic_selections)</tt> to determine if support for
680 generic selections is enabled.</p>
682 <p>As an extension, the C11 generic selection expression is available in all
683 languages supported by Clang. The syntax is the same as that given in the
686 <p>In C, type compatibility is decided according to the rules given in the
687 appropriate standard, but in C++, which lacks the type compatibility rules
688 used in C, types are considered compatible only if they are equivalent.</p>
690 <h4 id="c_static_assert">C11 <tt>_Static_assert()</tt></h4>
692 <p>Use <tt>__has_feature(c_static_assert)</tt> or
693 <tt>__has_extension(c_static_assert)</tt> to determine if support for
694 compile-time assertions using <tt>_Static_assert</tt> is enabled.</p>
696 <!-- ======================================================================= -->
697 <h2 id="checking_type_traits">Checks for Type Traits</h2>
698 <!-- ======================================================================= -->
700 <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:
703 #if __has_extension(is_convertible_to)
704 template<typename From, typename To>
705 struct is_convertible_to {
706 static const bool value = __is_convertible_to(From, To);
709 // Emulate type trait
714 <p>The following type traits are supported by Clang:</p>
716 <li><code>__has_nothrow_assign</code> (GNU, Microsoft)</li>
717 <li><code>__has_nothrow_copy</code> (GNU, Microsoft)</li>
718 <li><code>__has_nothrow_constructor</code> (GNU, Microsoft)</li>
719 <li><code>__has_trivial_assign</code> (GNU, Microsoft)</li>
720 <li><code>__has_trivial_copy</code> (GNU, Microsoft)</li>
721 <li><code>__has_trivial_constructor</code> (GNU, Microsoft)</li>
722 <li><code>__has_trivial_destructor</code> (GNU, Microsoft)</li>
723 <li><code>__has_virtual_destructor</code> (GNU, Microsoft)</li>
724 <li><code>__is_abstract</code> (GNU, Microsoft)</li>
725 <li><code>__is_base_of</code> (GNU, Microsoft)</li>
726 <li><code>__is_class</code> (GNU, Microsoft)</li>
727 <li><code>__is_convertible_to</code> (Microsoft)</li>
728 <li><code>__is_empty</code> (GNU, Microsoft)</li>
729 <li><code>__is_enum</code> (GNU, Microsoft)</li>
730 <li><code>__is_pod</code> (GNU, Microsoft)</li>
731 <li><code>__is_polymorphic</code> (GNU, Microsoft)</li>
732 <li><code>__is_union</code> (GNU, Microsoft)</li>
733 <li><code>__is_literal(type)</code>: Determines whether the given type is a literal type</li>
734 <li><code>__is_final</code>: Determines whether the given type is declared with a <code>final</code> class-virt-specifier.</li>
735 <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>
738 <!-- ======================================================================= -->
739 <h2 id="blocks">Blocks</h2>
740 <!-- ======================================================================= -->
742 <p>The syntax and high level language feature description is in <a
743 href="BlockLanguageSpec.txt">BlockLanguageSpec.txt</a>. Implementation and ABI
744 details for the clang implementation are in <a
745 href="Block-ABI-Apple.txt">Block-ABI-Apple.txt</a>.</p>
748 <p>Query for this feature with __has_extension(blocks).</p>
750 <!-- ======================================================================= -->
751 <h2 id="objc_features">Objective-C Features</h2>
752 <!-- ======================================================================= -->
754 <h3 id="objc_instancetype">Related result types</h3>
756 <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>
765 @interface NSArray : NSObject
770 <p>and this common initialization pattern</p>
774 NSArray *array = [[NSArray alloc] init];
778 <p>the type of the expression <code>[NSArray alloc]</code> is
779 <code>NSArray*</code> because <code>alloc</code> implicitly has a
780 related result type. Similarly, the type of the expression
781 <code>[[NSArray alloc] init]</code> is <code>NSArray*</code>, since
782 <code>init</code> has a related result type and its receiver is known
783 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>
785 <p>A method with a related result type can be declared by using the
786 type <tt>instancetype</tt> as its result type. <tt>instancetype</tt>
787 is a contextual keyword that is only permitted in the result type of
788 an Objective-C method, e.g.</p>
792 + (<b>instancetype</b>)constructAnA;
796 <p>The related result type can also be inferred for some methods.
797 To determine whether a method has an inferred related result type, the first
798 word in the camel-case selector (e.g., "init" in "initWithObjects") is
799 considered, and the method will have a related result type if its return
800 type is compatible with the type of its class and if</p>
804 <li>the first word is "alloc" or "new", and the method is a class
807 <li>the first word is "autorelease", "init", "retain", or "self",
808 and the method is an instance method.</li>
812 <p>If a method with a related result type is overridden by a subclass
813 method, the subclass method must also return a type that is compatible
814 with the subclass type. For example:</p>
818 @interface NSString : NSObject
819 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
824 <p>Related result types only affect the type of a message send or
825 property access via the given method. In all other respects, a method
826 with a related result type is treated the same way as method that
827 returns <tt>id</tt>.</p>
829 <p>Use <tt>__has_feature(objc_instancetype)</tt> to determine whether
830 the <tt>instancetype</tt> contextual keyword is available.</p>
832 <!-- ======================================================================= -->
833 <h2 id="objc_arc">Automatic reference counting </h2>
834 <!-- ======================================================================= -->
836 <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>
838 <!-- ======================================================================= -->
839 <h2 id="objc_fixed_enum">Enumerations with a fixed underlying type</h2>
840 <!-- ======================================================================= -->
842 <p>Clang provides support for C++11 enumerations with a fixed
843 underlying type within Objective-C. For example, one can write an
844 enumeration type as:</p>
847 typedef enum : unsigned char { Red, Green, Blue } Color;
850 <p>This specifies that the underlying type, which is used to store the
851 enumeration value, is <tt>unsigned char</tt>.</p>
853 <p>Use <tt>__has_feature(objc_fixed_enum)</tt> to determine whether
854 support for fixed underlying types is available in Objective-C.</p>
856 <!-- ======================================================================= -->
857 <h2 id="overloading-in-c">Function Overloading in C</h2>
858 <!-- ======================================================================= -->
860 <p>Clang provides support for C++ function overloading in C. Function
861 overloading in C is introduced using the <tt>overloadable</tt> attribute. For
862 example, one might provide several overloaded versions of a <tt>tgsin</tt>
863 function that invokes the appropriate standard function computing the sine of a
864 value with <tt>float</tt>, <tt>double</tt>, or <tt>long double</tt>
869 #include <math.h>
870 float <b>__attribute__((overloadable))</b> tgsin(float x) { return sinf(x); }
871 double <b>__attribute__((overloadable))</b> tgsin(double x) { return sin(x); }
872 long double <b>__attribute__((overloadable))</b> tgsin(long double x) { return sinl(x); }
876 <p>Given these declarations, one can call <tt>tgsin</tt> with a
877 <tt>float</tt> value to receive a <tt>float</tt> result, with a
878 <tt>double</tt> to receive a <tt>double</tt> result, etc. Function
879 overloading in C follows the rules of C++ function overloading to pick
880 the best overload given the call arguments, with a few C-specific
883 <li>Conversion from <tt>float</tt> or <tt>double</tt> to <tt>long
884 double</tt> is ranked as a floating-point promotion (per C99) rather
885 than as a floating-point conversion (as in C++).</li>
887 <li>A conversion from a pointer of type <tt>T*</tt> to a pointer of type
888 <tt>U*</tt> is considered a pointer conversion (with conversion
889 rank) if <tt>T</tt> and <tt>U</tt> are compatible types.</li>
891 <li>A conversion from type <tt>T</tt> to a value of type <tt>U</tt>
892 is permitted if <tt>T</tt> and <tt>U</tt> are compatible types. This
893 conversion is given "conversion" rank.</li>
896 <p>The declaration of <tt>overloadable</tt> functions is restricted to
897 function declarations and definitions. Most importantly, if any
898 function with a given name is given the <tt>overloadable</tt>
899 attribute, then all function declarations and definitions with that
900 name (and in that scope) must have the <tt>overloadable</tt>
901 attribute. This rule even applies to redeclarations of functions whose original
902 declaration had the <tt>overloadable</tt> attribute, e.g.,</p>
906 int f(int) __attribute__((overloadable));
907 float f(float); <i>// error: declaration of "f" must have the "overloadable" attribute</i>
909 int g(int) __attribute__((overloadable));
910 int g(int) { } <i>// error: redeclaration of "g" must also have the "overloadable" attribute</i>
914 <p>Functions marked <tt>overloadable</tt> must have
915 prototypes. Therefore, the following code is ill-formed:</p>
919 int h() __attribute__((overloadable)); <i>// error: h does not have a prototype</i>
923 <p>However, <tt>overloadable</tt> functions are allowed to use a
924 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>
928 void honeypot(...) __attribute__((overloadable, unavailable)); <i>// calling me is an error</i>
932 <p>Functions declared with the <tt>overloadable</tt> attribute have
933 their names mangled according to the same rules as C++ function
934 names. For example, the three <tt>tgsin</tt> functions in our
935 motivating example get the mangled names <tt>_Z5tgsinf</tt>,
936 <tt>_Z5tgsind</tt>, and <tt>_Z5tgsine</tt>, respectively. There are two
937 caveats to this use of name mangling:</p>
941 <li>Future versions of Clang may change the name mangling of
942 functions overloaded in C, so you should not depend on an specific
943 mangling. To be completely safe, we strongly urge the use of
944 <tt>static inline</tt> with <tt>overloadable</tt> functions.</li>
946 <li>The <tt>overloadable</tt> attribute has almost no meaning when
947 used in C++, because names will already be mangled and functions are
948 already overloadable. However, when an <tt>overloadable</tt>
949 function occurs within an <tt>extern "C"</tt> linkage specification,
950 it's name <i>will</i> be mangled in the same way as it would in
954 <p>Query for this feature with __has_extension(attribute_overloadable).</p>
956 <!-- ======================================================================= -->
957 <h2 id="complex-list-init">Initializer lists for complex numbers in C</h2>
958 <!-- ======================================================================= -->
960 <p>clang supports an extension which allows the following in C:</p>
964 #include <math.h>
965 #include <complex.h>
966 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
970 <p>This construct is useful because there is no way to separately
971 initialize the real and imaginary parts of a complex variable in
972 standard C, given that clang does not support <code>_Imaginary</code>.
973 (clang also supports the <code>__real__</code> and <code>__imag__</code>
974 extensions from gcc, which help in some cases, but are not usable in
975 static initializers.)
977 <p>Note that this extension does not allow eliding the braces; the
978 meaning of the following two lines is different:</p>
982 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
983 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
987 <p>This extension also works in C++ mode, as far as that goes, but does not
988 apply to the C++ <code>std::complex</code>. (In C++11, list
989 initialization allows the same syntax to be used with
990 <code>std::complex</code> with the same meaning.)
992 <!-- ======================================================================= -->
993 <h2 id="builtins">Builtin Functions</h2>
994 <!-- ======================================================================= -->
996 <p>Clang supports a number of builtin library functions with the same syntax as
997 GCC, including things like <tt>__builtin_nan</tt>,
998 <tt>__builtin_constant_p</tt>, <tt>__builtin_choose_expr</tt>,
999 <tt>__builtin_types_compatible_p</tt>, <tt>__sync_fetch_and_add</tt>, etc. In
1000 addition to the GCC builtins, Clang supports a number of builtins that GCC does
1001 not, which are listed here.</p>
1003 <p>Please note that Clang does not and will not support all of the GCC builtins
1004 for vector operations. Instead of using builtins, you should use the functions
1005 defined in target-specific header files like <tt><xmmintrin.h></tt>, which
1006 define portable wrappers for these. Many of the Clang versions of these
1007 functions are implemented directly in terms of <a href="#vectors">extended
1008 vector support</a> instead of builtins, in order to reduce the number of
1009 builtins that we need to implement.</p>
1011 <!-- ======================================================================= -->
1012 <h3><a name="__builtin_shufflevector">__builtin_shufflevector</a></h3>
1013 <!-- ======================================================================= -->
1015 <p><tt>__builtin_shufflevector</tt> is used to express generic vector
1016 permutation/shuffle/swizzle operations. This builtin is also very important for
1017 the implementation of various target-specific header files like
1018 <tt><xmmintrin.h></tt>.
1021 <p><b>Syntax:</b></p>
1024 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
1027 <p><b>Examples:</b></p>
1030 // Identity operation - return 4-element vector V1.
1031 __builtin_shufflevector(V1, V1, 0, 1, 2, 3)
1033 // "Splat" element 0 of V1 into a 4-element result.
1034 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
1036 // Reverse 4-element vector V1.
1037 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
1039 // Concatenate every other element of 4-element vectors V1 and V2.
1040 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
1042 // Concatenate every other element of 8-element vectors V1 and V2.
1043 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
1046 <p><b>Description:</b></p>
1048 <p>The first two arguments to __builtin_shufflevector are vectors that have the
1049 same element type. The remaining arguments are a list of integers that specify
1050 the elements indices of the first two vectors that should be extracted and
1051 returned in a new vector. These element indices are numbered sequentially
1052 starting with the first vector, continuing into the second vector. Thus, if
1053 vec1 is a 4-element vector, index 5 would refer to the second element of vec2.
1056 <p>The result of __builtin_shufflevector is a vector
1057 with the same element type as vec1/vec2 but that has an element count equal to
1058 the number of indices specified.
1061 <p>Query for this feature with __has_builtin(__builtin_shufflevector).</p>
1063 <!-- ======================================================================= -->
1064 <h3><a name="__builtin_unreachable">__builtin_unreachable</a></h3>
1065 <!-- ======================================================================= -->
1067 <p><tt>__builtin_unreachable</tt> is used to indicate that a specific point in
1068 the program cannot be reached, even if the compiler might otherwise think it
1069 can. This is useful to improve optimization and eliminates certain warnings.
1070 For example, without the <tt>__builtin_unreachable</tt> in the example below,
1071 the compiler assumes that the inline asm can fall through and prints a "function
1072 declared 'noreturn' should not return" warning.
1075 <p><b>Syntax:</b></p>
1078 __builtin_unreachable()
1081 <p><b>Example of Use:</b></p>
1084 void myabort(void) __attribute__((noreturn));
1085 void myabort(void) {
1087 __builtin_unreachable();
1091 <p><b>Description:</b></p>
1093 <p>The __builtin_unreachable() builtin has completely undefined behavior. Since
1094 it has undefined behavior, it is a statement that it is never reached and the
1095 optimizer can take advantage of this to produce better code. This builtin takes
1096 no arguments and produces a void result.
1099 <p>Query for this feature with __has_builtin(__builtin_unreachable).</p>
1101 <!-- ======================================================================= -->
1102 <h3><a name="__sync_swap">__sync_swap</a></h3>
1103 <!-- ======================================================================= -->
1105 <p><tt>__sync_swap</tt> is used to atomically swap integers or pointers in
1109 <p><b>Syntax:</b></p>
1112 <i>type</i> __sync_swap(<i>type</i> *ptr, <i>type</i> value, ...)
1115 <p><b>Example of Use:</b></p>
1118 int old_value = __sync_swap(&value, new_value);
1121 <p><b>Description:</b></p>
1123 <p>The __sync_swap() builtin extends the existing __sync_*() family of atomic
1124 intrinsics to allow code to atomically swap the current value with the new
1125 value. More importantly, it helps developers write more efficient and correct
1126 code by avoiding expensive loops around __sync_bool_compare_and_swap() or
1127 relying on the platform specific implementation details of
1128 __sync_lock_test_and_set(). The __sync_swap() builtin is a full barrier.
1132 <!-- ======================================================================= -->
1133 <h2 id="targetspecific">Target-Specific Extensions</h2>
1134 <!-- ======================================================================= -->
1136 <p>Clang supports some language features conditionally on some targets.</p>
1138 <!-- ======================================================================= -->
1139 <h3 id="x86-specific">X86/X86-64 Language Extensions</h3>
1140 <!-- ======================================================================= -->
1142 <p>The X86 backend has these language extensions:</p>
1144 <!-- ======================================================================= -->
1145 <h4 id="x86-gs-segment">Memory references off the GS segment</h4>
1146 <!-- ======================================================================= -->
1148 <p>Annotating a pointer with address space #256 causes it to be code generated
1149 relative to the X86 GS segment register, and address space #257 causes it to be
1150 relative to the X86 FS segment. Note that this is a very very low-level
1151 feature that should only be used if you know what you're doing (for example in
1154 <p>Here is an example:</p>
1157 #define GS_RELATIVE __attribute__((address_space(256)))
1158 int foo(int GS_RELATIVE *P) {
1163 <p>Which compiles to (on X86-32):</p>
1168 movl %gs:(%eax), %eax
1172 <!-- ======================================================================= -->
1173 <h2 id="analyzerspecific">Static Analysis-Specific Extensions</h2>
1174 <!-- ======================================================================= -->
1176 <p>Clang supports additional attributes that are useful for documenting program
1177 invariants and rules for static analysis tools. The extensions documented here
1179 href="http://clang.llvm.org/StaticAnalysis.html">path-sensitive static analyzer
1180 engine</a> that is part of Clang's Analysis library.</p>
1182 <h3 id="attr_analyzer_noreturn">The <tt>analyzer_noreturn</tt> attribute</h3>
1184 <p>Clang's static analysis engine understands the standard <tt>noreturn</tt>
1185 attribute. This attribute, which is typically affixed to a function prototype,
1186 indicates that a call to a given function never returns. Function prototypes for
1187 common functions like <tt>exit</tt> are typically annotated with this attribute,
1188 as well as a variety of common assertion handlers. Users can educate the static
1189 analyzer about their own custom assertion handles (thus cutting down on false
1190 positives due to false paths) by marking their own "panic" functions
1191 with this attribute.</p>
1193 <p>While useful, <tt>noreturn</tt> is not applicable in all cases. Sometimes
1194 there are special functions that for all intents and purposes should be
1195 considered panic functions (i.e., they are only called when an internal program
1196 error occurs) but may actually return so that the program can fail gracefully.
1197 The <tt>analyzer_noreturn</tt> attribute allows one to annotate such functions
1198 as being interpreted as "no return" functions by the analyzer (thus
1199 pruning bogus paths) but will not affect compilation (as in the case of
1200 <tt>noreturn</tt>).</p>
1202 <p><b>Usage</b>: The <tt>analyzer_noreturn</tt> attribute can be placed in the
1203 same places where the <tt>noreturn</tt> attribute can be placed. It is commonly
1204 placed at the end of function prototypes:</p>
1207 void foo() <b>__attribute__((analyzer_noreturn))</b>;
1210 <p>Query for this feature with
1211 <tt>__has_attribute(analyzer_noreturn)</tt>.</p>
1213 <h3 id="attr_method_family">The <tt>objc_method_family</tt> attribute</h3>
1215 <p>Many methods in Objective-C have conventional meanings determined
1216 by their selectors. For the purposes of static analysis, it is
1217 sometimes useful to be able to mark a method as having a particular
1218 conventional meaning despite not having the right selector, or as not
1219 having the conventional meaning that its selector would suggest.
1220 For these use cases, we provide an attribute to specifically describe
1221 the <q>method family</q> that a method belongs to.</p>
1223 <p><b>Usage</b>: <tt>__attribute__((objc_method_family(X)))</tt>,
1224 where <tt>X</tt> is one of <tt>none</tt>, <tt>alloc</tt>, <tt>copy</tt>,
1225 <tt>init</tt>, <tt>mutableCopy</tt>, or <tt>new</tt>. This attribute
1226 can only be placed at the end of a method declaration:</p>
1229 - (NSString*) initMyStringValue <b>__attribute__((objc_method_family(none)))</b>;
1232 <p>Users who do not wish to change the conventional meaning of a
1233 method, and who merely want to document its non-standard retain and
1234 release semantics, should use the
1235 <a href="#attr_retain_release">retaining behavior attributes</a>
1236 described below.</p>
1238 <p>Query for this feature with
1239 <tt>__has_attribute(objc_method_family)</tt>.</p>
1241 <h3 id="attr_retain_release">Objective-C retaining behavior attributes</h3>
1243 <p>In Objective-C, functions and methods are generally assumed to take
1244 and return objects with +0 retain counts, with some exceptions for
1245 special methods like <tt>+alloc</tt> and <tt>init</tt>. However,
1246 there are exceptions, and so Clang provides attributes to allow these
1247 exceptions to be documented, which helps the analyzer find leaks (and
1248 ignore non-leaks). Some exceptions may be better described using
1249 the <a href="#attr_method_family"><tt>objc_method_family</tt></a>
1250 attribute instead.</p>
1252 <p><b>Usage</b>: The <tt>ns_returns_retained</tt>, <tt>ns_returns_not_retained</tt>,
1253 <tt>ns_returns_autoreleased</tt>, <tt>cf_returns_retained</tt>,
1254 and <tt>cf_returns_not_retained</tt> attributes can be placed on
1255 methods and functions that return Objective-C or CoreFoundation
1256 objects. They are commonly placed at the end of a function prototype
1257 or method declaration:</p>
1260 id foo() <b>__attribute__((ns_returns_retained))</b>;
1262 - (NSString*) bar: (int) x <b>__attribute__((ns_returns_retained))</b>;
1265 <p>The <tt>*_returns_retained</tt> attributes specify that the
1266 returned object has a +1 retain count.
1267 The <tt>*_returns_not_retained</tt> attributes specify that the return
1268 object has a +0 retain count, even if the normal convention for its
1269 selector would be +1. <tt>ns_returns_autoreleased</tt> specifies that the
1270 returned object is +0, but is guaranteed to live at least as long as the
1271 next flush of an autorelease pool.</p>
1273 <p><b>Usage</b>: The <tt>ns_consumed</tt> and <tt>cf_consumed</tt>
1274 attributes can be placed on an parameter declaration; they specify
1275 that the argument is expected to have a +1 retain count, which will be
1276 balanced in some way by the function or method.
1277 The <tt>ns_consumes_self</tt> attribute can only be placed on an
1278 Objective-C method; it specifies that the method expects
1279 its <tt>self</tt> parameter to have a +1 retain count, which it will
1280 balance in some way.</p>
1283 void <b>foo(__attribute__((ns_consumed))</b> NSString *string);
1285 - (void) bar <b>__attribute__((ns_consumes_self))</b>;
1286 - (void) baz: (id) <b>__attribute__((ns_consumed))</b> x;
1289 <p>Query for these features with <tt>__has_attribute(ns_consumed)</tt>,
1290 <tt>__has_attribute(ns_returns_retained)</tt>, etc.</p>
1292 <!-- ======================================================================= -->
1293 <h2 id="dynamicanalyzerspecific">Dynamic Analysis-Specific Extensions</h2>
1294 <!-- ======================================================================= -->
1295 <h3 id="address_sanitizer">AddressSanitizer</h3>
1296 <p> Use <code>__has_feature(address_sanitizer)</code>
1297 to check if the code is being built with <a
1298 href="AddressSanitizer.html">AddressSanitizer</a>.
1301 <!-- ======================================================================= -->
1302 <h2 id="threadsafety">Thread-Safety Annotation Checking</h2>
1303 <!-- ======================================================================= -->
1305 <p>Clang supports additional attributes for checking basic locking policies in
1306 multithreaded programs.
1307 Clang currently parses the following list of attributes, although
1308 <b>the implementation for these annotations is currently in development.</b>
1309 For more details, see the
1310 <a href="http://gcc.gnu.org/wiki/ThreadSafetyAnnotation">GCC implementation</a>.
1313 <h4 id="ts_noanal">no_thread_safety_analysis</h4>
1315 <p>Use <tt>__attribute__((no_thread_safety_analysis))</tt> on a function
1316 declaration to specify that the thread safety analysis should not be run on that
1317 function. This attribute provides an escape hatch (e.g. for situations when it
1318 is difficult to annotate the locking policy). </p>
1320 <h4 id="ts_lockable">lockable</h4>
1322 <p>Use <tt>__attribute__((lockable))</tt> on a class definition to specify
1323 that it has a lockable type (e.g. a Mutex class). This annotation is primarily
1324 used to check consistency.</p>
1326 <h4 id="ts_scopedlockable">scoped_lockable</h4>
1328 <p>Use <tt>__attribute__((scoped_lockable))</tt> on a class definition to
1329 specify that it has a "scoped" lockable type. Objects of this type will acquire
1330 the lock upon construction and release it upon going out of scope.
1331 This annotation is primarily used to check
1334 <h4 id="ts_guardedvar">guarded_var</h4>
1336 <p>Use <tt>__attribute__((guarded_var))</tt> on a variable declaration to
1337 specify that the variable must be accessed while holding some lock.</p>
1339 <h4 id="ts_ptguardedvar">pt_guarded_var</h4>
1341 <p>Use <tt>__attribute__((pt_guarded_var))</tt> on a pointer declaration to
1342 specify that the pointer must be dereferenced while holding some lock.</p>
1344 <h4 id="ts_guardedby">guarded_by(l)</h4>
1346 <p>Use <tt>__attribute__((guarded_by(l)))</tt> on a variable declaration to
1347 specify that the variable must be accessed while holding lock <tt>l</tt>.</p>
1349 <h4 id="ts_ptguardedby">pt_guarded_by(l)</h4>
1351 <p>Use <tt>__attribute__((pt_guarded_by(l)))</tt> on a pointer declaration to
1352 specify that the pointer must be dereferenced while holding lock <tt>l</tt>.</p>
1354 <h4 id="ts_acquiredbefore">acquired_before(...)</h4>
1356 <p>Use <tt>__attribute__((acquired_before(...)))</tt> on a declaration
1357 of a lockable variable to specify that the lock must be acquired before all
1358 attribute arguments. Arguments must be lockable type, and there must be at
1359 least one argument.</p>
1361 <h4 id="ts_acquiredafter">acquired_after(...)</h4>
1363 <p>Use <tt>__attribute__((acquired_after(...)))</tt> on a declaration
1364 of a lockable variable to specify that the lock must be acquired after all
1365 attribute arguments. Arguments must be lockable type, and there must be at
1366 least one argument.</p>
1368 <h4 id="ts_elf">exclusive_lock_function(...)</h4>
1370 <p>Use <tt>__attribute__((exclusive_lock_function(...)))</tt> on a function
1371 declaration to specify that the function acquires all listed locks
1372 exclusively. This attribute takes zero or more arguments: either of lockable
1373 type or integers indexing into function parameters of lockable type. If no
1374 arguments are given, the acquired lock is implicitly <tt>this</tt> of the
1375 enclosing object.</p>
1377 <h4 id="ts_slf">shared_lock_function(...)</h4>
1379 <p>Use <tt>__attribute__((shared_lock_function(...)))</tt> on a function
1380 declaration to specify that the function acquires all listed locks, although
1381 the locks may be shared (e.g. read locks). This attribute takes zero or more
1382 arguments: either of lockable type or integers indexing into function
1383 parameters of lockable type. If no arguments are given, the acquired lock is
1384 implicitly <tt>this</tt> of the enclosing object.</p>
1386 <h4 id="ts_etf">exclusive_trylock_function(...)</h4>
1388 <p>Use <tt>__attribute__((exclusive_lock_function(...)))</tt> on a function
1389 declaration to specify that the function will try (without blocking) to acquire
1390 all listed locks exclusively. This attribute takes one or more arguments. The
1391 first argument is an integer or boolean value specifying the return value of a
1392 successful lock acquisition. The remaining arugments are either of lockable type
1393 or integers indexing into function parameters of lockable type. If only one
1394 argument is given, the acquired lock is implicitly <tt>this</tt> of the
1395 enclosing object.</p>
1397 <h4 id="ts_stf">shared_trylock_function(...)</h4>
1399 <p>Use <tt>__attribute__((shared_lock_function(...)))</tt> on a function
1400 declaration to specify that the function will try (without blocking) to acquire
1401 all listed locks, although the locks may be shared (e.g. read locks). This
1402 attribute takes one or more arguments. The first argument is an integer or
1403 boolean value specifying the return value of a successful lock acquisition. The
1404 remaining arugments are either of lockable type or integers indexing into
1405 function parameters of lockable type. If only one argument is given, the
1406 acquired lock is implicitly <tt>this</tt> of the enclosing object.</p>
1408 <h4 id="ts_uf">unlock_function(...)</h4>
1410 <p>Use <tt>__attribute__((unlock_function(...)))</tt> on a function
1411 declaration to specify that the function release all listed locks. This
1412 attribute takes zero or more arguments: either of lockable type or integers
1413 indexing into function parameters of lockable type. If no arguments are given,
1414 the acquired lock is implicitly <tt>this</tt> of the enclosing object.</p>
1416 <h4 id="ts_lr">lock_returned(l)</h4>
1418 <p>Use <tt>__attribute__((lock_returned(l)))</tt> on a function
1419 declaration to specify that the function returns lock <tt>l</tt> (<tt>l</tt>
1420 must be of lockable type). This annotation is used to aid in resolving lock
1423 <h4 id="ts_le">locks_excluded(...)</h4>
1425 <p>Use <tt>__attribute__((locks_excluded(...)))</tt> on a function declaration
1426 to specify that the function must not be called with the listed locks. Arguments
1427 must be lockable type, and there must be at least one argument.</p>
1429 <h4 id="ts_elr">exclusive_locks_required(...)</h4>
1431 <p>Use <tt>__attribute__((exclusive_locks_required(...)))</tt> on a function
1432 declaration to specify that the function must be called while holding the listed
1433 exclusive locks. Arguments must be lockable type, and there must be at
1434 least one argument.</p>
1436 <h4 id="ts_slr">shared_locks_required(...)</h4>
1438 <p>Use <tt>__attribute__((shared_locks_required(...)))</tt> on a function
1439 declaration to specify that the function must be called while holding the listed
1440 shared locks. Arguments must be lockable type, and there must be at
1441 least one argument.</p>