comparison tools/clang/docs/LanguageExtensions.rst @ 3:9ad51c7bc036

1st commit. remove git dir and add all files.
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Wed, 15 May 2013 06:43:32 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 3:9ad51c7bc036
1 =========================
2 Clang Language Extensions
3 =========================
4
5 .. contents::
6 :local:
7 :depth: 1
8
9 .. toctree::
10 :hidden:
11
12 ObjectiveCLiterals
13 BlockLanguageSpec
14 Block-ABI-Apple
15 AutomaticReferenceCounting
16
17 Introduction
18 ============
19
20 This document describes the language extensions provided by Clang. In addition
21 to the language extensions listed here, Clang aims to support a broad range of
22 GCC extensions. Please see the `GCC manual
23 <http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
24 these extensions.
25
26 .. _langext-feature_check:
27
28 Feature Checking Macros
29 =======================
30
31 Language extensions can be very useful, but only if you know you can depend on
32 them. In order to allow fine-grain features checks, we support three builtin
33 function-like macros. This allows you to directly test for a feature in your
34 code without having to resort to something like autoconf or fragile "compiler
35 version checks".
36
37 ``__has_builtin``
38 -----------------
39
40 This function-like macro takes a single identifier argument that is the name of
41 a builtin function. It evaluates to 1 if the builtin is supported or 0 if not.
42 It can be used like this:
43
44 .. code-block:: c++
45
46 #ifndef __has_builtin // Optional of course.
47 #define __has_builtin(x) 0 // Compatibility with non-clang compilers.
48 #endif
49
50 ...
51 #if __has_builtin(__builtin_trap)
52 __builtin_trap();
53 #else
54 abort();
55 #endif
56 ...
57
58 .. _langext-__has_feature-__has_extension:
59
60 ``__has_feature`` and ``__has_extension``
61 -----------------------------------------
62
63 These function-like macros take a single identifier argument that is the name
64 of a feature. ``__has_feature`` evaluates to 1 if the feature is both
65 supported by Clang and standardized in the current language standard or 0 if
66 not (but see :ref:`below <langext-has-feature-back-compat>`), while
67 ``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
68 current language (either as a language extension or a standard language
69 feature) or 0 if not. They can be used like this:
70
71 .. code-block:: c++
72
73 #ifndef __has_feature // Optional of course.
74 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
75 #endif
76 #ifndef __has_extension
77 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
78 #endif
79
80 ...
81 #if __has_feature(cxx_rvalue_references)
82 // This code will only be compiled with the -std=c++11 and -std=gnu++11
83 // options, because rvalue references are only standardized in C++11.
84 #endif
85
86 #if __has_extension(cxx_rvalue_references)
87 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
88 // and -std=gnu++98 options, because rvalue references are supported as a
89 // language extension in C++98.
90 #endif
91
92 .. _langext-has-feature-back-compat:
93
94 For backwards compatibility reasons, ``__has_feature`` can also be used to test
95 for support for non-standardized features, i.e. features not prefixed ``c_``,
96 ``cxx_`` or ``objc_``.
97
98 Another use of ``__has_feature`` is to check for compiler features not related
99 to the language standard, such as e.g. :doc:`AddressSanitizer
100 <AddressSanitizer>`.
101
102 If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
103 to ``__has_feature``.
104
105 The feature tag is described along with the language feature below.
106
107 The feature name or extension name can also be specified with a preceding and
108 following ``__`` (double underscore) to avoid interference from a macro with
109 the same name. For instance, ``__cxx_rvalue_references__`` can be used instead
110 of ``cxx_rvalue_references``.
111
112 ``__has_attribute``
113 -------------------
114
115 This function-like macro takes a single identifier argument that is the name of
116 an attribute. It evaluates to 1 if the attribute is supported or 0 if not. It
117 can be used like this:
118
119 .. code-block:: c++
120
121 #ifndef __has_attribute // Optional of course.
122 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
123 #endif
124
125 ...
126 #if __has_attribute(always_inline)
127 #define ALWAYS_INLINE __attribute__((always_inline))
128 #else
129 #define ALWAYS_INLINE
130 #endif
131 ...
132
133 The attribute name can also be specified with a preceding and following ``__``
134 (double underscore) to avoid interference from a macro with the same name. For
135 instance, ``__always_inline__`` can be used instead of ``always_inline``.
136
137 Include File Checking Macros
138 ============================
139
140 Not all developments systems have the same include files. The
141 :ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
142 you to check for the existence of an include file before doing a possibly
143 failing ``#include`` directive. Include file checking macros must be used
144 as expressions in ``#if`` or ``#elif`` preprocessing directives.
145
146 .. _langext-__has_include:
147
148 ``__has_include``
149 -----------------
150
151 This function-like macro takes a single file name string argument that is the
152 name of an include file. It evaluates to 1 if the file can be found using the
153 include paths, or 0 otherwise:
154
155 .. code-block:: c++
156
157 // Note the two possible file name string formats.
158 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
159 # include "myinclude.h"
160 #endif
161
162 // To avoid problem with non-clang compilers not having this macro.
163 #if defined(__has_include) && __has_include("myinclude.h")
164 # include "myinclude.h"
165 #endif
166
167 To test for this feature, use ``#if defined(__has_include)``.
168
169 .. _langext-__has_include_next:
170
171 ``__has_include_next``
172 ----------------------
173
174 This function-like macro takes a single file name string argument that is the
175 name of an include file. It is like ``__has_include`` except that it looks for
176 the second instance of the given file found in the include paths. It evaluates
177 to 1 if the second instance of the file can be found using the include paths,
178 or 0 otherwise:
179
180 .. code-block:: c++
181
182 // Note the two possible file name string formats.
183 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
184 # include_next "myinclude.h"
185 #endif
186
187 // To avoid problem with non-clang compilers not having this macro.
188 #if defined(__has_include_next) && __has_include_next("myinclude.h")
189 # include_next "myinclude.h"
190 #endif
191
192 Note that ``__has_include_next``, like the GNU extension ``#include_next``
193 directive, is intended for use in headers only, and will issue a warning if
194 used in the top-level compilation file. A warning will also be issued if an
195 absolute path is used in the file argument.
196
197 ``__has_warning``
198 -----------------
199
200 This function-like macro takes a string literal that represents a command line
201 option for a warning and returns true if that is a valid warning option.
202
203 .. code-block:: c++
204
205 #if __has_warning("-Wformat")
206 ...
207 #endif
208
209 Builtin Macros
210 ==============
211
212 ``__BASE_FILE__``
213 Defined to a string that contains the name of the main input file passed to
214 Clang.
215
216 ``__COUNTER__``
217 Defined to an integer value that starts at zero and is incremented each time
218 the ``__COUNTER__`` macro is expanded.
219
220 ``__INCLUDE_LEVEL__``
221 Defined to an integral value that is the include depth of the file currently
222 being translated. For the main file, this value is zero.
223
224 ``__TIMESTAMP__``
225 Defined to the date and time of the last modification of the current source
226 file.
227
228 ``__clang__``
229 Defined when compiling with Clang
230
231 ``__clang_major__``
232 Defined to the major marketing version number of Clang (e.g., the 2 in
233 2.0.1). Note that marketing version numbers should not be used to check for
234 language features, as different vendors use different numbering schemes.
235 Instead, use the :ref:`langext-feature_check`.
236
237 ``__clang_minor__``
238 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note
239 that marketing version numbers should not be used to check for language
240 features, as different vendors use different numbering schemes. Instead, use
241 the :ref:`langext-feature_check`.
242
243 ``__clang_patchlevel__``
244 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
245
246 ``__clang_version__``
247 Defined to a string that captures the Clang marketing version, including the
248 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
249
250 .. _langext-vectors:
251
252 Vectors and Extended Vectors
253 ============================
254
255 Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
256
257 OpenCL vector types are created using ``ext_vector_type`` attribute. It
258 support for ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example
259 is:
260
261 .. code-block:: c++
262
263 typedef float float4 __attribute__((ext_vector_type(4)));
264 typedef float float2 __attribute__((ext_vector_type(2)));
265
266 float4 foo(float2 a, float2 b) {
267 float4 c;
268 c.xz = a;
269 c.yw = b;
270 return c;
271 }
272
273 Query for this feature with ``__has_extension(attribute_ext_vector_type)``.
274
275 Giving ``-faltivec`` option to clang enables support for AltiVec vector syntax
276 and functions. For example:
277
278 .. code-block:: c++
279
280 vector float foo(vector int a) {
281 vector int b;
282 b = vec_add(a, a) + a;
283 return (vector float)b;
284 }
285
286 NEON vector types are created using ``neon_vector_type`` and
287 ``neon_polyvector_type`` attributes. For example:
288
289 .. code-block:: c++
290
291 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
292 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
293
294 int8x8_t foo(int8x8_t a) {
295 int8x8_t v;
296 v = a;
297 return v;
298 }
299
300 Vector Literals
301 ---------------
302
303 Vector literals can be used to create vectors from a set of scalars, or
304 vectors. Either parentheses or braces form can be used. In the parentheses
305 form the number of literal values specified must be one, i.e. referring to a
306 scalar value, or must match the size of the vector type being created. If a
307 single scalar literal value is specified, the scalar literal value will be
308 replicated to all the components of the vector type. In the brackets form any
309 number of literals can be specified. For example:
310
311 .. code-block:: c++
312
313 typedef int v4si __attribute__((__vector_size__(16)));
314 typedef float float4 __attribute__((ext_vector_type(4)));
315 typedef float float2 __attribute__((ext_vector_type(2)));
316
317 v4si vsi = (v4si){1, 2, 3, 4};
318 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
319 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1).
320 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0).
321 vector int vi3 = (vector int)(1, 2); // error
322 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
323 vector int vi5 = (vector int)(1, 2, 3, 4);
324 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
325
326 Vector Operations
327 -----------------
328
329 The table below shows the support for each operation by vector extension. A
330 dash indicates that an operation is not accepted according to a corresponding
331 specification.
332
333 ============================== ====== ======= === ====
334 Opeator OpenCL AltiVec GCC NEON
335 ============================== ====== ======= === ====
336 [] yes yes yes --
337 unary operators +, -- yes yes yes --
338 ++, -- -- yes yes yes --
339 +,--,*,/,% yes yes yes --
340 bitwise operators &,|,^,~ yes yes yes --
341 >>,<< yes yes yes --
342 !, &&, || no -- -- --
343 ==, !=, >, <, >=, <= yes yes -- --
344 = yes yes yes yes
345 :? yes -- -- --
346 sizeof yes yes yes yes
347 ============================== ====== ======= === ====
348
349 See also :ref:`langext-__builtin_shufflevector`.
350
351 Messages on ``deprecated`` and ``unavailable`` Attributes
352 =========================================================
353
354 An optional string message can be added to the ``deprecated`` and
355 ``unavailable`` attributes. For example:
356
357 .. code-block:: c++
358
359 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
360
361 If the deprecated or unavailable declaration is used, the message will be
362 incorporated into the appropriate diagnostic:
363
364 .. code-block:: c++
365
366 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
367 [-Wdeprecated-declarations]
368 explode();
369 ^
370
371 Query for this feature with
372 ``__has_extension(attribute_deprecated_with_message)`` and
373 ``__has_extension(attribute_unavailable_with_message)``.
374
375 Attributes on Enumerators
376 =========================
377
378 Clang allows attributes to be written on individual enumerators. This allows
379 enumerators to be deprecated, made unavailable, etc. The attribute must appear
380 after the enumerator name and before any initializer, like so:
381
382 .. code-block:: c++
383
384 enum OperationMode {
385 OM_Invalid,
386 OM_Normal,
387 OM_Terrified __attribute__((deprecated)),
388 OM_AbortOnError __attribute__((deprecated)) = 4
389 };
390
391 Attributes on the ``enum`` declaration do not apply to individual enumerators.
392
393 Query for this feature with ``__has_extension(enumerator_attributes)``.
394
395 'User-Specified' System Frameworks
396 ==================================
397
398 Clang provides a mechanism by which frameworks can be built in such a way that
399 they will always be treated as being "system frameworks", even if they are not
400 present in a system framework directory. This can be useful to system
401 framework developers who want to be able to test building other applications
402 with development builds of their framework, including the manner in which the
403 compiler changes warning behavior for system headers.
404
405 Framework developers can opt-in to this mechanism by creating a
406 "``.system_framework``" file at the top-level of their framework. That is, the
407 framework should have contents like:
408
409 .. code-block:: none
410
411 .../TestFramework.framework
412 .../TestFramework.framework/.system_framework
413 .../TestFramework.framework/Headers
414 .../TestFramework.framework/Headers/TestFramework.h
415 ...
416
417 Clang will treat the presence of this file as an indicator that the framework
418 should be treated as a system framework, regardless of how it was found in the
419 framework search path. For consistency, we recommend that such files never be
420 included in installed versions of the framework.
421
422 Availability attribute
423 ======================
424
425 Clang introduces the ``availability`` attribute, which can be placed on
426 declarations to describe the lifecycle of that declaration relative to
427 operating system versions. Consider the function declaration for a
428 hypothetical function ``f``:
429
430 .. code-block:: c++
431
432 void f(void) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,obsoleted=10.7)));
433
434 The availability attribute states that ``f`` was introduced in Mac OS X 10.4,
435 deprecated in Mac OS X 10.6, and obsoleted in Mac OS X 10.7. This information
436 is used by Clang to determine when it is safe to use ``f``: for example, if
437 Clang is instructed to compile code for Mac OS X 10.5, a call to ``f()``
438 succeeds. If Clang is instructed to compile code for Mac OS X 10.6, the call
439 succeeds but Clang emits a warning specifying that the function is deprecated.
440 Finally, if Clang is instructed to compile code for Mac OS X 10.7, the call
441 fails because ``f()`` is no longer available.
442
443 The availability attribute is a comma-separated list starting with the
444 platform name and then including clauses specifying important milestones in the
445 declaration's lifetime (in any order) along with additional information. Those
446 clauses can be:
447
448 introduced=\ *version*
449 The first version in which this declaration was introduced.
450
451 deprecated=\ *version*
452 The first version in which this declaration was deprecated, meaning that
453 users should migrate away from this API.
454
455 obsoleted=\ *version*
456 The first version in which this declaration was obsoleted, meaning that it
457 was removed completely and can no longer be used.
458
459 unavailable
460 This declaration is never available on this platform.
461
462 message=\ *string-literal*
463 Additional message text that Clang will provide when emitting a warning or
464 error about use of a deprecated or obsoleted declaration. Useful to direct
465 users to replacement APIs.
466
467 Multiple availability attributes can be placed on a declaration, which may
468 correspond to different platforms. Only the availability attribute with the
469 platform corresponding to the target platform will be used; any others will be
470 ignored. If no availability attribute specifies availability for the current
471 target platform, the availability attributes are ignored. Supported platforms
472 are:
473
474 ``ios``
475 Apple's iOS operating system. The minimum deployment target is specified by
476 the ``-mios-version-min=*version*`` or ``-miphoneos-version-min=*version*``
477 command-line arguments.
478
479 ``macosx``
480 Apple's Mac OS X operating system. The minimum deployment target is
481 specified by the ``-mmacosx-version-min=*version*`` command-line argument.
482
483 A declaration can be used even when deploying back to a platform version prior
484 to when the declaration was introduced. When this happens, the declaration is
485 `weakly linked
486 <https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html>`_,
487 as if the ``weak_import`` attribute were added to the declaration. A
488 weakly-linked declaration may or may not be present a run-time, and a program
489 can determine whether the declaration is present by checking whether the
490 address of that declaration is non-NULL.
491
492 If there are multiple declarations of the same entity, the availability
493 attributes must either match on a per-platform basis or later
494 declarations must not have availability attributes for that
495 platform. For example:
496
497 .. code-block:: c
498
499 void g(void) __attribute__((availability(macosx,introduced=10.4)));
500 void g(void) __attribute__((availability(macosx,introduced=10.4))); // okay, matches
501 void g(void) __attribute__((availability(ios,introduced=4.0))); // okay, adds a new platform
502 void g(void); // okay, inherits both macosx and ios availability from above.
503 void g(void) __attribute__((availability(macosx,introduced=10.5))); // error: mismatch
504
505 When one method overrides another, the overriding method can be more widely available than the overridden method, e.g.,:
506
507 .. code-block:: objc
508
509 @interface A
510 - (id)method __attribute__((availability(macosx,introduced=10.4)));
511 - (id)method2 __attribute__((availability(macosx,introduced=10.4)));
512 @end
513
514 @interface B : A
515 - (id)method __attribute__((availability(macosx,introduced=10.3))); // okay: method moved into base class later
516 - (id)method __attribute__((availability(macosx,introduced=10.5))); // error: this method was available via the base class in 10.4
517 @end
518
519 Checks for Standard Language Features
520 =====================================
521
522 The ``__has_feature`` macro can be used to query if certain standard language
523 features are enabled. The ``__has_extension`` macro can be used to query if
524 language features are available as an extension when compiling for a standard
525 which does not provide them. The features which can be tested are listed here.
526
527 C++98
528 -----
529
530 The features listed below are part of the C++98 standard. These features are
531 enabled by default when compiling C++ code.
532
533 C++ exceptions
534 ^^^^^^^^^^^^^^
535
536 Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
537 enabled. For example, compiling code with ``-fno-exceptions`` disables C++
538 exceptions.
539
540 C++ RTTI
541 ^^^^^^^^
542
543 Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For
544 example, compiling code with ``-fno-rtti`` disables the use of RTTI.
545
546 C++11
547 -----
548
549 The features listed below are part of the C++11 standard. As a result, all
550 these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
551 when compiling C++ code.
552
553 C++11 SFINAE includes access control
554 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
555
556 Use ``__has_feature(cxx_access_control_sfinae)`` or
557 ``__has_extension(cxx_access_control_sfinae)`` to determine whether
558 access-control errors (e.g., calling a private constructor) are considered to
559 be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
560 <http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
561
562 C++11 alias templates
563 ^^^^^^^^^^^^^^^^^^^^^
564
565 Use ``__has_feature(cxx_alias_templates)`` or
566 ``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
567 alias declarations and alias templates is enabled.
568
569 C++11 alignment specifiers
570 ^^^^^^^^^^^^^^^^^^^^^^^^^^
571
572 Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
573 determine if support for alignment specifiers using ``alignas`` is enabled.
574
575 C++11 attributes
576 ^^^^^^^^^^^^^^^^
577
578 Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
579 determine if support for attribute parsing with C++11's square bracket notation
580 is enabled.
581
582 C++11 generalized constant expressions
583 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
584
585 Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
586 constant expressions (e.g., ``constexpr``) is enabled.
587
588 C++11 ``decltype()``
589 ^^^^^^^^^^^^^^^^^^^^
590
591 Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
592 determine if support for the ``decltype()`` specifier is enabled. C++11's
593 ``decltype`` does not require type-completeness of a function call expression.
594 Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
595 ``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
596 support for this feature is enabled.
597
598 C++11 default template arguments in function templates
599 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
600
601 Use ``__has_feature(cxx_default_function_template_args)`` or
602 ``__has_extension(cxx_default_function_template_args)`` to determine if support
603 for default template arguments in function templates is enabled.
604
605 C++11 ``default``\ ed functions
606 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
607
608 Use ``__has_feature(cxx_defaulted_functions)`` or
609 ``__has_extension(cxx_defaulted_functions)`` to determine if support for
610 defaulted function definitions (with ``= default``) is enabled.
611
612 C++11 delegating constructors
613 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
614
615 Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
616 delegating constructors is enabled.
617
618 C++11 ``deleted`` functions
619 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
620
621 Use ``__has_feature(cxx_deleted_functions)`` or
622 ``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
623 function definitions (with ``= delete``) is enabled.
624
625 C++11 explicit conversion functions
626 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
627
628 Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
629 ``explicit`` conversion functions is enabled.
630
631 C++11 generalized initializers
632 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
633
634 Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
635 generalized initializers (using braced lists and ``std::initializer_list``) is
636 enabled.
637
638 C++11 implicit move constructors/assignment operators
639 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
640
641 Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
642 generate move constructors and move assignment operators where needed.
643
644 C++11 inheriting constructors
645 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
646
647 Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
648 inheriting constructors is enabled.
649
650 C++11 inline namespaces
651 ^^^^^^^^^^^^^^^^^^^^^^^
652
653 Use ``__has_feature(cxx_inline_namespaces)`` or
654 ``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
655 namespaces is enabled.
656
657 C++11 lambdas
658 ^^^^^^^^^^^^^
659
660 Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
661 determine if support for lambdas is enabled.
662
663 C++11 local and unnamed types as template arguments
664 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
665
666 Use ``__has_feature(cxx_local_type_template_args)`` or
667 ``__has_extension(cxx_local_type_template_args)`` to determine if support for
668 local and unnamed types as template arguments is enabled.
669
670 C++11 noexcept
671 ^^^^^^^^^^^^^^
672
673 Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
674 determine if support for noexcept exception specifications is enabled.
675
676 C++11 in-class non-static data member initialization
677 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
678
679 Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
680 initialization of non-static data members is enabled.
681
682 C++11 ``nullptr``
683 ^^^^^^^^^^^^^^^^^
684
685 Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
686 determine if support for ``nullptr`` is enabled.
687
688 C++11 ``override control``
689 ^^^^^^^^^^^^^^^^^^^^^^^^^^
690
691 Use ``__has_feature(cxx_override_control)`` or
692 ``__has_extension(cxx_override_control)`` to determine if support for the
693 override control keywords is enabled.
694
695 C++11 reference-qualified functions
696 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
697
698 Use ``__has_feature(cxx_reference_qualified_functions)`` or
699 ``__has_extension(cxx_reference_qualified_functions)`` to determine if support
700 for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
701 applied to ``*this``) is enabled.
702
703 C++11 range-based ``for`` loop
704 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
705
706 Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
707 determine if support for the range-based for loop is enabled.
708
709 C++11 raw string literals
710 ^^^^^^^^^^^^^^^^^^^^^^^^^
711
712 Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
713 string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
714
715 C++11 rvalue references
716 ^^^^^^^^^^^^^^^^^^^^^^^
717
718 Use ``__has_feature(cxx_rvalue_references)`` or
719 ``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
720 references is enabled.
721
722 C++11 ``static_assert()``
723 ^^^^^^^^^^^^^^^^^^^^^^^^^
724
725 Use ``__has_feature(cxx_static_assert)`` or
726 ``__has_extension(cxx_static_assert)`` to determine if support for compile-time
727 assertions using ``static_assert`` is enabled.
728
729 C++11 ``thread_local``
730 ^^^^^^^^^^^^^^^^^^^^^^
731
732 Use ``__has_feature(cxx_thread_local)`` to determine if support for
733 ``thread_local`` variables is enabled.
734
735 C++11 type inference
736 ^^^^^^^^^^^^^^^^^^^^
737
738 Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
739 determine C++11 type inference is supported using the ``auto`` specifier. If
740 this is disabled, ``auto`` will instead be a storage class specifier, as in C
741 or C++98.
742
743 C++11 strongly typed enumerations
744 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
745
746 Use ``__has_feature(cxx_strong_enums)`` or
747 ``__has_extension(cxx_strong_enums)`` to determine if support for strongly
748 typed, scoped enumerations is enabled.
749
750 C++11 trailing return type
751 ^^^^^^^^^^^^^^^^^^^^^^^^^^
752
753 Use ``__has_feature(cxx_trailing_return)`` or
754 ``__has_extension(cxx_trailing_return)`` to determine if support for the
755 alternate function declaration syntax with trailing return type is enabled.
756
757 C++11 Unicode string literals
758 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
759
760 Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
761 string literals is enabled.
762
763 C++11 unrestricted unions
764 ^^^^^^^^^^^^^^^^^^^^^^^^^
765
766 Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
767 unrestricted unions is enabled.
768
769 C++11 user-defined literals
770 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
771
772 Use ``__has_feature(cxx_user_literals)`` to determine if support for
773 user-defined literals is enabled.
774
775 C++11 variadic templates
776 ^^^^^^^^^^^^^^^^^^^^^^^^
777
778 Use ``__has_feature(cxx_variadic_templates)`` or
779 ``__has_extension(cxx_variadic_templates)`` to determine if support for
780 variadic templates is enabled.
781
782 C++1y
783 -----
784
785 The features listed below are part of the committee draft for the C++1y
786 standard. As a result, all these features are enabled with the ``-std=c++1y``
787 or ``-std=gnu++1y`` option when compiling C++ code.
788
789 C++1y binary literals
790 ^^^^^^^^^^^^^^^^^^^^^
791
792 Use ``__has_feature(cxx_binary_literals)`` or
793 ``__has_extension(cxx_binary_literals)`` to determine whether
794 binary literals (for instance, ``0b10010``) are recognized. Clang supports this
795 feature as an extension in all language modes.
796
797 C++1y contextual conversions
798 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
799
800 Use ``__has_feature(cxx_contextual_conversions)`` or
801 ``__has_extension(cxx_contextual_conversions)`` to determine if the C++1y rules
802 are used when performing an implicit conversion for an array bound in a
803 *new-expression*, the operand of a *delete-expression*, an integral constant
804 expression, or a condition in a ``switch`` statement. Clang does not yet
805 support this feature.
806
807 C++1y decltype(auto)
808 ^^^^^^^^^^^^^^^^^^^^
809
810 Use ``__has_feature(cxx_decltype_auto)`` or
811 ``__has_extension(cxx_decltype_auto)`` to determine if support
812 for the ``decltype(auto)`` placeholder type is enabled.
813
814 C++1y default initializers for aggregates
815 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
816
817 Use ``__has_feature(cxx_aggregate_nsdmi)`` or
818 ``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
819 for default initializers in aggregate members is enabled.
820
821 C++1y generalized lambda capture
822 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
823
824 Use ``__has_feature(cxx_generalized_capture)`` or
825 ``__has_extension(cxx_generalized_capture`` to determine if support for
826 generalized lambda captures is enabled
827 (for instance, ``[n(0)] { return ++n; }``).
828 Clang does not yet support this feature.
829
830 C++1y generic lambdas
831 ^^^^^^^^^^^^^^^^^^^^^
832
833 Use ``__has_feature(cxx_generic_lambda)`` or
834 ``__has_extension(cxx_generic_lambda)`` to determine if support for generic
835 (polymorphic) lambdas is enabled
836 (for instance, ``[] (auto x) { return x + 1; }``).
837 Clang does not yet support this feature.
838
839 C++1y relaxed constexpr
840 ^^^^^^^^^^^^^^^^^^^^^^^
841
842 Use ``__has_feature(cxx_relaxed_constexpr)`` or
843 ``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
844 declarations, local variable modification, and control flow constructs
845 are permitted in ``constexpr`` functions.
846 Clang's implementation of this feature is incomplete.
847
848 C++1y return type deduction
849 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
850
851 Use ``__has_feature(cxx_return_type_deduction)`` or
852 ``__has_extension(cxx_return_type_deduction)`` to determine if support
853 for return type deduction for functions (using ``auto`` as a return type)
854 is enabled.
855
856 C++1y runtime-sized arrays
857 ^^^^^^^^^^^^^^^^^^^^^^^^^^
858
859 Use ``__has_feature(cxx_runtime_array)`` or
860 ``__has_extension(cxx_runtime_array)`` to determine if support
861 for arrays of runtime bound (a restricted form of variable-length arrays)
862 is enabled.
863 Clang's implementation of this feature is incomplete.
864
865 C++1y variable templates
866 ^^^^^^^^^^^^^^^^^^^^^^^^
867
868 Use ``__has_feature(cxx_variable_templates)`` or
869 ``__has_extension(cxx_variable_templates)`` to determine if support for
870 templated variable declarations is enabled.
871 Clang does not yet support this feature.
872
873 C11
874 ---
875
876 The features listed below are part of the C11 standard. As a result, all these
877 features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
878 compiling C code. Additionally, because these features are all
879 backward-compatible, they are available as extensions in all language modes.
880
881 C11 alignment specifiers
882 ^^^^^^^^^^^^^^^^^^^^^^^^
883
884 Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
885 if support for alignment specifiers using ``_Alignas`` is enabled.
886
887 C11 atomic operations
888 ^^^^^^^^^^^^^^^^^^^^^
889
890 Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
891 if support for atomic types using ``_Atomic`` is enabled. Clang also provides
892 :ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
893 the ``<stdatomic.h>`` operations on ``_Atomic`` types.
894
895 C11 generic selections
896 ^^^^^^^^^^^^^^^^^^^^^^
897
898 Use ``__has_feature(c_generic_selections)`` or
899 ``__has_extension(c_generic_selections)`` to determine if support for generic
900 selections is enabled.
901
902 As an extension, the C11 generic selection expression is available in all
903 languages supported by Clang. The syntax is the same as that given in the C11
904 standard.
905
906 In C, type compatibility is decided according to the rules given in the
907 appropriate standard, but in C++, which lacks the type compatibility rules used
908 in C, types are considered compatible only if they are equivalent.
909
910 C11 ``_Static_assert()``
911 ^^^^^^^^^^^^^^^^^^^^^^^^
912
913 Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
914 to determine if support for compile-time assertions using ``_Static_assert`` is
915 enabled.
916
917 C11 ``_Thread_local``
918 ^^^^^^^^^^^^^^^^^^^^^
919
920 Use ``__has_feature(c_thread_local)`` to determine if support for
921 ``_Thread_local`` variables is enabled.
922
923 Checks for Type Traits
924 ======================
925
926 Clang supports the `GNU C++ type traits
927 <http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
928 `Microsoft Visual C++ Type traits
929 <http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_. For each
930 supported type trait ``__X``, ``__has_extension(X)`` indicates the presence of
931 the type trait. For example:
932
933 .. code-block:: c++
934
935 #if __has_extension(is_convertible_to)
936 template<typename From, typename To>
937 struct is_convertible_to {
938 static const bool value = __is_convertible_to(From, To);
939 };
940 #else
941 // Emulate type trait
942 #endif
943
944 The following type traits are supported by Clang:
945
946 * ``__has_nothrow_assign`` (GNU, Microsoft)
947 * ``__has_nothrow_copy`` (GNU, Microsoft)
948 * ``__has_nothrow_constructor`` (GNU, Microsoft)
949 * ``__has_trivial_assign`` (GNU, Microsoft)
950 * ``__has_trivial_copy`` (GNU, Microsoft)
951 * ``__has_trivial_constructor`` (GNU, Microsoft)
952 * ``__has_trivial_destructor`` (GNU, Microsoft)
953 * ``__has_virtual_destructor`` (GNU, Microsoft)
954 * ``__is_abstract`` (GNU, Microsoft)
955 * ``__is_base_of`` (GNU, Microsoft)
956 * ``__is_class`` (GNU, Microsoft)
957 * ``__is_convertible_to`` (Microsoft)
958 * ``__is_empty`` (GNU, Microsoft)
959 * ``__is_enum`` (GNU, Microsoft)
960 * ``__is_interface_class`` (Microsoft)
961 * ``__is_pod`` (GNU, Microsoft)
962 * ``__is_polymorphic`` (GNU, Microsoft)
963 * ``__is_union`` (GNU, Microsoft)
964 * ``__is_literal(type)``: Determines whether the given type is a literal type
965 * ``__is_final``: Determines whether the given type is declared with a
966 ``final`` class-virt-specifier.
967 * ``__underlying_type(type)``: Retrieves the underlying type for a given
968 ``enum`` type. This trait is required to implement the C++11 standard
969 library.
970 * ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value
971 of type ``totype`` can be assigned to from a value of type ``fromtype`` such
972 that no non-trivial functions are called as part of that assignment. This
973 trait is required to implement the C++11 standard library.
974 * ``__is_trivially_constructible(type, argtypes...)``: Determines whether a
975 value of type ``type`` can be direct-initialized with arguments of types
976 ``argtypes...`` such that no non-trivial functions are called as part of
977 that initialization. This trait is required to implement the C++11 standard
978 library.
979
980 Blocks
981 ======
982
983 The syntax and high level language feature description is in
984 :doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
985 the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
986
987 Query for this feature with ``__has_extension(blocks)``.
988
989 Objective-C Features
990 ====================
991
992 Related result types
993 --------------------
994
995 According to Cocoa conventions, Objective-C methods with certain names
996 ("``init``", "``alloc``", etc.) always return objects that are an instance of
997 the receiving class's type. Such methods are said to have a "related result
998 type", meaning that a message send to one of these methods will have the same
999 static type as an instance of the receiver class. For example, given the
1000 following classes:
1001
1002 .. code-block:: objc
1003
1004 @interface NSObject
1005 + (id)alloc;
1006 - (id)init;
1007 @end
1008
1009 @interface NSArray : NSObject
1010 @end
1011
1012 and this common initialization pattern
1013
1014 .. code-block:: objc
1015
1016 NSArray *array = [[NSArray alloc] init];
1017
1018 the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1019 ``alloc`` implicitly has a related result type. Similarly, the type of the
1020 expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1021 related result type and its receiver is known to have the type ``NSArray *``.
1022 If neither ``alloc`` nor ``init`` had a related result type, the expressions
1023 would have had type ``id``, as declared in the method signature.
1024
1025 A method with a related result type can be declared by using the type
1026 ``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1027 that is only permitted in the result type of an Objective-C method, e.g.
1028
1029 .. code-block:: objc
1030
1031 @interface A
1032 + (instancetype)constructAnA;
1033 @end
1034
1035 The related result type can also be inferred for some methods. To determine
1036 whether a method has an inferred related result type, the first word in the
1037 camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1038 and the method will have a related result type if its return type is compatible
1039 with the type of its class and if:
1040
1041 * the first word is "``alloc``" or "``new``", and the method is a class method,
1042 or
1043
1044 * the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1045 and the method is an instance method.
1046
1047 If a method with a related result type is overridden by a subclass method, the
1048 subclass method must also return a type that is compatible with the subclass
1049 type. For example:
1050
1051 .. code-block:: objc
1052
1053 @interface NSString : NSObject
1054 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1055 @end
1056
1057 Related result types only affect the type of a message send or property access
1058 via the given method. In all other respects, a method with a related result
1059 type is treated the same way as method that returns ``id``.
1060
1061 Use ``__has_feature(objc_instancetype)`` to determine whether the
1062 ``instancetype`` contextual keyword is available.
1063
1064 Automatic reference counting
1065 ----------------------------
1066
1067 Clang provides support for :doc:`automated reference counting
1068 <AutomaticReferenceCounting>` in Objective-C, which eliminates the need
1069 for manual ``retain``/``release``/``autorelease`` message sends. There are two
1070 feature macros associated with automatic reference counting:
1071 ``__has_feature(objc_arc)`` indicates the availability of automated reference
1072 counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1073 automated reference counting also includes support for ``__weak`` pointers to
1074 Objective-C objects.
1075
1076 .. _objc-fixed-enum:
1077
1078 Enumerations with a fixed underlying type
1079 -----------------------------------------
1080
1081 Clang provides support for C++11 enumerations with a fixed underlying type
1082 within Objective-C. For example, one can write an enumeration type as:
1083
1084 .. code-block:: c++
1085
1086 typedef enum : unsigned char { Red, Green, Blue } Color;
1087
1088 This specifies that the underlying type, which is used to store the enumeration
1089 value, is ``unsigned char``.
1090
1091 Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1092 underlying types is available in Objective-C.
1093
1094 Interoperability with C++11 lambdas
1095 -----------------------------------
1096
1097 Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1098 permitting a lambda to be implicitly converted to a block pointer with the
1099 corresponding signature. For example, consider an API such as ``NSArray``'s
1100 array-sorting method:
1101
1102 .. code-block:: objc
1103
1104 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1105
1106 ``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1107 (^)(id, id)``, and parameters of this type are generally provided with block
1108 literals as arguments. However, one can also use a C++11 lambda so long as it
1109 provides the same signature (in this case, accepting two parameters of type
1110 ``id`` and returning an ``NSComparisonResult``):
1111
1112 .. code-block:: objc
1113
1114 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1115 @"String 02"];
1116 const NSStringCompareOptions comparisonOptions
1117 = NSCaseInsensitiveSearch | NSNumericSearch |
1118 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1119 NSLocale *currentLocale = [NSLocale currentLocale];
1120 NSArray *sorted
1121 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1122 NSRange string1Range = NSMakeRange(0, [s1 length]);
1123 return [s1 compare:s2 options:comparisonOptions
1124 range:string1Range locale:currentLocale];
1125 }];
1126 NSLog(@"sorted: %@", sorted);
1127
1128 This code relies on an implicit conversion from the type of the lambda
1129 expression (an unnamed, local class type called the *closure type*) to the
1130 corresponding block pointer type. The conversion itself is expressed by a
1131 conversion operator in that closure type that produces a block pointer with the
1132 same signature as the lambda itself, e.g.,
1133
1134 .. code-block:: objc
1135
1136 operator NSComparisonResult (^)(id, id)() const;
1137
1138 This conversion function returns a new block that simply forwards the two
1139 parameters to the lambda object (which it captures by copy), then returns the
1140 result. The returned block is first copied (with ``Block_copy``) and then
1141 autoreleased. As an optimization, if a lambda expression is immediately
1142 converted to a block pointer (as in the first example, above), then the block
1143 is not copied and autoreleased: rather, it is given the same lifetime as a
1144 block literal written at that point in the program, which avoids the overhead
1145 of copying a block to the heap in the common case.
1146
1147 The conversion from a lambda to a block pointer is only available in
1148 Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1149 management (autorelease).
1150
1151 Object Literals and Subscripting
1152 --------------------------------
1153
1154 Clang provides support for :doc:`Object Literals and Subscripting
1155 <ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
1156 programming patterns, makes programs more concise, and improves the safety of
1157 container creation. There are several feature macros associated with object
1158 literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1159 availability of array literals; ``__has_feature(objc_dictionary_literals)``
1160 tests the availability of dictionary literals;
1161 ``__has_feature(objc_subscripting)`` tests the availability of object
1162 subscripting.
1163
1164 Objective-C Autosynthesis of Properties
1165 ---------------------------------------
1166
1167 Clang provides support for autosynthesis of declared properties. Using this
1168 feature, clang provides default synthesis of those properties not declared
1169 @dynamic and not having user provided backing getter and setter methods.
1170 ``__has_feature(objc_default_synthesize_properties)`` checks for availability
1171 of this feature in version of clang being used.
1172
1173 .. _langext-objc_method_family:
1174
1175 The ``objc_method_family`` attribute
1176 ------------------------------------
1177
1178 Many methods in Objective-C have conventional meanings determined by their
1179 selectors. It is sometimes useful to be able to mark a method as having a
1180 particular conventional meaning despite not having the right selector, or as
1181 not having the conventional meaning that its selector would suggest. For these
1182 use cases, we provide an attribute to specifically describe the "method family"
1183 that a method belongs to.
1184
1185 **Usage**: ``__attribute__((objc_method_family(X)))``, where ``X`` is one of
1186 ``none``, ``alloc``, ``copy``, ``init``, ``mutableCopy``, or ``new``. This
1187 attribute can only be placed at the end of a method declaration:
1188
1189 .. code-block:: objc
1190
1191 - (NSString *)initMyStringValue __attribute__((objc_method_family(none)));
1192
1193 Users who do not wish to change the conventional meaning of a method, and who
1194 merely want to document its non-standard retain and release semantics, should
1195 use the :ref:`retaining behavior attributes <langext-objc-retain-release>`
1196 described below.
1197
1198 Query for this feature with ``__has_attribute(objc_method_family)``.
1199
1200 .. _langext-objc-retain-release:
1201
1202 Objective-C retaining behavior attributes
1203 -----------------------------------------
1204
1205 In Objective-C, functions and methods are generally assumed to follow the
1206 `Cocoa Memory Management
1207 <http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1208 conventions for ownership of object arguments and
1209 return values. However, there are exceptions, and so Clang provides attributes
1210 to allow these exceptions to be documented. This are used by ARC and the
1211 `static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be
1212 better described using the :ref:`objc_method_family
1213 <langext-objc_method_family>` attribute instead.
1214
1215 **Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1216 ``ns_returns_autoreleased``, ``cf_returns_retained``, and
1217 ``cf_returns_not_retained`` attributes can be placed on methods and functions
1218 that return Objective-C or CoreFoundation objects. They are commonly placed at
1219 the end of a function prototype or method declaration:
1220
1221 .. code-block:: objc
1222
1223 id foo() __attribute__((ns_returns_retained));
1224
1225 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1226
1227 The ``*_returns_retained`` attributes specify that the returned object has a +1
1228 retain count. The ``*_returns_not_retained`` attributes specify that the return
1229 object has a +0 retain count, even if the normal convention for its selector
1230 would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
1231 +0, but is guaranteed to live at least as long as the next flush of an
1232 autorelease pool.
1233
1234 **Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1235 an parameter declaration; they specify that the argument is expected to have a
1236 +1 retain count, which will be balanced in some way by the function or method.
1237 The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1238 method; it specifies that the method expects its ``self`` parameter to have a
1239 +1 retain count, which it will balance in some way.
1240
1241 .. code-block:: objc
1242
1243 void foo(__attribute__((ns_consumed)) NSString *string);
1244
1245 - (void) bar __attribute__((ns_consumes_self));
1246 - (void) baz:(id) __attribute__((ns_consumed)) x;
1247
1248 Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
1249 <http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
1250
1251 Query for these features with ``__has_attribute(ns_consumed)``,
1252 ``__has_attribute(ns_returns_retained)``, etc.
1253
1254
1255 Function Overloading in C
1256 =========================
1257
1258 Clang provides support for C++ function overloading in C. Function overloading
1259 in C is introduced using the ``overloadable`` attribute. For example, one
1260 might provide several overloaded versions of a ``tgsin`` function that invokes
1261 the appropriate standard function computing the sine of a value with ``float``,
1262 ``double``, or ``long double`` precision:
1263
1264 .. code-block:: c
1265
1266 #include <math.h>
1267 float __attribute__((overloadable)) tgsin(float x) { return sinf(x); }
1268 double __attribute__((overloadable)) tgsin(double x) { return sin(x); }
1269 long double __attribute__((overloadable)) tgsin(long double x) { return sinl(x); }
1270
1271 Given these declarations, one can call ``tgsin`` with a ``float`` value to
1272 receive a ``float`` result, with a ``double`` to receive a ``double`` result,
1273 etc. Function overloading in C follows the rules of C++ function overloading
1274 to pick the best overload given the call arguments, with a few C-specific
1275 semantics:
1276
1277 * Conversion from ``float`` or ``double`` to ``long double`` is ranked as a
1278 floating-point promotion (per C99) rather than as a floating-point conversion
1279 (as in C++).
1280
1281 * A conversion from a pointer of type ``T*`` to a pointer of type ``U*`` is
1282 considered a pointer conversion (with conversion rank) if ``T`` and ``U`` are
1283 compatible types.
1284
1285 * A conversion from type ``T`` to a value of type ``U`` is permitted if ``T``
1286 and ``U`` are compatible types. This conversion is given "conversion" rank.
1287
1288 The declaration of ``overloadable`` functions is restricted to function
1289 declarations and definitions. Most importantly, if any function with a given
1290 name is given the ``overloadable`` attribute, then all function declarations
1291 and definitions with that name (and in that scope) must have the
1292 ``overloadable`` attribute. This rule even applies to redeclarations of
1293 functions whose original declaration had the ``overloadable`` attribute, e.g.,
1294
1295 .. code-block:: c
1296
1297 int f(int) __attribute__((overloadable));
1298 float f(float); // error: declaration of "f" must have the "overloadable" attribute
1299
1300 int g(int) __attribute__((overloadable));
1301 int g(int) { } // error: redeclaration of "g" must also have the "overloadable" attribute
1302
1303 Functions marked ``overloadable`` must have prototypes. Therefore, the
1304 following code is ill-formed:
1305
1306 .. code-block:: c
1307
1308 int h() __attribute__((overloadable)); // error: h does not have a prototype
1309
1310 However, ``overloadable`` functions are allowed to use a ellipsis even if there
1311 are no named parameters (as is permitted in C++). This feature is particularly
1312 useful when combined with the ``unavailable`` attribute:
1313
1314 .. code-block:: c++
1315
1316 void honeypot(...) __attribute__((overloadable, unavailable)); // calling me is an error
1317
1318 Functions declared with the ``overloadable`` attribute have their names mangled
1319 according to the same rules as C++ function names. For example, the three
1320 ``tgsin`` functions in our motivating example get the mangled names
1321 ``_Z5tgsinf``, ``_Z5tgsind``, and ``_Z5tgsine``, respectively. There are two
1322 caveats to this use of name mangling:
1323
1324 * Future versions of Clang may change the name mangling of functions overloaded
1325 in C, so you should not depend on an specific mangling. To be completely
1326 safe, we strongly urge the use of ``static inline`` with ``overloadable``
1327 functions.
1328
1329 * The ``overloadable`` attribute has almost no meaning when used in C++,
1330 because names will already be mangled and functions are already overloadable.
1331 However, when an ``overloadable`` function occurs within an ``extern "C"``
1332 linkage specification, it's name *will* be mangled in the same way as it
1333 would in C.
1334
1335 Query for this feature with ``__has_extension(attribute_overloadable)``.
1336
1337 Initializer lists for complex numbers in C
1338 ==========================================
1339
1340 clang supports an extension which allows the following in C:
1341
1342 .. code-block:: c++
1343
1344 #include <math.h>
1345 #include <complex.h>
1346 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1347
1348 This construct is useful because there is no way to separately initialize the
1349 real and imaginary parts of a complex variable in standard C, given that clang
1350 does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
1351 ``__imag__`` extensions from gcc, which help in some cases, but are not usable
1352 in static initializers.)
1353
1354 Note that this extension does not allow eliding the braces; the meaning of the
1355 following two lines is different:
1356
1357 .. code-block:: c++
1358
1359 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
1360 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
1361
1362 This extension also works in C++ mode, as far as that goes, but does not apply
1363 to the C++ ``std::complex``. (In C++11, list initialization allows the same
1364 syntax to be used with ``std::complex`` with the same meaning.)
1365
1366 Builtin Functions
1367 =================
1368
1369 Clang supports a number of builtin library functions with the same syntax as
1370 GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
1371 ``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
1372 ``__sync_fetch_and_add``, etc. In addition to the GCC builtins, Clang supports
1373 a number of builtins that GCC does not, which are listed here.
1374
1375 Please note that Clang does not and will not support all of the GCC builtins
1376 for vector operations. Instead of using builtins, you should use the functions
1377 defined in target-specific header files like ``<xmmintrin.h>``, which define
1378 portable wrappers for these. Many of the Clang versions of these functions are
1379 implemented directly in terms of :ref:`extended vector support
1380 <langext-vectors>` instead of builtins, in order to reduce the number of
1381 builtins that we need to implement.
1382
1383 ``__builtin_readcyclecounter``
1384 ------------------------------
1385
1386 ``__builtin_readcyclecounter`` is used to access the cycle counter register (or
1387 a similar low-latency, high-accuracy clock) on those targets that support it.
1388
1389 **Syntax**:
1390
1391 .. code-block:: c++
1392
1393 __builtin_readcyclecounter()
1394
1395 **Example of Use**:
1396
1397 .. code-block:: c++
1398
1399 unsigned long long t0 = __builtin_readcyclecounter();
1400 do_something();
1401 unsigned long long t1 = __builtin_readcyclecounter();
1402 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
1403
1404 **Description**:
1405
1406 The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
1407 which may be either global or process/thread-specific depending on the target.
1408 As the backing counters often overflow quickly (on the order of seconds) this
1409 should only be used for timing small intervals. When not supported by the
1410 target, the return value is always zero. This builtin takes no arguments and
1411 produces an unsigned long long result.
1412
1413 Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``.
1414
1415 .. _langext-__builtin_shufflevector:
1416
1417 ``__builtin_shufflevector``
1418 ---------------------------
1419
1420 ``__builtin_shufflevector`` is used to express generic vector
1421 permutation/shuffle/swizzle operations. This builtin is also very important
1422 for the implementation of various target-specific header files like
1423 ``<xmmintrin.h>``.
1424
1425 **Syntax**:
1426
1427 .. code-block:: c++
1428
1429 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
1430
1431 **Examples**:
1432
1433 .. code-block:: c++
1434
1435 // Identity operation - return 4-element vector V1.
1436 __builtin_shufflevector(V1, V1, 0, 1, 2, 3)
1437
1438 // "Splat" element 0 of V1 into a 4-element result.
1439 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
1440
1441 // Reverse 4-element vector V1.
1442 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
1443
1444 // Concatenate every other element of 4-element vectors V1 and V2.
1445 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
1446
1447 // Concatenate every other element of 8-element vectors V1 and V2.
1448 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
1449
1450 **Description**:
1451
1452 The first two arguments to ``__builtin_shufflevector`` are vectors that have
1453 the same element type. The remaining arguments are a list of integers that
1454 specify the elements indices of the first two vectors that should be extracted
1455 and returned in a new vector. These element indices are numbered sequentially
1456 starting with the first vector, continuing into the second vector. Thus, if
1457 ``vec1`` is a 4-element vector, index 5 would refer to the second element of
1458 ``vec2``.
1459
1460 The result of ``__builtin_shufflevector`` is a vector with the same element
1461 type as ``vec1``/``vec2`` but that has an element count equal to the number of
1462 indices specified.
1463
1464 Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
1465
1466 ``__builtin_unreachable``
1467 -------------------------
1468
1469 ``__builtin_unreachable`` is used to indicate that a specific point in the
1470 program cannot be reached, even if the compiler might otherwise think it can.
1471 This is useful to improve optimization and eliminates certain warnings. For
1472 example, without the ``__builtin_unreachable`` in the example below, the
1473 compiler assumes that the inline asm can fall through and prints a "function
1474 declared '``noreturn``' should not return" warning.
1475
1476 **Syntax**:
1477
1478 .. code-block:: c++
1479
1480 __builtin_unreachable()
1481
1482 **Example of use**:
1483
1484 .. code-block:: c++
1485
1486 void myabort(void) __attribute__((noreturn));
1487 void myabort(void) {
1488 asm("int3");
1489 __builtin_unreachable();
1490 }
1491
1492 **Description**:
1493
1494 The ``__builtin_unreachable()`` builtin has completely undefined behavior.
1495 Since it has undefined behavior, it is a statement that it is never reached and
1496 the optimizer can take advantage of this to produce better code. This builtin
1497 takes no arguments and produces a void result.
1498
1499 Query for this feature with ``__has_builtin(__builtin_unreachable)``.
1500
1501 ``__sync_swap``
1502 ---------------
1503
1504 ``__sync_swap`` is used to atomically swap integers or pointers in memory.
1505
1506 **Syntax**:
1507
1508 .. code-block:: c++
1509
1510 type __sync_swap(type *ptr, type value, ...)
1511
1512 **Example of Use**:
1513
1514 .. code-block:: c++
1515
1516 int old_value = __sync_swap(&value, new_value);
1517
1518 **Description**:
1519
1520 The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
1521 atomic intrinsics to allow code to atomically swap the current value with the
1522 new value. More importantly, it helps developers write more efficient and
1523 correct code by avoiding expensive loops around
1524 ``__sync_bool_compare_and_swap()`` or relying on the platform specific
1525 implementation details of ``__sync_lock_test_and_set()``. The
1526 ``__sync_swap()`` builtin is a full barrier.
1527
1528 Multiprecision Arithmetic Builtins
1529 ----------------------------------
1530
1531 Clang provides a set of builtins which expose multiprecision arithmetic in a
1532 manner amenable to C. They all have the following form:
1533
1534 .. code-block:: c
1535
1536 unsigned x = ..., y = ..., carryin = ..., carryout;
1537 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
1538
1539 Thus one can form a multiprecision addition chain in the following manner:
1540
1541 .. code-block:: c
1542
1543 unsigned *x, *y, *z, carryin=0, carryout;
1544 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
1545 carryin = carryout;
1546 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
1547 carryin = carryout;
1548 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
1549 carryin = carryout;
1550 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
1551
1552 The complete list of builtins are:
1553
1554 .. code-block:: c
1555
1556 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
1557 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
1558 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
1559 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
1560 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
1561 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
1562 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
1563 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
1564
1565 .. _langext-__c11_atomic:
1566
1567 __c11_atomic builtins
1568 ---------------------
1569
1570 Clang provides a set of builtins which are intended to be used to implement
1571 C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
1572 ``_explicit`` form of the corresponding C11 operation, and are named with a
1573 ``__c11_`` prefix. The supported operations are:
1574
1575 * ``__c11_atomic_init``
1576 * ``__c11_atomic_thread_fence``
1577 * ``__c11_atomic_signal_fence``
1578 * ``__c11_atomic_is_lock_free``
1579 * ``__c11_atomic_store``
1580 * ``__c11_atomic_load``
1581 * ``__c11_atomic_exchange``
1582 * ``__c11_atomic_compare_exchange_strong``
1583 * ``__c11_atomic_compare_exchange_weak``
1584 * ``__c11_atomic_fetch_add``
1585 * ``__c11_atomic_fetch_sub``
1586 * ``__c11_atomic_fetch_and``
1587 * ``__c11_atomic_fetch_or``
1588 * ``__c11_atomic_fetch_xor``
1589
1590 Non-standard C++11 Attributes
1591 =============================
1592
1593 Clang's non-standard C++11 attributes live in the ``clang`` attribute
1594 namespace.
1595
1596 The ``clang::fallthrough`` attribute
1597 ------------------------------------
1598
1599 The ``clang::fallthrough`` attribute is used along with the
1600 ``-Wimplicit-fallthrough`` argument to annotate intentional fall-through
1601 between switch labels. It can only be applied to a null statement placed at a
1602 point of execution between any statement and the next switch label. It is
1603 common to mark these places with a specific comment, but this attribute is
1604 meant to replace comments with a more strict annotation, which can be checked
1605 by the compiler. This attribute doesn't change semantics of the code and can
1606 be used wherever an intended fall-through occurs. It is designed to mimic
1607 control-flow statements like ``break;``, so it can be placed in most places
1608 where ``break;`` can, but only if there are no statements on the execution path
1609 between it and the next switch label.
1610
1611 Here is an example:
1612
1613 .. code-block:: c++
1614
1615 // compile with -Wimplicit-fallthrough
1616 switch (n) {
1617 case 22:
1618 case 33: // no warning: no statements between case labels
1619 f();
1620 case 44: // warning: unannotated fall-through
1621 g();
1622 [[clang::fallthrough]];
1623 case 55: // no warning
1624 if (x) {
1625 h();
1626 break;
1627 }
1628 else {
1629 i();
1630 [[clang::fallthrough]];
1631 }
1632 case 66: // no warning
1633 p();
1634 [[clang::fallthrough]]; // warning: fallthrough annotation does not
1635 // directly precede case label
1636 q();
1637 case 77: // warning: unannotated fall-through
1638 r();
1639 }
1640
1641 ``gnu::`` attributes
1642 --------------------
1643
1644 Clang also supports GCC's ``gnu`` attribute namespace. All GCC attributes which
1645 are accepted with the ``__attribute__((foo))`` syntax are also accepted as
1646 ``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
1647 (see the list of `GCC function attributes
1648 <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
1649 attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
1650 `GCC type attributes
1651 <http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_. As with the GCC
1652 implementation, these attributes must appertain to the *declarator-id* in a
1653 declaration, which means they must go either at the start of the declaration or
1654 immediately after the name being declared.
1655
1656 For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
1657 also applies the GNU ``noreturn`` attribute to ``f``.
1658
1659 .. code-block:: c++
1660
1661 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
1662
1663 Target-Specific Extensions
1664 ==========================
1665
1666 Clang supports some language features conditionally on some targets.
1667
1668 X86/X86-64 Language Extensions
1669 ------------------------------
1670
1671 The X86 backend has these language extensions:
1672
1673 Memory references off the GS segment
1674 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1675
1676 Annotating a pointer with address space #256 causes it to be code generated
1677 relative to the X86 GS segment register, and address space #257 causes it to be
1678 relative to the X86 FS segment. Note that this is a very very low-level
1679 feature that should only be used if you know what you're doing (for example in
1680 an OS kernel).
1681
1682 Here is an example:
1683
1684 .. code-block:: c++
1685
1686 #define GS_RELATIVE __attribute__((address_space(256)))
1687 int foo(int GS_RELATIVE *P) {
1688 return *P;
1689 }
1690
1691 Which compiles to (on X86-32):
1692
1693 .. code-block:: gas
1694
1695 _foo:
1696 movl 4(%esp), %eax
1697 movl %gs:(%eax), %eax
1698 ret
1699
1700 Extensions for Static Analysis
1701 ==============================
1702
1703 Clang supports additional attributes that are useful for documenting program
1704 invariants and rules for static analysis tools, such as the `Clang Static
1705 Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented
1706 in the analyzer's `list of source-level annotations
1707 <http://clang-analyzer.llvm.org/annotations.html>`_.
1708
1709
1710 Extensions for Dynamic Analysis
1711 ===============================
1712
1713 .. _langext-address_sanitizer:
1714
1715 AddressSanitizer
1716 ----------------
1717
1718 Use ``__has_feature(address_sanitizer)`` to check if the code is being built
1719 with :doc:`AddressSanitizer`.
1720
1721 Use ``__attribute__((no_sanitize_address))``
1722 on a function declaration
1723 to specify that address safety instrumentation (e.g. AddressSanitizer) should
1724 not be applied to that function.
1725
1726 .. _langext-thread_sanitizer:
1727
1728 ThreadSanitizer
1729 ----------------
1730
1731 Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
1732 with :doc:`ThreadSanitizer`.
1733
1734 Use ``__attribute__((no_sanitize_thread))`` on a function declaration
1735 to specify that checks for data races on plain (non-atomic) memory accesses
1736 should not be inserted by ThreadSanitizer.
1737 The function may still be instrumented by the tool
1738 to avoid false positives in other places.
1739
1740 .. _langext-memory_sanitizer:
1741
1742 MemorySanitizer
1743 ----------------
1744 Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
1745 with :doc:`MemorySanitizer`.
1746
1747 Use ``__attribute__((no_sanitize_memory))`` on a function declaration
1748 to specify that checks for uninitialized memory should not be inserted
1749 (e.g. by MemorySanitizer). The function may still be instrumented by the tool
1750 to avoid false positives in other places.
1751
1752
1753 Thread-Safety Annotation Checking
1754 =================================
1755
1756 Clang supports additional attributes for checking basic locking policies in
1757 multithreaded programs. Clang currently parses the following list of
1758 attributes, although **the implementation for these annotations is currently in
1759 development.** For more details, see the `GCC implementation
1760 <http://gcc.gnu.org/wiki/ThreadSafetyAnnotation>`_.
1761
1762 ``no_thread_safety_analysis``
1763 -----------------------------
1764
1765 Use ``__attribute__((no_thread_safety_analysis))`` on a function declaration to
1766 specify that the thread safety analysis should not be run on that function.
1767 This attribute provides an escape hatch (e.g. for situations when it is
1768 difficult to annotate the locking policy).
1769
1770 ``lockable``
1771 ------------
1772
1773 Use ``__attribute__((lockable))`` on a class definition to specify that it has
1774 a lockable type (e.g. a Mutex class). This annotation is primarily used to
1775 check consistency.
1776
1777 ``scoped_lockable``
1778 -------------------
1779
1780 Use ``__attribute__((scoped_lockable))`` on a class definition to specify that
1781 it has a "scoped" lockable type. Objects of this type will acquire the lock
1782 upon construction and release it upon going out of scope. This annotation is
1783 primarily used to check consistency.
1784
1785 ``guarded_var``
1786 ---------------
1787
1788 Use ``__attribute__((guarded_var))`` on a variable declaration to specify that
1789 the variable must be accessed while holding some lock.
1790
1791 ``pt_guarded_var``
1792 ------------------
1793
1794 Use ``__attribute__((pt_guarded_var))`` on a pointer declaration to specify
1795 that the pointer must be dereferenced while holding some lock.
1796
1797 ``guarded_by(l)``
1798 -----------------
1799
1800 Use ``__attribute__((guarded_by(l)))`` on a variable declaration to specify
1801 that the variable must be accessed while holding lock ``l``.
1802
1803 ``pt_guarded_by(l)``
1804 --------------------
1805
1806 Use ``__attribute__((pt_guarded_by(l)))`` on a pointer declaration to specify
1807 that the pointer must be dereferenced while holding lock ``l``.
1808
1809 ``acquired_before(...)``
1810 ------------------------
1811
1812 Use ``__attribute__((acquired_before(...)))`` on a declaration of a lockable
1813 variable to specify that the lock must be acquired before all attribute
1814 arguments. Arguments must be lockable type, and there must be at least one
1815 argument.
1816
1817 ``acquired_after(...)``
1818 -----------------------
1819
1820 Use ``__attribute__((acquired_after(...)))`` on a declaration of a lockable
1821 variable to specify that the lock must be acquired after all attribute
1822 arguments. Arguments must be lockable type, and there must be at least one
1823 argument.
1824
1825 ``exclusive_lock_function(...)``
1826 --------------------------------
1827
1828 Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration
1829 to specify that the function acquires all listed locks exclusively. This
1830 attribute takes zero or more arguments: either of lockable type or integers
1831 indexing into function parameters of lockable type. If no arguments are given,
1832 the acquired lock is implicitly ``this`` of the enclosing object.
1833
1834 ``shared_lock_function(...)``
1835 -----------------------------
1836
1837 Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to
1838 specify that the function acquires all listed locks, although the locks may be
1839 shared (e.g. read locks). This attribute takes zero or more arguments: either
1840 of lockable type or integers indexing into function parameters of lockable
1841 type. If no arguments are given, the acquired lock is implicitly ``this`` of
1842 the enclosing object.
1843
1844 ``exclusive_trylock_function(...)``
1845 -----------------------------------
1846
1847 Use ``__attribute__((exclusive_lock_function(...)))`` on a function declaration
1848 to specify that the function will try (without blocking) to acquire all listed
1849 locks exclusively. This attribute takes one or more arguments. The first
1850 argument is an integer or boolean value specifying the return value of a
1851 successful lock acquisition. The remaining arugments are either of lockable
1852 type or integers indexing into function parameters of lockable type. If only
1853 one argument is given, the acquired lock is implicitly ``this`` of the
1854 enclosing object.
1855
1856 ``shared_trylock_function(...)``
1857 --------------------------------
1858
1859 Use ``__attribute__((shared_lock_function(...)))`` on a function declaration to
1860 specify that the function will try (without blocking) to acquire all listed
1861 locks, although the locks may be shared (e.g. read locks). This attribute
1862 takes one or more arguments. The first argument is an integer or boolean value
1863 specifying the return value of a successful lock acquisition. The remaining
1864 arugments are either of lockable type or integers indexing into function
1865 parameters of lockable type. If only one argument is given, the acquired lock
1866 is implicitly ``this`` of the enclosing object.
1867
1868 ``unlock_function(...)``
1869 ------------------------
1870
1871 Use ``__attribute__((unlock_function(...)))`` on a function declaration to
1872 specify that the function release all listed locks. This attribute takes zero
1873 or more arguments: either of lockable type or integers indexing into function
1874 parameters of lockable type. If no arguments are given, the acquired lock is
1875 implicitly ``this`` of the enclosing object.
1876
1877 ``lock_returned(l)``
1878 --------------------
1879
1880 Use ``__attribute__((lock_returned(l)))`` on a function declaration to specify
1881 that the function returns lock ``l`` (``l`` must be of lockable type). This
1882 annotation is used to aid in resolving lock expressions.
1883
1884 ``locks_excluded(...)``
1885 -----------------------
1886
1887 Use ``__attribute__((locks_excluded(...)))`` on a function declaration to
1888 specify that the function must not be called with the listed locks. Arguments
1889 must be lockable type, and there must be at least one argument.
1890
1891 ``exclusive_locks_required(...)``
1892 ---------------------------------
1893
1894 Use ``__attribute__((exclusive_locks_required(...)))`` on a function
1895 declaration to specify that the function must be called while holding the
1896 listed exclusive locks. Arguments must be lockable type, and there must be at
1897 least one argument.
1898
1899 ``shared_locks_required(...)``
1900 ------------------------------
1901
1902 Use ``__attribute__((shared_locks_required(...)))`` on a function declaration
1903 to specify that the function must be called while holding the listed shared
1904 locks. Arguments must be lockable type, and there must be at least one
1905 argument.
1906
1907 Type Safety Checking
1908 ====================
1909
1910 Clang supports additional attributes to enable checking type safety properties
1911 that can't be enforced by C type system. Usecases include:
1912
1913 * MPI library implementations, where these attributes enable checking that
1914 buffer type matches the passed ``MPI_Datatype``;
1915 * for HDF5 library there is a similar usecase as MPI;
1916 * checking types of variadic functions' arguments for functions like
1917 ``fcntl()`` and ``ioctl()``.
1918
1919 You can detect support for these attributes with ``__has_attribute()``. For
1920 example:
1921
1922 .. code-block:: c++
1923
1924 #if defined(__has_attribute)
1925 # if __has_attribute(argument_with_type_tag) && \
1926 __has_attribute(pointer_with_type_tag) && \
1927 __has_attribute(type_tag_for_datatype)
1928 # define ATTR_MPI_PWT(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(mpi,buffer_idx,type_idx)))
1929 /* ... other macros ... */
1930 # endif
1931 #endif
1932
1933 #if !defined(ATTR_MPI_PWT)
1934 # define ATTR_MPI_PWT(buffer_idx, type_idx)
1935 #endif
1936
1937 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
1938 ATTR_MPI_PWT(1,3);
1939
1940 ``argument_with_type_tag(...)``
1941 -------------------------------
1942
1943 Use ``__attribute__((argument_with_type_tag(arg_kind, arg_idx,
1944 type_tag_idx)))`` on a function declaration to specify that the function
1945 accepts a type tag that determines the type of some other argument.
1946 ``arg_kind`` is an identifier that should be used when annotating all
1947 applicable type tags.
1948
1949 This attribute is primarily useful for checking arguments of variadic functions
1950 (``pointer_with_type_tag`` can be used in most of non-variadic cases).
1951
1952 For example:
1953
1954 .. code-block:: c++
1955
1956 int fcntl(int fd, int cmd, ...)
1957 __attribute__(( argument_with_type_tag(fcntl,3,2) ));
1958
1959 ``pointer_with_type_tag(...)``
1960 ------------------------------
1961
1962 Use ``__attribute__((pointer_with_type_tag(ptr_kind, ptr_idx, type_tag_idx)))``
1963 on a function declaration to specify that the function accepts a type tag that
1964 determines the pointee type of some other pointer argument.
1965
1966 For example:
1967
1968 .. code-block:: c++
1969
1970 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
1971 __attribute__(( pointer_with_type_tag(mpi,1,3) ));
1972
1973 ``type_tag_for_datatype(...)``
1974 ------------------------------
1975
1976 Clang supports annotating type tags of two forms.
1977
1978 * **Type tag that is an expression containing a reference to some declared
1979 identifier.** Use ``__attribute__((type_tag_for_datatype(kind, type)))`` on a
1980 declaration with that identifier:
1981
1982 .. code-block:: c++
1983
1984 extern struct mpi_datatype mpi_datatype_int
1985 __attribute__(( type_tag_for_datatype(mpi,int) ));
1986 #define MPI_INT ((MPI_Datatype) &mpi_datatype_int)
1987
1988 * **Type tag that is an integral literal.** Introduce a ``static const``
1989 variable with a corresponding initializer value and attach
1990 ``__attribute__((type_tag_for_datatype(kind, type)))`` on that declaration,
1991 for example:
1992
1993 .. code-block:: c++
1994
1995 #define MPI_INT ((MPI_Datatype) 42)
1996 static const MPI_Datatype mpi_datatype_int
1997 __attribute__(( type_tag_for_datatype(mpi,int) )) = 42
1998
1999 The attribute also accepts an optional third argument that determines how the
2000 expression is compared to the type tag. There are two supported flags:
2001
2002 * ``layout_compatible`` will cause types to be compared according to
2003 layout-compatibility rules (C++11 [class.mem] p 17, 18). This is
2004 implemented to support annotating types like ``MPI_DOUBLE_INT``.
2005
2006 For example:
2007
2008 .. code-block:: c++
2009
2010 /* In mpi.h */
2011 struct internal_mpi_double_int { double d; int i; };
2012 extern struct mpi_datatype mpi_datatype_double_int
2013 __attribute__(( type_tag_for_datatype(mpi, struct internal_mpi_double_int, layout_compatible) ));
2014
2015 #define MPI_DOUBLE_INT ((MPI_Datatype) &mpi_datatype_double_int)
2016
2017 /* In user code */
2018 struct my_pair { double a; int b; };
2019 struct my_pair *buffer;
2020 MPI_Send(buffer, 1, MPI_DOUBLE_INT /*, ... */); // no warning
2021
2022 struct my_int_pair { int a; int b; }
2023 struct my_int_pair *buffer2;
2024 MPI_Send(buffer2, 1, MPI_DOUBLE_INT /*, ... */); // warning: actual buffer element
2025 // type 'struct my_int_pair'
2026 // doesn't match specified MPI_Datatype
2027
2028 * ``must_be_null`` specifies that the expression should be a null pointer
2029 constant, for example:
2030
2031 .. code-block:: c++
2032
2033 /* In mpi.h */
2034 extern struct mpi_datatype mpi_datatype_null
2035 __attribute__(( type_tag_for_datatype(mpi, void, must_be_null) ));
2036
2037 #define MPI_DATATYPE_NULL ((MPI_Datatype) &mpi_datatype_null)
2038
2039 /* In user code */
2040 MPI_Send(buffer, 1, MPI_DATATYPE_NULL /*, ... */); // warning: MPI_DATATYPE_NULL
2041 // was specified but buffer
2042 // is not a null pointer
2043
2044 Format String Checking
2045 ======================
2046
2047 Clang supports the ``format`` attribute, which indicates that the function
2048 accepts a ``printf`` or ``scanf``-like format string and corresponding
2049 arguments or a ``va_list`` that contains these arguments.
2050
2051 Please see `GCC documentation about format attribute
2052 <http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ to find details
2053 about attribute syntax.
2054
2055 Clang implements two kinds of checks with this attribute.
2056
2057 #. Clang checks that the function with the ``format`` attribute is called with
2058 a format string that uses format specifiers that are allowed, and that
2059 arguments match the format string. This is the ``-Wformat`` warning, it is
2060 on by default.
2061
2062 #. Clang checks that the format string argument is a literal string. This is
2063 the ``-Wformat-nonliteral`` warning, it is off by default.
2064
2065 Clang implements this mostly the same way as GCC, but there is a difference
2066 for functions that accept a ``va_list`` argument (for example, ``vprintf``).
2067 GCC does not emit ``-Wformat-nonliteral`` warning for calls to such
2068 fuctions. Clang does not warn if the format string comes from a function
2069 parameter, where the function is annotated with a compatible attribute,
2070 otherwise it warns. For example:
2071
2072 .. code-block:: c
2073
2074 __attribute__((__format__ (__scanf__, 1, 3)))
2075 void foo(const char* s, char *buf, ...) {
2076 va_list ap;
2077 va_start(ap, buf);
2078
2079 vprintf(s, ap); // warning: format string is not a string literal
2080 }
2081
2082 In this case we warn because ``s`` contains a format string for a
2083 ``scanf``-like function, but it is passed to a ``printf``-like function.
2084
2085 If the attribute is removed, clang still warns, because the format string is
2086 not a string literal.
2087
2088 Another example:
2089
2090 .. code-block:: c
2091
2092 __attribute__((__format__ (__printf__, 1, 3)))
2093 void foo(const char* s, char *buf, ...) {
2094 va_list ap;
2095 va_start(ap, buf);
2096
2097 vprintf(s, ap); // warning
2098 }
2099
2100 In this case Clang does not warn because the format string ``s`` and
2101 the corresponding arguments are annotated. If the arguments are
2102 incorrect, the caller of ``foo`` will receive a warning.