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