blob: 9583a51a3ba05322407b6bb072da1b5af13df642 [file] [log] [blame]
Sean Silva709c44d2012-12-12 23:44:55 +00001=========================
2Clang Language Extensions
3=========================
4
5.. contents::
6 :local:
Sean Silva13d43fe2013-01-02 21:09:58 +00007 :depth: 1
Sean Silva709c44d2012-12-12 23:44:55 +00008
Sean Silvaf380e0e2013-01-02 21:03:11 +00009.. toctree::
10 :hidden:
11
12 ObjectiveCLiterals
13 BlockLanguageSpec
Michael Gottesman6fd58462013-01-07 22:24:45 +000014 Block-ABI-Apple
DeLesley Hutchinsc51e08c2014-02-18 19:42:01 +000015 AutomaticReferenceCounting
Sean Silvaf380e0e2013-01-02 21:03:11 +000016
Sean Silva709c44d2012-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
Alp Toker958027b2014-07-14 19:42:55 +000094For backward compatibility, ``__has_feature`` can also be used to test
Sean Silva709c44d2012-12-12 23:44:55 +000095for 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 Silva173d2522013-01-02 13:07:47 +000099to the language standard, such as e.g. :doc:`AddressSanitizer
100<AddressSanitizer>`.
Sean Silva709c44d2012-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
Aaron Ballmana0344c52014-11-14 13:44:02 +0000112``__has_cpp_attribute``
Aaron Ballman631bd7b2014-11-14 14:01:55 +0000113-----------------------
Aaron Ballmana0344c52014-11-14 13:44:02 +0000114
115This function-like macro takes a single argument that is the name of a
116C++11-style attribute. The argument can either be a single identifier, or a
117scoped identifier. If the attribute is supported, a nonzero value is returned.
118If the attribute is a standards-based attribute, this macro returns a nonzero
119value based on the year and month in which the attribute was voted into the
120working draft. If the attribute is not supported by the current compliation
121target, this macro evaluates to 0. It can be used like this:
122
123.. code-block:: c++
124
125 #ifndef __has_cpp_attribute // Optional of course.
126 #define __has_cpp_attribute(x) 0 // Compatibility with non-clang compilers.
127 #endif
128
129 ...
130 #if __has_cpp_attribute(clang::fallthrough)
131 #define FALLTHROUGH [[clang::fallthrough]]
132 #else
133 #define FALLTHROUGH
134 #endif
135 ...
136
137The attribute identifier (but not scope) can also be specified with a preceding
138and following ``__`` (double underscore) to avoid interference from a macro with
139the same name. For instance, ``gnu::__const__`` can be used instead of
140``gnu::const``.
141
Sean Silva709c44d2012-12-12 23:44:55 +0000142``__has_attribute``
143-------------------
144
145This function-like macro takes a single identifier argument that is the name of
Aaron Ballman4bfaeba2014-12-05 17:11:49 +0000146a GNU-style attribute. It evaluates to 1 if the attribute is supported by the
147current compilation target, or 0 if not. It can be used like this:
Sean Silva709c44d2012-12-12 23:44:55 +0000148
149.. code-block:: c++
150
151 #ifndef __has_attribute // Optional of course.
152 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
153 #endif
154
155 ...
156 #if __has_attribute(always_inline)
157 #define ALWAYS_INLINE __attribute__((always_inline))
158 #else
159 #define ALWAYS_INLINE
160 #endif
161 ...
162
163The attribute name can also be specified with a preceding and following ``__``
164(double underscore) to avoid interference from a macro with the same name. For
165instance, ``__always_inline__`` can be used instead of ``always_inline``.
166
Aaron Ballman3c0f9b42014-12-05 15:05:29 +0000167
168``__has_declspec_attribute``
169----------------------------
170
171This function-like macro takes a single identifier argument that is the name of
172an attribute implemented as a Microsoft-style ``__declspec`` attribute. It
173evaluates to 1 if the attribute is supported by the current compilation target,
174or 0 if not. It can be used like this:
175
176.. code-block:: c++
177
178 #ifndef __has_declspec_attribute // Optional of course.
179 #define __has_declspec_attribute(x) 0 // Compatibility with non-clang compilers.
180 #endif
181
182 ...
183 #if __has_declspec_attribute(dllexport)
184 #define DLLEXPORT __declspec(dllexport)
185 #else
186 #define DLLEXPORT
187 #endif
188 ...
189
190The attribute name can also be specified with a preceding and following ``__``
191(double underscore) to avoid interference from a macro with the same name. For
192instance, ``__dllexport__`` can be used instead of ``dllexport``.
193
Yunzhong Gaoa8c45c92014-04-12 02:25:32 +0000194``__is_identifier``
195-------------------
196
197This function-like macro takes a single identifier argument that might be either
198a reserved word or a regular identifier. It evaluates to 1 if the argument is just
199a regular identifier and not a reserved word, in the sense that it can then be
200used as the name of a user-defined function or variable. Otherwise it evaluates
201to 0. It can be used like this:
202
203.. code-block:: c++
204
205 ...
206 #ifdef __is_identifier // Compatibility with non-clang compilers.
207 #if __is_identifier(__wchar_t)
208 typedef wchar_t __wchar_t;
209 #endif
210 #endif
211
212 __wchar_t WideCharacter;
213 ...
Aaron Ballmana4bb4b92014-01-09 23:11:13 +0000214
Sean Silva709c44d2012-12-12 23:44:55 +0000215Include File Checking Macros
216============================
217
218Not all developments systems have the same include files. The
219:ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
220you to check for the existence of an include file before doing a possibly
Dmitri Gribenko764ea242013-01-17 17:04:54 +0000221failing ``#include`` directive. Include file checking macros must be used
222as expressions in ``#if`` or ``#elif`` preprocessing directives.
Sean Silva709c44d2012-12-12 23:44:55 +0000223
224.. _langext-__has_include:
225
226``__has_include``
227-----------------
228
229This function-like macro takes a single file name string argument that is the
230name of an include file. It evaluates to 1 if the file can be found using the
231include paths, or 0 otherwise:
232
233.. code-block:: c++
234
235 // Note the two possible file name string formats.
236 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
237 # include "myinclude.h"
238 #endif
239
Richard Smithccfc9ff2013-07-11 00:27:05 +0000240To test for this feature, use ``#if defined(__has_include)``:
241
242.. code-block:: c++
243
Sean Silva709c44d2012-12-12 23:44:55 +0000244 // To avoid problem with non-clang compilers not having this macro.
Richard Smithccfc9ff2013-07-11 00:27:05 +0000245 #if defined(__has_include)
246 #if __has_include("myinclude.h")
Sean Silva709c44d2012-12-12 23:44:55 +0000247 # include "myinclude.h"
248 #endif
Richard Smithccfc9ff2013-07-11 00:27:05 +0000249 #endif
Sean Silva709c44d2012-12-12 23:44:55 +0000250
251.. _langext-__has_include_next:
252
253``__has_include_next``
254----------------------
255
256This function-like macro takes a single file name string argument that is the
257name of an include file. It is like ``__has_include`` except that it looks for
258the second instance of the given file found in the include paths. It evaluates
259to 1 if the second instance of the file can be found using the include paths,
260or 0 otherwise:
261
262.. code-block:: c++
263
264 // Note the two possible file name string formats.
265 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
266 # include_next "myinclude.h"
267 #endif
268
269 // To avoid problem with non-clang compilers not having this macro.
Richard Smithccfc9ff2013-07-11 00:27:05 +0000270 #if defined(__has_include_next)
271 #if __has_include_next("myinclude.h")
Sean Silva709c44d2012-12-12 23:44:55 +0000272 # include_next "myinclude.h"
273 #endif
Richard Smithccfc9ff2013-07-11 00:27:05 +0000274 #endif
Sean Silva709c44d2012-12-12 23:44:55 +0000275
276Note that ``__has_include_next``, like the GNU extension ``#include_next``
277directive, is intended for use in headers only, and will issue a warning if
278used in the top-level compilation file. A warning will also be issued if an
279absolute path is used in the file argument.
280
281``__has_warning``
282-----------------
283
284This function-like macro takes a string literal that represents a command line
285option for a warning and returns true if that is a valid warning option.
286
287.. code-block:: c++
288
289 #if __has_warning("-Wformat")
290 ...
291 #endif
292
293Builtin Macros
294==============
295
296``__BASE_FILE__``
297 Defined to a string that contains the name of the main input file passed to
298 Clang.
299
300``__COUNTER__``
301 Defined to an integer value that starts at zero and is incremented each time
302 the ``__COUNTER__`` macro is expanded.
303
304``__INCLUDE_LEVEL__``
305 Defined to an integral value that is the include depth of the file currently
306 being translated. For the main file, this value is zero.
307
308``__TIMESTAMP__``
309 Defined to the date and time of the last modification of the current source
310 file.
311
312``__clang__``
313 Defined when compiling with Clang
314
315``__clang_major__``
316 Defined to the major marketing version number of Clang (e.g., the 2 in
317 2.0.1). Note that marketing version numbers should not be used to check for
318 language features, as different vendors use different numbering schemes.
319 Instead, use the :ref:`langext-feature_check`.
320
321``__clang_minor__``
322 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note
323 that marketing version numbers should not be used to check for language
324 features, as different vendors use different numbering schemes. Instead, use
325 the :ref:`langext-feature_check`.
326
327``__clang_patchlevel__``
328 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
329
330``__clang_version__``
331 Defined to a string that captures the Clang marketing version, including the
332 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
333
334.. _langext-vectors:
335
336Vectors and Extended Vectors
337============================
338
339Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
340
341OpenCL vector types are created using ``ext_vector_type`` attribute. It
342support for ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example
343is:
344
345.. code-block:: c++
346
347 typedef float float4 __attribute__((ext_vector_type(4)));
348 typedef float float2 __attribute__((ext_vector_type(2)));
349
350 float4 foo(float2 a, float2 b) {
351 float4 c;
352 c.xz = a;
353 c.yw = b;
354 return c;
355 }
356
357Query for this feature with ``__has_extension(attribute_ext_vector_type)``.
358
Eric Christopher758aad72017-03-21 22:06:18 +0000359Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
Sean Silva709c44d2012-12-12 23:44:55 +0000360and functions. For example:
361
362.. code-block:: c++
363
364 vector float foo(vector int a) {
365 vector int b;
366 b = vec_add(a, a) + a;
367 return (vector float)b;
368 }
369
370NEON vector types are created using ``neon_vector_type`` and
371``neon_polyvector_type`` attributes. For example:
372
373.. code-block:: c++
374
375 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
376 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
377
378 int8x8_t foo(int8x8_t a) {
379 int8x8_t v;
380 v = a;
381 return v;
382 }
383
384Vector Literals
385---------------
386
387Vector literals can be used to create vectors from a set of scalars, or
388vectors. Either parentheses or braces form can be used. In the parentheses
389form the number of literal values specified must be one, i.e. referring to a
390scalar value, or must match the size of the vector type being created. If a
391single scalar literal value is specified, the scalar literal value will be
392replicated to all the components of the vector type. In the brackets form any
393number of literals can be specified. For example:
394
395.. code-block:: c++
396
397 typedef int v4si __attribute__((__vector_size__(16)));
398 typedef float float4 __attribute__((ext_vector_type(4)));
399 typedef float float2 __attribute__((ext_vector_type(2)));
400
401 v4si vsi = (v4si){1, 2, 3, 4};
402 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
403 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1).
404 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0).
405 vector int vi3 = (vector int)(1, 2); // error
406 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
407 vector int vi5 = (vector int)(1, 2, 3, 4);
408 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
409
410Vector Operations
411-----------------
412
413The table below shows the support for each operation by vector extension. A
414dash indicates that an operation is not accepted according to a corresponding
415specification.
416
Anton Yartsev94e46f32014-09-03 17:59:21 +0000417============================== ======= ======= ======= =======
Nick Lewycky00a5d212015-08-10 19:54:11 +0000418 Operator OpenCL AltiVec GCC NEON
Anton Yartsev94e46f32014-09-03 17:59:21 +0000419============================== ======= ======= ======= =======
420[] yes yes yes --
421unary operators +, -- yes yes yes --
422++, -- -- yes yes yes --
423+,--,*,/,% yes yes yes --
424bitwise operators &,|,^,~ yes yes yes --
425>>,<< yes yes yes --
426!, &&, || yes -- -- --
427==, !=, >, <, >=, <= yes yes -- --
428= yes yes yes yes
429:? yes -- -- --
430sizeof yes yes yes yes
431C-style cast yes yes yes no
432reinterpret_cast yes no yes no
433static_cast yes no yes no
434const_cast no no no no
435============================== ======= ======= ======= =======
Sean Silva709c44d2012-12-12 23:44:55 +0000436
Anton Yartsev94e46f32014-09-03 17:59:21 +0000437See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
Sean Silva709c44d2012-12-12 23:44:55 +0000438
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000439Half-Precision Floating Point
440=============================
441
442Clang supports two half-precision (16-bit) floating point types: ``__fp16`` and
443``_Float16``. ``__fp16`` is defined in the ARM C Language Extensions (`ACLE
444<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053d/IHI0053D_acle_2_1.pdf>`_)
445and ``_Float16`` in ISO/IEC TS 18661-3:2015.
446
447``__fp16`` is a storage and interchange format only. This means that values of
448``__fp16`` promote to (at least) float when used in arithmetic operations.
449There are two ``__fp16`` formats. Clang supports the IEEE 754-2008 format and
450not the ARM alternative format.
451
452ISO/IEC TS 18661-3:2015 defines C support for additional floating point types.
453``_FloatN`` is defined as a binary floating type, where the N suffix denotes
454the number of bits and is 16, 32, 64, or greater and equal to 128 and a
455multiple of 32. Clang supports ``_Float16``. The difference from ``__fp16`` is
456that arithmetic on ``_Float16`` is performed in half-precision, thus it is not
457a storage-only format. ``_Float16`` is available as a source language type in
458both C and C++ mode.
459
460It is recommended that portable code use the ``_Float16`` type because
461``__fp16`` is an ARM C-Language Extension (ACLE), whereas ``_Float16`` is
462defined by the C standards committee, so using ``_Float16`` will not prevent
463code from being ported to architectures other than Arm. Also, ``_Float16``
464arithmetic and operations will directly map on half-precision instructions when
465they are available (e.g. Armv8.2-A), avoiding conversions to/from
466single-precision, and thus will result in more performant code. If
467half-precision instructions are unavailable, values will be promoted to
468single-precision, similar to the semantics of ``__fp16`` except that the
469results will be stored in single-precision.
470
471In an arithmetic operation where one operand is of ``__fp16`` type and the
472other is of ``_Float16`` type, the ``_Float16`` type is first converted to
473``__fp16`` type and then the operation is completed as if both operands were of
474``__fp16`` type.
475
476To define a ``_Float16`` literal, suffix ``f16`` can be appended to the compile-time
477constant declaration. There is no default argument promotion for ``_Float16``; this
478applies to the standard floating types only. As a consequence, for example, an
479explicit cast is required for printing a ``_Float16`` value (there is no string
480format specifier for ``_Float16``).
481
Sean Silva709c44d2012-12-12 23:44:55 +0000482Messages on ``deprecated`` and ``unavailable`` Attributes
483=========================================================
484
485An optional string message can be added to the ``deprecated`` and
486``unavailable`` attributes. For example:
487
488.. code-block:: c++
489
490 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
491
492If the deprecated or unavailable declaration is used, the message will be
493incorporated into the appropriate diagnostic:
494
George Burgess IV61e43272016-06-21 00:16:23 +0000495.. code-block:: none
Sean Silva709c44d2012-12-12 23:44:55 +0000496
497 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
498 [-Wdeprecated-declarations]
499 explode();
500 ^
501
502Query for this feature with
503``__has_extension(attribute_deprecated_with_message)`` and
504``__has_extension(attribute_unavailable_with_message)``.
505
506Attributes on Enumerators
507=========================
508
509Clang allows attributes to be written on individual enumerators. This allows
510enumerators to be deprecated, made unavailable, etc. The attribute must appear
511after the enumerator name and before any initializer, like so:
512
513.. code-block:: c++
514
515 enum OperationMode {
516 OM_Invalid,
517 OM_Normal,
518 OM_Terrified __attribute__((deprecated)),
519 OM_AbortOnError __attribute__((deprecated)) = 4
520 };
521
522Attributes on the ``enum`` declaration do not apply to individual enumerators.
523
524Query for this feature with ``__has_extension(enumerator_attributes)``.
525
526'User-Specified' System Frameworks
527==================================
528
529Clang provides a mechanism by which frameworks can be built in such a way that
530they will always be treated as being "system frameworks", even if they are not
531present in a system framework directory. This can be useful to system
532framework developers who want to be able to test building other applications
533with development builds of their framework, including the manner in which the
534compiler changes warning behavior for system headers.
535
536Framework developers can opt-in to this mechanism by creating a
537"``.system_framework``" file at the top-level of their framework. That is, the
538framework should have contents like:
539
540.. code-block:: none
541
542 .../TestFramework.framework
543 .../TestFramework.framework/.system_framework
544 .../TestFramework.framework/Headers
545 .../TestFramework.framework/Headers/TestFramework.h
546 ...
547
548Clang will treat the presence of this file as an indicator that the framework
549should be treated as a system framework, regardless of how it was found in the
550framework search path. For consistency, we recommend that such files never be
551included in installed versions of the framework.
552
Sean Silva709c44d2012-12-12 23:44:55 +0000553Checks for Standard Language Features
554=====================================
555
556The ``__has_feature`` macro can be used to query if certain standard language
557features are enabled. The ``__has_extension`` macro can be used to query if
558language features are available as an extension when compiling for a standard
559which does not provide them. The features which can be tested are listed here.
560
Richard Smith38af8562014-11-12 21:16:38 +0000561Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
562These are macros with names of the form ``__cpp_<feature_name>``, and are
563intended to be a portable way to query the supported features of the compiler.
564See `the C++ status page <http://clang.llvm.org/cxx_status.html#ts>`_ for
565information on the version of SD-6 supported by each Clang release, and the
566macros provided by that revision of the recommendations.
567
Sean Silva709c44d2012-12-12 23:44:55 +0000568C++98
569-----
570
571The features listed below are part of the C++98 standard. These features are
572enabled by default when compiling C++ code.
573
574C++ exceptions
575^^^^^^^^^^^^^^
576
577Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
578enabled. For example, compiling code with ``-fno-exceptions`` disables C++
579exceptions.
580
581C++ RTTI
582^^^^^^^^
583
584Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For
585example, compiling code with ``-fno-rtti`` disables the use of RTTI.
586
587C++11
588-----
589
590The features listed below are part of the C++11 standard. As a result, all
591these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
592when compiling C++ code.
593
594C++11 SFINAE includes access control
595^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
596
597Use ``__has_feature(cxx_access_control_sfinae)`` or
598``__has_extension(cxx_access_control_sfinae)`` to determine whether
599access-control errors (e.g., calling a private constructor) are considered to
600be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
601<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
602
603C++11 alias templates
604^^^^^^^^^^^^^^^^^^^^^
605
606Use ``__has_feature(cxx_alias_templates)`` or
607``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
608alias declarations and alias templates is enabled.
609
610C++11 alignment specifiers
611^^^^^^^^^^^^^^^^^^^^^^^^^^
612
613Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
614determine if support for alignment specifiers using ``alignas`` is enabled.
615
Nico Weber736a9932014-12-03 01:25:49 +0000616Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
617determine if support for the ``alignof`` keyword is enabled.
618
Sean Silva709c44d2012-12-12 23:44:55 +0000619C++11 attributes
620^^^^^^^^^^^^^^^^
621
622Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
623determine if support for attribute parsing with C++11's square bracket notation
624is enabled.
625
626C++11 generalized constant expressions
627^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
628
629Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
630constant expressions (e.g., ``constexpr``) is enabled.
631
632C++11 ``decltype()``
633^^^^^^^^^^^^^^^^^^^^
634
635Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
636determine if support for the ``decltype()`` specifier is enabled. C++11's
637``decltype`` does not require type-completeness of a function call expression.
638Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
639``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
640support for this feature is enabled.
641
642C++11 default template arguments in function templates
643^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
644
645Use ``__has_feature(cxx_default_function_template_args)`` or
646``__has_extension(cxx_default_function_template_args)`` to determine if support
647for default template arguments in function templates is enabled.
648
649C++11 ``default``\ ed functions
650^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
651
652Use ``__has_feature(cxx_defaulted_functions)`` or
653``__has_extension(cxx_defaulted_functions)`` to determine if support for
654defaulted function definitions (with ``= default``) is enabled.
655
656C++11 delegating constructors
657^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
658
659Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
660delegating constructors is enabled.
661
662C++11 ``deleted`` functions
663^^^^^^^^^^^^^^^^^^^^^^^^^^^
664
665Use ``__has_feature(cxx_deleted_functions)`` or
666``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
667function definitions (with ``= delete``) is enabled.
668
669C++11 explicit conversion functions
670^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
671
672Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
673``explicit`` conversion functions is enabled.
674
675C++11 generalized initializers
676^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
677
678Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
679generalized initializers (using braced lists and ``std::initializer_list``) is
680enabled.
681
682C++11 implicit move constructors/assignment operators
683^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
684
685Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
686generate move constructors and move assignment operators where needed.
687
688C++11 inheriting constructors
689^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
690
691Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
Richard Smith25b555a2013-04-19 17:00:31 +0000692inheriting constructors is enabled.
Sean Silva709c44d2012-12-12 23:44:55 +0000693
694C++11 inline namespaces
695^^^^^^^^^^^^^^^^^^^^^^^
696
697Use ``__has_feature(cxx_inline_namespaces)`` or
698``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
699namespaces is enabled.
700
701C++11 lambdas
702^^^^^^^^^^^^^
703
704Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
705determine if support for lambdas is enabled.
706
707C++11 local and unnamed types as template arguments
708^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
709
710Use ``__has_feature(cxx_local_type_template_args)`` or
711``__has_extension(cxx_local_type_template_args)`` to determine if support for
712local and unnamed types as template arguments is enabled.
713
714C++11 noexcept
715^^^^^^^^^^^^^^
716
717Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
718determine if support for noexcept exception specifications is enabled.
719
720C++11 in-class non-static data member initialization
721^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
722
723Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
724initialization of non-static data members is enabled.
725
726C++11 ``nullptr``
727^^^^^^^^^^^^^^^^^
728
729Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
730determine if support for ``nullptr`` is enabled.
731
732C++11 ``override control``
733^^^^^^^^^^^^^^^^^^^^^^^^^^
734
735Use ``__has_feature(cxx_override_control)`` or
736``__has_extension(cxx_override_control)`` to determine if support for the
737override control keywords is enabled.
738
739C++11 reference-qualified functions
740^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
741
742Use ``__has_feature(cxx_reference_qualified_functions)`` or
743``__has_extension(cxx_reference_qualified_functions)`` to determine if support
744for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
745applied to ``*this``) is enabled.
746
747C++11 range-based ``for`` loop
748^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
749
750Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
751determine if support for the range-based for loop is enabled.
752
753C++11 raw string literals
754^^^^^^^^^^^^^^^^^^^^^^^^^
755
756Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
757string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
758
759C++11 rvalue references
760^^^^^^^^^^^^^^^^^^^^^^^
761
762Use ``__has_feature(cxx_rvalue_references)`` or
763``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
764references is enabled.
765
766C++11 ``static_assert()``
767^^^^^^^^^^^^^^^^^^^^^^^^^
768
769Use ``__has_feature(cxx_static_assert)`` or
770``__has_extension(cxx_static_assert)`` to determine if support for compile-time
771assertions using ``static_assert`` is enabled.
772
Richard Smith25b555a2013-04-19 17:00:31 +0000773C++11 ``thread_local``
774^^^^^^^^^^^^^^^^^^^^^^
775
776Use ``__has_feature(cxx_thread_local)`` to determine if support for
777``thread_local`` variables is enabled.
778
Sean Silva709c44d2012-12-12 23:44:55 +0000779C++11 type inference
780^^^^^^^^^^^^^^^^^^^^
781
782Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
783determine C++11 type inference is supported using the ``auto`` specifier. If
784this is disabled, ``auto`` will instead be a storage class specifier, as in C
785or C++98.
786
787C++11 strongly typed enumerations
788^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
789
790Use ``__has_feature(cxx_strong_enums)`` or
791``__has_extension(cxx_strong_enums)`` to determine if support for strongly
792typed, scoped enumerations is enabled.
793
794C++11 trailing return type
795^^^^^^^^^^^^^^^^^^^^^^^^^^
796
797Use ``__has_feature(cxx_trailing_return)`` or
798``__has_extension(cxx_trailing_return)`` to determine if support for the
799alternate function declaration syntax with trailing return type is enabled.
800
801C++11 Unicode string literals
802^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
803
804Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
805string literals is enabled.
806
807C++11 unrestricted unions
808^^^^^^^^^^^^^^^^^^^^^^^^^
809
810Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
811unrestricted unions is enabled.
812
813C++11 user-defined literals
814^^^^^^^^^^^^^^^^^^^^^^^^^^^
815
816Use ``__has_feature(cxx_user_literals)`` to determine if support for
817user-defined literals is enabled.
818
819C++11 variadic templates
820^^^^^^^^^^^^^^^^^^^^^^^^
821
822Use ``__has_feature(cxx_variadic_templates)`` or
823``__has_extension(cxx_variadic_templates)`` to determine if support for
824variadic templates is enabled.
825
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000826C++14
Richard Smith0a715422013-05-07 19:32:56 +0000827-----
828
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000829The features listed below are part of the C++14 standard. As a result, all
830these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
831when compiling C++ code.
Richard Smith0a715422013-05-07 19:32:56 +0000832
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000833C++14 binary literals
Richard Smith0a715422013-05-07 19:32:56 +0000834^^^^^^^^^^^^^^^^^^^^^
835
836Use ``__has_feature(cxx_binary_literals)`` or
837``__has_extension(cxx_binary_literals)`` to determine whether
838binary literals (for instance, ``0b10010``) are recognized. Clang supports this
839feature as an extension in all language modes.
840
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000841C++14 contextual conversions
Richard Smith0a715422013-05-07 19:32:56 +0000842^^^^^^^^^^^^^^^^^^^^^^^^^^^^
843
844Use ``__has_feature(cxx_contextual_conversions)`` or
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000845``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
Richard Smith0a715422013-05-07 19:32:56 +0000846are used when performing an implicit conversion for an array bound in a
847*new-expression*, the operand of a *delete-expression*, an integral constant
Richard Smithc0f7b812013-07-24 17:41:31 +0000848expression, or a condition in a ``switch`` statement.
Richard Smith0a715422013-05-07 19:32:56 +0000849
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000850C++14 decltype(auto)
Richard Smith0a715422013-05-07 19:32:56 +0000851^^^^^^^^^^^^^^^^^^^^
852
853Use ``__has_feature(cxx_decltype_auto)`` or
854``__has_extension(cxx_decltype_auto)`` to determine if support
855for the ``decltype(auto)`` placeholder type is enabled.
856
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000857C++14 default initializers for aggregates
Richard Smith0a715422013-05-07 19:32:56 +0000858^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
859
860Use ``__has_feature(cxx_aggregate_nsdmi)`` or
861``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
862for default initializers in aggregate members is enabled.
863
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000864C++14 digit separators
Richard Smith38af8562014-11-12 21:16:38 +0000865^^^^^^^^^^^^^^^^^^^^^^
866
867Use ``__cpp_digit_separators`` to determine if support for digit separators
868using single quotes (for instance, ``10'000``) is enabled. At this time, there
869is no corresponding ``__has_feature`` name
870
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000871C++14 generalized lambda capture
Richard Smith0a715422013-05-07 19:32:56 +0000872^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
873
Richard Smith6d540142014-05-09 21:08:59 +0000874Use ``__has_feature(cxx_init_captures)`` or
875``__has_extension(cxx_init_captures)`` to determine if support for
Richard Smith4fb09722013-07-24 17:51:13 +0000876lambda captures with explicit initializers is enabled
Richard Smith0a715422013-05-07 19:32:56 +0000877(for instance, ``[n(0)] { return ++n; }``).
Richard Smith0a715422013-05-07 19:32:56 +0000878
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000879C++14 generic lambdas
Richard Smith0a715422013-05-07 19:32:56 +0000880^^^^^^^^^^^^^^^^^^^^^
881
Richard Smith6d540142014-05-09 21:08:59 +0000882Use ``__has_feature(cxx_generic_lambdas)`` or
883``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
Richard Smith0a715422013-05-07 19:32:56 +0000884(polymorphic) lambdas is enabled
885(for instance, ``[] (auto x) { return x + 1; }``).
Richard Smith0a715422013-05-07 19:32:56 +0000886
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000887C++14 relaxed constexpr
Richard Smith0a715422013-05-07 19:32:56 +0000888^^^^^^^^^^^^^^^^^^^^^^^
889
890Use ``__has_feature(cxx_relaxed_constexpr)`` or
891``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
892declarations, local variable modification, and control flow constructs
893are permitted in ``constexpr`` functions.
Richard Smith0a715422013-05-07 19:32:56 +0000894
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000895C++14 return type deduction
Richard Smith0a715422013-05-07 19:32:56 +0000896^^^^^^^^^^^^^^^^^^^^^^^^^^^
897
898Use ``__has_feature(cxx_return_type_deduction)`` or
899``__has_extension(cxx_return_type_deduction)`` to determine if support
900for return type deduction for functions (using ``auto`` as a return type)
901is enabled.
Richard Smith0a715422013-05-07 19:32:56 +0000902
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000903C++14 runtime-sized arrays
Richard Smith0a715422013-05-07 19:32:56 +0000904^^^^^^^^^^^^^^^^^^^^^^^^^^
905
906Use ``__has_feature(cxx_runtime_array)`` or
907``__has_extension(cxx_runtime_array)`` to determine if support
908for arrays of runtime bound (a restricted form of variable-length arrays)
909is enabled.
910Clang's implementation of this feature is incomplete.
911
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000912C++14 variable templates
Richard Smith0a715422013-05-07 19:32:56 +0000913^^^^^^^^^^^^^^^^^^^^^^^^
914
915Use ``__has_feature(cxx_variable_templates)`` or
916``__has_extension(cxx_variable_templates)`` to determine if support for
917templated variable declarations is enabled.
Richard Smith0a715422013-05-07 19:32:56 +0000918
Sean Silva709c44d2012-12-12 23:44:55 +0000919C11
920---
921
922The features listed below are part of the C11 standard. As a result, all these
923features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
924compiling C code. Additionally, because these features are all
925backward-compatible, they are available as extensions in all language modes.
926
927C11 alignment specifiers
928^^^^^^^^^^^^^^^^^^^^^^^^
929
930Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
931if support for alignment specifiers using ``_Alignas`` is enabled.
932
Nico Weber736a9932014-12-03 01:25:49 +0000933Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
934if support for the ``_Alignof`` keyword is enabled.
935
Sean Silva709c44d2012-12-12 23:44:55 +0000936C11 atomic operations
937^^^^^^^^^^^^^^^^^^^^^
938
939Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
940if support for atomic types using ``_Atomic`` is enabled. Clang also provides
941:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
Hal Finkel6970ac82014-10-03 04:29:40 +0000942the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
943``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
944is available.
945
946Clang will use the system's ``<stdatomic.h>`` header when one is available, and
947will otherwise use its own. When using its own, implementations of the atomic
948operations are provided as macros. In the cases where C11 also requires a real
949function, this header provides only the declaration of that function (along
950with a shadowing macro implementation), and you must link to a library which
951provides a definition of the function if you use it instead of the macro.
Sean Silva709c44d2012-12-12 23:44:55 +0000952
953C11 generic selections
954^^^^^^^^^^^^^^^^^^^^^^
955
956Use ``__has_feature(c_generic_selections)`` or
957``__has_extension(c_generic_selections)`` to determine if support for generic
958selections is enabled.
959
960As an extension, the C11 generic selection expression is available in all
961languages supported by Clang. The syntax is the same as that given in the C11
962standard.
963
964In C, type compatibility is decided according to the rules given in the
965appropriate standard, but in C++, which lacks the type compatibility rules used
966in C, types are considered compatible only if they are equivalent.
967
968C11 ``_Static_assert()``
969^^^^^^^^^^^^^^^^^^^^^^^^
970
971Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
972to determine if support for compile-time assertions using ``_Static_assert`` is
973enabled.
974
Richard Smith25b555a2013-04-19 17:00:31 +0000975C11 ``_Thread_local``
976^^^^^^^^^^^^^^^^^^^^^
977
Ed Schouten401aeba2013-09-14 16:17:20 +0000978Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
979to determine if support for ``_Thread_local`` variables is enabled.
Richard Smith25b555a2013-04-19 17:00:31 +0000980
Ben Langmuir921f2e62015-03-10 14:39:26 +0000981Modules
982-------
983
984Use ``__has_feature(modules)`` to determine if Modules have been enabled.
985For example, compiling code with ``-fmodules`` enables the use of Modules.
986
987More information could be found `here <http://clang.llvm.org/docs/Modules.html>`_.
988
Alp Toker64197b92014-01-18 21:49:02 +0000989Checks for Type Trait Primitives
990================================
991
992Type trait primitives are special builtin constant expressions that can be used
993by the standard C++ library to facilitate or simplify the implementation of
994user-facing type traits in the <type_traits> header.
995
996They are not intended to be used directly by user code because they are
997implementation-defined and subject to change -- as such they're tied closely to
998the supported set of system headers, currently:
999
1000* LLVM's own libc++
1001* GNU libstdc++
1002* The Microsoft standard C++ library
Sean Silva709c44d2012-12-12 23:44:55 +00001003
1004Clang supports the `GNU C++ type traits
1005<http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
1006`Microsoft Visual C++ Type traits
Alp Toker64197b92014-01-18 21:49:02 +00001007<http://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_.
1008
1009Feature detection is supported only for some of the primitives at present. User
1010code should not use these checks because they bear no direct relation to the
1011actual set of type traits supported by the C++ standard library.
1012
1013For type trait ``__X``, ``__has_extension(X)`` indicates the presence of the
1014type trait primitive in the compiler. A simplistic usage example as might be
1015seen in standard C++ headers follows:
Sean Silva709c44d2012-12-12 23:44:55 +00001016
1017.. code-block:: c++
1018
1019 #if __has_extension(is_convertible_to)
1020 template<typename From, typename To>
1021 struct is_convertible_to {
1022 static const bool value = __is_convertible_to(From, To);
1023 };
1024 #else
Alp Toker64197b92014-01-18 21:49:02 +00001025 // Emulate type trait for compatibility with other compilers.
Sean Silva709c44d2012-12-12 23:44:55 +00001026 #endif
1027
Alp Toker64197b92014-01-18 21:49:02 +00001028The following type trait primitives are supported by Clang:
Sean Silva709c44d2012-12-12 23:44:55 +00001029
1030* ``__has_nothrow_assign`` (GNU, Microsoft)
1031* ``__has_nothrow_copy`` (GNU, Microsoft)
1032* ``__has_nothrow_constructor`` (GNU, Microsoft)
1033* ``__has_trivial_assign`` (GNU, Microsoft)
1034* ``__has_trivial_copy`` (GNU, Microsoft)
1035* ``__has_trivial_constructor`` (GNU, Microsoft)
1036* ``__has_trivial_destructor`` (GNU, Microsoft)
1037* ``__has_virtual_destructor`` (GNU, Microsoft)
1038* ``__is_abstract`` (GNU, Microsoft)
Eric Fiselier07360662017-04-12 22:12:15 +00001039* ``__is_aggregate`` (GNU, Microsoft)
Sean Silva709c44d2012-12-12 23:44:55 +00001040* ``__is_base_of`` (GNU, Microsoft)
1041* ``__is_class`` (GNU, Microsoft)
1042* ``__is_convertible_to`` (Microsoft)
1043* ``__is_empty`` (GNU, Microsoft)
1044* ``__is_enum`` (GNU, Microsoft)
1045* ``__is_interface_class`` (Microsoft)
1046* ``__is_pod`` (GNU, Microsoft)
1047* ``__is_polymorphic`` (GNU, Microsoft)
1048* ``__is_union`` (GNU, Microsoft)
1049* ``__is_literal(type)``: Determines whether the given type is a literal type
1050* ``__is_final``: Determines whether the given type is declared with a
1051 ``final`` class-virt-specifier.
1052* ``__underlying_type(type)``: Retrieves the underlying type for a given
1053 ``enum`` type. This trait is required to implement the C++11 standard
1054 library.
1055* ``__is_trivially_assignable(totype, fromtype)``: Determines whether a value
1056 of type ``totype`` can be assigned to from a value of type ``fromtype`` such
1057 that no non-trivial functions are called as part of that assignment. This
1058 trait is required to implement the C++11 standard library.
1059* ``__is_trivially_constructible(type, argtypes...)``: Determines whether a
1060 value of type ``type`` can be direct-initialized with arguments of types
1061 ``argtypes...`` such that no non-trivial functions are called as part of
1062 that initialization. This trait is required to implement the C++11 standard
1063 library.
David Majnemer55cf2522015-11-14 07:21:35 +00001064* ``__is_destructible`` (MSVC 2013)
1065* ``__is_nothrow_destructible`` (MSVC 2013)
Alp Toker73287bf2014-01-20 00:24:09 +00001066* ``__is_nothrow_assignable`` (MSVC 2013, clang)
1067* ``__is_constructible`` (MSVC 2013, clang)
1068* ``__is_nothrow_constructible`` (MSVC 2013, clang)
David Majnemerb3d96882016-05-23 17:21:55 +00001069* ``__is_assignable`` (MSVC 2015, clang)
Sean Silva709c44d2012-12-12 23:44:55 +00001070
1071Blocks
1072======
1073
1074The syntax and high level language feature description is in
Michael Gottesman6fd58462013-01-07 22:24:45 +00001075:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1076the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
Sean Silva709c44d2012-12-12 23:44:55 +00001077
1078Query for this feature with ``__has_extension(blocks)``.
1079
1080Objective-C Features
1081====================
1082
1083Related result types
1084--------------------
1085
1086According to Cocoa conventions, Objective-C methods with certain names
1087("``init``", "``alloc``", etc.) always return objects that are an instance of
1088the receiving class's type. Such methods are said to have a "related result
1089type", meaning that a message send to one of these methods will have the same
1090static type as an instance of the receiver class. For example, given the
1091following classes:
1092
1093.. code-block:: objc
1094
1095 @interface NSObject
1096 + (id)alloc;
1097 - (id)init;
1098 @end
1099
1100 @interface NSArray : NSObject
1101 @end
1102
1103and this common initialization pattern
1104
1105.. code-block:: objc
1106
1107 NSArray *array = [[NSArray alloc] init];
1108
1109the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1110``alloc`` implicitly has a related result type. Similarly, the type of the
1111expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1112related result type and its receiver is known to have the type ``NSArray *``.
1113If neither ``alloc`` nor ``init`` had a related result type, the expressions
1114would have had type ``id``, as declared in the method signature.
1115
1116A method with a related result type can be declared by using the type
1117``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1118that is only permitted in the result type of an Objective-C method, e.g.
1119
1120.. code-block:: objc
1121
1122 @interface A
1123 + (instancetype)constructAnA;
1124 @end
1125
1126The related result type can also be inferred for some methods. To determine
1127whether a method has an inferred related result type, the first word in the
1128camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1129and the method will have a related result type if its return type is compatible
1130with the type of its class and if:
1131
1132* the first word is "``alloc``" or "``new``", and the method is a class method,
1133 or
1134
1135* the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1136 and the method is an instance method.
1137
1138If a method with a related result type is overridden by a subclass method, the
1139subclass method must also return a type that is compatible with the subclass
1140type. For example:
1141
1142.. code-block:: objc
1143
1144 @interface NSString : NSObject
1145 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1146 @end
1147
1148Related result types only affect the type of a message send or property access
1149via the given method. In all other respects, a method with a related result
1150type is treated the same way as method that returns ``id``.
1151
1152Use ``__has_feature(objc_instancetype)`` to determine whether the
1153``instancetype`` contextual keyword is available.
1154
1155Automatic reference counting
1156----------------------------
1157
Sean Silva173d2522013-01-02 13:07:47 +00001158Clang provides support for :doc:`automated reference counting
1159<AutomaticReferenceCounting>` in Objective-C, which eliminates the need
Sean Silva709c44d2012-12-12 23:44:55 +00001160for manual ``retain``/``release``/``autorelease`` message sends. There are two
1161feature macros associated with automatic reference counting:
1162``__has_feature(objc_arc)`` indicates the availability of automated reference
1163counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1164automated reference counting also includes support for ``__weak`` pointers to
1165Objective-C objects.
1166
Sean Silva173d2522013-01-02 13:07:47 +00001167.. _objc-fixed-enum:
1168
Sean Silva709c44d2012-12-12 23:44:55 +00001169Enumerations with a fixed underlying type
1170-----------------------------------------
1171
1172Clang provides support for C++11 enumerations with a fixed underlying type
1173within Objective-C. For example, one can write an enumeration type as:
1174
1175.. code-block:: c++
1176
1177 typedef enum : unsigned char { Red, Green, Blue } Color;
1178
1179This specifies that the underlying type, which is used to store the enumeration
1180value, is ``unsigned char``.
1181
1182Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1183underlying types is available in Objective-C.
1184
1185Interoperability with C++11 lambdas
1186-----------------------------------
1187
1188Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1189permitting a lambda to be implicitly converted to a block pointer with the
1190corresponding signature. For example, consider an API such as ``NSArray``'s
1191array-sorting method:
1192
1193.. code-block:: objc
1194
1195 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1196
1197``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1198(^)(id, id)``, and parameters of this type are generally provided with block
1199literals as arguments. However, one can also use a C++11 lambda so long as it
1200provides the same signature (in this case, accepting two parameters of type
1201``id`` and returning an ``NSComparisonResult``):
1202
1203.. code-block:: objc
1204
1205 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1206 @"String 02"];
1207 const NSStringCompareOptions comparisonOptions
1208 = NSCaseInsensitiveSearch | NSNumericSearch |
1209 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1210 NSLocale *currentLocale = [NSLocale currentLocale];
1211 NSArray *sorted
1212 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1213 NSRange string1Range = NSMakeRange(0, [s1 length]);
1214 return [s1 compare:s2 options:comparisonOptions
1215 range:string1Range locale:currentLocale];
1216 }];
1217 NSLog(@"sorted: %@", sorted);
1218
1219This code relies on an implicit conversion from the type of the lambda
1220expression (an unnamed, local class type called the *closure type*) to the
1221corresponding block pointer type. The conversion itself is expressed by a
1222conversion operator in that closure type that produces a block pointer with the
1223same signature as the lambda itself, e.g.,
1224
1225.. code-block:: objc
1226
1227 operator NSComparisonResult (^)(id, id)() const;
1228
1229This conversion function returns a new block that simply forwards the two
1230parameters to the lambda object (which it captures by copy), then returns the
1231result. The returned block is first copied (with ``Block_copy``) and then
1232autoreleased. As an optimization, if a lambda expression is immediately
1233converted to a block pointer (as in the first example, above), then the block
1234is not copied and autoreleased: rather, it is given the same lifetime as a
1235block literal written at that point in the program, which avoids the overhead
1236of copying a block to the heap in the common case.
1237
1238The conversion from a lambda to a block pointer is only available in
1239Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1240management (autorelease).
1241
1242Object Literals and Subscripting
1243--------------------------------
1244
Sean Silva173d2522013-01-02 13:07:47 +00001245Clang provides support for :doc:`Object Literals and Subscripting
1246<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
Sean Silva709c44d2012-12-12 23:44:55 +00001247programming patterns, makes programs more concise, and improves the safety of
1248container creation. There are several feature macros associated with object
1249literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1250availability of array literals; ``__has_feature(objc_dictionary_literals)``
1251tests the availability of dictionary literals;
1252``__has_feature(objc_subscripting)`` tests the availability of object
1253subscripting.
1254
1255Objective-C Autosynthesis of Properties
1256---------------------------------------
1257
1258Clang provides support for autosynthesis of declared properties. Using this
1259feature, clang provides default synthesis of those properties not declared
1260@dynamic and not having user provided backing getter and setter methods.
1261``__has_feature(objc_default_synthesize_properties)`` checks for availability
1262of this feature in version of clang being used.
1263
Jordan Rose32e94892012-12-15 00:37:01 +00001264.. _langext-objc-retain-release:
1265
1266Objective-C retaining behavior attributes
1267-----------------------------------------
1268
1269In Objective-C, functions and methods are generally assumed to follow the
1270`Cocoa Memory Management
1271<http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
1272conventions for ownership of object arguments and
1273return values. However, there are exceptions, and so Clang provides attributes
1274to allow these exceptions to be documented. This are used by ARC and the
1275`static analyzer <http://clang-analyzer.llvm.org>`_ Some exceptions may be
Aaron Ballman840cef32014-02-19 15:45:13 +00001276better described using the ``objc_method_family`` attribute instead.
Jordan Rose32e94892012-12-15 00:37:01 +00001277
1278**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1279``ns_returns_autoreleased``, ``cf_returns_retained``, and
1280``cf_returns_not_retained`` attributes can be placed on methods and functions
1281that return Objective-C or CoreFoundation objects. They are commonly placed at
1282the end of a function prototype or method declaration:
1283
1284.. code-block:: objc
1285
1286 id foo() __attribute__((ns_returns_retained));
1287
1288 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1289
1290The ``*_returns_retained`` attributes specify that the returned object has a +1
1291retain count. The ``*_returns_not_retained`` attributes specify that the return
1292object has a +0 retain count, even if the normal convention for its selector
1293would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
1294+0, but is guaranteed to live at least as long as the next flush of an
1295autorelease pool.
1296
1297**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1298an parameter declaration; they specify that the argument is expected to have a
1299+1 retain count, which will be balanced in some way by the function or method.
1300The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1301method; it specifies that the method expects its ``self`` parameter to have a
1302+1 retain count, which it will balance in some way.
1303
1304.. code-block:: objc
1305
1306 void foo(__attribute__((ns_consumed)) NSString *string);
1307
1308 - (void) bar __attribute__((ns_consumes_self));
1309 - (void) baz:(id) __attribute__((ns_consumed)) x;
1310
1311Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
1312<http://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
1313
1314Query for these features with ``__has_attribute(ns_consumed)``,
1315``__has_attribute(ns_returns_retained)``, etc.
1316
Nico Weber11cafc82017-07-14 18:40:52 +00001317Objective-C @available
1318----------------------
1319
1320It is possible to use the newest SDK but still build a program that can run on
Nico Weber564004a2017-07-14 18:52:30 +00001321older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
1322``-miphoneos-version-min=``.
Nico Weber11cafc82017-07-14 18:40:52 +00001323
1324Before LLVM 5.0, when calling a function that exists only in the OS that's
1325newer than the target OS (as determined by the minimum deployment version),
1326programmers had to carefully check if the function exists at runtime, using
1327null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
1328and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
1329Objective-C methods. If such a check was missed, the program would compile
1330fine, run fine on newer systems, but crash on older systems.
1331
1332As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
1333<http://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
1334with the new ``@available()`` keyword to assist with this issue.
1335When a method that's introduced in the OS newer than the target OS is called, a
1336-Wunguarded-availability warning is emitted if that call is not guarded:
1337
1338.. code-block:: objc
1339
1340 void my_fun(NSSomeClass* var) {
1341 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
1342 // built with -mmacosx-version-min=10.11, then this unconditional call
1343 // will emit a -Wunguarded-availability warning:
1344 [var fancyNewMethod];
1345 }
1346
1347To fix the warning and to avoid the crash on macOS 10.11, wrap it in
1348``if(@available())``:
1349
1350.. code-block:: objc
1351
1352 void my_fun(NSSomeClass* var) {
1353 if (@available(macOS 10.12, *)) {
1354 [var fancyNewMethod];
1355 } else {
1356 // Put fallback behavior for old macOS versions (and for non-mac
1357 // platforms) here.
1358 }
1359 }
1360
1361The ``*`` is required and means that platforms not explicitly listed will take
1362the true branch, and the compiler will emit ``-Wunguarded-availability``
1363warnings for unlisted platforms based on those platform's deployment target.
1364More than one platform can be listed in ``@available()``:
1365
1366.. code-block:: objc
1367
1368 void my_fun(NSSomeClass* var) {
1369 if (@available(macOS 10.12, iOS 10, *)) {
1370 [var fancyNewMethod];
1371 }
1372 }
1373
1374If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
1375on 10.12, then add an `availability attribute
1376<http://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
1377which will also suppress the warning and require that calls to my_fun() are
1378checked:
1379
1380.. code-block:: objc
1381
1382 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
1383 [var fancyNewMethod]; // Now ok.
1384 }
1385
1386``@available()`` is only available in Objective-C code. To use the feature
1387in C and C++ code, use the ``__builtin_available()`` spelling instead.
1388
1389If existing code uses null checks or ``-respondsToSelector:``, it should
1390be changed to use ``@available()`` (or ``__builtin_available``) instead.
1391
1392``-Wunguarded-availability`` is disabled by default, but
1393``-Wunguarded-availability-new``, which only emits this warning for APIs
1394that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
1395tvOS >= 11, is enabled by default.
1396
1397.. _langext-overloading:
Jordan Rose32e94892012-12-15 00:37:01 +00001398
Ted Kremenek84342d62013-10-15 04:28:42 +00001399Objective-C++ ABI: protocol-qualifier mangling of parameters
1400------------------------------------------------------------
1401
1402Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
1403type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such
1404parameters to be differentiated from those with the regular unqualified ``id``
1405type.
1406
1407This was a non-backward compatible mangling change to the ABI. This change
1408allows proper overloading, and also prevents mangling conflicts with template
1409parameters of protocol-qualified type.
1410
1411Query the presence of this new mangling with
1412``__has_feature(objc_protocol_qualifier_mangling)``.
1413
Sean Silva709c44d2012-12-12 23:44:55 +00001414Initializer lists for complex numbers in C
1415==========================================
1416
1417clang supports an extension which allows the following in C:
1418
1419.. code-block:: c++
1420
1421 #include <math.h>
1422 #include <complex.h>
1423 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1424
1425This construct is useful because there is no way to separately initialize the
1426real and imaginary parts of a complex variable in standard C, given that clang
1427does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
1428``__imag__`` extensions from gcc, which help in some cases, but are not usable
1429in static initializers.)
1430
1431Note that this extension does not allow eliding the braces; the meaning of the
1432following two lines is different:
1433
1434.. code-block:: c++
1435
1436 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
1437 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
1438
1439This extension also works in C++ mode, as far as that goes, but does not apply
1440to the C++ ``std::complex``. (In C++11, list initialization allows the same
1441syntax to be used with ``std::complex`` with the same meaning.)
1442
1443Builtin Functions
1444=================
1445
1446Clang supports a number of builtin library functions with the same syntax as
1447GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
1448``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
Hal Finkelbcc06082014-09-07 22:58:14 +00001449``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to
1450the GCC builtins, Clang supports a number of builtins that GCC does not, which
1451are listed here.
Sean Silva709c44d2012-12-12 23:44:55 +00001452
1453Please note that Clang does not and will not support all of the GCC builtins
1454for vector operations. Instead of using builtins, you should use the functions
1455defined in target-specific header files like ``<xmmintrin.h>``, which define
1456portable wrappers for these. Many of the Clang versions of these functions are
1457implemented directly in terms of :ref:`extended vector support
1458<langext-vectors>` instead of builtins, in order to reduce the number of
1459builtins that we need to implement.
1460
Hal Finkelbcc06082014-09-07 22:58:14 +00001461``__builtin_assume``
1462------------------------------
1463
1464``__builtin_assume`` is used to provide the optimizer with a boolean
1465invariant that is defined to be true.
1466
1467**Syntax**:
1468
1469.. code-block:: c++
1470
1471 __builtin_assume(bool)
1472
1473**Example of Use**:
1474
1475.. code-block:: c++
1476
1477 int foo(int x) {
1478 __builtin_assume(x != 0);
1479
1480 // The optimizer may short-circuit this check using the invariant.
1481 if (x == 0)
1482 return do_something();
1483
1484 return do_something_else();
1485 }
1486
1487**Description**:
1488
1489The boolean argument to this function is defined to be true. The optimizer may
1490analyze the form of the expression provided as the argument and deduce from
1491that information used to optimize the program. If the condition is violated
1492during execution, the behavior is undefined. The argument itself is never
1493evaluated, so any side effects of the expression will be discarded.
1494
1495Query for this feature with ``__has_builtin(__builtin_assume)``.
1496
Sean Silva709c44d2012-12-12 23:44:55 +00001497``__builtin_readcyclecounter``
1498------------------------------
1499
1500``__builtin_readcyclecounter`` is used to access the cycle counter register (or
1501a similar low-latency, high-accuracy clock) on those targets that support it.
1502
1503**Syntax**:
1504
1505.. code-block:: c++
1506
1507 __builtin_readcyclecounter()
1508
1509**Example of Use**:
1510
1511.. code-block:: c++
1512
1513 unsigned long long t0 = __builtin_readcyclecounter();
1514 do_something();
1515 unsigned long long t1 = __builtin_readcyclecounter();
1516 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
1517
1518**Description**:
1519
1520The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
1521which may be either global or process/thread-specific depending on the target.
1522As the backing counters often overflow quickly (on the order of seconds) this
1523should only be used for timing small intervals. When not supported by the
1524target, the return value is always zero. This builtin takes no arguments and
1525produces an unsigned long long result.
1526
Tim Northoverbfe2e5f72013-05-23 19:14:12 +00001527Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
1528that even if present, its use may depend on run-time privilege or other OS
1529controlled state.
Sean Silva709c44d2012-12-12 23:44:55 +00001530
1531.. _langext-__builtin_shufflevector:
1532
1533``__builtin_shufflevector``
1534---------------------------
1535
1536``__builtin_shufflevector`` is used to express generic vector
1537permutation/shuffle/swizzle operations. This builtin is also very important
1538for the implementation of various target-specific header files like
1539``<xmmintrin.h>``.
1540
1541**Syntax**:
1542
1543.. code-block:: c++
1544
1545 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
1546
1547**Examples**:
1548
1549.. code-block:: c++
1550
Craig Topper50ad5b72013-08-03 17:40:38 +00001551 // identity operation - return 4-element vector v1.
1552 __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
Sean Silva709c44d2012-12-12 23:44:55 +00001553
1554 // "Splat" element 0 of V1 into a 4-element result.
1555 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
1556
1557 // Reverse 4-element vector V1.
1558 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
1559
1560 // Concatenate every other element of 4-element vectors V1 and V2.
1561 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
1562
1563 // Concatenate every other element of 8-element vectors V1 and V2.
1564 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
1565
Craig Topper50ad5b72013-08-03 17:40:38 +00001566 // Shuffle v1 with some elements being undefined
1567 __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
1568
Sean Silva709c44d2012-12-12 23:44:55 +00001569**Description**:
1570
1571The first two arguments to ``__builtin_shufflevector`` are vectors that have
1572the same element type. The remaining arguments are a list of integers that
1573specify the elements indices of the first two vectors that should be extracted
1574and returned in a new vector. These element indices are numbered sequentially
1575starting with the first vector, continuing into the second vector. Thus, if
1576``vec1`` is a 4-element vector, index 5 would refer to the second element of
Craig Topper50ad5b72013-08-03 17:40:38 +00001577``vec2``. An index of -1 can be used to indicate that the corresponding element
1578in the returned vector is a don't care and can be optimized by the backend.
Sean Silva709c44d2012-12-12 23:44:55 +00001579
1580The result of ``__builtin_shufflevector`` is a vector with the same element
1581type as ``vec1``/``vec2`` but that has an element count equal to the number of
1582indices specified.
1583
1584Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
1585
Anton Yartsev94e46f32014-09-03 17:59:21 +00001586.. _langext-__builtin_convertvector:
1587
Hal Finkelc4d7c822013-09-18 03:29:45 +00001588``__builtin_convertvector``
1589---------------------------
1590
1591``__builtin_convertvector`` is used to express generic vector
1592type-conversion operations. The input vector and the output vector
1593type must have the same number of elements.
1594
1595**Syntax**:
1596
1597.. code-block:: c++
1598
1599 __builtin_convertvector(src_vec, dst_vec_type)
1600
1601**Examples**:
1602
1603.. code-block:: c++
1604
1605 typedef double vector4double __attribute__((__vector_size__(32)));
1606 typedef float vector4float __attribute__((__vector_size__(16)));
1607 typedef short vector4short __attribute__((__vector_size__(8)));
1608 vector4float vf; vector4short vs;
1609
1610 // convert from a vector of 4 floats to a vector of 4 doubles.
1611 __builtin_convertvector(vf, vector4double)
1612 // equivalent to:
1613 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
1614
1615 // convert from a vector of 4 shorts to a vector of 4 floats.
1616 __builtin_convertvector(vs, vector4float)
1617 // equivalent to:
Yunzhong Gao637cb90b2014-09-02 19:24:14 +00001618 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
Hal Finkelc4d7c822013-09-18 03:29:45 +00001619
1620**Description**:
1621
1622The first argument to ``__builtin_convertvector`` is a vector, and the second
1623argument is a vector type with the same number of elements as the first
1624argument.
1625
1626The result of ``__builtin_convertvector`` is a vector with the same element
1627type as the second argument, with a value defined in terms of the action of a
1628C-style cast applied to each element of the first argument.
1629
1630Query for this feature with ``__has_builtin(__builtin_convertvector)``.
1631
Matt Arsenault08087c52016-03-23 22:14:43 +00001632``__builtin_bitreverse``
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00001633------------------------
Matt Arsenault08087c52016-03-23 22:14:43 +00001634
1635* ``__builtin_bitreverse8``
1636* ``__builtin_bitreverse16``
1637* ``__builtin_bitreverse32``
1638* ``__builtin_bitreverse64``
1639
1640**Syntax**:
1641
1642.. code-block:: c++
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00001643
Matt Arsenault08087c52016-03-23 22:14:43 +00001644 __builtin_bitreverse32(x)
1645
1646**Examples**:
1647
1648.. code-block:: c++
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00001649
Matt Arsenault08087c52016-03-23 22:14:43 +00001650 uint8_t rev_x = __builtin_bitreverse8(x);
1651 uint16_t rev_x = __builtin_bitreverse16(x);
1652 uint32_t rev_y = __builtin_bitreverse32(y);
1653 uint64_t rev_z = __builtin_bitreverse64(z);
1654
1655**Description**:
1656
1657The '``__builtin_bitreverse``' family of builtins is used to reverse
1658the bitpattern of an integer value; for example ``0b10110110`` becomes
1659``0b01101101``.
1660
Sean Silva709c44d2012-12-12 23:44:55 +00001661``__builtin_unreachable``
1662-------------------------
1663
1664``__builtin_unreachable`` is used to indicate that a specific point in the
1665program cannot be reached, even if the compiler might otherwise think it can.
1666This is useful to improve optimization and eliminates certain warnings. For
1667example, without the ``__builtin_unreachable`` in the example below, the
1668compiler assumes that the inline asm can fall through and prints a "function
1669declared '``noreturn``' should not return" warning.
1670
1671**Syntax**:
1672
1673.. code-block:: c++
1674
1675 __builtin_unreachable()
1676
1677**Example of use**:
1678
1679.. code-block:: c++
1680
1681 void myabort(void) __attribute__((noreturn));
1682 void myabort(void) {
1683 asm("int3");
1684 __builtin_unreachable();
1685 }
1686
1687**Description**:
1688
1689The ``__builtin_unreachable()`` builtin has completely undefined behavior.
1690Since it has undefined behavior, it is a statement that it is never reached and
1691the optimizer can take advantage of this to produce better code. This builtin
1692takes no arguments and produces a void result.
1693
1694Query for this feature with ``__has_builtin(__builtin_unreachable)``.
1695
Sanjay Patela24296b2015-09-02 20:01:30 +00001696``__builtin_unpredictable``
1697---------------------------
1698
1699``__builtin_unpredictable`` is used to indicate that a branch condition is
1700unpredictable by hardware mechanisms such as branch prediction logic.
1701
1702**Syntax**:
1703
1704.. code-block:: c++
1705
1706 __builtin_unpredictable(long long)
1707
1708**Example of use**:
1709
1710.. code-block:: c++
1711
1712 if (__builtin_unpredictable(x > 0)) {
1713 foo();
1714 }
1715
1716**Description**:
1717
1718The ``__builtin_unpredictable()`` builtin is expected to be used with control
1719flow conditions such as in ``if`` and ``switch`` statements.
1720
1721Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
1722
Sean Silva709c44d2012-12-12 23:44:55 +00001723``__sync_swap``
1724---------------
1725
1726``__sync_swap`` is used to atomically swap integers or pointers in memory.
1727
1728**Syntax**:
1729
1730.. code-block:: c++
1731
1732 type __sync_swap(type *ptr, type value, ...)
1733
1734**Example of Use**:
1735
1736.. code-block:: c++
1737
1738 int old_value = __sync_swap(&value, new_value);
1739
1740**Description**:
1741
1742The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
1743atomic intrinsics to allow code to atomically swap the current value with the
1744new value. More importantly, it helps developers write more efficient and
1745correct code by avoiding expensive loops around
1746``__sync_bool_compare_and_swap()`` or relying on the platform specific
1747implementation details of ``__sync_lock_test_and_set()``. The
1748``__sync_swap()`` builtin is a full barrier.
1749
Richard Smith6cbd65d2013-07-11 02:27:57 +00001750``__builtin_addressof``
1751-----------------------
1752
1753``__builtin_addressof`` performs the functionality of the built-in ``&``
1754operator, ignoring any ``operator&`` overload. This is useful in constant
1755expressions in C++11, where there is no other way to take the address of an
1756object that overloads ``operator&``.
1757
1758**Example of use**:
1759
1760.. code-block:: c++
1761
1762 template<typename T> constexpr T *addressof(T &value) {
1763 return __builtin_addressof(value);
1764 }
1765
Richard Smith760520b2014-06-03 23:27:44 +00001766``__builtin_operator_new`` and ``__builtin_operator_delete``
1767------------------------------------------------------------
1768
1769``__builtin_operator_new`` allocates memory just like a non-placement non-class
1770*new-expression*. This is exactly like directly calling the normal
1771non-placement ``::operator new``, except that it allows certain optimizations
1772that the C++ standard does not permit for a direct function call to
1773``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
1774merging allocations).
1775
1776Likewise, ``__builtin_operator_delete`` deallocates memory just like a
1777non-class *delete-expression*, and is exactly like directly calling the normal
1778``::operator delete``, except that it permits optimizations. Only the unsized
1779form of ``__builtin_operator_delete`` is currently available.
1780
1781These builtins are intended for use in the implementation of ``std::allocator``
1782and other similar allocation libraries, and are only available in C++.
1783
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00001784Multiprecision Arithmetic Builtins
1785----------------------------------
1786
1787Clang provides a set of builtins which expose multiprecision arithmetic in a
1788manner amenable to C. They all have the following form:
1789
1790.. code-block:: c
1791
1792 unsigned x = ..., y = ..., carryin = ..., carryout;
1793 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
1794
1795Thus one can form a multiprecision addition chain in the following manner:
1796
1797.. code-block:: c
1798
1799 unsigned *x, *y, *z, carryin=0, carryout;
1800 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
1801 carryin = carryout;
1802 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
1803 carryin = carryout;
1804 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
1805 carryin = carryout;
1806 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
1807
1808The complete list of builtins are:
1809
1810.. code-block:: c
1811
Michael Gottesman15343992013-06-18 20:40:40 +00001812 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00001813 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
1814 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
1815 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
1816 unsigned long long __builtin_addcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
Michael Gottesman15343992013-06-18 20:40:40 +00001817 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00001818 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
1819 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
1820 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
1821 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
1822
Michael Gottesman930ecdb2013-06-20 23:28:10 +00001823Checked Arithmetic Builtins
1824---------------------------
1825
1826Clang provides a set of builtins that implement checked arithmetic for security
1827critical applications in a manner that is fast and easily expressable in C. As
1828an example of their usage:
1829
1830.. code-block:: c
1831
1832 errorcode_t security_critical_application(...) {
1833 unsigned x, y, result;
1834 ...
John McCall03107a42015-10-29 20:48:01 +00001835 if (__builtin_mul_overflow(x, y, &result))
Michael Gottesman930ecdb2013-06-20 23:28:10 +00001836 return kErrorCodeHackers;
1837 ...
1838 use_multiply(result);
1839 ...
1840 }
1841
John McCall03107a42015-10-29 20:48:01 +00001842Clang provides the following checked arithmetic builtins:
Michael Gottesman930ecdb2013-06-20 23:28:10 +00001843
1844.. code-block:: c
1845
John McCall03107a42015-10-29 20:48:01 +00001846 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum);
1847 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff);
1848 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod);
Michael Gottesman930ecdb2013-06-20 23:28:10 +00001849 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum);
1850 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
1851 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
1852 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff);
1853 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
1854 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
1855 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod);
1856 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
1857 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
1858 bool __builtin_sadd_overflow (int x, int y, int *sum);
1859 bool __builtin_saddl_overflow (long x, long y, long *sum);
1860 bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
1861 bool __builtin_ssub_overflow (int x, int y, int *diff);
1862 bool __builtin_ssubl_overflow (long x, long y, long *diff);
1863 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
1864 bool __builtin_smul_overflow (int x, int y, int *prod);
1865 bool __builtin_smull_overflow (long x, long y, long *prod);
1866 bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
1867
John McCall03107a42015-10-29 20:48:01 +00001868Each builtin performs the specified mathematical operation on the
1869first two arguments and stores the result in the third argument. If
1870possible, the result will be equal to mathematically-correct result
1871and the builtin will return 0. Otherwise, the builtin will return
18721 and the result will be equal to the unique value that is equivalent
1873to the mathematically-correct result modulo two raised to the *k*
1874power, where *k* is the number of bits in the result type. The
1875behavior of these builtins is well-defined for all argument values.
1876
1877The first three builtins work generically for operands of any integer type,
1878including boolean types. The operands need not have the same type as each
1879other, or as the result. The other builtins may implicitly promote or
1880convert their operands before performing the operation.
1881
1882Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
Michael Gottesman930ecdb2013-06-20 23:28:10 +00001883
Matt Arsenault2d933982016-02-27 09:06:18 +00001884Floating point builtins
1885---------------------------------------
1886
1887``__builtin_canonicalize``
1888--------------------------
1889
1890.. code-block:: c
1891
1892 double __builtin_canonicalize(double);
1893 float __builtin_canonicalizef(float);
1894 long double__builtin_canonicalizel(long double);
1895
1896Returns the platform specific canonical encoding of a floating point
1897number. This canonicalization is useful for implementing certain
1898numeric primitives such as frexp. See `LLVM canonicalize intrinsic
1899<http://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
1900more information on the semantics.
1901
Richard Smith67d484b2017-01-20 00:57:59 +00001902String builtins
1903---------------
1904
1905Clang provides constant expression evaluation support for builtins forms of
Richard Smith0abb11c2017-01-23 18:17:46 +00001906the following functions from the C standard library ``<string.h>`` header:
Richard Smith67d484b2017-01-20 00:57:59 +00001907
1908* ``memchr``
1909* ``memcmp``
1910* ``strchr``
1911* ``strcmp``
1912* ``strlen``
1913* ``strncmp``
1914* ``wcschr``
1915* ``wcscmp``
1916* ``wcslen``
1917* ``wcsncmp``
1918* ``wmemchr``
1919* ``wmemcmp``
1920
1921In each case, the builtin form has the name of the C library function prefixed
Richard Smith90854c42017-01-20 01:08:15 +00001922by ``__builtin_``. Example:
Richard Smith67d484b2017-01-20 00:57:59 +00001923
1924.. code-block:: c
1925
1926 void *p = __builtin_memchr("foobar", 'b', 5);
1927
1928In addition to the above, one further builtin is provided:
1929
1930.. code-block:: c
1931
1932 char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
1933
1934``__builtin_char_memchr(a, b, c)`` is identical to
1935``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
1936constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
1937is disallowed in general).
1938
1939Support for constant expression evaluation for the above builtins be detected
1940with ``__has_feature(cxx_constexpr_string_builtins)``.
1941
Sean Silva709c44d2012-12-12 23:44:55 +00001942.. _langext-__c11_atomic:
1943
1944__c11_atomic builtins
1945---------------------
1946
1947Clang provides a set of builtins which are intended to be used to implement
1948C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
1949``_explicit`` form of the corresponding C11 operation, and are named with a
Hal Finkel6970ac82014-10-03 04:29:40 +00001950``__c11_`` prefix. The supported operations, and the differences from
1951the corresponding C11 operations, are:
Sean Silva709c44d2012-12-12 23:44:55 +00001952
1953* ``__c11_atomic_init``
1954* ``__c11_atomic_thread_fence``
1955* ``__c11_atomic_signal_fence``
Hal Finkel6970ac82014-10-03 04:29:40 +00001956* ``__c11_atomic_is_lock_free`` (The argument is the size of the
Dan Liewfe726862014-10-03 12:36:20 +00001957 ``_Atomic(...)`` object, instead of its address)
Sean Silva709c44d2012-12-12 23:44:55 +00001958* ``__c11_atomic_store``
1959* ``__c11_atomic_load``
1960* ``__c11_atomic_exchange``
1961* ``__c11_atomic_compare_exchange_strong``
1962* ``__c11_atomic_compare_exchange_weak``
1963* ``__c11_atomic_fetch_add``
1964* ``__c11_atomic_fetch_sub``
1965* ``__c11_atomic_fetch_and``
1966* ``__c11_atomic_fetch_or``
1967* ``__c11_atomic_fetch_xor``
1968
Hal Finkel6970ac82014-10-03 04:29:40 +00001969The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
JF Bastiene6ccacf2014-10-10 16:09:48 +00001970``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
Hal Finkel6970ac82014-10-03 04:29:40 +00001971provided, with values corresponding to the enumerators of C11's
1972``memory_order`` enumeration.
1973
James Y Knight81167fb2015-08-05 16:57:36 +00001974(Note that Clang additionally provides GCC-compatible ``__atomic_*``
Yaxun Liu39195062017-08-04 18:16:31 +00001975builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
1976atomic builtins are an explicit form of the corresponding OpenCL 2.0
1977builtin function, and are named with a ``__opencl_`` prefix. The macros
1978``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
1979``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
1980and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
1981corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
James Y Knight81167fb2015-08-05 16:57:36 +00001982
Tim Northover6aacd492013-07-16 09:47:53 +00001983Low-level ARM exclusive memory builtins
1984---------------------------------------
1985
1986Clang provides overloaded builtins giving direct access to the three key ARM
1987instructions for implementing atomic operations.
1988
1989.. code-block:: c
Sean Silvaa928c242013-09-09 19:50:40 +00001990
Tim Northover6aacd492013-07-16 09:47:53 +00001991 T __builtin_arm_ldrex(const volatile T *addr);
Tim Northover3acd6bd2014-07-02 12:56:02 +00001992 T __builtin_arm_ldaex(const volatile T *addr);
Tim Northover6aacd492013-07-16 09:47:53 +00001993 int __builtin_arm_strex(T val, volatile T *addr);
Tim Northover3acd6bd2014-07-02 12:56:02 +00001994 int __builtin_arm_stlex(T val, volatile T *addr);
Tim Northover6aacd492013-07-16 09:47:53 +00001995 void __builtin_arm_clrex(void);
1996
1997The types ``T`` currently supported are:
Michael Zolotukhinc3f09ff2015-09-10 23:56:10 +00001998
Tim Northover573cbee2014-05-24 12:52:07 +00001999* Integer types with width at most 64 bits (or 128 bits on AArch64).
Tim Northover6aacd492013-07-16 09:47:53 +00002000* Floating-point types
2001* Pointer types.
2002
2003Note that the compiler does not guarantee it will not insert stores which clear
Tim Northover3acd6bd2014-07-02 12:56:02 +00002004the exclusive monitor in between an ``ldrex`` type operation and its paired
2005``strex``. In practice this is only usually a risk when the extra store is on
2006the same cache line as the variable being modified and Clang will only insert
2007stack stores on its own, so it is best not to use these operations on variables
2008with automatic storage duration.
Tim Northover6aacd492013-07-16 09:47:53 +00002009
2010Also, loads and stores may be implicit in code written between the ``ldrex`` and
2011``strex``. Clang will not necessarily mitigate the effects of these either, so
2012care should be exercised.
2013
2014For these reasons the higher level atomic primitives should be preferred where
2015possible.
2016
Michael Zolotukhin59d72b12015-09-11 02:01:15 +00002017Non-temporal load/store builtins
2018--------------------------------
2019
2020Clang provides overloaded builtins allowing generation of non-temporal memory
2021accesses.
2022
2023.. code-block:: c
2024
2025 T __builtin_nontemporal_load(T *addr);
2026 void __builtin_nontemporal_store(T value, T *addr);
2027
2028The types ``T`` currently supported are:
2029
2030* Integer types.
2031* Floating-point types.
2032* Vector types.
2033
2034Note that the compiler does not guarantee that non-temporal loads or stores
2035will be used.
2036
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002037C++ Coroutines support builtins
2038--------------------------------
2039
2040.. warning::
2041 This is a work in progress. Compatibility across Clang/LLVM releases is not
2042 guaranteed.
2043
2044Clang provides experimental builtins to support C++ Coroutines as defined by
2045http://wg21.link/P0057. The following four are intended to be used by the
2046standard library to implement `std::experimental::coroutine_handle` type.
2047
2048**Syntax**:
2049
2050.. code-block:: c
2051
2052 void __builtin_coro_resume(void *addr);
2053 void __builtin_coro_destroy(void *addr);
2054 bool __builtin_coro_done(void *addr);
2055 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
2056
2057**Example of use**:
2058
2059.. code-block:: c++
2060
2061 template <> struct coroutine_handle<void> {
2062 void resume() const { __builtin_coro_resume(ptr); }
2063 void destroy() const { __builtin_coro_destroy(ptr); }
2064 bool done() const { return __builtin_coro_done(ptr); }
2065 // ...
2066 protected:
2067 void *ptr;
2068 };
2069
2070 template <typename Promise> struct coroutine_handle : coroutine_handle<> {
2071 // ...
2072 Promise &promise() const {
2073 return *reinterpret_cast<Promise *>(
2074 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
2075 }
2076 static coroutine_handle from_promise(Promise &promise) {
2077 coroutine_handle p;
2078 p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
2079 /*from-promise=*/true);
2080 return p;
2081 }
2082 };
2083
2084
2085Other coroutine builtins are either for internal clang use or for use during
2086development of the coroutine feature. See `Coroutines in LLVM
2087<http://llvm.org/docs/Coroutines.html#intrinsics>`_ for
2088more information on their semantics. Note that builtins matching the intrinsics
2089that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
2090llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
2091an appropriate value during the emission.
2092
2093**Syntax**:
2094
2095.. code-block:: c
2096
2097 size_t __builtin_coro_size()
2098 void *__builtin_coro_frame()
2099 void *__builtin_coro_free(void *coro_frame)
2100
2101 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
2102 bool __builtin_coro_alloc()
2103 void *__builtin_coro_begin(void *memory)
2104 void __builtin_coro_end(void *coro_frame, bool unwind)
2105 char __builtin_coro_suspend(bool final)
2106 bool __builtin_coro_param(void *original, void *copy)
2107
2108Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
2109automatically will insert one if the first argument to `llvm.coro.suspend` is
2110token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
2111as the first argument to the intrinsic.
2112
Sean Silva709c44d2012-12-12 23:44:55 +00002113Non-standard C++11 Attributes
2114=============================
2115
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002116Clang's non-standard C++11 attributes live in the ``clang`` attribute
2117namespace.
Sean Silva709c44d2012-12-12 23:44:55 +00002118
Aaron Ballman68893db2014-02-19 23:21:40 +00002119Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002120are accepted with the ``__attribute__((foo))`` syntax are also accepted as
2121``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
2122(see the list of `GCC function attributes
2123<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
2124attributes <http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
2125`GCC type attributes
Richard Smithccfc9ff2013-07-11 00:27:05 +00002126<http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002127implementation, these attributes must appertain to the *declarator-id* in a
2128declaration, which means they must go either at the start of the declaration or
2129immediately after the name being declared.
2130
2131For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
2132also applies the GNU ``noreturn`` attribute to ``f``.
2133
2134.. code-block:: c++
2135
2136 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
2137
Sean Silva709c44d2012-12-12 23:44:55 +00002138Target-Specific Extensions
2139==========================
2140
2141Clang supports some language features conditionally on some targets.
2142
Yi Kong4de26fb2014-07-23 09:25:02 +00002143ARM/AArch64 Language Extensions
2144-------------------------------
2145
2146Memory Barrier Intrinsics
2147^^^^^^^^^^^^^^^^^^^^^^^^^
2148Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
2149in the `ARM C Language Extensions Release 2.0
2150<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
2151Note that these intrinsics are implemented as motion barriers that block
2152reordering of memory accesses and side effect instructions. Other instructions
Sylvestre Ledrube8f3962016-02-14 20:20:58 +00002153like simple arithmetic may be reordered around the intrinsic. If you expect to
Yi Kong4de26fb2014-07-23 09:25:02 +00002154have no reordering at all, use inline assembly instead.
2155
Sean Silva709c44d2012-12-12 23:44:55 +00002156X86/X86-64 Language Extensions
2157------------------------------
2158
2159The X86 backend has these language extensions:
2160
David L Kreitzerd8984102016-05-03 20:20:59 +00002161Memory references to specified segments
2162^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sean Silva709c44d2012-12-12 23:44:55 +00002163
2164Annotating a pointer with address space #256 causes it to be code generated
David L Kreitzerd8984102016-05-03 20:20:59 +00002165relative to the X86 GS segment register, address space #257 causes it to be
2166relative to the X86 FS segment, and address space #258 causes it to be
2167relative to the X86 SS segment. Note that this is a very very low-level
Sean Silva709c44d2012-12-12 23:44:55 +00002168feature that should only be used if you know what you're doing (for example in
2169an OS kernel).
2170
2171Here is an example:
2172
2173.. code-block:: c++
2174
2175 #define GS_RELATIVE __attribute__((address_space(256)))
2176 int foo(int GS_RELATIVE *P) {
2177 return *P;
2178 }
2179
2180Which compiles to (on X86-32):
2181
2182.. code-block:: gas
2183
2184 _foo:
2185 movl 4(%esp), %eax
2186 movl %gs:(%eax), %eax
2187 ret
2188
Jordan Rose32e94892012-12-15 00:37:01 +00002189Extensions for Static Analysis
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002190==============================
Sean Silva709c44d2012-12-12 23:44:55 +00002191
2192Clang supports additional attributes that are useful for documenting program
Jordan Rose32e94892012-12-15 00:37:01 +00002193invariants and rules for static analysis tools, such as the `Clang Static
2194Analyzer <http://clang-analyzer.llvm.org/>`_. These attributes are documented
2195in the analyzer's `list of source-level annotations
2196<http://clang-analyzer.llvm.org/annotations.html>`_.
Sean Silva709c44d2012-12-12 23:44:55 +00002197
Sean Silva709c44d2012-12-12 23:44:55 +00002198
Jordan Rose32e94892012-12-15 00:37:01 +00002199Extensions for Dynamic Analysis
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002200===============================
Sean Silva709c44d2012-12-12 23:44:55 +00002201
Sean Silva709c44d2012-12-12 23:44:55 +00002202Use ``__has_feature(address_sanitizer)`` to check if the code is being built
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002203with :doc:`AddressSanitizer`.
Sean Silva709c44d2012-12-12 23:44:55 +00002204
Kostya Serebryany4c0fc992013-02-26 06:58:27 +00002205Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
2206with :doc:`ThreadSanitizer`.
2207
Kostya Serebryany4c0fc992013-02-26 06:58:27 +00002208Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
2209with :doc:`MemorySanitizer`.
Dario Domizioli33c17872014-05-28 14:06:38 +00002210
Peter Collingbournec4122c12015-06-15 21:08:13 +00002211Use ``__has_feature(safe_stack)`` to check if the code is being built
2212with :doc:`SafeStack`.
2213
Dario Domizioli33c17872014-05-28 14:06:38 +00002214
2215Extensions for selectively disabling optimization
2216=================================================
2217
2218Clang provides a mechanism for selectively disabling optimizations in functions
2219and methods.
2220
2221To disable optimizations in a single function definition, the GNU-style or C++11
2222non-standard attribute ``optnone`` can be used.
2223
2224.. code-block:: c++
2225
2226 // The following functions will not be optimized.
2227 // GNU-style attribute
2228 __attribute__((optnone)) int foo() {
2229 // ... code
2230 }
2231 // C++11 attribute
2232 [[clang::optnone]] int bar() {
2233 // ... code
2234 }
2235
2236To facilitate disabling optimization for a range of function definitions, a
2237range-based pragma is provided. Its syntax is ``#pragma clang optimize``
2238followed by ``off`` or ``on``.
2239
2240All function definitions in the region between an ``off`` and the following
2241``on`` will be decorated with the ``optnone`` attribute unless doing so would
2242conflict with explicit attributes already present on the function (e.g. the
2243ones that control inlining).
2244
2245.. code-block:: c++
2246
2247 #pragma clang optimize off
2248 // This function will be decorated with optnone.
2249 int foo() {
2250 // ... code
2251 }
2252
2253 // optnone conflicts with always_inline, so bar() will not be decorated.
2254 __attribute__((always_inline)) int bar() {
2255 // ... code
2256 }
2257 #pragma clang optimize on
2258
2259If no ``on`` is found to close an ``off`` region, the end of the region is the
2260end of the compilation unit.
2261
2262Note that a stray ``#pragma clang optimize on`` does not selectively enable
2263additional optimizations when compiling at low optimization levels. This feature
2264can only be used to selectively disable optimizations.
2265
2266The pragma has an effect on functions only at the point of their definition; for
2267function templates, this means that the state of the pragma at the point of an
2268instantiation is not necessarily relevant. Consider the following example:
2269
2270.. code-block:: c++
2271
2272 template<typename T> T twice(T t) {
2273 return 2 * t;
2274 }
2275
2276 #pragma clang optimize off
2277 template<typename T> T thrice(T t) {
2278 return 3 * t;
2279 }
2280
2281 int container(int a, int b) {
2282 return twice(a) + thrice(b);
2283 }
2284 #pragma clang optimize on
2285
2286In this example, the definition of the template function ``twice`` is outside
2287the pragma region, whereas the definition of ``thrice`` is inside the region.
2288The ``container`` function is also in the region and will not be optimized, but
2289it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
2290these two instantiations, ``twice`` will be optimized (because its definition
2291was outside the region) and ``thrice`` will not be optimized.
Tyler Nowickidb2668a2014-06-18 00:51:32 +00002292
2293Extensions for loop hint optimizations
2294======================================
2295
2296The ``#pragma clang loop`` directive is used to specify hints for optimizing the
2297subsequent for, while, do-while, or c++11 range-based for loop. The directive
Adam Nemet2de463e2016-06-14 12:04:26 +00002298provides options for vectorization, interleaving, unrolling and
2299distribution. Loop hints can be specified before any loop and will be ignored if
2300the optimization is not safe to apply.
Eli Bendersky778268d2014-06-19 18:12:44 +00002301
2302Vectorization and Interleaving
2303------------------------------
Tyler Nowickidb2668a2014-06-18 00:51:32 +00002304
2305A vectorized loop performs multiple iterations of the original loop
2306in parallel using vector instructions. The instruction set of the target
2307processor determines which vector instructions are available and their vector
2308widths. This restricts the types of loops that can be vectorized. The vectorizer
2309automatically determines if the loop is safe and profitable to vectorize. A
2310vector instruction cost model is used to select the vector width.
2311
2312Interleaving multiple loop iterations allows modern processors to further
2313improve instruction-level parallelism (ILP) using advanced hardware features,
2314such as multiple execution units and out-of-order execution. The vectorizer uses
2315a cost model that depends on the register pressure and generated code size to
2316select the interleaving count.
2317
2318Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
2319by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
2320manually enable vectorization or interleaving.
2321
2322.. code-block:: c++
2323
2324 #pragma clang loop vectorize(enable)
2325 #pragma clang loop interleave(enable)
2326 for(...) {
2327 ...
2328 }
2329
2330The vector width is specified by ``vectorize_width(_value_)`` and the interleave
2331count is specified by ``interleave_count(_value_)``, where
2332_value_ is a positive integer. This is useful for specifying the optimal
2333width/count of the set of target architectures supported by your application.
2334
2335.. code-block:: c++
2336
Tyler Nowickidb2668a2014-06-18 00:51:32 +00002337 #pragma clang loop vectorize_width(2)
2338 #pragma clang loop interleave_count(2)
2339 for(...) {
2340 ...
2341 }
2342
2343Specifying a width/count of 1 disables the optimization, and is equivalent to
2344``vectorize(disable)`` or ``interleave(disable)``.
2345
Eli Bendersky778268d2014-06-19 18:12:44 +00002346Loop Unrolling
2347--------------
2348
2349Unrolling a loop reduces the loop control overhead and exposes more
2350opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
2351eliminates the loop and replaces it with an enumerated sequence of loop
2352iterations. Full unrolling is only possible if the loop trip count is known at
2353compile time. Partial unrolling replicates the loop body within the loop and
2354reduces the trip count.
2355
Mark Heffernan397a98d2015-08-10 17:29:39 +00002356If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
Mark Heffernan7ccb5e22015-07-13 18:31:37 +00002357loop if the trip count is known at compile time. If the fully unrolled code size
2358is greater than an internal limit the loop will be partially unrolled up to this
Mark Heffernan397a98d2015-08-10 17:29:39 +00002359limit. If the trip count is not known at compile time the loop will be partially
2360unrolled with a heuristically chosen unroll factor.
2361
2362.. code-block:: c++
2363
2364 #pragma clang loop unroll(enable)
2365 for(...) {
2366 ...
2367 }
2368
2369If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
2370loop if the trip count is known at compile time identically to
2371``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
2372if the loop count is not known at compile time.
Eli Bendersky778268d2014-06-19 18:12:44 +00002373
2374.. code-block:: c++
2375
Mark Heffernan450c2382014-07-23 17:31:31 +00002376 #pragma clang loop unroll(full)
Eli Bendersky778268d2014-06-19 18:12:44 +00002377 for(...) {
2378 ...
2379 }
2380
2381The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
2382_value_ is a positive integer. If this value is greater than the trip count the
2383loop will be fully unrolled. Otherwise the loop is partially unrolled subject
Mark Heffernan397a98d2015-08-10 17:29:39 +00002384to the same code size limit as with ``unroll(enable)``.
Eli Bendersky778268d2014-06-19 18:12:44 +00002385
2386.. code-block:: c++
2387
2388 #pragma clang loop unroll_count(8)
2389 for(...) {
2390 ...
2391 }
2392
2393Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
2394
Adam Nemet2de463e2016-06-14 12:04:26 +00002395Loop Distribution
2396-----------------
2397
2398Loop Distribution allows splitting a loop into multiple loops. This is
2399beneficial for example when the entire loop cannot be vectorized but some of the
2400resulting loops can.
2401
Adam Nemet0c58eb72016-06-14 19:33:16 +00002402If ``distribute(enable))`` is specified and the loop has memory dependencies
Adam Nemet2de463e2016-06-14 12:04:26 +00002403that inhibit vectorization, the compiler will attempt to isolate the offending
2404operations into a new loop. This optimization is not enabled by default, only
2405loops marked with the pragma are considered.
2406
2407.. code-block:: c++
2408
2409 #pragma clang loop distribute(enable)
2410 for (i = 0; i < N; ++i) {
2411 S1: A[i + 1] = A[i] + B[i];
2412 S2: C[i] = D[i] * E[i];
2413 }
2414
2415This loop will be split into two loops between statements S1 and S2. The
2416second loop containing S2 will be vectorized.
2417
2418Loop Distribution is currently not enabled by default in the optimizer because
2419it can hurt performance in some cases. For example, instruction-level
2420parallelism could be reduced by sequentializing the execution of the
2421statements S1 and S2 above.
2422
2423If Loop Distribution is turned on globally with
2424``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
2425be used the disable it on a per-loop basis.
2426
Eli Bendersky778268d2014-06-19 18:12:44 +00002427Additional Information
2428----------------------
2429
Tyler Nowickidb2668a2014-06-18 00:51:32 +00002430For convenience multiple loop hints can be specified on a single line.
2431
2432.. code-block:: c++
2433
2434 #pragma clang loop vectorize_width(4) interleave_count(8)
2435 for(...) {
2436 ...
2437 }
2438
2439If an optimization cannot be applied any hints that apply to it will be ignored.
2440For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
2441proven safe to vectorize. To identify and diagnose optimization issues use
2442`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
2443user guide for details.
Adam Nemet60d32642017-04-04 21:18:36 +00002444
2445Extensions to specify floating-point flags
2446====================================================
2447
2448The ``#pragma clang fp`` pragma allows floating-point options to be specified
2449for a section of the source code. This pragma can only appear at file scope or
2450at the start of a compound statement (excluding comments). When using within a
2451compound statement, the pragma is active within the scope of the compound
2452statement.
2453
2454Currently, only FP contraction can be controlled with the pragma. ``#pragma
2455clang fp contract`` specifies whether the compiler should contract a multiply
2456and an addition (or subtraction) into a fused FMA operation when supported by
2457the target.
2458
2459The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on``
2460option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
2461fusion as specified the language standard. The ``fast`` option allows fusiong
2462in cases when the language standard does not make this possible (e.g. across
2463statements in C)
2464
2465.. code-block:: c++
2466
2467 for(...) {
2468 #pragma clang fp contract(fast)
2469 a = b[i] * c[i];
2470 d[i] += a;
2471 }
2472
2473
Adam Nemete73e00c2017-04-04 22:45:20 +00002474The pragma can also be used with ``off`` which turns FP contraction off for a
Adam Nemet60d32642017-04-04 21:18:36 +00002475section of the code. This can be useful when fast contraction is otherwise
Adam Nemetd7f95112017-04-04 23:46:34 +00002476enabled for the translation unit with the ``-ffp-contract=fast`` flag.
Alex Lorenz9e7bf162017-04-18 14:33:39 +00002477
2478Specifying an attribute for multiple declarations (#pragma clang attribute)
2479===========================================================================
2480
2481The ``#pragma clang attribute`` directive can be used to apply an attribute to
2482multiple declarations. The ``#pragma clang attribute push`` variation of the
2483directive pushes a new attribute to the attribute stack. The declarations that
2484follow the pragma receive the attributes that are on the attribute stack, until
2485the stack is cleared using a ``#pragma clang attribute pop`` directive. Multiple
2486push directives can be nested inside each other.
2487
2488The attributes that are used in the ``#pragma clang attribute`` directives
2489can be written using the GNU-style syntax:
2490
2491.. code-block:: c++
2492
2493 #pragma clang attribute push(__attribute__((annotate("custom"))), apply_to = function)
2494
2495 void function(); // The function now has the annotate("custom") attribute
2496
2497 #pragma clang attribute pop
2498
2499The attributes can also be written using the C++11 style syntax:
2500
2501.. code-block:: c++
2502
2503 #pragma clang attribute push([[noreturn]], apply_to = function)
2504
2505 void function(); // The function now has the [[noreturn]] attribute
2506
2507 #pragma clang attribute pop
2508
2509The ``__declspec`` style syntax is also supported:
2510
2511.. code-block:: c++
2512
2513 #pragma clang attribute push(__declspec(dllexport), apply_to = function)
2514
2515 void function(); // The function now has the __declspec(dllexport) attribute
2516
2517 #pragma clang attribute pop
2518
2519A single push directive accepts only one attribute regardless of the syntax
2520used.
2521
2522Subject Match Rules
2523-------------------
2524
2525The set of declarations that receive a single attribute from the attribute stack
2526depends on the subject match rules that were specified in the pragma. Subject
2527match rules are specified after the attribute. The compiler expects an
2528identifier that corresponds to the subject set specifier. The ``apply_to``
2529specifier is currently the only supported subject set specifier. It allows you
2530to specify match rules that form a subset of the attribute's allowed subject
2531set, i.e. the compiler doesn't require all of the attribute's subjects. For
2532example, an attribute like ``[[nodiscard]]`` whose subject set includes
2533``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
2534least one of these rules after ``apply_to``:
2535
2536.. code-block:: c++
2537
2538 #pragma clang attribute push([[nodiscard]], apply_to = enum)
2539
2540 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
2541
2542 struct Record1 { }; // The struct will *not* receive [[nodiscard]]
2543
2544 #pragma clang attribute pop
2545
2546 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
2547
2548 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
2549
2550 struct Record2 { }; // The struct *will* receive [[nodiscard]]
2551
2552 #pragma clang attribute pop
2553
2554 // This is an error, since [[nodiscard]] can't be applied to namespaces:
2555 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
2556
2557 #pragma clang attribute pop
2558
2559Multiple match rules can be specified using the ``any`` match rule, as shown
2560in the example above. The ``any`` rule applies attributes to all declarations
2561that are matched by at least one of the rules in the ``any``. It doesn't nest
2562and can't be used inside the other match rules. Redundant match rules or rules
2563that conflict with one another should not be used inside of ``any``.
2564
2565Clang supports the following match rules:
2566
2567- ``function``: Can be used to apply attributes to functions. This includes C++
2568 member functions, static functions, operators, and constructors/destructors.
2569
2570- ``function(is_member)``: Can be used to apply attributes to C++ member
2571 functions. This includes members like static functions, operators, and
2572 constructors/destructors.
2573
2574- ``hasType(functionType)``: Can be used to apply attributes to functions, C++
2575 member functions, and variables/fields whose type is a function pointer. It
2576 does not apply attributes to Objective-C methods or blocks.
2577
2578- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
2579 and C++11 type aliases.
2580
2581- ``record``: Can be used to apply attributes to ``struct``, ``class``, and
2582 ``union`` declarations.
2583
2584- ``record(unless(is_union))``: Can be used to apply attributes only to
2585 ``struct`` and ``class`` declarations.
2586
2587- ``enum``: Can be be used to apply attributes to enumeration declarations.
2588
2589- ``enum_constant``: Can be used to apply attributes to enumerators.
2590
2591- ``variable``: Can be used to apply attributes to variables, including
2592 local variables, parameters, global variables, and static member variables.
2593 It does not apply attributes to instance member variables or Objective-C
2594 ivars.
2595
2596- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
2597 variables only.
2598
2599- ``variable(is_global)``: Can be used to apply attributes to global variables
2600 only.
2601
2602- ``variable(is_parameter)``: Can be used to apply attributes to parameters
2603 only.
2604
2605- ``variable(unless(is_parameter))``: Can be used to apply attributes to all
2606 the variables that are not parameters.
2607
2608- ``field``: Can be used to apply attributes to non-static member variables
2609 in a record. This includes Objective-C ivars.
2610
2611- ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
2612
2613- ``objc_interface``: Can be used to apply attributes to ``@interface``
2614 declarations.
2615
2616- ``objc_protocol``: Can be used to apply attributes to ``@protocol``
2617 declarations.
2618
2619- ``objc_category``: Can be used to apply attributes to category declarations,
2620 including class extensions.
2621
2622- ``objc_method``: Can be used to apply attributes to Objective-C methods,
2623 including instance and class methods. Implicit methods like implicit property
2624 getters and setters do not receive the attribute.
2625
2626- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
2627 instance methods.
2628
2629- ``objc_property``: Can be used to apply attributes to ``@property``
2630 declarations.
2631
2632- ``block``: Can be used to apply attributes to block declarations. This does
2633 not include variables/fields of block pointer type.
2634
2635The use of ``unless`` in match rules is currently restricted to a strict set of
2636sub-rules that are used by the supported attributes. That means that even though
2637``variable(unless(is_parameter))`` is a valid match rule,
2638``variable(unless(is_thread_local))`` is not.
2639
2640Supported Attributes
2641--------------------
2642
2643Not all attributes can be used with the ``#pragma clang attribute`` directive.
2644Notably, statement attributes like ``[[fallthrough]]`` or type attributes
2645like ``address_space`` aren't supported by this directive. You can determine
2646whether or not an attribute is supported by the pragma by referring to the
2647:doc:`individual documentation for that attribute <AttributeReference>`.
2648
2649The attributes are applied to all matching declarations individually, even when
2650the attribute is semantically incorrect. The attributes that aren't applied to
2651any declaration are not verified semantically.
Javed Absar2a67c9e2017-06-05 10:11:57 +00002652
2653Specifying section names for global objects (#pragma clang section)
2654===================================================================
2655
2656The ``#pragma clang section`` directive provides a means to assign section-names
2657to global variables, functions and static variables.
2658
2659The section names can be specified as:
2660
2661.. code-block:: c++
2662
2663 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" text="myText"
2664
2665The section names can be reverted back to default name by supplying an empty
2666string to the section kind, for example:
2667
2668.. code-block:: c++
2669
2670 #pragma clang section bss="" data="" text="" rodata=""
2671
2672The ``#pragma clang section`` directive obeys the following rules:
2673
2674* The pragma applies to all global variable, statics and function declarations
2675 from the pragma to the end of the translation unit.
2676
2677* The pragma clang section is enabled automatically, without need of any flags.
2678
2679* This feature is only defined to work sensibly for ELF targets.
2680
2681* If section name is specified through _attribute_((section("myname"))), then
2682 the attribute name gains precedence.
2683
2684* Global variables that are initialized to zero will be placed in the named
2685 bss section, if one is present.
2686
2687* The ``#pragma clang section`` directive does not does try to infer section-kind
2688 from the name. For example, naming a section "``.bss.mySec``" does NOT mean
2689 it will be a bss section name.
2690
2691* The decision about which section-kind applies to each global is taken in the back-end.
2692 Once the section-kind is known, appropriate section name, as specified by the user using
2693 ``#pragma clang section`` directive, is applied to that global.