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