blob: 80c960909f75a2c1371ae924738fa812710539fe [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
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +000023<https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html>`_ for more information on
Sean Silva709c44d2012-12-12 23:44:55 +000024these 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
Richard Smithdac3ea42019-08-14 02:30:11 +000041a builtin function, a builtin pseudo-function (taking one or more type
42arguments), or a builtin template.
43It evaluates to 1 if the builtin is supported or 0 if not.
Sean Silva709c44d2012-12-12 23:44:55 +000044It can be used like this:
45
46.. code-block:: c++
47
48 #ifndef __has_builtin // Optional of course.
49 #define __has_builtin(x) 0 // Compatibility with non-clang compilers.
50 #endif
51
52 ...
53 #if __has_builtin(__builtin_trap)
54 __builtin_trap();
55 #else
56 abort();
57 #endif
58 ...
59
Richard Smithdac3ea42019-08-14 02:30:11 +000060.. note::
61
62 Prior to Clang 10, ``__has_builtin`` could not be used to detect most builtin
63 pseudo-functions.
64
65 ``__has_builtin`` should not be used to detect support for a builtin macro;
66 use ``#ifdef`` instead.
67
Sean Silva709c44d2012-12-12 23:44:55 +000068.. _langext-__has_feature-__has_extension:
69
70``__has_feature`` and ``__has_extension``
71-----------------------------------------
72
73These function-like macros take a single identifier argument that is the name
74of a feature. ``__has_feature`` evaluates to 1 if the feature is both
75supported by Clang and standardized in the current language standard or 0 if
76not (but see :ref:`below <langext-has-feature-back-compat>`), while
77``__has_extension`` evaluates to 1 if the feature is supported by Clang in the
78current language (either as a language extension or a standard language
79feature) or 0 if not. They can be used like this:
80
81.. code-block:: c++
82
83 #ifndef __has_feature // Optional of course.
84 #define __has_feature(x) 0 // Compatibility with non-clang compilers.
85 #endif
86 #ifndef __has_extension
87 #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
88 #endif
89
90 ...
91 #if __has_feature(cxx_rvalue_references)
92 // This code will only be compiled with the -std=c++11 and -std=gnu++11
93 // options, because rvalue references are only standardized in C++11.
94 #endif
95
96 #if __has_extension(cxx_rvalue_references)
97 // This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
98 // and -std=gnu++98 options, because rvalue references are supported as a
99 // language extension in C++98.
100 #endif
101
102.. _langext-has-feature-back-compat:
103
Alp Toker958027b2014-07-14 19:42:55 +0000104For backward compatibility, ``__has_feature`` can also be used to test
Sean Silva709c44d2012-12-12 23:44:55 +0000105for support for non-standardized features, i.e. features not prefixed ``c_``,
106``cxx_`` or ``objc_``.
107
108Another use of ``__has_feature`` is to check for compiler features not related
Sean Silva173d2522013-01-02 13:07:47 +0000109to the language standard, such as e.g. :doc:`AddressSanitizer
110<AddressSanitizer>`.
Sean Silva709c44d2012-12-12 23:44:55 +0000111
112If the ``-pedantic-errors`` option is given, ``__has_extension`` is equivalent
113to ``__has_feature``.
114
115The feature tag is described along with the language feature below.
116
117The feature name or extension name can also be specified with a preceding and
118following ``__`` (double underscore) to avoid interference from a macro with
119the same name. For instance, ``__cxx_rvalue_references__`` can be used instead
120of ``cxx_rvalue_references``.
121
Aaron Ballmana0344c52014-11-14 13:44:02 +0000122``__has_cpp_attribute``
Aaron Ballman631bd7b2014-11-14 14:01:55 +0000123-----------------------
Aaron Ballmana0344c52014-11-14 13:44:02 +0000124
Aaron Ballman62015572018-11-20 15:23:07 +0000125This function-like macro is available in C++2a by default, and is provided as an
126extension in earlier language standards. It takes a single argument that is the
127name of a double-square-bracket-style attribute. The argument can either be a
128single identifier or a scoped identifier. If the attribute is supported, a
129nonzero value is returned. If the attribute is a standards-based attribute, this
130macro returns a nonzero value based on the year and month in which the attribute
131was voted into the working draft. See `WG21 SD-6
132<https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations>`_
133for the list of values returned for standards-based attributes. If the attribute
134is not supported by the current compliation target, this macro evaluates to 0.
135It can be used like this:
Aaron Ballmana0344c52014-11-14 13:44:02 +0000136
137.. code-block:: c++
138
Aaron Ballman62015572018-11-20 15:23:07 +0000139 #ifndef __has_cpp_attribute // For backwards compatibility
140 #define __has_cpp_attribute(x) 0
Aaron Ballmana0344c52014-11-14 13:44:02 +0000141 #endif
142
143 ...
144 #if __has_cpp_attribute(clang::fallthrough)
145 #define FALLTHROUGH [[clang::fallthrough]]
146 #else
147 #define FALLTHROUGH
148 #endif
149 ...
150
Aaron Ballman62015572018-11-20 15:23:07 +0000151The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
152the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
153of these namespaces can be specified with a preceding and following ``__``
154(double underscore) to avoid interference from a macro with the same name. For
155instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
Aaron Ballmana0344c52014-11-14 13:44:02 +0000156
Aaron Ballman48f5f4d2017-12-07 21:37:49 +0000157``__has_c_attribute``
158---------------------
159
160This function-like macro takes a single argument that is the name of an
161attribute exposed with the double square-bracket syntax in C mode. The argument
162can either be a single identifier or a scoped identifier. If the attribute is
163supported, a nonzero value is returned. If the attribute is not supported by the
164current compilation target, this macro evaluates to 0. It can be used like this:
165
166.. code-block:: c
167
168 #ifndef __has_c_attribute // Optional of course.
169 #define __has_c_attribute(x) 0 // Compatibility with non-clang compilers.
170 #endif
171
172 ...
173 #if __has_c_attribute(fallthrough)
174 #define FALLTHROUGH [[fallthrough]]
175 #else
176 #define FALLTHROUGH
177 #endif
178 ...
179
Aaron Ballman62015572018-11-20 15:23:07 +0000180The attribute scope tokens ``clang`` and ``_Clang`` are interchangeable, as are
181the attribute scope tokens ``gnu`` and ``__gnu__``. Attribute tokens in either
182of these namespaces can be specified with a preceding and following ``__``
183(double underscore) to avoid interference from a macro with the same name. For
184instance, ``gnu::__const__`` can be used instead of ``gnu::const``.
Aaron Ballman48f5f4d2017-12-07 21:37:49 +0000185
Sean Silva709c44d2012-12-12 23:44:55 +0000186``__has_attribute``
187-------------------
188
189This function-like macro takes a single identifier argument that is the name of
Aaron Ballman4bfaeba2014-12-05 17:11:49 +0000190a GNU-style attribute. It evaluates to 1 if the attribute is supported by the
191current compilation target, or 0 if not. It can be used like this:
Sean Silva709c44d2012-12-12 23:44:55 +0000192
193.. code-block:: c++
194
195 #ifndef __has_attribute // Optional of course.
196 #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
197 #endif
198
199 ...
200 #if __has_attribute(always_inline)
201 #define ALWAYS_INLINE __attribute__((always_inline))
202 #else
203 #define ALWAYS_INLINE
204 #endif
205 ...
206
207The attribute name can also be specified with a preceding and following ``__``
208(double underscore) to avoid interference from a macro with the same name. For
209instance, ``__always_inline__`` can be used instead of ``always_inline``.
210
Aaron Ballman3c0f9b42014-12-05 15:05:29 +0000211
212``__has_declspec_attribute``
213----------------------------
214
215This function-like macro takes a single identifier argument that is the name of
216an attribute implemented as a Microsoft-style ``__declspec`` attribute. It
217evaluates to 1 if the attribute is supported by the current compilation target,
218or 0 if not. It can be used like this:
219
220.. code-block:: c++
221
222 #ifndef __has_declspec_attribute // Optional of course.
223 #define __has_declspec_attribute(x) 0 // Compatibility with non-clang compilers.
224 #endif
225
226 ...
227 #if __has_declspec_attribute(dllexport)
228 #define DLLEXPORT __declspec(dllexport)
229 #else
230 #define DLLEXPORT
231 #endif
232 ...
233
234The attribute name can also be specified with a preceding and following ``__``
235(double underscore) to avoid interference from a macro with the same name. For
236instance, ``__dllexport__`` can be used instead of ``dllexport``.
237
Yunzhong Gaoa8c45c92014-04-12 02:25:32 +0000238``__is_identifier``
239-------------------
240
241This function-like macro takes a single identifier argument that might be either
242a reserved word or a regular identifier. It evaluates to 1 if the argument is just
243a regular identifier and not a reserved word, in the sense that it can then be
244used as the name of a user-defined function or variable. Otherwise it evaluates
245to 0. It can be used like this:
246
247.. code-block:: c++
248
249 ...
250 #ifdef __is_identifier // Compatibility with non-clang compilers.
251 #if __is_identifier(__wchar_t)
252 typedef wchar_t __wchar_t;
253 #endif
254 #endif
255
256 __wchar_t WideCharacter;
257 ...
Aaron Ballmana4bb4b92014-01-09 23:11:13 +0000258
Sean Silva709c44d2012-12-12 23:44:55 +0000259Include File Checking Macros
260============================
261
262Not all developments systems have the same include files. The
263:ref:`langext-__has_include` and :ref:`langext-__has_include_next` macros allow
264you to check for the existence of an include file before doing a possibly
Dmitri Gribenko764ea242013-01-17 17:04:54 +0000265failing ``#include`` directive. Include file checking macros must be used
266as expressions in ``#if`` or ``#elif`` preprocessing directives.
Sean Silva709c44d2012-12-12 23:44:55 +0000267
268.. _langext-__has_include:
269
270``__has_include``
271-----------------
272
273This function-like macro takes a single file name string argument that is the
274name of an include file. It evaluates to 1 if the file can be found using the
275include paths, or 0 otherwise:
276
277.. code-block:: c++
278
279 // Note the two possible file name string formats.
280 #if __has_include("myinclude.h") && __has_include(<stdint.h>)
281 # include "myinclude.h"
282 #endif
283
Richard Smithccfc9ff2013-07-11 00:27:05 +0000284To test for this feature, use ``#if defined(__has_include)``:
285
286.. code-block:: c++
287
Sean Silva709c44d2012-12-12 23:44:55 +0000288 // To avoid problem with non-clang compilers not having this macro.
Richard Smithccfc9ff2013-07-11 00:27:05 +0000289 #if defined(__has_include)
290 #if __has_include("myinclude.h")
Sean Silva709c44d2012-12-12 23:44:55 +0000291 # include "myinclude.h"
292 #endif
Richard Smithccfc9ff2013-07-11 00:27:05 +0000293 #endif
Sean Silva709c44d2012-12-12 23:44:55 +0000294
295.. _langext-__has_include_next:
296
297``__has_include_next``
298----------------------
299
300This function-like macro takes a single file name string argument that is the
301name of an include file. It is like ``__has_include`` except that it looks for
302the second instance of the given file found in the include paths. It evaluates
303to 1 if the second instance of the file can be found using the include paths,
304or 0 otherwise:
305
306.. code-block:: c++
307
308 // Note the two possible file name string formats.
309 #if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)
310 # include_next "myinclude.h"
311 #endif
312
313 // To avoid problem with non-clang compilers not having this macro.
Richard Smithccfc9ff2013-07-11 00:27:05 +0000314 #if defined(__has_include_next)
315 #if __has_include_next("myinclude.h")
Sean Silva709c44d2012-12-12 23:44:55 +0000316 # include_next "myinclude.h"
317 #endif
Richard Smithccfc9ff2013-07-11 00:27:05 +0000318 #endif
Sean Silva709c44d2012-12-12 23:44:55 +0000319
320Note that ``__has_include_next``, like the GNU extension ``#include_next``
321directive, is intended for use in headers only, and will issue a warning if
322used in the top-level compilation file. A warning will also be issued if an
323absolute path is used in the file argument.
324
325``__has_warning``
326-----------------
327
328This function-like macro takes a string literal that represents a command line
329option for a warning and returns true if that is a valid warning option.
330
331.. code-block:: c++
332
333 #if __has_warning("-Wformat")
334 ...
335 #endif
336
Sylvestre Ledru56799832019-07-15 17:47:22 +0000337.. _languageextensions-builtin-macros:
338
Sean Silva709c44d2012-12-12 23:44:55 +0000339Builtin Macros
340==============
341
342``__BASE_FILE__``
343 Defined to a string that contains the name of the main input file passed to
344 Clang.
Sylvestre Ledru0adbe772019-07-09 08:50:17 +0000345
Kristina Brooks56520632019-05-17 06:46:12 +0000346``__FILE_NAME__``
347 Clang-specific extension that functions similar to ``__FILE__`` but only
348 renders the last path component (the filename) instead of an invocation
Sylvestre Ledru0adbe772019-07-09 08:50:17 +0000349 dependent full path to that file.
Sean Silva709c44d2012-12-12 23:44:55 +0000350
351``__COUNTER__``
352 Defined to an integer value that starts at zero and is incremented each time
353 the ``__COUNTER__`` macro is expanded.
354
355``__INCLUDE_LEVEL__``
356 Defined to an integral value that is the include depth of the file currently
357 being translated. For the main file, this value is zero.
358
359``__TIMESTAMP__``
360 Defined to the date and time of the last modification of the current source
361 file.
362
363``__clang__``
364 Defined when compiling with Clang
365
366``__clang_major__``
367 Defined to the major marketing version number of Clang (e.g., the 2 in
368 2.0.1). Note that marketing version numbers should not be used to check for
369 language features, as different vendors use different numbering schemes.
370 Instead, use the :ref:`langext-feature_check`.
371
372``__clang_minor__``
373 Defined to the minor version number of Clang (e.g., the 0 in 2.0.1). Note
374 that marketing version numbers should not be used to check for language
375 features, as different vendors use different numbering schemes. Instead, use
376 the :ref:`langext-feature_check`.
377
378``__clang_patchlevel__``
379 Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).
380
381``__clang_version__``
382 Defined to a string that captures the Clang marketing version, including the
383 Subversion tag or revision number, e.g., "``1.5 (trunk 102332)``".
384
385.. _langext-vectors:
386
387Vectors and Extended Vectors
388============================
389
390Supports the GCC, OpenCL, AltiVec and NEON vector extensions.
391
Aaron Ballman18796da2019-08-22 18:57:46 +0000392OpenCL vector types are created using the ``ext_vector_type`` attribute. It
393supports the ``V.xyzw`` syntax and other tidbits as seen in OpenCL. An example
Sean Silva709c44d2012-12-12 23:44:55 +0000394is:
395
396.. code-block:: c++
397
398 typedef float float4 __attribute__((ext_vector_type(4)));
399 typedef float float2 __attribute__((ext_vector_type(2)));
400
401 float4 foo(float2 a, float2 b) {
402 float4 c;
403 c.xz = a;
404 c.yw = b;
405 return c;
406 }
407
Aaron Ballman18796da2019-08-22 18:57:46 +0000408Query for this feature with ``__has_attribute(ext_vector_type)``.
Sean Silva709c44d2012-12-12 23:44:55 +0000409
Eric Christopher758aad72017-03-21 22:06:18 +0000410Giving ``-maltivec`` option to clang enables support for AltiVec vector syntax
Sean Silva709c44d2012-12-12 23:44:55 +0000411and functions. For example:
412
413.. code-block:: c++
414
415 vector float foo(vector int a) {
416 vector int b;
417 b = vec_add(a, a) + a;
418 return (vector float)b;
419 }
420
421NEON vector types are created using ``neon_vector_type`` and
422``neon_polyvector_type`` attributes. For example:
423
424.. code-block:: c++
425
426 typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t;
427 typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t;
428
429 int8x8_t foo(int8x8_t a) {
430 int8x8_t v;
431 v = a;
432 return v;
433 }
434
435Vector Literals
436---------------
437
438Vector literals can be used to create vectors from a set of scalars, or
439vectors. Either parentheses or braces form can be used. In the parentheses
440form the number of literal values specified must be one, i.e. referring to a
441scalar value, or must match the size of the vector type being created. If a
442single scalar literal value is specified, the scalar literal value will be
443replicated to all the components of the vector type. In the brackets form any
444number of literals can be specified. For example:
445
446.. code-block:: c++
447
448 typedef int v4si __attribute__((__vector_size__(16)));
449 typedef float float4 __attribute__((ext_vector_type(4)));
450 typedef float float2 __attribute__((ext_vector_type(2)));
451
452 v4si vsi = (v4si){1, 2, 3, 4};
453 float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
454 vector int vi1 = (vector int)(1); // vi1 will be (1, 1, 1, 1).
455 vector int vi2 = (vector int){1}; // vi2 will be (1, 0, 0, 0).
456 vector int vi3 = (vector int)(1, 2); // error
457 vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0).
458 vector int vi5 = (vector int)(1, 2, 3, 4);
459 float4 vf = (float4)((float2)(1.0f, 2.0f), (float2)(3.0f, 4.0f));
460
461Vector Operations
462-----------------
463
464The table below shows the support for each operation by vector extension. A
465dash indicates that an operation is not accepted according to a corresponding
466specification.
467
Anton Yartsev94e46f32014-09-03 17:59:21 +0000468============================== ======= ======= ======= =======
Nick Lewycky00a5d212015-08-10 19:54:11 +0000469 Operator OpenCL AltiVec GCC NEON
Anton Yartsev94e46f32014-09-03 17:59:21 +0000470============================== ======= ======= ======= =======
471[] yes yes yes --
472unary operators +, -- yes yes yes --
473++, -- -- yes yes yes --
474+,--,*,/,% yes yes yes --
475bitwise operators &,|,^,~ yes yes yes --
476>>,<< yes yes yes --
477!, &&, || yes -- -- --
478==, !=, >, <, >=, <= yes yes -- --
479= yes yes yes yes
480:? yes -- -- --
481sizeof yes yes yes yes
482C-style cast yes yes yes no
483reinterpret_cast yes no yes no
484static_cast yes no yes no
485const_cast no no no no
486============================== ======= ======= ======= =======
Sean Silva709c44d2012-12-12 23:44:55 +0000487
Anton Yartsev94e46f32014-09-03 17:59:21 +0000488See also :ref:`langext-__builtin_shufflevector`, :ref:`langext-__builtin_convertvector`.
Sean Silva709c44d2012-12-12 23:44:55 +0000489
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000490Half-Precision Floating Point
491=============================
492
493Clang supports two half-precision (16-bit) floating point types: ``__fp16`` and
Erich Keane1d1d4382019-01-25 17:27:57 +0000494``_Float16``. These types are supported in all language modes.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000495
Erich Keane1d1d4382019-01-25 17:27:57 +0000496``__fp16`` is supported on every target, as it is purely a storage format; see below.
497``_Float16`` is currently only supported on the following targets, with further
498targets pending ABI standardization:
Richard Smith87869b32019-08-16 22:08:39 +0000499
500* 32-bit ARM
501* 64-bit ARM (AArch64)
502* SPIR
503
Erich Keane1d1d4382019-01-25 17:27:57 +0000504``_Float16`` will be supported on more targets as they define ABIs for it.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000505
Erich Keane1d1d4382019-01-25 17:27:57 +0000506``__fp16`` is a storage and interchange format only. This means that values of
507``__fp16`` are immediately promoted to (at least) ``float`` when used in arithmetic
508operations, so that e.g. the result of adding two ``__fp16`` values has type ``float``.
509The behavior of ``__fp16`` is specified by the ARM C Language Extensions (`ACLE <http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053d/IHI0053D_acle_2_1.pdf>`_).
510Clang uses the ``binary16`` format from IEEE 754-2008 for ``__fp16``, not the ARM
511alternative format.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000512
Erich Keane1d1d4382019-01-25 17:27:57 +0000513``_Float16`` is an extended floating-point type. This means that, just like arithmetic on
514``float`` or ``double``, arithmetic on ``_Float16`` operands is formally performed in the
515``_Float16`` type, so that e.g. the result of adding two ``_Float16`` values has type
516``_Float16``. The behavior of ``_Float16`` is specified by ISO/IEC TS 18661-3:2015
517("Floating-point extensions for C"). As with ``__fp16``, Clang uses the ``binary16``
518format from IEEE 754-2008 for ``_Float16``.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000519
Erich Keane1d1d4382019-01-25 17:27:57 +0000520``_Float16`` arithmetic will be performed using native half-precision support
521when available on the target (e.g. on ARMv8.2a); otherwise it will be performed
522at a higher precision (currently always ``float``) and then truncated down to
523``_Float16``. Note that C and C++ allow intermediate floating-point operands
524of an expression to be computed with greater precision than is expressible in
525their type, so Clang may avoid intermediate truncations in certain cases; this may
526lead to results that are inconsistent with native arithmetic.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000527
Erich Keane1d1d4382019-01-25 17:27:57 +0000528It is recommended that portable code use ``_Float16`` instead of ``__fp16``,
529as it has been defined by the C standards committee and has behavior that is
530more familiar to most programmers.
531
532Because ``__fp16`` operands are always immediately promoted to ``float``, the
533common real type of ``__fp16`` and ``_Float16`` for the purposes of the usual
534arithmetic conversions is ``float``.
535
Richard Smith87869b32019-08-16 22:08:39 +0000536A literal can be given ``_Float16`` type using the suffix ``f16``. For example,
537``3.14f16``.
Erich Keane1d1d4382019-01-25 17:27:57 +0000538
539Because default argument promotion only applies to the standard floating-point
540types, ``_Float16`` values are not promoted to ``double`` when passed as variadic
541or untyped arguments. As a consequence, some caution must be taken when using
542certain library facilities with ``_Float16``; for example, there is no ``printf`` format
543specifier for ``_Float16``, and (unlike ``float``) it will not be implicitly promoted to
544``double`` when passed to ``printf``, so the programmer must explicitly cast it to
545``double`` before using it with an ``%f`` or similar specifier.
Sjoerd Meijer167f2e32017-11-07 10:09:45 +0000546
Sean Silva709c44d2012-12-12 23:44:55 +0000547Messages on ``deprecated`` and ``unavailable`` Attributes
548=========================================================
549
550An optional string message can be added to the ``deprecated`` and
551``unavailable`` attributes. For example:
552
553.. code-block:: c++
554
555 void explode(void) __attribute__((deprecated("extremely unsafe, use 'combust' instead!!!")));
556
557If the deprecated or unavailable declaration is used, the message will be
558incorporated into the appropriate diagnostic:
559
George Burgess IV61e43272016-06-21 00:16:23 +0000560.. code-block:: none
Sean Silva709c44d2012-12-12 23:44:55 +0000561
562 harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
563 [-Wdeprecated-declarations]
564 explode();
565 ^
566
567Query for this feature with
568``__has_extension(attribute_deprecated_with_message)`` and
569``__has_extension(attribute_unavailable_with_message)``.
570
571Attributes on Enumerators
572=========================
573
574Clang allows attributes to be written on individual enumerators. This allows
575enumerators to be deprecated, made unavailable, etc. The attribute must appear
576after the enumerator name and before any initializer, like so:
577
578.. code-block:: c++
579
580 enum OperationMode {
581 OM_Invalid,
582 OM_Normal,
583 OM_Terrified __attribute__((deprecated)),
584 OM_AbortOnError __attribute__((deprecated)) = 4
585 };
586
587Attributes on the ``enum`` declaration do not apply to individual enumerators.
588
589Query for this feature with ``__has_extension(enumerator_attributes)``.
590
591'User-Specified' System Frameworks
592==================================
593
594Clang provides a mechanism by which frameworks can be built in such a way that
595they will always be treated as being "system frameworks", even if they are not
596present in a system framework directory. This can be useful to system
597framework developers who want to be able to test building other applications
598with development builds of their framework, including the manner in which the
599compiler changes warning behavior for system headers.
600
601Framework developers can opt-in to this mechanism by creating a
602"``.system_framework``" file at the top-level of their framework. That is, the
603framework should have contents like:
604
605.. code-block:: none
606
607 .../TestFramework.framework
608 .../TestFramework.framework/.system_framework
609 .../TestFramework.framework/Headers
610 .../TestFramework.framework/Headers/TestFramework.h
611 ...
612
613Clang will treat the presence of this file as an indicator that the framework
614should be treated as a system framework, regardless of how it was found in the
615framework search path. For consistency, we recommend that such files never be
616included in installed versions of the framework.
617
Sean Silva709c44d2012-12-12 23:44:55 +0000618Checks for Standard Language Features
619=====================================
620
621The ``__has_feature`` macro can be used to query if certain standard language
622features are enabled. The ``__has_extension`` macro can be used to query if
623language features are available as an extension when compiling for a standard
624which does not provide them. The features which can be tested are listed here.
625
Richard Smith38af8562014-11-12 21:16:38 +0000626Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
627These are macros with names of the form ``__cpp_<feature_name>``, and are
628intended to be a portable way to query the supported features of the compiler.
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +0000629See `the C++ status page <https://clang.llvm.org/cxx_status.html#ts>`_ for
Richard Smith38af8562014-11-12 21:16:38 +0000630information on the version of SD-6 supported by each Clang release, and the
631macros provided by that revision of the recommendations.
632
Sean Silva709c44d2012-12-12 23:44:55 +0000633C++98
634-----
635
636The features listed below are part of the C++98 standard. These features are
637enabled by default when compiling C++ code.
638
639C++ exceptions
640^^^^^^^^^^^^^^
641
642Use ``__has_feature(cxx_exceptions)`` to determine if C++ exceptions have been
643enabled. For example, compiling code with ``-fno-exceptions`` disables C++
644exceptions.
645
646C++ RTTI
647^^^^^^^^
648
649Use ``__has_feature(cxx_rtti)`` to determine if C++ RTTI has been enabled. For
650example, compiling code with ``-fno-rtti`` disables the use of RTTI.
651
652C++11
653-----
654
655The features listed below are part of the C++11 standard. As a result, all
656these features are enabled with the ``-std=c++11`` or ``-std=gnu++11`` option
657when compiling C++ code.
658
659C++11 SFINAE includes access control
660^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
661
662Use ``__has_feature(cxx_access_control_sfinae)`` or
663``__has_extension(cxx_access_control_sfinae)`` to determine whether
664access-control errors (e.g., calling a private constructor) are considered to
665be template argument deduction errors (aka SFINAE errors), per `C++ DR1170
666<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1170>`_.
667
668C++11 alias templates
669^^^^^^^^^^^^^^^^^^^^^
670
671Use ``__has_feature(cxx_alias_templates)`` or
672``__has_extension(cxx_alias_templates)`` to determine if support for C++11's
673alias declarations and alias templates is enabled.
674
675C++11 alignment specifiers
676^^^^^^^^^^^^^^^^^^^^^^^^^^
677
678Use ``__has_feature(cxx_alignas)`` or ``__has_extension(cxx_alignas)`` to
679determine if support for alignment specifiers using ``alignas`` is enabled.
680
Nico Weber736a9932014-12-03 01:25:49 +0000681Use ``__has_feature(cxx_alignof)`` or ``__has_extension(cxx_alignof)`` to
682determine if support for the ``alignof`` keyword is enabled.
683
Sean Silva709c44d2012-12-12 23:44:55 +0000684C++11 attributes
685^^^^^^^^^^^^^^^^
686
687Use ``__has_feature(cxx_attributes)`` or ``__has_extension(cxx_attributes)`` to
688determine if support for attribute parsing with C++11's square bracket notation
689is enabled.
690
691C++11 generalized constant expressions
692^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
693
694Use ``__has_feature(cxx_constexpr)`` to determine if support for generalized
695constant expressions (e.g., ``constexpr``) is enabled.
696
697C++11 ``decltype()``
698^^^^^^^^^^^^^^^^^^^^
699
700Use ``__has_feature(cxx_decltype)`` or ``__has_extension(cxx_decltype)`` to
701determine if support for the ``decltype()`` specifier is enabled. C++11's
702``decltype`` does not require type-completeness of a function call expression.
703Use ``__has_feature(cxx_decltype_incomplete_return_types)`` or
704``__has_extension(cxx_decltype_incomplete_return_types)`` to determine if
705support for this feature is enabled.
706
707C++11 default template arguments in function templates
708^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
709
710Use ``__has_feature(cxx_default_function_template_args)`` or
711``__has_extension(cxx_default_function_template_args)`` to determine if support
712for default template arguments in function templates is enabled.
713
714C++11 ``default``\ ed functions
715^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
716
717Use ``__has_feature(cxx_defaulted_functions)`` or
718``__has_extension(cxx_defaulted_functions)`` to determine if support for
719defaulted function definitions (with ``= default``) is enabled.
720
721C++11 delegating constructors
722^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
723
724Use ``__has_feature(cxx_delegating_constructors)`` to determine if support for
725delegating constructors is enabled.
726
727C++11 ``deleted`` functions
728^^^^^^^^^^^^^^^^^^^^^^^^^^^
729
730Use ``__has_feature(cxx_deleted_functions)`` or
731``__has_extension(cxx_deleted_functions)`` to determine if support for deleted
732function definitions (with ``= delete``) is enabled.
733
734C++11 explicit conversion functions
735^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
736
737Use ``__has_feature(cxx_explicit_conversions)`` to determine if support for
738``explicit`` conversion functions is enabled.
739
740C++11 generalized initializers
741^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
742
743Use ``__has_feature(cxx_generalized_initializers)`` to determine if support for
744generalized initializers (using braced lists and ``std::initializer_list``) is
745enabled.
746
747C++11 implicit move constructors/assignment operators
748^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
749
750Use ``__has_feature(cxx_implicit_moves)`` to determine if Clang will implicitly
751generate move constructors and move assignment operators where needed.
752
753C++11 inheriting constructors
754^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
755
756Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
Richard Smith25b555a2013-04-19 17:00:31 +0000757inheriting constructors is enabled.
Sean Silva709c44d2012-12-12 23:44:55 +0000758
759C++11 inline namespaces
760^^^^^^^^^^^^^^^^^^^^^^^
761
762Use ``__has_feature(cxx_inline_namespaces)`` or
763``__has_extension(cxx_inline_namespaces)`` to determine if support for inline
764namespaces is enabled.
765
766C++11 lambdas
767^^^^^^^^^^^^^
768
769Use ``__has_feature(cxx_lambdas)`` or ``__has_extension(cxx_lambdas)`` to
770determine if support for lambdas is enabled.
771
772C++11 local and unnamed types as template arguments
773^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
774
775Use ``__has_feature(cxx_local_type_template_args)`` or
776``__has_extension(cxx_local_type_template_args)`` to determine if support for
777local and unnamed types as template arguments is enabled.
778
779C++11 noexcept
780^^^^^^^^^^^^^^
781
782Use ``__has_feature(cxx_noexcept)`` or ``__has_extension(cxx_noexcept)`` to
783determine if support for noexcept exception specifications is enabled.
784
785C++11 in-class non-static data member initialization
786^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
787
788Use ``__has_feature(cxx_nonstatic_member_init)`` to determine whether in-class
789initialization of non-static data members is enabled.
790
791C++11 ``nullptr``
792^^^^^^^^^^^^^^^^^
793
794Use ``__has_feature(cxx_nullptr)`` or ``__has_extension(cxx_nullptr)`` to
795determine if support for ``nullptr`` is enabled.
796
797C++11 ``override control``
798^^^^^^^^^^^^^^^^^^^^^^^^^^
799
800Use ``__has_feature(cxx_override_control)`` or
801``__has_extension(cxx_override_control)`` to determine if support for the
802override control keywords is enabled.
803
804C++11 reference-qualified functions
805^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
806
807Use ``__has_feature(cxx_reference_qualified_functions)`` or
808``__has_extension(cxx_reference_qualified_functions)`` to determine if support
809for reference-qualified functions (e.g., member functions with ``&`` or ``&&``
810applied to ``*this``) is enabled.
811
812C++11 range-based ``for`` loop
813^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
814
815Use ``__has_feature(cxx_range_for)`` or ``__has_extension(cxx_range_for)`` to
816determine if support for the range-based for loop is enabled.
817
818C++11 raw string literals
819^^^^^^^^^^^^^^^^^^^^^^^^^
820
821Use ``__has_feature(cxx_raw_string_literals)`` to determine if support for raw
822string literals (e.g., ``R"x(foo\bar)x"``) is enabled.
823
824C++11 rvalue references
825^^^^^^^^^^^^^^^^^^^^^^^
826
827Use ``__has_feature(cxx_rvalue_references)`` or
828``__has_extension(cxx_rvalue_references)`` to determine if support for rvalue
829references is enabled.
830
831C++11 ``static_assert()``
832^^^^^^^^^^^^^^^^^^^^^^^^^
833
834Use ``__has_feature(cxx_static_assert)`` or
835``__has_extension(cxx_static_assert)`` to determine if support for compile-time
836assertions using ``static_assert`` is enabled.
837
Richard Smith25b555a2013-04-19 17:00:31 +0000838C++11 ``thread_local``
839^^^^^^^^^^^^^^^^^^^^^^
840
841Use ``__has_feature(cxx_thread_local)`` to determine if support for
842``thread_local`` variables is enabled.
843
Sean Silva709c44d2012-12-12 23:44:55 +0000844C++11 type inference
845^^^^^^^^^^^^^^^^^^^^
846
847Use ``__has_feature(cxx_auto_type)`` or ``__has_extension(cxx_auto_type)`` to
848determine C++11 type inference is supported using the ``auto`` specifier. If
849this is disabled, ``auto`` will instead be a storage class specifier, as in C
850or C++98.
851
852C++11 strongly typed enumerations
853^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
854
855Use ``__has_feature(cxx_strong_enums)`` or
856``__has_extension(cxx_strong_enums)`` to determine if support for strongly
857typed, scoped enumerations is enabled.
858
859C++11 trailing return type
860^^^^^^^^^^^^^^^^^^^^^^^^^^
861
862Use ``__has_feature(cxx_trailing_return)`` or
863``__has_extension(cxx_trailing_return)`` to determine if support for the
864alternate function declaration syntax with trailing return type is enabled.
865
866C++11 Unicode string literals
867^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
868
869Use ``__has_feature(cxx_unicode_literals)`` to determine if support for Unicode
870string literals is enabled.
871
872C++11 unrestricted unions
873^^^^^^^^^^^^^^^^^^^^^^^^^
874
875Use ``__has_feature(cxx_unrestricted_unions)`` to determine if support for
876unrestricted unions is enabled.
877
878C++11 user-defined literals
879^^^^^^^^^^^^^^^^^^^^^^^^^^^
880
881Use ``__has_feature(cxx_user_literals)`` to determine if support for
882user-defined literals is enabled.
883
884C++11 variadic templates
885^^^^^^^^^^^^^^^^^^^^^^^^
886
887Use ``__has_feature(cxx_variadic_templates)`` or
888``__has_extension(cxx_variadic_templates)`` to determine if support for
889variadic templates is enabled.
890
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000891C++14
Richard Smith0a715422013-05-07 19:32:56 +0000892-----
893
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000894The features listed below are part of the C++14 standard. As a result, all
895these features are enabled with the ``-std=C++14`` or ``-std=gnu++14`` option
896when compiling C++ code.
Richard Smith0a715422013-05-07 19:32:56 +0000897
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000898C++14 binary literals
Richard Smith0a715422013-05-07 19:32:56 +0000899^^^^^^^^^^^^^^^^^^^^^
900
901Use ``__has_feature(cxx_binary_literals)`` or
902``__has_extension(cxx_binary_literals)`` to determine whether
903binary literals (for instance, ``0b10010``) are recognized. Clang supports this
904feature as an extension in all language modes.
905
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000906C++14 contextual conversions
Richard Smith0a715422013-05-07 19:32:56 +0000907^^^^^^^^^^^^^^^^^^^^^^^^^^^^
908
909Use ``__has_feature(cxx_contextual_conversions)`` or
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000910``__has_extension(cxx_contextual_conversions)`` to determine if the C++14 rules
Richard Smith0a715422013-05-07 19:32:56 +0000911are used when performing an implicit conversion for an array bound in a
912*new-expression*, the operand of a *delete-expression*, an integral constant
Richard Smithc0f7b812013-07-24 17:41:31 +0000913expression, or a condition in a ``switch`` statement.
Richard Smith0a715422013-05-07 19:32:56 +0000914
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000915C++14 decltype(auto)
Richard Smith0a715422013-05-07 19:32:56 +0000916^^^^^^^^^^^^^^^^^^^^
917
918Use ``__has_feature(cxx_decltype_auto)`` or
919``__has_extension(cxx_decltype_auto)`` to determine if support
920for the ``decltype(auto)`` placeholder type is enabled.
921
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000922C++14 default initializers for aggregates
Richard Smith0a715422013-05-07 19:32:56 +0000923^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
924
925Use ``__has_feature(cxx_aggregate_nsdmi)`` or
926``__has_extension(cxx_aggregate_nsdmi)`` to determine if support
927for default initializers in aggregate members is enabled.
928
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000929C++14 digit separators
Richard Smith38af8562014-11-12 21:16:38 +0000930^^^^^^^^^^^^^^^^^^^^^^
931
932Use ``__cpp_digit_separators`` to determine if support for digit separators
933using single quotes (for instance, ``10'000``) is enabled. At this time, there
934is no corresponding ``__has_feature`` name
935
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000936C++14 generalized lambda capture
Richard Smith0a715422013-05-07 19:32:56 +0000937^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
938
Richard Smith6d540142014-05-09 21:08:59 +0000939Use ``__has_feature(cxx_init_captures)`` or
940``__has_extension(cxx_init_captures)`` to determine if support for
Richard Smith4fb09722013-07-24 17:51:13 +0000941lambda captures with explicit initializers is enabled
Richard Smith0a715422013-05-07 19:32:56 +0000942(for instance, ``[n(0)] { return ++n; }``).
Richard Smith0a715422013-05-07 19:32:56 +0000943
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000944C++14 generic lambdas
Richard Smith0a715422013-05-07 19:32:56 +0000945^^^^^^^^^^^^^^^^^^^^^
946
Richard Smith6d540142014-05-09 21:08:59 +0000947Use ``__has_feature(cxx_generic_lambdas)`` or
948``__has_extension(cxx_generic_lambdas)`` to determine if support for generic
Richard Smith0a715422013-05-07 19:32:56 +0000949(polymorphic) lambdas is enabled
950(for instance, ``[] (auto x) { return x + 1; }``).
Richard Smith0a715422013-05-07 19:32:56 +0000951
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000952C++14 relaxed constexpr
Richard Smith0a715422013-05-07 19:32:56 +0000953^^^^^^^^^^^^^^^^^^^^^^^
954
955Use ``__has_feature(cxx_relaxed_constexpr)`` or
956``__has_extension(cxx_relaxed_constexpr)`` to determine if variable
957declarations, local variable modification, and control flow constructs
958are permitted in ``constexpr`` functions.
Richard Smith0a715422013-05-07 19:32:56 +0000959
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000960C++14 return type deduction
Richard Smith0a715422013-05-07 19:32:56 +0000961^^^^^^^^^^^^^^^^^^^^^^^^^^^
962
963Use ``__has_feature(cxx_return_type_deduction)`` or
964``__has_extension(cxx_return_type_deduction)`` to determine if support
965for return type deduction for functions (using ``auto`` as a return type)
966is enabled.
Richard Smith0a715422013-05-07 19:32:56 +0000967
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000968C++14 runtime-sized arrays
Richard Smith0a715422013-05-07 19:32:56 +0000969^^^^^^^^^^^^^^^^^^^^^^^^^^
970
971Use ``__has_feature(cxx_runtime_array)`` or
972``__has_extension(cxx_runtime_array)`` to determine if support
973for arrays of runtime bound (a restricted form of variable-length arrays)
974is enabled.
975Clang's implementation of this feature is incomplete.
976
Eric Fiselierd3ff21c2017-05-06 23:26:04 +0000977C++14 variable templates
Richard Smith0a715422013-05-07 19:32:56 +0000978^^^^^^^^^^^^^^^^^^^^^^^^
979
980Use ``__has_feature(cxx_variable_templates)`` or
981``__has_extension(cxx_variable_templates)`` to determine if support for
982templated variable declarations is enabled.
Richard Smith0a715422013-05-07 19:32:56 +0000983
Sean Silva709c44d2012-12-12 23:44:55 +0000984C11
985---
986
987The features listed below are part of the C11 standard. As a result, all these
988features are enabled with the ``-std=c11`` or ``-std=gnu11`` option when
989compiling C code. Additionally, because these features are all
990backward-compatible, they are available as extensions in all language modes.
991
992C11 alignment specifiers
993^^^^^^^^^^^^^^^^^^^^^^^^
994
995Use ``__has_feature(c_alignas)`` or ``__has_extension(c_alignas)`` to determine
996if support for alignment specifiers using ``_Alignas`` is enabled.
997
Nico Weber736a9932014-12-03 01:25:49 +0000998Use ``__has_feature(c_alignof)`` or ``__has_extension(c_alignof)`` to determine
999if support for the ``_Alignof`` keyword is enabled.
1000
Sean Silva709c44d2012-12-12 23:44:55 +00001001C11 atomic operations
1002^^^^^^^^^^^^^^^^^^^^^
1003
1004Use ``__has_feature(c_atomic)`` or ``__has_extension(c_atomic)`` to determine
1005if support for atomic types using ``_Atomic`` is enabled. Clang also provides
1006:ref:`a set of builtins <langext-__c11_atomic>` which can be used to implement
Hal Finkel6970ac82014-10-03 04:29:40 +00001007the ``<stdatomic.h>`` operations on ``_Atomic`` types. Use
1008``__has_include(<stdatomic.h>)`` to determine if C11's ``<stdatomic.h>`` header
1009is available.
1010
1011Clang will use the system's ``<stdatomic.h>`` header when one is available, and
1012will otherwise use its own. When using its own, implementations of the atomic
1013operations are provided as macros. In the cases where C11 also requires a real
1014function, this header provides only the declaration of that function (along
1015with a shadowing macro implementation), and you must link to a library which
1016provides a definition of the function if you use it instead of the macro.
Sean Silva709c44d2012-12-12 23:44:55 +00001017
1018C11 generic selections
1019^^^^^^^^^^^^^^^^^^^^^^
1020
1021Use ``__has_feature(c_generic_selections)`` or
1022``__has_extension(c_generic_selections)`` to determine if support for generic
1023selections is enabled.
1024
1025As an extension, the C11 generic selection expression is available in all
1026languages supported by Clang. The syntax is the same as that given in the C11
1027standard.
1028
1029In C, type compatibility is decided according to the rules given in the
1030appropriate standard, but in C++, which lacks the type compatibility rules used
1031in C, types are considered compatible only if they are equivalent.
1032
1033C11 ``_Static_assert()``
1034^^^^^^^^^^^^^^^^^^^^^^^^
1035
1036Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
1037to determine if support for compile-time assertions using ``_Static_assert`` is
1038enabled.
1039
Richard Smith25b555a2013-04-19 17:00:31 +00001040C11 ``_Thread_local``
1041^^^^^^^^^^^^^^^^^^^^^
1042
Ed Schouten401aeba2013-09-14 16:17:20 +00001043Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)``
1044to determine if support for ``_Thread_local`` variables is enabled.
Richard Smith25b555a2013-04-19 17:00:31 +00001045
Ben Langmuir921f2e62015-03-10 14:39:26 +00001046Modules
1047-------
1048
1049Use ``__has_feature(modules)`` to determine if Modules have been enabled.
1050For example, compiling code with ``-fmodules`` enables the use of Modules.
1051
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00001052More information could be found `here <https://clang.llvm.org/docs/Modules.html>`_.
Ben Langmuir921f2e62015-03-10 14:39:26 +00001053
Richard Smithdac3ea42019-08-14 02:30:11 +00001054Type Trait Primitives
1055=====================
Alp Toker64197b92014-01-18 21:49:02 +00001056
1057Type trait primitives are special builtin constant expressions that can be used
1058by the standard C++ library to facilitate or simplify the implementation of
1059user-facing type traits in the <type_traits> header.
1060
1061They are not intended to be used directly by user code because they are
1062implementation-defined and subject to change -- as such they're tied closely to
1063the supported set of system headers, currently:
1064
1065* LLVM's own libc++
1066* GNU libstdc++
1067* The Microsoft standard C++ library
Sean Silva709c44d2012-12-12 23:44:55 +00001068
1069Clang supports the `GNU C++ type traits
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +00001070<https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html>`_ and a subset of the
Richard Smithdac3ea42019-08-14 02:30:11 +00001071`Microsoft Visual C++ type traits
1072<https://msdn.microsoft.com/en-us/library/ms177194(v=VS.100).aspx>`_,
1073as well as nearly all of the
1074`Embarcadero C++ type traits
1075<http://docwiki.embarcadero.com/RADStudio/Rio/en/Type_Trait_Functions_(C%2B%2B11)_Index>`_.
Alp Toker64197b92014-01-18 21:49:02 +00001076
Richard Smithdac3ea42019-08-14 02:30:11 +00001077The following type trait primitives are supported by Clang. Those traits marked
1078(C++) provide implementations for type traits specified by the C++ standard;
1079``__X(...)`` has the same semantics and constraints as the corresponding
1080``std::X_t<...>`` or ``std::X_v<...>`` type trait.
Alp Toker64197b92014-01-18 21:49:02 +00001081
Richard Smithdac3ea42019-08-14 02:30:11 +00001082* ``__array_rank(type)`` (Embarcadero):
1083 Returns the number of levels of array in the type ``type``:
1084 ``0`` if ``type`` is not an array type, and
1085 ``__array_rank(element) + 1`` if ``type`` is an array of ``element``.
1086* ``__array_extent(type, dim)`` (Embarcadero):
1087 The ``dim``'th array bound in the type ``type``, or ``0`` if
1088 ``dim >= __array_rank(type)``.
1089* ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero):
1090 Deprecated, use ``__is_nothrow_assignable`` instead.
1091* ``__has_nothrow_move_assign`` (GNU, Microsoft):
1092 Deprecated, use ``__is_nothrow_assignable`` instead.
1093* ``__has_nothrow_copy`` (GNU, Microsoft):
1094 Deprecated, use ``__is_nothrow_constructible`` instead.
1095* ``__has_nothrow_constructor`` (GNU, Microsoft):
1096 Deprecated, use ``__is_nothrow_constructible`` instead.
1097* ``__has_trivial_assign`` (GNU, Microsoft, Embarcadero):
1098 Deprecated, use ``__is_trivially_assignable`` instead.
1099* ``__has_trivial_move_assign`` (GNU, Microsoft):
1100 Deprecated, use ``__is_trivially_assignable`` instead.
1101* ``__has_trivial_copy`` (GNU, Microsoft):
1102 Deprecated, use ``__is_trivially_constructible`` instead.
1103* ``__has_trivial_constructor`` (GNU, Microsoft):
1104 Deprecated, use ``__is_trivially_constructible`` instead.
1105* ``__has_trivial_move_constructor`` (GNU, Microsoft):
1106 Deprecated, use ``__is_trivially_constructible`` instead.
1107* ``__has_trivial_destructor`` (GNU, Microsoft, Embarcadero):
1108 Deprecated, use ``__is_trivially_destructible`` instead.
1109* ``__has_unique_object_representations`` (C++, GNU)
1110* ``__has_virtual_destructor`` (C++, GNU, Microsoft, Embarcadero)
1111* ``__is_abstract`` (C++, GNU, Microsoft, Embarcadero)
1112* ``__is_aggregate`` (C++, GNU, Microsoft)
1113* ``__is_arithmetic`` (C++, Embarcadero)
1114* ``__is_array`` (C++, Embarcadero)
1115* ``__is_assignable`` (C++, MSVC 2015)
1116* ``__is_base_of`` (C++, GNU, Microsoft, Embarcadero)
1117* ``__is_class`` (C++, GNU, Microsoft, Embarcadero)
1118* ``__is_complete_type(type)`` (Embarcadero):
1119 Return ``true`` if ``type`` is a complete type.
1120 Warning: this trait is dangerous because it can return different values at
1121 different points in the same program.
1122* ``__is_compound`` (C++, Embarcadero)
1123* ``__is_const`` (C++, Embarcadero)
1124* ``__is_constructible`` (C++, MSVC 2013)
1125* ``__is_convertible`` (C++, Embarcadero)
1126* ``__is_convertible_to`` (Microsoft):
1127 Synonym for ``__is_convertible``.
1128* ``__is_destructible`` (C++, MSVC 2013):
1129 Only available in ``-fms-extensions`` mode.
1130* ``__is_empty`` (C++, GNU, Microsoft, Embarcadero)
1131* ``__is_enum`` (C++, GNU, Microsoft, Embarcadero)
1132* ``__is_final`` (C++, GNU, Microsoft)
1133* ``__is_floating_point`` (C++, Embarcadero)
1134* ``__is_function`` (C++, Embarcadero)
1135* ``__is_fundamental`` (C++, Embarcadero)
1136* ``__is_integral`` (C++, Embarcadero)
1137* ``__is_interface_class`` (Microsoft):
1138 Returns ``false``, even for types defined with ``__interface``.
1139* ``__is_literal`` (Clang):
1140 Synonym for ``__is_literal_type``.
1141* ``__is_literal_type`` (C++, GNU, Microsoft):
1142 Note, the corresponding standard trait was deprecated in C++17
1143 and removed in C++20.
1144* ``__is_lvalue_reference`` (C++, Embarcadero)
1145* ``__is_member_object_pointer`` (C++, Embarcadero)
1146* ``__is_member_function_pointer`` (C++, Embarcadero)
1147* ``__is_member_pointer`` (C++, Embarcadero)
1148* ``__is_nothrow_assignable`` (C++, MSVC 2013)
1149* ``__is_nothrow_constructible`` (C++, MSVC 2013)
1150* ``__is_nothrow_destructible`` (C++, MSVC 2013)
1151 Only available in ``-fms-extensions`` mode.
1152* ``__is_object`` (C++, Embarcadero)
1153* ``__is_pod`` (C++, GNU, Microsoft, Embarcadero):
1154 Note, the corresponding standard trait was deprecated in C++20.
1155* ``__is_pointer`` (C++, Embarcadero)
1156* ``__is_polymorphic`` (C++, GNU, Microsoft, Embarcadero)
1157* ``__is_reference`` (C++, Embarcadero)
1158* ``__is_rvalue_reference`` (C++, Embarcadero)
1159* ``__is_same`` (C++, Embarcadero)
1160* ``__is_scalar`` (C++, Embarcadero)
1161* ``__is_sealed`` (Microsoft):
1162 Synonym for ``__is_final``.
1163* ``__is_signed`` (C++, Embarcadero):
1164 Note that this currently returns true for enumeration types if the underlying
1165 type is signed, and returns false for floating-point types, in violation of
1166 the requirements for ``std::is_signed``. This behavior is likely to change in
1167 a future version of Clang.
1168* ``__is_standard_layout`` (C++, GNU, Microsoft, Embarcadero)
1169* ``__is_trivial`` (C++, GNU, Microsoft, Embarcadero)
1170* ``__is_trivially_assignable`` (C++, GNU, Microsoft)
1171* ``__is_trivially_constructible`` (C++, GNU, Microsoft)
1172* ``__is_trivially_copyable`` (C++, GNU, Microsoft)
1173* ``__is_trivially_destructible`` (C++, MSVC 2013)
1174* ``__is_union`` (C++, GNU, Microsoft, Embarcadero)
1175* ``__is_unsigned`` (C++, Embarcadero)
1176 Note that this currently returns true for enumeration types if the underlying
1177 type is unsigned, in violation of the requirements for ``std::is_unsigned``.
1178 This behavior is likely to change in a future version of Clang.
1179* ``__is_void`` (C++, Embarcadero)
1180* ``__is_volatile`` (C++, Embarcadero)
1181* ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a
1182 reference of type ``T`` bound to an expression of type ``U`` would bind to a
1183 materialized temporary object. If ``T`` is not a reference type the result
1184 is false. Note this trait will also return false when the initialization of
1185 ``T`` from ``U`` is ill-formed.
1186* ``__underlying_type`` (C++, GNU, Microsoft)
1187
1188In addition, the following expression traits are supported:
1189
1190* ``__is_lvalue_expr(e)`` (Embarcadero):
1191 Returns true if ``e`` is an lvalue expression.
1192 Deprecated, use ``__is_lvalue_reference(decltype((e)))`` instead.
1193* ``__is_rvalue_expr(e)`` (Embarcadero):
1194 Returns true if ``e`` is a prvalue expression.
1195 Deprecated, use ``!__is_reference(decltype((e)))`` instead.
1196
1197There are multiple ways to detect support for a type trait ``__X`` in the
1198compiler, depending on the oldest version of Clang you wish to support.
1199
1200* From Clang 10 onwards, ``__has_builtin(__X)`` can be used.
1201* From Clang 6 onwards, ``!__is_identifier(__X)`` can be used.
1202* From Clang 3 onwards, ``__has_feature(X)`` can be used, but only supports
1203 the following traits:
1204
1205 * ``__has_nothrow_assign``
1206 * ``__has_nothrow_copy``
1207 * ``__has_nothrow_constructor``
1208 * ``__has_trivial_assign``
1209 * ``__has_trivial_copy``
1210 * ``__has_trivial_constructor``
1211 * ``__has_trivial_destructor``
1212 * ``__has_virtual_destructor``
1213 * ``__is_abstract``
1214 * ``__is_base_of``
1215 * ``__is_class``
1216 * ``__is_constructible``
1217 * ``__is_convertible_to``
1218 * ``__is_empty``
1219 * ``__is_enum``
1220 * ``__is_final``
1221 * ``__is_literal``
1222 * ``__is_standard_layout``
1223 * ``__is_pod``
1224 * ``__is_polymorphic``
1225 * ``__is_sealed``
1226 * ``__is_trivial``
1227 * ``__is_trivially_assignable``
1228 * ``__is_trivially_constructible``
1229 * ``__is_trivially_copyable``
1230 * ``__is_union``
1231 * ``__underlying_type``
1232
1233A simplistic usage example as might be seen in standard C++ headers follows:
Sean Silva709c44d2012-12-12 23:44:55 +00001234
1235.. code-block:: c++
1236
Richard Smithdac3ea42019-08-14 02:30:11 +00001237 #if __has_builtin(__is_convertible_to)
Sean Silva709c44d2012-12-12 23:44:55 +00001238 template<typename From, typename To>
1239 struct is_convertible_to {
1240 static const bool value = __is_convertible_to(From, To);
1241 };
1242 #else
Alp Toker64197b92014-01-18 21:49:02 +00001243 // Emulate type trait for compatibility with other compilers.
Sean Silva709c44d2012-12-12 23:44:55 +00001244 #endif
1245
Sean Silva709c44d2012-12-12 23:44:55 +00001246Blocks
1247======
1248
1249The syntax and high level language feature description is in
Michael Gottesman6fd58462013-01-07 22:24:45 +00001250:doc:`BlockLanguageSpec<BlockLanguageSpec>`. Implementation and ABI details for
1251the clang implementation are in :doc:`Block-ABI-Apple<Block-ABI-Apple>`.
Sean Silva709c44d2012-12-12 23:44:55 +00001252
1253Query for this feature with ``__has_extension(blocks)``.
1254
1255Objective-C Features
1256====================
1257
1258Related result types
1259--------------------
1260
1261According to Cocoa conventions, Objective-C methods with certain names
1262("``init``", "``alloc``", etc.) always return objects that are an instance of
1263the receiving class's type. Such methods are said to have a "related result
1264type", meaning that a message send to one of these methods will have the same
1265static type as an instance of the receiver class. For example, given the
1266following classes:
1267
1268.. code-block:: objc
1269
1270 @interface NSObject
1271 + (id)alloc;
1272 - (id)init;
1273 @end
1274
1275 @interface NSArray : NSObject
1276 @end
1277
1278and this common initialization pattern
1279
1280.. code-block:: objc
1281
1282 NSArray *array = [[NSArray alloc] init];
1283
1284the type of the expression ``[NSArray alloc]`` is ``NSArray*`` because
1285``alloc`` implicitly has a related result type. Similarly, the type of the
1286expression ``[[NSArray alloc] init]`` is ``NSArray*``, since ``init`` has a
1287related result type and its receiver is known to have the type ``NSArray *``.
1288If neither ``alloc`` nor ``init`` had a related result type, the expressions
1289would have had type ``id``, as declared in the method signature.
1290
1291A method with a related result type can be declared by using the type
1292``instancetype`` as its result type. ``instancetype`` is a contextual keyword
1293that is only permitted in the result type of an Objective-C method, e.g.
1294
1295.. code-block:: objc
1296
1297 @interface A
1298 + (instancetype)constructAnA;
1299 @end
1300
1301The related result type can also be inferred for some methods. To determine
1302whether a method has an inferred related result type, the first word in the
1303camel-case selector (e.g., "``init``" in "``initWithObjects``") is considered,
1304and the method will have a related result type if its return type is compatible
1305with the type of its class and if:
1306
1307* the first word is "``alloc``" or "``new``", and the method is a class method,
1308 or
1309
1310* the first word is "``autorelease``", "``init``", "``retain``", or "``self``",
1311 and the method is an instance method.
1312
1313If a method with a related result type is overridden by a subclass method, the
1314subclass method must also return a type that is compatible with the subclass
1315type. For example:
1316
1317.. code-block:: objc
1318
1319 @interface NSString : NSObject
1320 - (NSUnrelated *)init; // incorrect usage: NSUnrelated is not NSString or a superclass of NSString
1321 @end
1322
1323Related result types only affect the type of a message send or property access
1324via the given method. In all other respects, a method with a related result
1325type is treated the same way as method that returns ``id``.
1326
1327Use ``__has_feature(objc_instancetype)`` to determine whether the
1328``instancetype`` contextual keyword is available.
1329
1330Automatic reference counting
1331----------------------------
1332
Sean Silva173d2522013-01-02 13:07:47 +00001333Clang provides support for :doc:`automated reference counting
1334<AutomaticReferenceCounting>` in Objective-C, which eliminates the need
Akira Hatanaka7275da02018-02-28 07:15:55 +00001335for manual ``retain``/``release``/``autorelease`` message sends. There are three
Sean Silva709c44d2012-12-12 23:44:55 +00001336feature macros associated with automatic reference counting:
1337``__has_feature(objc_arc)`` indicates the availability of automated reference
1338counting in general, while ``__has_feature(objc_arc_weak)`` indicates that
1339automated reference counting also includes support for ``__weak`` pointers to
Akira Hatanaka7275da02018-02-28 07:15:55 +00001340Objective-C objects. ``__has_feature(objc_arc_fields)`` indicates that C structs
1341are allowed to have fields that are pointers to Objective-C objects managed by
1342automatic reference counting.
Sean Silva709c44d2012-12-12 23:44:55 +00001343
John McCallea9c5802018-07-20 05:40:12 +00001344.. _objc-weak:
1345
1346Weak references
1347---------------
1348
1349Clang supports ARC-style weak and unsafe references in Objective-C even
1350outside of ARC mode. Weak references must be explicitly enabled with
1351the ``-fobjc-weak`` option; use ``__has_feature((objc_arc_weak))``
1352to test whether they are enabled. Unsafe references are enabled
1353unconditionally. ARC-style weak and unsafe references cannot be used
1354when Objective-C garbage collection is enabled.
1355
1356Except as noted below, the language rules for the ``__weak`` and
1357``__unsafe_unretained`` qualifiers (and the ``weak`` and
1358``unsafe_unretained`` property attributes) are just as laid out
1359in the :doc:`ARC specification <AutomaticReferenceCounting>`.
1360In particular, note that some classes do not support forming weak
1361references to their instances, and note that special care must be
1362taken when storing weak references in memory where initialization
1363and deinitialization are outside the responsibility of the compiler
1364(such as in ``malloc``-ed memory).
1365
1366Loading from a ``__weak`` variable always implicitly retains the
1367loaded value. In non-ARC modes, this retain is normally balanced
1368by an implicit autorelease. This autorelease can be suppressed
1369by performing the load in the receiver position of a ``-retain``
1370message send (e.g. ``[weakReference retain]``); note that this performs
1371only a single retain (the retain done when primitively loading from
1372the weak reference).
1373
1374For the most part, ``__unsafe_unretained`` in non-ARC modes is just the
1375default behavior of variables and therefore is not needed. However,
1376it does have an effect on the semantics of block captures: normally,
1377copying a block which captures an Objective-C object or block pointer
1378causes the captured pointer to be retained or copied, respectively,
1379but that behavior is suppressed when the captured variable is qualified
1380with ``__unsafe_unretained``.
1381
1382Note that the ``__weak`` qualifier formerly meant the GC qualifier in
1383all non-ARC modes and was silently ignored outside of GC modes. It now
1384means the ARC-style qualifier in all non-GC modes and is no longer
1385allowed if not enabled by either ``-fobjc-arc`` or ``-fobjc-weak``.
1386It is expected that ``-fobjc-weak`` will eventually be enabled by default
1387in all non-GC Objective-C modes.
1388
Sean Silva173d2522013-01-02 13:07:47 +00001389.. _objc-fixed-enum:
1390
Sean Silva709c44d2012-12-12 23:44:55 +00001391Enumerations with a fixed underlying type
1392-----------------------------------------
1393
1394Clang provides support for C++11 enumerations with a fixed underlying type
1395within Objective-C. For example, one can write an enumeration type as:
1396
1397.. code-block:: c++
1398
1399 typedef enum : unsigned char { Red, Green, Blue } Color;
1400
1401This specifies that the underlying type, which is used to store the enumeration
1402value, is ``unsigned char``.
1403
1404Use ``__has_feature(objc_fixed_enum)`` to determine whether support for fixed
1405underlying types is available in Objective-C.
1406
1407Interoperability with C++11 lambdas
1408-----------------------------------
1409
1410Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
1411permitting a lambda to be implicitly converted to a block pointer with the
1412corresponding signature. For example, consider an API such as ``NSArray``'s
1413array-sorting method:
1414
1415.. code-block:: objc
1416
1417 - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;
1418
1419``NSComparator`` is simply a typedef for the block pointer ``NSComparisonResult
1420(^)(id, id)``, and parameters of this type are generally provided with block
1421literals as arguments. However, one can also use a C++11 lambda so long as it
1422provides the same signature (in this case, accepting two parameters of type
1423``id`` and returning an ``NSComparisonResult``):
1424
1425.. code-block:: objc
1426
1427 NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
1428 @"String 02"];
1429 const NSStringCompareOptions comparisonOptions
1430 = NSCaseInsensitiveSearch | NSNumericSearch |
1431 NSWidthInsensitiveSearch | NSForcedOrderingSearch;
1432 NSLocale *currentLocale = [NSLocale currentLocale];
1433 NSArray *sorted
1434 = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
1435 NSRange string1Range = NSMakeRange(0, [s1 length]);
1436 return [s1 compare:s2 options:comparisonOptions
1437 range:string1Range locale:currentLocale];
1438 }];
1439 NSLog(@"sorted: %@", sorted);
1440
1441This code relies on an implicit conversion from the type of the lambda
1442expression (an unnamed, local class type called the *closure type*) to the
1443corresponding block pointer type. The conversion itself is expressed by a
1444conversion operator in that closure type that produces a block pointer with the
1445same signature as the lambda itself, e.g.,
1446
1447.. code-block:: objc
1448
1449 operator NSComparisonResult (^)(id, id)() const;
1450
1451This conversion function returns a new block that simply forwards the two
1452parameters to the lambda object (which it captures by copy), then returns the
1453result. The returned block is first copied (with ``Block_copy``) and then
1454autoreleased. As an optimization, if a lambda expression is immediately
1455converted to a block pointer (as in the first example, above), then the block
1456is not copied and autoreleased: rather, it is given the same lifetime as a
1457block literal written at that point in the program, which avoids the overhead
1458of copying a block to the heap in the common case.
1459
1460The conversion from a lambda to a block pointer is only available in
1461Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
1462management (autorelease).
1463
1464Object Literals and Subscripting
1465--------------------------------
1466
Sean Silva173d2522013-01-02 13:07:47 +00001467Clang provides support for :doc:`Object Literals and Subscripting
1468<ObjectiveCLiterals>` in Objective-C, which simplifies common Objective-C
Sean Silva709c44d2012-12-12 23:44:55 +00001469programming patterns, makes programs more concise, and improves the safety of
1470container creation. There are several feature macros associated with object
1471literals and subscripting: ``__has_feature(objc_array_literals)`` tests the
1472availability of array literals; ``__has_feature(objc_dictionary_literals)``
1473tests the availability of dictionary literals;
1474``__has_feature(objc_subscripting)`` tests the availability of object
1475subscripting.
1476
1477Objective-C Autosynthesis of Properties
1478---------------------------------------
1479
1480Clang provides support for autosynthesis of declared properties. Using this
1481feature, clang provides default synthesis of those properties not declared
1482@dynamic and not having user provided backing getter and setter methods.
1483``__has_feature(objc_default_synthesize_properties)`` checks for availability
1484of this feature in version of clang being used.
1485
Jordan Rose32e94892012-12-15 00:37:01 +00001486.. _langext-objc-retain-release:
1487
1488Objective-C retaining behavior attributes
1489-----------------------------------------
1490
1491In Objective-C, functions and methods are generally assumed to follow the
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00001492`Cocoa Memory Management
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +00001493<https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html>`_
Jordan Rose32e94892012-12-15 00:37:01 +00001494conventions for ownership of object arguments and
1495return values. However, there are exceptions, and so Clang provides attributes
1496to allow these exceptions to be documented. This are used by ARC and the
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00001497`static analyzer <https://clang-analyzer.llvm.org>`_ Some exceptions may be
Aaron Ballman840cef32014-02-19 15:45:13 +00001498better described using the ``objc_method_family`` attribute instead.
Jordan Rose32e94892012-12-15 00:37:01 +00001499
1500**Usage**: The ``ns_returns_retained``, ``ns_returns_not_retained``,
1501``ns_returns_autoreleased``, ``cf_returns_retained``, and
1502``cf_returns_not_retained`` attributes can be placed on methods and functions
1503that return Objective-C or CoreFoundation objects. They are commonly placed at
1504the end of a function prototype or method declaration:
1505
1506.. code-block:: objc
1507
1508 id foo() __attribute__((ns_returns_retained));
1509
1510 - (NSString *)bar:(int)x __attribute__((ns_returns_retained));
1511
1512The ``*_returns_retained`` attributes specify that the returned object has a +1
1513retain count. The ``*_returns_not_retained`` attributes specify that the return
1514object has a +0 retain count, even if the normal convention for its selector
1515would be +1. ``ns_returns_autoreleased`` specifies that the returned object is
1516+0, but is guaranteed to live at least as long as the next flush of an
1517autorelease pool.
1518
1519**Usage**: The ``ns_consumed`` and ``cf_consumed`` attributes can be placed on
1520an parameter declaration; they specify that the argument is expected to have a
1521+1 retain count, which will be balanced in some way by the function or method.
1522The ``ns_consumes_self`` attribute can only be placed on an Objective-C
1523method; it specifies that the method expects its ``self`` parameter to have a
1524+1 retain count, which it will balance in some way.
1525
1526.. code-block:: objc
1527
1528 void foo(__attribute__((ns_consumed)) NSString *string);
1529
1530 - (void) bar __attribute__((ns_consumes_self));
1531 - (void) baz:(id) __attribute__((ns_consumed)) x;
1532
1533Further examples of these attributes are available in the static analyzer's `list of annotations for analysis
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00001534<https://clang-analyzer.llvm.org/annotations.html#cocoa_mem>`_.
Jordan Rose32e94892012-12-15 00:37:01 +00001535
1536Query for these features with ``__has_attribute(ns_consumed)``,
1537``__has_attribute(ns_returns_retained)``, etc.
1538
Nico Weber11cafc82017-07-14 18:40:52 +00001539Objective-C @available
1540----------------------
1541
1542It is possible to use the newest SDK but still build a program that can run on
Nico Weber564004a2017-07-14 18:52:30 +00001543older versions of macOS and iOS by passing ``-mmacosx-version-min=`` /
1544``-miphoneos-version-min=``.
Nico Weber11cafc82017-07-14 18:40:52 +00001545
1546Before LLVM 5.0, when calling a function that exists only in the OS that's
1547newer than the target OS (as determined by the minimum deployment version),
1548programmers had to carefully check if the function exists at runtime, using
1549null checks for weakly-linked C functions, ``+class`` for Objective-C classes,
1550and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
1551Objective-C methods. If such a check was missed, the program would compile
1552fine, run fine on newer systems, but crash on older systems.
1553
1554As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability attributes
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00001555<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ together
Nico Weber11cafc82017-07-14 18:40:52 +00001556with the new ``@available()`` keyword to assist with this issue.
1557When a method that's introduced in the OS newer than the target OS is called, a
1558-Wunguarded-availability warning is emitted if that call is not guarded:
1559
1560.. code-block:: objc
1561
1562 void my_fun(NSSomeClass* var) {
1563 // If fancyNewMethod was added in e.g. macOS 10.12, but the code is
1564 // built with -mmacosx-version-min=10.11, then this unconditional call
1565 // will emit a -Wunguarded-availability warning:
1566 [var fancyNewMethod];
1567 }
1568
1569To fix the warning and to avoid the crash on macOS 10.11, wrap it in
1570``if(@available())``:
1571
1572.. code-block:: objc
1573
1574 void my_fun(NSSomeClass* var) {
1575 if (@available(macOS 10.12, *)) {
1576 [var fancyNewMethod];
1577 } else {
1578 // Put fallback behavior for old macOS versions (and for non-mac
1579 // platforms) here.
1580 }
1581 }
1582
1583The ``*`` is required and means that platforms not explicitly listed will take
1584the true branch, and the compiler will emit ``-Wunguarded-availability``
1585warnings for unlisted platforms based on those platform's deployment target.
1586More than one platform can be listed in ``@available()``:
1587
1588.. code-block:: objc
1589
1590 void my_fun(NSSomeClass* var) {
1591 if (@available(macOS 10.12, iOS 10, *)) {
1592 [var fancyNewMethod];
1593 }
1594 }
1595
1596If the caller of ``my_fun()`` already checks that ``my_fun()`` is only called
1597on 10.12, then add an `availability attribute
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00001598<https://clang.llvm.org/docs/AttributeReference.html#availability>`_ to it,
Nico Weber11cafc82017-07-14 18:40:52 +00001599which will also suppress the warning and require that calls to my_fun() are
1600checked:
1601
1602.. code-block:: objc
1603
1604 API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
1605 [var fancyNewMethod]; // Now ok.
1606 }
1607
1608``@available()`` is only available in Objective-C code. To use the feature
1609in C and C++ code, use the ``__builtin_available()`` spelling instead.
1610
1611If existing code uses null checks or ``-respondsToSelector:``, it should
1612be changed to use ``@available()`` (or ``__builtin_available``) instead.
1613
1614``-Wunguarded-availability`` is disabled by default, but
1615``-Wunguarded-availability-new``, which only emits this warning for APIs
1616that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
1617tvOS >= 11, is enabled by default.
1618
1619.. _langext-overloading:
Jordan Rose32e94892012-12-15 00:37:01 +00001620
Ted Kremenek84342d62013-10-15 04:28:42 +00001621Objective-C++ ABI: protocol-qualifier mangling of parameters
1622------------------------------------------------------------
1623
1624Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
1625type is a qualified-``id`` (e.g., ``id<Foo>``). This mangling allows such
1626parameters to be differentiated from those with the regular unqualified ``id``
1627type.
1628
1629This was a non-backward compatible mangling change to the ABI. This change
1630allows proper overloading, and also prevents mangling conflicts with template
1631parameters of protocol-qualified type.
1632
1633Query the presence of this new mangling with
1634``__has_feature(objc_protocol_qualifier_mangling)``.
1635
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001636
1637OpenCL Features
1638===============
1639
1640C++ for OpenCL
1641--------------
1642
Anastasia Stulova976022e2019-08-23 11:43:49 +00001643This functionality is built on top of OpenCL C v2.0 and C++17 enabling most of
1644regular C++ features in OpenCL kernel code. Most functionality from OpenCL C
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001645is inherited. This section describes minor differences to OpenCL C and any
1646limitations related to C++ support as well as interactions between OpenCL and
1647C++ features that are not documented elsewhere.
1648
1649Restrictions to C++17
1650^^^^^^^^^^^^^^^^^^^^^
1651
1652The following features are not supported:
1653
1654- Virtual functions
Anastasia Stulova976022e2019-08-23 11:43:49 +00001655- Exceptions
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001656- ``dynamic_cast`` operator
1657- Non-placement ``new``/``delete`` operators
1658- Standard C++ libraries. Currently there is no solution for alternative C++
1659 libraries provided. Future release will feature library support.
1660
1661
1662Interplay of OpenCL and C++ features
1663^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1664
1665Address space behavior
1666""""""""""""""""""""""
1667
1668Address spaces are part of the type qualifiers; many rules are just inherited
1669from the qualifier behavior documented in OpenCL C v2.0 s6.5 and Embedded C
1670extension ISO/IEC JTC1 SC22 WG14 N1021 s3.1. Note that since the address space
Anastasia Stulova976022e2019-08-23 11:43:49 +00001671behavior in C++ is not documented formally, Clang extends the existing concept
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001672from C and OpenCL. For example conversion rules are extended from qualification
Anastasia Stulova976022e2019-08-23 11:43:49 +00001673conversion but the compatibility is determined using notation of sets and
1674overlapping of address spaces from Embedded C (ISO/IEC JTC1 SC22 WG14 N1021
1675s3.1.3). For OpenCL it means that implicit conversions are allowed from
1676a named address space (except for ``__constant``) to ``__generic`` (OpenCL C
1677v2.0 6.5.5). Reverse conversion is only allowed explicitly. The ``__constant``
1678address space does not overlap with any other and therefore no valid conversion
1679between ``__constant`` and other address spaces exists. Most of the rules
1680follow this logic.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001681
1682**Casts**
1683
Anastasia Stulova976022e2019-08-23 11:43:49 +00001684C-style casts follow OpenCL C v2.0 rules (s6.5.5). All cast operators
1685permit conversion to ``__generic`` implicitly. However converting from
1686``__generic`` to named address spaces can only be done using ``addrspace_cast``.
1687Note that conversions between ``__constant`` and any other address space
1688are disallowed.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001689
1690.. _opencl_cpp_addrsp_deduction:
1691
1692**Deduction**
1693
1694Address spaces are not deduced for:
1695
1696- non-pointer/non-reference template parameters or any dependent types except
1697 for template specializations.
1698- non-pointer/non-reference class members except for static data members that are
1699 deduced to ``__global`` address space.
1700- non-pointer/non-reference alias declarations.
Anastasia Stulova976022e2019-08-23 11:43:49 +00001701- ``decltype`` expressions.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001702
1703.. code-block:: c++
1704
1705 template <typename T>
1706 void foo() {
1707 T m; // address space of m will be known at template instantiation time.
1708 T * ptr; // ptr points to __generic address space object.
1709 T & ref = ...; // ref references an object in __generic address space.
1710 };
1711
1712 template <int N>
1713 struct S {
1714 int i; // i has no address space
1715 static int ii; // ii is in global address space
1716 int * ptr; // ptr points to __generic address space int.
1717 int & ref = ...; // ref references int in __generic address space.
1718 };
1719
1720 template <int N>
1721 void bar()
1722 {
1723 S<N> s; // s is in __private address space
1724 }
1725
1726TODO: Add example for type alias and decltype!
1727
1728**References**
1729
Anastasia Stulova976022e2019-08-23 11:43:49 +00001730Reference types can be qualified with an address space.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001731
1732.. code-block:: c++
1733
1734 __private int & ref = ...; // references int in __private address space
1735
1736By default references will refer to ``__generic`` address space objects, except
1737for dependent types that are not template specializations
1738(see :ref:`Deduction <opencl_cpp_addrsp_deduction>`). Address space compatibility
1739checks are performed when references are bound to values. The logic follows the
1740rules from address space pointer conversion (OpenCL v2.0 s6.5.5).
1741
1742**Default address space**
1743
1744All non-static member functions take an implicit object parameter ``this`` that
Anastasia Stulova976022e2019-08-23 11:43:49 +00001745is a pointer type. By default this pointer parameter is in the ``__generic``
1746address space. All concrete objects passed as an argument to ``this`` parameter
1747will be converted to the ``__generic`` address space first if such conversion is
1748valid. Therefore programs using objects in the ``__constant`` address space will
1749not be compiled unless the address space is explicitly specified using address
1750space qualifiers on member functions
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001751(see :ref:`Member function qualifier <opencl_cpp_addrspace_method_qual>`) as the
1752conversion between ``__constant`` and ``__generic`` is disallowed. Member function
Anastasia Stulova976022e2019-08-23 11:43:49 +00001753qualifiers can also be used in case conversion to the ``__generic`` address space
1754is undesirable (even if it is legal). For example, a method can be implemented to
1755exploit memory access coalescing for segments with memory bank. This not only
1756applies to regular member functions but to constructors and destructors too.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001757
1758.. _opencl_cpp_addrspace_method_qual:
1759
1760**Member function qualifier**
1761
Anastasia Stulova976022e2019-08-23 11:43:49 +00001762Clang allows specifying an address space qualifier on member functions to signal
1763that they are to be used with objects constructed in some specific address space.
1764This works just the same as qualifying member functions with ``const`` or any
1765other qualifiers. The overloading resolution will select the candidate with the
1766most specific address space if multiple candidates are provided. If there is no
1767conversion to an address space among candidates, compilation will fail with a
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001768diagnostic.
1769
1770.. code-block:: c++
1771
1772 struct C {
1773 void foo() __local;
1774 void foo();
1775 };
1776
1777 __kernel void bar() {
1778 __local C c1;
1779 C c2;
1780 __constant C c3;
1781 c1.foo(); // will resolve to the first foo
1782 c2.foo(); // will resolve to the second foo
1783 c3.foo(); // error due to mismatching address spaces - can't convert to
1784 // __local or __generic
1785 }
1786
1787**Implicit special members**
1788
1789All implicit special members (default, copy, or move constructor, copy or move
Anastasia Stulova976022e2019-08-23 11:43:49 +00001790assignment, destructor) will be generated with the ``__generic`` address space.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001791
1792.. code-block:: c++
1793
1794 class C {
1795 // Has the following implicit definition
1796 // void C() __generic;
1797 // void C(const __generic C &) __generic;
1798 // void C(__generic C &&) __generic;
1799 // operator= '__generic C &(__generic C &&)'
1800 // operator= '__generic C &(const __generic C &) __generic
1801 }
1802
1803**Builtin operators**
1804
Anastasia Stulova976022e2019-08-23 11:43:49 +00001805All builtin operators are available in the specific address spaces, thus no
1806conversion to ``__generic`` is performed.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001807
1808**Templates**
1809
Anastasia Stulova976022e2019-08-23 11:43:49 +00001810There is no deduction of address spaces in non-pointer/non-reference template
1811parameters and dependent types (see :ref:`Deduction <opencl_cpp_addrsp_deduction>`).
1812The address space of a template parameter is deduced during type deduction if
1813it is not explicitly provided in the instantiation.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001814
1815.. code-block:: c++
1816
1817 1 template<typename T>
1818 2 void foo(T* i){
1819 3 T var;
1820 4 }
1821 5
1822 6 __global int g;
1823 7 void bar(){
Anastasia Stulova976022e2019-08-23 11:43:49 +00001824 8 foo(&g); // error: template instantiation failed as function scope variable
1825 9 // appears to be declared in __global address space (see line 3)
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001826 10 }
1827
Anastasia Stulova976022e2019-08-23 11:43:49 +00001828It is not legal to specify multiple different address spaces between template
1829definition and instantiation. If multiple different address spaces are specified in
1830template definition and instantiation, compilation of such a program will fail with
1831a diagnostic.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001832
1833.. code-block:: c++
1834
1835 template <typename T>
1836 void foo() {
1837 __private T var;
1838 }
1839
1840 void bar() {
Anastasia Stulova976022e2019-08-23 11:43:49 +00001841 foo<__global int>(); // error: conflicting address space qualifiers are provided
1842 // __global and __private
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001843 }
1844
Anastasia Stulova976022e2019-08-23 11:43:49 +00001845Once a template has been instantiated, regular restrictions for address spaces will
1846apply.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001847
1848.. code-block:: c++
1849
1850 template<typename T>
1851 void foo(){
1852 T var;
1853 }
1854
1855 void bar(){
Anastasia Stulova976022e2019-08-23 11:43:49 +00001856 foo<__global int>(); // error: function scope variable cannot be declared in
1857 // __global address space
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001858 }
1859
1860**Temporary materialization**
1861
Anastasia Stulova976022e2019-08-23 11:43:49 +00001862All temporaries are materialized in the ``__private`` address space. If a
1863reference with another address space is bound to them, the conversion will be
1864generated in case it is valid, otherwise compilation will fail with a diagnostic.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001865
1866.. code-block:: c++
1867
1868 int bar(const unsigned int &i);
1869
1870 void foo() {
1871 bar(1); // temporary is created in __private address space but converted
1872 // to __generic address space of parameter reference
1873 }
1874
1875 __global const int& f(__global float &ref) {
1876 return ref; // error: address space mismatch between temporary object
1877 // created to hold value converted float->int and return
1878 // value type (can't convert from __private to __global)
1879 }
1880
1881**Initialization of local and constant address space objects**
1882
1883TODO
1884
1885Constructing and destroying global objects
1886^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1887
Anastasia Stulova976022e2019-08-23 11:43:49 +00001888Global objects must be constructed before the first kernel using the global
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001889objects is executed and destroyed just after the last kernel using the
1890program objects is executed. In OpenCL v2.0 drivers there is no specific
1891API for invoking global constructors. However, an easy workaround would be
Anastasia Stulova976022e2019-08-23 11:43:49 +00001892to enqueue a constructor initialization kernel that has a name
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001893``@_GLOBAL__sub_I_<compiled file name>``. This kernel is only present if there
1894are any global objects to be initialized in the compiled binary. One way to
1895check this is by passing ``CL_PROGRAM_KERNEL_NAMES`` to ``clGetProgramInfo``
1896(OpenCL v2.0 s5.8.7).
1897
Anastasia Stulova976022e2019-08-23 11:43:49 +00001898Note that if multiple files are compiled and linked into libraries, multiple
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001899kernels that initialize global objects for multiple modules would have to be
1900invoked.
1901
Anastasia Stulova976022e2019-08-23 11:43:49 +00001902Applications are currently required to run initialization of global objects
1903manually before running any kernels in which the objects are used.
1904
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001905.. code-block:: console
1906
Anastasia Stulova88ed70e2019-07-25 11:04:29 +00001907 clang -cl-std=clc++ test.cl
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001908
Anastasia Stulova976022e2019-08-23 11:43:49 +00001909If there are any global objects to be initialized, the final binary will
1910contain the ``@_GLOBAL__sub_I_test.cl`` kernel to be enqueued.
Anastasia Stulova79f4e472019-07-17 17:21:31 +00001911
1912Global destructors can not be invoked in OpenCL v2.0 drivers. However, all
1913memory used for program scope objects is released on ``clReleaseProgram``.
1914
Sean Silva709c44d2012-12-12 23:44:55 +00001915Initializer lists for complex numbers in C
1916==========================================
1917
1918clang supports an extension which allows the following in C:
1919
1920.. code-block:: c++
1921
1922 #include <math.h>
1923 #include <complex.h>
1924 complex float x = { 1.0f, INFINITY }; // Init to (1, Inf)
1925
1926This construct is useful because there is no way to separately initialize the
1927real and imaginary parts of a complex variable in standard C, given that clang
1928does not support ``_Imaginary``. (Clang also supports the ``__real__`` and
1929``__imag__`` extensions from gcc, which help in some cases, but are not usable
1930in static initializers.)
1931
1932Note that this extension does not allow eliding the braces; the meaning of the
1933following two lines is different:
1934
1935.. code-block:: c++
1936
1937 complex float x[] = { { 1.0f, 1.0f } }; // [0] = (1, 1)
1938 complex float x[] = { 1.0f, 1.0f }; // [0] = (1, 0), [1] = (1, 0)
1939
1940This extension also works in C++ mode, as far as that goes, but does not apply
1941to the C++ ``std::complex``. (In C++11, list initialization allows the same
1942syntax to be used with ``std::complex`` with the same meaning.)
1943
1944Builtin Functions
1945=================
1946
1947Clang supports a number of builtin library functions with the same syntax as
1948GCC, including things like ``__builtin_nan``, ``__builtin_constant_p``,
1949``__builtin_choose_expr``, ``__builtin_types_compatible_p``,
Hal Finkelbcc06082014-09-07 22:58:14 +00001950``__builtin_assume_aligned``, ``__sync_fetch_and_add``, etc. In addition to
1951the GCC builtins, Clang supports a number of builtins that GCC does not, which
1952are listed here.
Sean Silva709c44d2012-12-12 23:44:55 +00001953
1954Please note that Clang does not and will not support all of the GCC builtins
1955for vector operations. Instead of using builtins, you should use the functions
1956defined in target-specific header files like ``<xmmintrin.h>``, which define
1957portable wrappers for these. Many of the Clang versions of these functions are
1958implemented directly in terms of :ref:`extended vector support
1959<langext-vectors>` instead of builtins, in order to reduce the number of
1960builtins that we need to implement.
1961
Hal Finkelbcc06082014-09-07 22:58:14 +00001962``__builtin_assume``
1963------------------------------
1964
1965``__builtin_assume`` is used to provide the optimizer with a boolean
1966invariant that is defined to be true.
1967
1968**Syntax**:
1969
1970.. code-block:: c++
1971
1972 __builtin_assume(bool)
1973
1974**Example of Use**:
1975
1976.. code-block:: c++
1977
1978 int foo(int x) {
1979 __builtin_assume(x != 0);
1980
1981 // The optimizer may short-circuit this check using the invariant.
1982 if (x == 0)
1983 return do_something();
1984
1985 return do_something_else();
1986 }
1987
1988**Description**:
1989
1990The boolean argument to this function is defined to be true. The optimizer may
1991analyze the form of the expression provided as the argument and deduce from
1992that information used to optimize the program. If the condition is violated
1993during execution, the behavior is undefined. The argument itself is never
1994evaluated, so any side effects of the expression will be discarded.
1995
1996Query for this feature with ``__has_builtin(__builtin_assume)``.
1997
Sean Silva709c44d2012-12-12 23:44:55 +00001998``__builtin_readcyclecounter``
1999------------------------------
2000
2001``__builtin_readcyclecounter`` is used to access the cycle counter register (or
2002a similar low-latency, high-accuracy clock) on those targets that support it.
2003
2004**Syntax**:
2005
2006.. code-block:: c++
2007
2008 __builtin_readcyclecounter()
2009
2010**Example of Use**:
2011
2012.. code-block:: c++
2013
2014 unsigned long long t0 = __builtin_readcyclecounter();
2015 do_something();
2016 unsigned long long t1 = __builtin_readcyclecounter();
2017 unsigned long long cycles_to_do_something = t1 - t0; // assuming no overflow
2018
2019**Description**:
2020
2021The ``__builtin_readcyclecounter()`` builtin returns the cycle counter value,
2022which may be either global or process/thread-specific depending on the target.
2023As the backing counters often overflow quickly (on the order of seconds) this
2024should only be used for timing small intervals. When not supported by the
2025target, the return value is always zero. This builtin takes no arguments and
2026produces an unsigned long long result.
2027
Tim Northoverbfe2e5f72013-05-23 19:14:12 +00002028Query for this feature with ``__has_builtin(__builtin_readcyclecounter)``. Note
2029that even if present, its use may depend on run-time privilege or other OS
2030controlled state.
Sean Silva709c44d2012-12-12 23:44:55 +00002031
2032.. _langext-__builtin_shufflevector:
2033
2034``__builtin_shufflevector``
2035---------------------------
2036
2037``__builtin_shufflevector`` is used to express generic vector
2038permutation/shuffle/swizzle operations. This builtin is also very important
2039for the implementation of various target-specific header files like
2040``<xmmintrin.h>``.
2041
2042**Syntax**:
2043
2044.. code-block:: c++
2045
2046 __builtin_shufflevector(vec1, vec2, index1, index2, ...)
2047
2048**Examples**:
2049
2050.. code-block:: c++
2051
Craig Topper50ad5b72013-08-03 17:40:38 +00002052 // identity operation - return 4-element vector v1.
2053 __builtin_shufflevector(v1, v1, 0, 1, 2, 3)
Sean Silva709c44d2012-12-12 23:44:55 +00002054
2055 // "Splat" element 0 of V1 into a 4-element result.
2056 __builtin_shufflevector(V1, V1, 0, 0, 0, 0)
2057
2058 // Reverse 4-element vector V1.
2059 __builtin_shufflevector(V1, V1, 3, 2, 1, 0)
2060
2061 // Concatenate every other element of 4-element vectors V1 and V2.
2062 __builtin_shufflevector(V1, V2, 0, 2, 4, 6)
2063
2064 // Concatenate every other element of 8-element vectors V1 and V2.
2065 __builtin_shufflevector(V1, V2, 0, 2, 4, 6, 8, 10, 12, 14)
2066
Craig Topper50ad5b72013-08-03 17:40:38 +00002067 // Shuffle v1 with some elements being undefined
2068 __builtin_shufflevector(v1, v1, 3, -1, 1, -1)
2069
Sean Silva709c44d2012-12-12 23:44:55 +00002070**Description**:
2071
2072The first two arguments to ``__builtin_shufflevector`` are vectors that have
2073the same element type. The remaining arguments are a list of integers that
2074specify the elements indices of the first two vectors that should be extracted
2075and returned in a new vector. These element indices are numbered sequentially
2076starting with the first vector, continuing into the second vector. Thus, if
2077``vec1`` is a 4-element vector, index 5 would refer to the second element of
Craig Topper50ad5b72013-08-03 17:40:38 +00002078``vec2``. An index of -1 can be used to indicate that the corresponding element
2079in the returned vector is a don't care and can be optimized by the backend.
Sean Silva709c44d2012-12-12 23:44:55 +00002080
2081The result of ``__builtin_shufflevector`` is a vector with the same element
2082type as ``vec1``/``vec2`` but that has an element count equal to the number of
2083indices specified.
2084
2085Query for this feature with ``__has_builtin(__builtin_shufflevector)``.
2086
Anton Yartsev94e46f32014-09-03 17:59:21 +00002087.. _langext-__builtin_convertvector:
2088
Hal Finkelc4d7c822013-09-18 03:29:45 +00002089``__builtin_convertvector``
2090---------------------------
2091
2092``__builtin_convertvector`` is used to express generic vector
2093type-conversion operations. The input vector and the output vector
2094type must have the same number of elements.
2095
2096**Syntax**:
2097
2098.. code-block:: c++
2099
2100 __builtin_convertvector(src_vec, dst_vec_type)
2101
2102**Examples**:
2103
2104.. code-block:: c++
2105
2106 typedef double vector4double __attribute__((__vector_size__(32)));
2107 typedef float vector4float __attribute__((__vector_size__(16)));
2108 typedef short vector4short __attribute__((__vector_size__(8)));
2109 vector4float vf; vector4short vs;
2110
2111 // convert from a vector of 4 floats to a vector of 4 doubles.
2112 __builtin_convertvector(vf, vector4double)
2113 // equivalent to:
2114 (vector4double) { (double) vf[0], (double) vf[1], (double) vf[2], (double) vf[3] }
2115
2116 // convert from a vector of 4 shorts to a vector of 4 floats.
2117 __builtin_convertvector(vs, vector4float)
2118 // equivalent to:
Yunzhong Gao637cb90b2014-09-02 19:24:14 +00002119 (vector4float) { (float) vs[0], (float) vs[1], (float) vs[2], (float) vs[3] }
Hal Finkelc4d7c822013-09-18 03:29:45 +00002120
2121**Description**:
2122
2123The first argument to ``__builtin_convertvector`` is a vector, and the second
2124argument is a vector type with the same number of elements as the first
2125argument.
2126
2127The result of ``__builtin_convertvector`` is a vector with the same element
2128type as the second argument, with a value defined in terms of the action of a
2129C-style cast applied to each element of the first argument.
2130
2131Query for this feature with ``__has_builtin(__builtin_convertvector)``.
2132
Matt Arsenault08087c52016-03-23 22:14:43 +00002133``__builtin_bitreverse``
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00002134------------------------
Matt Arsenault08087c52016-03-23 22:14:43 +00002135
2136* ``__builtin_bitreverse8``
2137* ``__builtin_bitreverse16``
2138* ``__builtin_bitreverse32``
2139* ``__builtin_bitreverse64``
2140
2141**Syntax**:
2142
2143.. code-block:: c++
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00002144
Matt Arsenault08087c52016-03-23 22:14:43 +00002145 __builtin_bitreverse32(x)
2146
2147**Examples**:
2148
2149.. code-block:: c++
Aaron Ballmanbcf13da2016-03-24 12:34:44 +00002150
Matt Arsenault08087c52016-03-23 22:14:43 +00002151 uint8_t rev_x = __builtin_bitreverse8(x);
2152 uint16_t rev_x = __builtin_bitreverse16(x);
2153 uint32_t rev_y = __builtin_bitreverse32(y);
2154 uint64_t rev_z = __builtin_bitreverse64(z);
2155
2156**Description**:
2157
2158The '``__builtin_bitreverse``' family of builtins is used to reverse
2159the bitpattern of an integer value; for example ``0b10110110`` becomes
2160``0b01101101``.
2161
Sanjay Patelad823902018-08-19 16:50:30 +00002162``__builtin_rotateleft``
2163------------------------
2164
2165* ``__builtin_rotateleft8``
2166* ``__builtin_rotateleft16``
2167* ``__builtin_rotateleft32``
2168* ``__builtin_rotateleft64``
2169
2170**Syntax**:
2171
2172.. code-block:: c++
2173
2174 __builtin_rotateleft32(x, y)
2175
2176**Examples**:
2177
2178.. code-block:: c++
2179
2180 uint8_t rot_x = __builtin_rotateleft8(x, y);
2181 uint16_t rot_x = __builtin_rotateleft16(x, y);
2182 uint32_t rot_x = __builtin_rotateleft32(x, y);
2183 uint64_t rot_x = __builtin_rotateleft64(x, y);
2184
2185**Description**:
2186
2187The '``__builtin_rotateleft``' family of builtins is used to rotate
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002188the bits in the first argument by the amount in the second argument.
Sanjay Patelad823902018-08-19 16:50:30 +00002189For example, ``0b10000110`` rotated left by 11 becomes ``0b00110100``.
2190The shift value is treated as an unsigned amount modulo the size of
2191the arguments. Both arguments and the result have the bitwidth specified
2192by the name of the builtin.
2193
2194``__builtin_rotateright``
Kristina Brooks233a4982019-04-05 18:26:43 +00002195-------------------------
Sanjay Patelad823902018-08-19 16:50:30 +00002196
2197* ``__builtin_rotateright8``
2198* ``__builtin_rotateright16``
2199* ``__builtin_rotateright32``
2200* ``__builtin_rotateright64``
2201
2202**Syntax**:
2203
2204.. code-block:: c++
2205
2206 __builtin_rotateright32(x, y)
2207
2208**Examples**:
2209
2210.. code-block:: c++
2211
2212 uint8_t rot_x = __builtin_rotateright8(x, y);
2213 uint16_t rot_x = __builtin_rotateright16(x, y);
2214 uint32_t rot_x = __builtin_rotateright32(x, y);
2215 uint64_t rot_x = __builtin_rotateright64(x, y);
2216
2217**Description**:
2218
2219The '``__builtin_rotateright``' family of builtins is used to rotate
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002220the bits in the first argument by the amount in the second argument.
Sanjay Patelad823902018-08-19 16:50:30 +00002221For example, ``0b10000110`` rotated right by 3 becomes ``0b11010000``.
2222The shift value is treated as an unsigned amount modulo the size of
2223the arguments. Both arguments and the result have the bitwidth specified
2224by the name of the builtin.
2225
Sean Silva709c44d2012-12-12 23:44:55 +00002226``__builtin_unreachable``
2227-------------------------
2228
2229``__builtin_unreachable`` is used to indicate that a specific point in the
2230program cannot be reached, even if the compiler might otherwise think it can.
2231This is useful to improve optimization and eliminates certain warnings. For
2232example, without the ``__builtin_unreachable`` in the example below, the
2233compiler assumes that the inline asm can fall through and prints a "function
2234declared '``noreturn``' should not return" warning.
2235
2236**Syntax**:
2237
2238.. code-block:: c++
2239
2240 __builtin_unreachable()
2241
2242**Example of use**:
2243
2244.. code-block:: c++
2245
2246 void myabort(void) __attribute__((noreturn));
2247 void myabort(void) {
2248 asm("int3");
2249 __builtin_unreachable();
2250 }
2251
2252**Description**:
2253
2254The ``__builtin_unreachable()`` builtin has completely undefined behavior.
2255Since it has undefined behavior, it is a statement that it is never reached and
2256the optimizer can take advantage of this to produce better code. This builtin
2257takes no arguments and produces a void result.
2258
2259Query for this feature with ``__has_builtin(__builtin_unreachable)``.
2260
Sanjay Patela24296b2015-09-02 20:01:30 +00002261``__builtin_unpredictable``
2262---------------------------
2263
2264``__builtin_unpredictable`` is used to indicate that a branch condition is
2265unpredictable by hardware mechanisms such as branch prediction logic.
2266
2267**Syntax**:
2268
2269.. code-block:: c++
2270
2271 __builtin_unpredictable(long long)
2272
2273**Example of use**:
2274
2275.. code-block:: c++
2276
2277 if (__builtin_unpredictable(x > 0)) {
2278 foo();
2279 }
2280
2281**Description**:
2282
2283The ``__builtin_unpredictable()`` builtin is expected to be used with control
2284flow conditions such as in ``if`` and ``switch`` statements.
2285
2286Query for this feature with ``__has_builtin(__builtin_unpredictable)``.
2287
Sean Silva709c44d2012-12-12 23:44:55 +00002288``__sync_swap``
2289---------------
2290
2291``__sync_swap`` is used to atomically swap integers or pointers in memory.
2292
2293**Syntax**:
2294
2295.. code-block:: c++
2296
2297 type __sync_swap(type *ptr, type value, ...)
2298
2299**Example of Use**:
2300
2301.. code-block:: c++
2302
2303 int old_value = __sync_swap(&value, new_value);
2304
2305**Description**:
2306
2307The ``__sync_swap()`` builtin extends the existing ``__sync_*()`` family of
2308atomic intrinsics to allow code to atomically swap the current value with the
2309new value. More importantly, it helps developers write more efficient and
2310correct code by avoiding expensive loops around
2311``__sync_bool_compare_and_swap()`` or relying on the platform specific
2312implementation details of ``__sync_lock_test_and_set()``. The
2313``__sync_swap()`` builtin is a full barrier.
2314
Richard Smith6cbd65d2013-07-11 02:27:57 +00002315``__builtin_addressof``
2316-----------------------
2317
2318``__builtin_addressof`` performs the functionality of the built-in ``&``
2319operator, ignoring any ``operator&`` overload. This is useful in constant
2320expressions in C++11, where there is no other way to take the address of an
2321object that overloads ``operator&``.
2322
2323**Example of use**:
2324
2325.. code-block:: c++
2326
2327 template<typename T> constexpr T *addressof(T &value) {
2328 return __builtin_addressof(value);
2329 }
2330
Richard Smith760520b2014-06-03 23:27:44 +00002331``__builtin_operator_new`` and ``__builtin_operator_delete``
2332------------------------------------------------------------
2333
2334``__builtin_operator_new`` allocates memory just like a non-placement non-class
2335*new-expression*. This is exactly like directly calling the normal
2336non-placement ``::operator new``, except that it allows certain optimizations
2337that the C++ standard does not permit for a direct function call to
2338``::operator new`` (in particular, removing ``new`` / ``delete`` pairs and
2339merging allocations).
2340
2341Likewise, ``__builtin_operator_delete`` deallocates memory just like a
2342non-class *delete-expression*, and is exactly like directly calling the normal
2343``::operator delete``, except that it permits optimizations. Only the unsized
2344form of ``__builtin_operator_delete`` is currently available.
2345
2346These builtins are intended for use in the implementation of ``std::allocator``
2347and other similar allocation libraries, and are only available in C++.
2348
Yonghong Song048493f2019-07-09 04:21:50 +00002349``__builtin_preserve_access_index``
2350-----------------------------------
2351
2352``__builtin_preserve_access_index`` specifies a code section where
2353array subscript access and structure/union member access are relocatable
2354under bpf compile-once run-everywhere framework. Debuginfo (typically
2355with ``-g``) is needed, otherwise, the compiler will exit with an error.
2356
2357**Syntax**:
2358
2359.. code-block:: c
2360
2361 const void * __builtin_preserve_access_index(const void * ptr)
2362
2363**Example of Use**:
2364
2365.. code-block:: c
2366
2367 struct t {
2368 int i;
2369 int j;
2370 union {
2371 int a;
2372 int b;
2373 } c[4];
2374 };
2375 struct t *v = ...;
2376 const void *pb =__builtin_preserve_access_index(&v->c[3].b);
2377
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00002378Multiprecision Arithmetic Builtins
2379----------------------------------
2380
2381Clang provides a set of builtins which expose multiprecision arithmetic in a
2382manner amenable to C. They all have the following form:
2383
2384.. code-block:: c
2385
2386 unsigned x = ..., y = ..., carryin = ..., carryout;
2387 unsigned sum = __builtin_addc(x, y, carryin, &carryout);
2388
2389Thus one can form a multiprecision addition chain in the following manner:
2390
2391.. code-block:: c
2392
2393 unsigned *x, *y, *z, carryin=0, carryout;
2394 z[0] = __builtin_addc(x[0], y[0], carryin, &carryout);
2395 carryin = carryout;
2396 z[1] = __builtin_addc(x[1], y[1], carryin, &carryout);
2397 carryin = carryout;
2398 z[2] = __builtin_addc(x[2], y[2], carryin, &carryout);
2399 carryin = carryout;
2400 z[3] = __builtin_addc(x[3], y[3], carryin, &carryout);
2401
2402The complete list of builtins are:
2403
2404.. code-block:: c
2405
Michael Gottesman15343992013-06-18 20:40:40 +00002406 unsigned char __builtin_addcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00002407 unsigned short __builtin_addcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
2408 unsigned __builtin_addc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
2409 unsigned long __builtin_addcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
2410 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 +00002411 unsigned char __builtin_subcb (unsigned char x, unsigned char y, unsigned char carryin, unsigned char *carryout);
Michael Gottesmanc5cc9f12013-01-13 04:35:31 +00002412 unsigned short __builtin_subcs (unsigned short x, unsigned short y, unsigned short carryin, unsigned short *carryout);
2413 unsigned __builtin_subc (unsigned x, unsigned y, unsigned carryin, unsigned *carryout);
2414 unsigned long __builtin_subcl (unsigned long x, unsigned long y, unsigned long carryin, unsigned long *carryout);
2415 unsigned long long __builtin_subcll(unsigned long long x, unsigned long long y, unsigned long long carryin, unsigned long long *carryout);
2416
Michael Gottesman930ecdb2013-06-20 23:28:10 +00002417Checked Arithmetic Builtins
2418---------------------------
2419
2420Clang provides a set of builtins that implement checked arithmetic for security
2421critical applications in a manner that is fast and easily expressable in C. As
2422an example of their usage:
2423
2424.. code-block:: c
2425
2426 errorcode_t security_critical_application(...) {
2427 unsigned x, y, result;
2428 ...
John McCall03107a42015-10-29 20:48:01 +00002429 if (__builtin_mul_overflow(x, y, &result))
Michael Gottesman930ecdb2013-06-20 23:28:10 +00002430 return kErrorCodeHackers;
2431 ...
2432 use_multiply(result);
2433 ...
2434 }
2435
John McCall03107a42015-10-29 20:48:01 +00002436Clang provides the following checked arithmetic builtins:
Michael Gottesman930ecdb2013-06-20 23:28:10 +00002437
2438.. code-block:: c
2439
John McCall03107a42015-10-29 20:48:01 +00002440 bool __builtin_add_overflow (type1 x, type2 y, type3 *sum);
2441 bool __builtin_sub_overflow (type1 x, type2 y, type3 *diff);
2442 bool __builtin_mul_overflow (type1 x, type2 y, type3 *prod);
Michael Gottesman930ecdb2013-06-20 23:28:10 +00002443 bool __builtin_uadd_overflow (unsigned x, unsigned y, unsigned *sum);
2444 bool __builtin_uaddl_overflow (unsigned long x, unsigned long y, unsigned long *sum);
2445 bool __builtin_uaddll_overflow(unsigned long long x, unsigned long long y, unsigned long long *sum);
2446 bool __builtin_usub_overflow (unsigned x, unsigned y, unsigned *diff);
2447 bool __builtin_usubl_overflow (unsigned long x, unsigned long y, unsigned long *diff);
2448 bool __builtin_usubll_overflow(unsigned long long x, unsigned long long y, unsigned long long *diff);
2449 bool __builtin_umul_overflow (unsigned x, unsigned y, unsigned *prod);
2450 bool __builtin_umull_overflow (unsigned long x, unsigned long y, unsigned long *prod);
2451 bool __builtin_umulll_overflow(unsigned long long x, unsigned long long y, unsigned long long *prod);
2452 bool __builtin_sadd_overflow (int x, int y, int *sum);
2453 bool __builtin_saddl_overflow (long x, long y, long *sum);
2454 bool __builtin_saddll_overflow(long long x, long long y, long long *sum);
2455 bool __builtin_ssub_overflow (int x, int y, int *diff);
2456 bool __builtin_ssubl_overflow (long x, long y, long *diff);
2457 bool __builtin_ssubll_overflow(long long x, long long y, long long *diff);
2458 bool __builtin_smul_overflow (int x, int y, int *prod);
2459 bool __builtin_smull_overflow (long x, long y, long *prod);
2460 bool __builtin_smulll_overflow(long long x, long long y, long long *prod);
2461
John McCall03107a42015-10-29 20:48:01 +00002462Each builtin performs the specified mathematical operation on the
2463first two arguments and stores the result in the third argument. If
2464possible, the result will be equal to mathematically-correct result
2465and the builtin will return 0. Otherwise, the builtin will return
24661 and the result will be equal to the unique value that is equivalent
2467to the mathematically-correct result modulo two raised to the *k*
2468power, where *k* is the number of bits in the result type. The
2469behavior of these builtins is well-defined for all argument values.
2470
2471The first three builtins work generically for operands of any integer type,
2472including boolean types. The operands need not have the same type as each
2473other, or as the result. The other builtins may implicitly promote or
2474convert their operands before performing the operation.
2475
2476Query for this feature with ``__has_builtin(__builtin_add_overflow)``, etc.
Michael Gottesman930ecdb2013-06-20 23:28:10 +00002477
Matt Arsenault2d933982016-02-27 09:06:18 +00002478Floating point builtins
2479---------------------------------------
2480
2481``__builtin_canonicalize``
2482--------------------------
2483
2484.. code-block:: c
2485
2486 double __builtin_canonicalize(double);
2487 float __builtin_canonicalizef(float);
2488 long double__builtin_canonicalizel(long double);
2489
2490Returns the platform specific canonical encoding of a floating point
2491number. This canonicalization is useful for implementing certain
2492numeric primitives such as frexp. See `LLVM canonicalize intrinsic
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00002493<https://llvm.org/docs/LangRef.html#llvm-canonicalize-intrinsic>`_ for
Matt Arsenault2d933982016-02-27 09:06:18 +00002494more information on the semantics.
2495
Richard Smith67d484b2017-01-20 00:57:59 +00002496String builtins
2497---------------
2498
2499Clang provides constant expression evaluation support for builtins forms of
Richard Smith0abb11c2017-01-23 18:17:46 +00002500the following functions from the C standard library ``<string.h>`` header:
Richard Smith67d484b2017-01-20 00:57:59 +00002501
2502* ``memchr``
2503* ``memcmp``
2504* ``strchr``
2505* ``strcmp``
2506* ``strlen``
2507* ``strncmp``
2508* ``wcschr``
2509* ``wcscmp``
2510* ``wcslen``
2511* ``wcsncmp``
2512* ``wmemchr``
2513* ``wmemcmp``
2514
2515In each case, the builtin form has the name of the C library function prefixed
Richard Smith90854c42017-01-20 01:08:15 +00002516by ``__builtin_``. Example:
Richard Smith67d484b2017-01-20 00:57:59 +00002517
2518.. code-block:: c
2519
2520 void *p = __builtin_memchr("foobar", 'b', 5);
2521
2522In addition to the above, one further builtin is provided:
2523
2524.. code-block:: c
2525
2526 char *__builtin_char_memchr(const char *haystack, int needle, size_t size);
2527
2528``__builtin_char_memchr(a, b, c)`` is identical to
2529``(char*)__builtin_memchr(a, b, c)`` except that its use is permitted within
2530constant expressions in C++11 onwards (where a cast from ``void*`` to ``char*``
2531is disallowed in general).
2532
2533Support for constant expression evaluation for the above builtins be detected
2534with ``__has_feature(cxx_constexpr_string_builtins)``.
2535
Elena Demikhovskyd31327d2018-05-13 07:45:58 +00002536Atomic Min/Max builtins with memory ordering
2537--------------------------------------------
2538
2539There are two atomic builtins with min/max in-memory comparison and swap.
2540The syntax and semantics are similar to GCC-compatible __atomic_* builtins.
2541
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002542* ``__atomic_fetch_min``
2543* ``__atomic_fetch_max``
Elena Demikhovskyd31327d2018-05-13 07:45:58 +00002544
2545The builtins work with signed and unsigned integers and require to specify memory ordering.
2546The return value is the original value that was stored in memory before comparison.
2547
2548Example:
2549
2550.. code-block:: c
2551
2552 unsigned int val = __atomic_fetch_min(unsigned int *pi, unsigned int ui, __ATOMIC_RELAXED);
2553
2554The third argument is one of the memory ordering specifiers ``__ATOMIC_RELAXED``,
2555``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``, ``__ATOMIC_RELEASE``,
2556``__ATOMIC_ACQ_REL``, or ``__ATOMIC_SEQ_CST`` following C++11 memory model semantics.
2557
2558In terms or aquire-release ordering barriers these two operations are always
2559considered as operations with *load-store* semantics, even when the original value
2560is not actually modified after comparison.
2561
Sean Silva709c44d2012-12-12 23:44:55 +00002562.. _langext-__c11_atomic:
2563
2564__c11_atomic builtins
2565---------------------
2566
2567Clang provides a set of builtins which are intended to be used to implement
2568C11's ``<stdatomic.h>`` header. These builtins provide the semantics of the
2569``_explicit`` form of the corresponding C11 operation, and are named with a
Hal Finkel6970ac82014-10-03 04:29:40 +00002570``__c11_`` prefix. The supported operations, and the differences from
2571the corresponding C11 operations, are:
Sean Silva709c44d2012-12-12 23:44:55 +00002572
2573* ``__c11_atomic_init``
2574* ``__c11_atomic_thread_fence``
2575* ``__c11_atomic_signal_fence``
Hal Finkel6970ac82014-10-03 04:29:40 +00002576* ``__c11_atomic_is_lock_free`` (The argument is the size of the
Dan Liewfe726862014-10-03 12:36:20 +00002577 ``_Atomic(...)`` object, instead of its address)
Sean Silva709c44d2012-12-12 23:44:55 +00002578* ``__c11_atomic_store``
2579* ``__c11_atomic_load``
2580* ``__c11_atomic_exchange``
2581* ``__c11_atomic_compare_exchange_strong``
2582* ``__c11_atomic_compare_exchange_weak``
2583* ``__c11_atomic_fetch_add``
2584* ``__c11_atomic_fetch_sub``
2585* ``__c11_atomic_fetch_and``
2586* ``__c11_atomic_fetch_or``
2587* ``__c11_atomic_fetch_xor``
2588
Hal Finkel6970ac82014-10-03 04:29:40 +00002589The macros ``__ATOMIC_RELAXED``, ``__ATOMIC_CONSUME``, ``__ATOMIC_ACQUIRE``,
JF Bastiene6ccacf2014-10-10 16:09:48 +00002590``__ATOMIC_RELEASE``, ``__ATOMIC_ACQ_REL``, and ``__ATOMIC_SEQ_CST`` are
Hal Finkel6970ac82014-10-03 04:29:40 +00002591provided, with values corresponding to the enumerators of C11's
2592``memory_order`` enumeration.
2593
James Y Knight81167fb2015-08-05 16:57:36 +00002594(Note that Clang additionally provides GCC-compatible ``__atomic_*``
Yaxun Liu39195062017-08-04 18:16:31 +00002595builtins and OpenCL 2.0 ``__opencl_atomic_*`` builtins. The OpenCL 2.0
2596atomic builtins are an explicit form of the corresponding OpenCL 2.0
2597builtin function, and are named with a ``__opencl_`` prefix. The macros
2598``__OPENCL_MEMORY_SCOPE_WORK_ITEM``, ``__OPENCL_MEMORY_SCOPE_WORK_GROUP``,
2599``__OPENCL_MEMORY_SCOPE_DEVICE``, ``__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES``,
2600and ``__OPENCL_MEMORY_SCOPE_SUB_GROUP`` are provided, with values
2601corresponding to the enumerators of OpenCL's ``memory_scope`` enumeration.)
James Y Knight81167fb2015-08-05 16:57:36 +00002602
Tim Northover6aacd492013-07-16 09:47:53 +00002603Low-level ARM exclusive memory builtins
2604---------------------------------------
2605
2606Clang provides overloaded builtins giving direct access to the three key ARM
2607instructions for implementing atomic operations.
2608
2609.. code-block:: c
Sean Silvaa928c242013-09-09 19:50:40 +00002610
Tim Northover6aacd492013-07-16 09:47:53 +00002611 T __builtin_arm_ldrex(const volatile T *addr);
Tim Northover3acd6bd2014-07-02 12:56:02 +00002612 T __builtin_arm_ldaex(const volatile T *addr);
Tim Northover6aacd492013-07-16 09:47:53 +00002613 int __builtin_arm_strex(T val, volatile T *addr);
Tim Northover3acd6bd2014-07-02 12:56:02 +00002614 int __builtin_arm_stlex(T val, volatile T *addr);
Tim Northover6aacd492013-07-16 09:47:53 +00002615 void __builtin_arm_clrex(void);
2616
2617The types ``T`` currently supported are:
Michael Zolotukhinc3f09ff2015-09-10 23:56:10 +00002618
Tim Northover573cbee2014-05-24 12:52:07 +00002619* Integer types with width at most 64 bits (or 128 bits on AArch64).
Tim Northover6aacd492013-07-16 09:47:53 +00002620* Floating-point types
2621* Pointer types.
2622
2623Note that the compiler does not guarantee it will not insert stores which clear
Tim Northover3acd6bd2014-07-02 12:56:02 +00002624the exclusive monitor in between an ``ldrex`` type operation and its paired
2625``strex``. In practice this is only usually a risk when the extra store is on
2626the same cache line as the variable being modified and Clang will only insert
2627stack stores on its own, so it is best not to use these operations on variables
2628with automatic storage duration.
Tim Northover6aacd492013-07-16 09:47:53 +00002629
2630Also, loads and stores may be implicit in code written between the ``ldrex`` and
2631``strex``. Clang will not necessarily mitigate the effects of these either, so
2632care should be exercised.
2633
2634For these reasons the higher level atomic primitives should be preferred where
2635possible.
2636
Michael Zolotukhin59d72b12015-09-11 02:01:15 +00002637Non-temporal load/store builtins
2638--------------------------------
2639
2640Clang provides overloaded builtins allowing generation of non-temporal memory
2641accesses.
2642
2643.. code-block:: c
2644
2645 T __builtin_nontemporal_load(T *addr);
2646 void __builtin_nontemporal_store(T value, T *addr);
2647
2648The types ``T`` currently supported are:
2649
2650* Integer types.
2651* Floating-point types.
2652* Vector types.
2653
2654Note that the compiler does not guarantee that non-temporal loads or stores
2655will be used.
2656
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002657C++ Coroutines support builtins
2658--------------------------------
2659
2660.. warning::
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002661 This is a work in progress. Compatibility across Clang/LLVM releases is not
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002662 guaranteed.
2663
2664Clang provides experimental builtins to support C++ Coroutines as defined by
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +00002665https://wg21.link/P0057. The following four are intended to be used by the
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002666standard library to implement `std::experimental::coroutine_handle` type.
2667
2668**Syntax**:
2669
2670.. code-block:: c
2671
2672 void __builtin_coro_resume(void *addr);
2673 void __builtin_coro_destroy(void *addr);
2674 bool __builtin_coro_done(void *addr);
2675 void *__builtin_coro_promise(void *addr, int alignment, bool from_promise)
2676
2677**Example of use**:
2678
2679.. code-block:: c++
2680
2681 template <> struct coroutine_handle<void> {
2682 void resume() const { __builtin_coro_resume(ptr); }
2683 void destroy() const { __builtin_coro_destroy(ptr); }
2684 bool done() const { return __builtin_coro_done(ptr); }
2685 // ...
2686 protected:
2687 void *ptr;
2688 };
2689
2690 template <typename Promise> struct coroutine_handle : coroutine_handle<> {
2691 // ...
2692 Promise &promise() const {
2693 return *reinterpret_cast<Promise *>(
2694 __builtin_coro_promise(ptr, alignof(Promise), /*from-promise=*/false));
2695 }
2696 static coroutine_handle from_promise(Promise &promise) {
2697 coroutine_handle p;
2698 p.ptr = __builtin_coro_promise(&promise, alignof(Promise),
2699 /*from-promise=*/true);
2700 return p;
2701 }
2702 };
2703
2704
2705Other coroutine builtins are either for internal clang use or for use during
2706development of the coroutine feature. See `Coroutines in LLVM
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00002707<https://llvm.org/docs/Coroutines.html#intrinsics>`_ for
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002708more information on their semantics. Note that builtins matching the intrinsics
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002709that take token as the first parameter (llvm.coro.begin, llvm.coro.alloc,
Gor Nishanov97e3b6d2016-10-03 22:44:48 +00002710llvm.coro.free and llvm.coro.suspend) omit the token parameter and fill it to
2711an appropriate value during the emission.
2712
2713**Syntax**:
2714
2715.. code-block:: c
2716
2717 size_t __builtin_coro_size()
2718 void *__builtin_coro_frame()
2719 void *__builtin_coro_free(void *coro_frame)
2720
2721 void *__builtin_coro_id(int align, void *promise, void *fnaddr, void *parts)
2722 bool __builtin_coro_alloc()
2723 void *__builtin_coro_begin(void *memory)
2724 void __builtin_coro_end(void *coro_frame, bool unwind)
2725 char __builtin_coro_suspend(bool final)
2726 bool __builtin_coro_param(void *original, void *copy)
2727
2728Note that there is no builtin matching the `llvm.coro.save` intrinsic. LLVM
2729automatically will insert one if the first argument to `llvm.coro.suspend` is
2730token `none`. If a user calls `__builin_suspend`, clang will insert `token none`
2731as the first argument to the intrinsic.
2732
Eric Fiselier708afb52019-05-16 21:04:15 +00002733Source location builtins
2734------------------------
2735
2736Clang provides experimental builtins to support C++ standard library implementation
2737of ``std::experimental::source_location`` as specified in http://wg21.link/N4600.
2738With the exception of ``__builtin_COLUMN``, these builtins are also implemented by
2739GCC.
2740
2741**Syntax**:
2742
2743.. code-block:: c
2744
2745 const char *__builtin_FILE();
2746 const char *__builtin_FUNCTION();
2747 unsigned __builtin_LINE();
2748 unsigned __builtin_COLUMN(); // Clang only
2749
2750**Example of use**:
2751
2752.. code-block:: c++
2753
2754 void my_assert(bool pred, int line = __builtin_LINE(), // Captures line of caller
2755 const char* file = __builtin_FILE(),
2756 const char* function = __builtin_FUNCTION()) {
2757 if (pred) return;
2758 printf("%s:%d assertion failed in function %s\n", file, line, function);
2759 std::abort();
2760 }
2761
2762 struct MyAggregateType {
2763 int x;
2764 int line = __builtin_LINE(); // captures line where aggregate initialization occurs
2765 };
2766 static_assert(MyAggregateType{42}.line == __LINE__);
2767
2768 struct MyClassType {
2769 int line = __builtin_LINE(); // captures line of the constructor used during initialization
2770 constexpr MyClassType(int) { assert(line == __LINE__); }
2771 };
2772
2773**Description**:
2774
2775The builtins ``__builtin_LINE``, ``__builtin_FUNCTION``, and ``__builtin_FILE`` return
2776the values, at the "invocation point", for ``__LINE__``, ``__FUNCTION__``, and
2777``__FILE__`` respectively. These builtins are constant expressions.
2778
2779When the builtins appear as part of a default function argument the invocation
2780point is the location of the caller. When the builtins appear as part of a
2781default member initializer, the invocation point is the location of the
2782constructor or aggregate initialization used to create the object. Otherwise
2783the invocation point is the same as the location of the builtin.
2784
2785When the invocation point of ``__builtin_FUNCTION`` is not a function scope the
2786empty string is returned.
2787
Sean Silva709c44d2012-12-12 23:44:55 +00002788Non-standard C++11 Attributes
2789=============================
2790
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002791Clang's non-standard C++11 attributes live in the ``clang`` attribute
2792namespace.
Sean Silva709c44d2012-12-12 23:44:55 +00002793
Aaron Ballman68893db2014-02-19 23:21:40 +00002794Clang supports GCC's ``gnu`` attribute namespace. All GCC attributes which
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002795are accepted with the ``__attribute__((foo))`` syntax are also accepted as
2796``[[gnu::foo]]``. This only extends to attributes which are specified by GCC
2797(see the list of `GCC function attributes
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +00002798<https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_, `GCC variable
2799attributes <https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html>`_, and
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002800`GCC type attributes
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +00002801<https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html>`_). As with the GCC
Richard Smithf6d2d3b2013-02-14 00:13:34 +00002802implementation, these attributes must appertain to the *declarator-id* in a
2803declaration, which means they must go either at the start of the declaration or
2804immediately after the name being declared.
2805
2806For example, this applies the GNU ``unused`` attribute to ``a`` and ``f``, and
2807also applies the GNU ``noreturn`` attribute to ``f``.
2808
2809.. code-block:: c++
2810
2811 [[gnu::unused]] int a, f [[gnu::noreturn]] ();
2812
Sean Silva709c44d2012-12-12 23:44:55 +00002813Target-Specific Extensions
2814==========================
2815
2816Clang supports some language features conditionally on some targets.
2817
Yi Kong4de26fb2014-07-23 09:25:02 +00002818ARM/AArch64 Language Extensions
2819-------------------------------
2820
2821Memory Barrier Intrinsics
2822^^^^^^^^^^^^^^^^^^^^^^^^^
2823Clang implements the ``__dmb``, ``__dsb`` and ``__isb`` intrinsics as defined
2824in the `ARM C Language Extensions Release 2.0
2825<http://infocenter.arm.com/help/topic/com.arm.doc.ihi0053c/IHI0053C_acle_2_0.pdf>`_.
2826Note that these intrinsics are implemented as motion barriers that block
2827reordering of memory accesses and side effect instructions. Other instructions
Sylvestre Ledrube8f3962016-02-14 20:20:58 +00002828like simple arithmetic may be reordered around the intrinsic. If you expect to
Yi Kong4de26fb2014-07-23 09:25:02 +00002829have no reordering at all, use inline assembly instead.
2830
Sean Silva709c44d2012-12-12 23:44:55 +00002831X86/X86-64 Language Extensions
2832------------------------------
2833
2834The X86 backend has these language extensions:
2835
David L Kreitzerd8984102016-05-03 20:20:59 +00002836Memory references to specified segments
2837^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sean Silva709c44d2012-12-12 23:44:55 +00002838
2839Annotating a pointer with address space #256 causes it to be code generated
David L Kreitzerd8984102016-05-03 20:20:59 +00002840relative to the X86 GS segment register, address space #257 causes it to be
2841relative to the X86 FS segment, and address space #258 causes it to be
2842relative to the X86 SS segment. Note that this is a very very low-level
Sean Silva709c44d2012-12-12 23:44:55 +00002843feature that should only be used if you know what you're doing (for example in
2844an OS kernel).
2845
2846Here is an example:
2847
2848.. code-block:: c++
2849
2850 #define GS_RELATIVE __attribute__((address_space(256)))
2851 int foo(int GS_RELATIVE *P) {
2852 return *P;
2853 }
2854
2855Which compiles to (on X86-32):
2856
2857.. code-block:: gas
2858
2859 _foo:
2860 movl 4(%esp), %eax
2861 movl %gs:(%eax), %eax
2862 ret
2863
JF Bastienfff5dc02019-07-14 18:33:51 +00002864You can also use the GCC compatibility macros ``__seg_fs`` and ``__seg_gs`` for
2865the same purpose. The preprocessor symbols ``__SEG_FS`` and ``__SEG_GS``
2866indicate their support.
2867
Kang Zhange5ac3852019-03-29 09:11:52 +00002868PowerPC Language Extensions
2869------------------------------
2870
2871Set the Floating Point Rounding Mode
David Zarzyckib0888452019-08-21 06:48:11 +00002872^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Kang Zhange5ac3852019-03-29 09:11:52 +00002873PowerPC64/PowerPC64le supports the builtin function ``__builtin_setrnd`` to set
2874the floating point rounding mode. This function will use the least significant
2875two bits of integer argument to set the floating point rounding mode.
2876
2877.. code-block:: c++
2878
2879 double __builtin_setrnd(int mode);
2880
2881The effective values for mode are:
2882
2883 - 0 - round to nearest
2884 - 1 - round to zero
2885 - 2 - round to +infinity
2886 - 3 - round to -infinity
2887
2888Note that the mode argument will modulo 4, so if the integer argument is greater
Sylvestre Ledru0adbe772019-07-09 08:50:17 +00002889than 3, it will only use the least significant two bits of the mode.
Kang Zhange5ac3852019-03-29 09:11:52 +00002890Namely, ``__builtin_setrnd(102))`` is equal to ``__builtin_setrnd(2)``.
2891
Ahsan Saghir3962d6d2019-04-29 23:25:33 +00002892PowerPC cache builtins
2893^^^^^^^^^^^^^^^^^^^^^^
2894
2895The PowerPC architecture specifies instructions implementing cache operations.
2896Clang provides builtins that give direct programmer access to these cache
2897instructions.
2898
2899Currently the following builtins are implemented in clang:
2900
2901``__builtin_dcbf`` copies the contents of a modified block from the data cache
2902to main memory and flushes the copy from the data cache.
2903
2904**Syntax**:
2905
2906.. code-block:: c
2907
2908 void __dcbf(const void* addr); /* Data Cache Block Flush */
2909
2910**Example of Use**:
2911
2912.. code-block:: c
2913
2914 int a = 1;
2915 __builtin_dcbf (&a);
2916
Jordan Rose32e94892012-12-15 00:37:01 +00002917Extensions for Static Analysis
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002918==============================
Sean Silva709c44d2012-12-12 23:44:55 +00002919
2920Clang supports additional attributes that are useful for documenting program
Jordan Rose32e94892012-12-15 00:37:01 +00002921invariants and rules for static analysis tools, such as the `Clang Static
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00002922Analyzer <https://clang-analyzer.llvm.org/>`_. These attributes are documented
Jordan Rose32e94892012-12-15 00:37:01 +00002923in the analyzer's `list of source-level annotations
Sylvestre Ledrubc5c3f52018-11-04 17:02:00 +00002924<https://clang-analyzer.llvm.org/annotations.html>`_.
Sean Silva709c44d2012-12-12 23:44:55 +00002925
Sean Silva709c44d2012-12-12 23:44:55 +00002926
Jordan Rose32e94892012-12-15 00:37:01 +00002927Extensions for Dynamic Analysis
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002928===============================
Sean Silva709c44d2012-12-12 23:44:55 +00002929
Sean Silva709c44d2012-12-12 23:44:55 +00002930Use ``__has_feature(address_sanitizer)`` to check if the code is being built
Dmitri Gribenkoace09a22012-12-15 14:25:25 +00002931with :doc:`AddressSanitizer`.
Sean Silva709c44d2012-12-12 23:44:55 +00002932
Kostya Serebryany4c0fc992013-02-26 06:58:27 +00002933Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
2934with :doc:`ThreadSanitizer`.
2935
Kostya Serebryany4c0fc992013-02-26 06:58:27 +00002936Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
2937with :doc:`MemorySanitizer`.
Dario Domizioli33c17872014-05-28 14:06:38 +00002938
Peter Collingbournec4122c12015-06-15 21:08:13 +00002939Use ``__has_feature(safe_stack)`` to check if the code is being built
2940with :doc:`SafeStack`.
2941
Dario Domizioli33c17872014-05-28 14:06:38 +00002942
2943Extensions for selectively disabling optimization
2944=================================================
2945
2946Clang provides a mechanism for selectively disabling optimizations in functions
2947and methods.
2948
2949To disable optimizations in a single function definition, the GNU-style or C++11
2950non-standard attribute ``optnone`` can be used.
2951
2952.. code-block:: c++
2953
2954 // The following functions will not be optimized.
2955 // GNU-style attribute
2956 __attribute__((optnone)) int foo() {
2957 // ... code
2958 }
2959 // C++11 attribute
2960 [[clang::optnone]] int bar() {
2961 // ... code
2962 }
2963
2964To facilitate disabling optimization for a range of function definitions, a
2965range-based pragma is provided. Its syntax is ``#pragma clang optimize``
2966followed by ``off`` or ``on``.
2967
2968All function definitions in the region between an ``off`` and the following
2969``on`` will be decorated with the ``optnone`` attribute unless doing so would
2970conflict with explicit attributes already present on the function (e.g. the
2971ones that control inlining).
2972
2973.. code-block:: c++
2974
2975 #pragma clang optimize off
2976 // This function will be decorated with optnone.
2977 int foo() {
2978 // ... code
2979 }
2980
2981 // optnone conflicts with always_inline, so bar() will not be decorated.
2982 __attribute__((always_inline)) int bar() {
2983 // ... code
2984 }
2985 #pragma clang optimize on
2986
2987If no ``on`` is found to close an ``off`` region, the end of the region is the
2988end of the compilation unit.
2989
2990Note that a stray ``#pragma clang optimize on`` does not selectively enable
2991additional optimizations when compiling at low optimization levels. This feature
2992can only be used to selectively disable optimizations.
2993
2994The pragma has an effect on functions only at the point of their definition; for
2995function templates, this means that the state of the pragma at the point of an
2996instantiation is not necessarily relevant. Consider the following example:
2997
2998.. code-block:: c++
2999
3000 template<typename T> T twice(T t) {
3001 return 2 * t;
3002 }
3003
3004 #pragma clang optimize off
3005 template<typename T> T thrice(T t) {
3006 return 3 * t;
3007 }
3008
3009 int container(int a, int b) {
3010 return twice(a) + thrice(b);
3011 }
3012 #pragma clang optimize on
3013
3014In this example, the definition of the template function ``twice`` is outside
3015the pragma region, whereas the definition of ``thrice`` is inside the region.
3016The ``container`` function is also in the region and will not be optimized, but
3017it causes the instantiation of ``twice`` and ``thrice`` with an ``int`` type; of
3018these two instantiations, ``twice`` will be optimized (because its definition
3019was outside the region) and ``thrice`` will not be optimized.
Tyler Nowickidb2668a2014-06-18 00:51:32 +00003020
3021Extensions for loop hint optimizations
3022======================================
3023
3024The ``#pragma clang loop`` directive is used to specify hints for optimizing the
3025subsequent for, while, do-while, or c++11 range-based for loop. The directive
Sjoerd Meijera48f58c2019-07-25 07:33:13 +00003026provides options for vectorization, interleaving, predication, unrolling and
Adam Nemet2de463e2016-06-14 12:04:26 +00003027distribution. Loop hints can be specified before any loop and will be ignored if
3028the optimization is not safe to apply.
Eli Bendersky778268d2014-06-19 18:12:44 +00003029
Sjoerd Meijera48f58c2019-07-25 07:33:13 +00003030Vectorization, Interleaving, and Predication
3031--------------------------------------------
Tyler Nowickidb2668a2014-06-18 00:51:32 +00003032
3033A vectorized loop performs multiple iterations of the original loop
3034in parallel using vector instructions. The instruction set of the target
3035processor determines which vector instructions are available and their vector
3036widths. This restricts the types of loops that can be vectorized. The vectorizer
3037automatically determines if the loop is safe and profitable to vectorize. A
3038vector instruction cost model is used to select the vector width.
3039
3040Interleaving multiple loop iterations allows modern processors to further
3041improve instruction-level parallelism (ILP) using advanced hardware features,
3042such as multiple execution units and out-of-order execution. The vectorizer uses
3043a cost model that depends on the register pressure and generated code size to
3044select the interleaving count.
3045
3046Vectorization is enabled by ``vectorize(enable)`` and interleaving is enabled
3047by ``interleave(enable)``. This is useful when compiling with ``-Os`` to
3048manually enable vectorization or interleaving.
3049
3050.. code-block:: c++
3051
3052 #pragma clang loop vectorize(enable)
3053 #pragma clang loop interleave(enable)
3054 for(...) {
3055 ...
3056 }
3057
3058The vector width is specified by ``vectorize_width(_value_)`` and the interleave
3059count is specified by ``interleave_count(_value_)``, where
3060_value_ is a positive integer. This is useful for specifying the optimal
3061width/count of the set of target architectures supported by your application.
3062
3063.. code-block:: c++
3064
Tyler Nowickidb2668a2014-06-18 00:51:32 +00003065 #pragma clang loop vectorize_width(2)
3066 #pragma clang loop interleave_count(2)
3067 for(...) {
3068 ...
3069 }
3070
3071Specifying a width/count of 1 disables the optimization, and is equivalent to
3072``vectorize(disable)`` or ``interleave(disable)``.
3073
Sjoerd Meijera48f58c2019-07-25 07:33:13 +00003074Vector predication is enabled by ``vectorize_predicate(enable)``, for example:
3075
3076.. code-block:: c++
3077
3078 #pragma clang loop vectorize(enable)
3079 #pragma clang loop vectorize_predicate(enable)
3080 for(...) {
3081 ...
3082 }
3083
3084This predicates (masks) all instructions in the loop, which allows the scalar
3085remainder loop (the tail) to be folded into the main vectorized loop. This
3086might be more efficient when vector predication is efficiently supported by the
3087target platform.
3088
Eli Bendersky778268d2014-06-19 18:12:44 +00003089Loop Unrolling
3090--------------
3091
3092Unrolling a loop reduces the loop control overhead and exposes more
3093opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
3094eliminates the loop and replaces it with an enumerated sequence of loop
3095iterations. Full unrolling is only possible if the loop trip count is known at
3096compile time. Partial unrolling replicates the loop body within the loop and
3097reduces the trip count.
3098
Mark Heffernan397a98d2015-08-10 17:29:39 +00003099If ``unroll(enable)`` is specified the unroller will attempt to fully unroll the
Mark Heffernan7ccb5e22015-07-13 18:31:37 +00003100loop if the trip count is known at compile time. If the fully unrolled code size
3101is greater than an internal limit the loop will be partially unrolled up to this
Mark Heffernan397a98d2015-08-10 17:29:39 +00003102limit. If the trip count is not known at compile time the loop will be partially
3103unrolled with a heuristically chosen unroll factor.
3104
3105.. code-block:: c++
3106
3107 #pragma clang loop unroll(enable)
3108 for(...) {
3109 ...
3110 }
3111
3112If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
3113loop if the trip count is known at compile time identically to
3114``unroll(enable)``. However, with ``unroll(full)`` the loop will not be unrolled
3115if the loop count is not known at compile time.
Eli Bendersky778268d2014-06-19 18:12:44 +00003116
3117.. code-block:: c++
3118
Mark Heffernan450c2382014-07-23 17:31:31 +00003119 #pragma clang loop unroll(full)
Eli Bendersky778268d2014-06-19 18:12:44 +00003120 for(...) {
3121 ...
3122 }
3123
3124The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
3125_value_ is a positive integer. If this value is greater than the trip count the
3126loop will be fully unrolled. Otherwise the loop is partially unrolled subject
Mark Heffernan397a98d2015-08-10 17:29:39 +00003127to the same code size limit as with ``unroll(enable)``.
Eli Bendersky778268d2014-06-19 18:12:44 +00003128
3129.. code-block:: c++
3130
3131 #pragma clang loop unroll_count(8)
3132 for(...) {
3133 ...
3134 }
3135
3136Unrolling of a loop can be prevented by specifying ``unroll(disable)``.
3137
Adam Nemet2de463e2016-06-14 12:04:26 +00003138Loop Distribution
3139-----------------
3140
3141Loop Distribution allows splitting a loop into multiple loops. This is
3142beneficial for example when the entire loop cannot be vectorized but some of the
3143resulting loops can.
3144
Adam Nemet0c58eb72016-06-14 19:33:16 +00003145If ``distribute(enable))`` is specified and the loop has memory dependencies
Adam Nemet2de463e2016-06-14 12:04:26 +00003146that inhibit vectorization, the compiler will attempt to isolate the offending
3147operations into a new loop. This optimization is not enabled by default, only
3148loops marked with the pragma are considered.
3149
3150.. code-block:: c++
3151
3152 #pragma clang loop distribute(enable)
3153 for (i = 0; i < N; ++i) {
3154 S1: A[i + 1] = A[i] + B[i];
3155 S2: C[i] = D[i] * E[i];
3156 }
3157
3158This loop will be split into two loops between statements S1 and S2. The
3159second loop containing S2 will be vectorized.
3160
3161Loop Distribution is currently not enabled by default in the optimizer because
3162it can hurt performance in some cases. For example, instruction-level
3163parallelism could be reduced by sequentializing the execution of the
3164statements S1 and S2 above.
3165
3166If Loop Distribution is turned on globally with
3167``-mllvm -enable-loop-distribution``, specifying ``distribute(disable)`` can
3168be used the disable it on a per-loop basis.
3169
Eli Bendersky778268d2014-06-19 18:12:44 +00003170Additional Information
3171----------------------
3172
Tyler Nowickidb2668a2014-06-18 00:51:32 +00003173For convenience multiple loop hints can be specified on a single line.
3174
3175.. code-block:: c++
3176
3177 #pragma clang loop vectorize_width(4) interleave_count(8)
3178 for(...) {
3179 ...
3180 }
3181
3182If an optimization cannot be applied any hints that apply to it will be ignored.
3183For example, the hint ``vectorize_width(4)`` is ignored if the loop is not
3184proven safe to vectorize. To identify and diagnose optimization issues use
3185`-Rpass`, `-Rpass-missed`, and `-Rpass-analysis` command line options. See the
3186user guide for details.
Adam Nemet60d32642017-04-04 21:18:36 +00003187
3188Extensions to specify floating-point flags
3189====================================================
3190
3191The ``#pragma clang fp`` pragma allows floating-point options to be specified
3192for a section of the source code. This pragma can only appear at file scope or
3193at the start of a compound statement (excluding comments). When using within a
3194compound statement, the pragma is active within the scope of the compound
3195statement.
3196
3197Currently, only FP contraction can be controlled with the pragma. ``#pragma
3198clang fp contract`` specifies whether the compiler should contract a multiply
3199and an addition (or subtraction) into a fused FMA operation when supported by
3200the target.
3201
3202The pragma can take three values: ``on``, ``fast`` and ``off``. The ``on``
3203option is identical to using ``#pragma STDC FP_CONTRACT(ON)`` and it allows
3204fusion as specified the language standard. The ``fast`` option allows fusiong
3205in cases when the language standard does not make this possible (e.g. across
3206statements in C)
3207
3208.. code-block:: c++
3209
3210 for(...) {
3211 #pragma clang fp contract(fast)
3212 a = b[i] * c[i];
3213 d[i] += a;
3214 }
3215
3216
Adam Nemete73e00c2017-04-04 22:45:20 +00003217The pragma can also be used with ``off`` which turns FP contraction off for a
Adam Nemet60d32642017-04-04 21:18:36 +00003218section of the code. This can be useful when fast contraction is otherwise
Adam Nemetd7f95112017-04-04 23:46:34 +00003219enabled for the translation unit with the ``-ffp-contract=fast`` flag.
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003220
3221Specifying an attribute for multiple declarations (#pragma clang attribute)
3222===========================================================================
3223
3224The ``#pragma clang attribute`` directive can be used to apply an attribute to
3225multiple declarations. The ``#pragma clang attribute push`` variation of the
Erik Pilkington7d180942018-10-29 17:38:42 +00003226directive pushes a new "scope" of ``#pragma clang attribute`` that attributes
3227can be added to. The ``#pragma clang attribute (...)`` variation adds an
3228attribute to that scope, and the ``#pragma clang attribute pop`` variation pops
3229the scope. You can also use ``#pragma clang attribute push (...)``, which is a
3230shorthand for when you want to add one attribute to a new scope. Multiple push
3231directives can be nested inside each other.
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003232
3233The attributes that are used in the ``#pragma clang attribute`` directives
3234can be written using the GNU-style syntax:
3235
3236.. code-block:: c++
3237
Erik Pilkington7d180942018-10-29 17:38:42 +00003238 #pragma clang attribute push (__attribute__((annotate("custom"))), apply_to = function)
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003239
3240 void function(); // The function now has the annotate("custom") attribute
3241
3242 #pragma clang attribute pop
3243
3244The attributes can also be written using the C++11 style syntax:
3245
3246.. code-block:: c++
3247
Erik Pilkington7d180942018-10-29 17:38:42 +00003248 #pragma clang attribute push ([[noreturn]], apply_to = function)
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003249
3250 void function(); // The function now has the [[noreturn]] attribute
3251
3252 #pragma clang attribute pop
3253
3254The ``__declspec`` style syntax is also supported:
3255
3256.. code-block:: c++
3257
Erik Pilkington7d180942018-10-29 17:38:42 +00003258 #pragma clang attribute push (__declspec(dllexport), apply_to = function)
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003259
3260 void function(); // The function now has the __declspec(dllexport) attribute
3261
3262 #pragma clang attribute pop
3263
3264A single push directive accepts only one attribute regardless of the syntax
3265used.
3266
Erik Pilkington0876cae2018-12-20 22:32:04 +00003267Because multiple push directives can be nested, if you're writing a macro that
3268expands to ``_Pragma("clang attribute")`` it's good hygiene (though not
3269required) to add a namespace to your push/pop directives. A pop directive with a
3270namespace will pop the innermost push that has that same namespace. This will
3271ensure that another macro's ``pop`` won't inadvertently pop your attribute. Note
3272that an ``pop`` without a namespace will pop the innermost ``push`` without a
3273namespace. ``push``es with a namespace can only be popped by ``pop`` with the
3274same namespace. For instance:
3275
3276.. code-block:: c++
3277
3278 #define ASSUME_NORETURN_BEGIN _Pragma("clang attribute AssumeNoreturn.push ([[noreturn]], apply_to = function)")
3279 #define ASSUME_NORETURN_END _Pragma("clang attribute AssumeNoreturn.pop")
3280
3281 #define ASSUME_UNAVAILABLE_BEGIN _Pragma("clang attribute Unavailable.push (__attribute__((unavailable)), apply_to=function)")
3282 #define ASSUME_UNAVAILABLE_END _Pragma("clang attribute Unavailable.pop")
3283
3284
3285 ASSUME_NORETURN_BEGIN
3286 ASSUME_UNAVAILABLE_BEGIN
3287 void function(); // function has [[noreturn]] and __attribute__((unavailable))
3288 ASSUME_NORETURN_END
3289 void other_function(); // function has __attribute__((unavailable))
3290 ASSUME_UNAVAILABLE_END
3291
3292Without the namespaces on the macros, ``other_function`` will be annotated with
3293``[[noreturn]]`` instead of ``__attribute__((unavailable))``. This may seem like
3294a contrived example, but its very possible for this kind of situation to appear
Erik Pilkingtonb460f162019-01-07 21:54:00 +00003295in real code if the pragmas are spread out across a large file. You can test if
3296your version of clang supports namespaces on ``#pragma clang attribute`` with
Erik Pilkington6ccc1732019-01-08 18:24:39 +00003297``__has_extension(pragma_clang_attribute_namespaces)``.
Erik Pilkington0876cae2018-12-20 22:32:04 +00003298
Alex Lorenz9e7bf162017-04-18 14:33:39 +00003299Subject Match Rules
3300-------------------
3301
3302The set of declarations that receive a single attribute from the attribute stack
3303depends on the subject match rules that were specified in the pragma. Subject
3304match rules are specified after the attribute. The compiler expects an
3305identifier that corresponds to the subject set specifier. The ``apply_to``
3306specifier is currently the only supported subject set specifier. It allows you
3307to specify match rules that form a subset of the attribute's allowed subject
3308set, i.e. the compiler doesn't require all of the attribute's subjects. For
3309example, an attribute like ``[[nodiscard]]`` whose subject set includes
3310``enum``, ``record`` and ``hasType(functionType)``, requires the presence of at
3311least one of these rules after ``apply_to``:
3312
3313.. code-block:: c++
3314
3315 #pragma clang attribute push([[nodiscard]], apply_to = enum)
3316
3317 enum Enum1 { A1, B1 }; // The enum will receive [[nodiscard]]
3318
3319 struct Record1 { }; // The struct will *not* receive [[nodiscard]]
3320
3321 #pragma clang attribute pop
3322
3323 #pragma clang attribute push([[nodiscard]], apply_to = any(record, enum))
3324
3325 enum Enum2 { A2, B2 }; // The enum will receive [[nodiscard]]
3326
3327 struct Record2 { }; // The struct *will* receive [[nodiscard]]
3328
3329 #pragma clang attribute pop
3330
3331 // This is an error, since [[nodiscard]] can't be applied to namespaces:
3332 #pragma clang attribute push([[nodiscard]], apply_to = any(record, namespace))
3333
3334 #pragma clang attribute pop
3335
3336Multiple match rules can be specified using the ``any`` match rule, as shown
3337in the example above. The ``any`` rule applies attributes to all declarations
3338that are matched by at least one of the rules in the ``any``. It doesn't nest
3339and can't be used inside the other match rules. Redundant match rules or rules
3340that conflict with one another should not be used inside of ``any``.
3341
3342Clang supports the following match rules:
3343
3344- ``function``: Can be used to apply attributes to functions. This includes C++
3345 member functions, static functions, operators, and constructors/destructors.
3346
3347- ``function(is_member)``: Can be used to apply attributes to C++ member
3348 functions. This includes members like static functions, operators, and
3349 constructors/destructors.
3350
3351- ``hasType(functionType)``: Can be used to apply attributes to functions, C++
3352 member functions, and variables/fields whose type is a function pointer. It
3353 does not apply attributes to Objective-C methods or blocks.
3354
3355- ``type_alias``: Can be used to apply attributes to ``typedef`` declarations
3356 and C++11 type aliases.
3357
3358- ``record``: Can be used to apply attributes to ``struct``, ``class``, and
3359 ``union`` declarations.
3360
3361- ``record(unless(is_union))``: Can be used to apply attributes only to
3362 ``struct`` and ``class`` declarations.
3363
3364- ``enum``: Can be be used to apply attributes to enumeration declarations.
3365
3366- ``enum_constant``: Can be used to apply attributes to enumerators.
3367
3368- ``variable``: Can be used to apply attributes to variables, including
3369 local variables, parameters, global variables, and static member variables.
3370 It does not apply attributes to instance member variables or Objective-C
3371 ivars.
3372
3373- ``variable(is_thread_local)``: Can be used to apply attributes to thread-local
3374 variables only.
3375
3376- ``variable(is_global)``: Can be used to apply attributes to global variables
3377 only.
3378
3379- ``variable(is_parameter)``: Can be used to apply attributes to parameters
3380 only.
3381
3382- ``variable(unless(is_parameter))``: Can be used to apply attributes to all
3383 the variables that are not parameters.
3384
3385- ``field``: Can be used to apply attributes to non-static member variables
3386 in a record. This includes Objective-C ivars.
3387
3388- ``namespace``: Can be used to apply attributes to ``namespace`` declarations.
3389
3390- ``objc_interface``: Can be used to apply attributes to ``@interface``
3391 declarations.
3392
3393- ``objc_protocol``: Can be used to apply attributes to ``@protocol``
3394 declarations.
3395
3396- ``objc_category``: Can be used to apply attributes to category declarations,
3397 including class extensions.
3398
3399- ``objc_method``: Can be used to apply attributes to Objective-C methods,
3400 including instance and class methods. Implicit methods like implicit property
3401 getters and setters do not receive the attribute.
3402
3403- ``objc_method(is_instance)``: Can be used to apply attributes to Objective-C
3404 instance methods.
3405
3406- ``objc_property``: Can be used to apply attributes to ``@property``
3407 declarations.
3408
3409- ``block``: Can be used to apply attributes to block declarations. This does
3410 not include variables/fields of block pointer type.
3411
3412The use of ``unless`` in match rules is currently restricted to a strict set of
3413sub-rules that are used by the supported attributes. That means that even though
3414``variable(unless(is_parameter))`` is a valid match rule,
3415``variable(unless(is_thread_local))`` is not.
3416
3417Supported Attributes
3418--------------------
3419
3420Not all attributes can be used with the ``#pragma clang attribute`` directive.
3421Notably, statement attributes like ``[[fallthrough]]`` or type attributes
3422like ``address_space`` aren't supported by this directive. You can determine
3423whether or not an attribute is supported by the pragma by referring to the
3424:doc:`individual documentation for that attribute <AttributeReference>`.
3425
3426The attributes are applied to all matching declarations individually, even when
3427the attribute is semantically incorrect. The attributes that aren't applied to
3428any declaration are not verified semantically.
Javed Absar2a67c9e2017-06-05 10:11:57 +00003429
3430Specifying section names for global objects (#pragma clang section)
3431===================================================================
3432
3433The ``#pragma clang section`` directive provides a means to assign section-names
3434to global variables, functions and static variables.
3435
3436The section names can be specified as:
3437
3438.. code-block:: c++
3439
3440 #pragma clang section bss="myBSS" data="myData" rodata="myRodata" text="myText"
3441
3442The section names can be reverted back to default name by supplying an empty
3443string to the section kind, for example:
3444
3445.. code-block:: c++
3446
3447 #pragma clang section bss="" data="" text="" rodata=""
3448
3449The ``#pragma clang section`` directive obeys the following rules:
3450
3451* The pragma applies to all global variable, statics and function declarations
3452 from the pragma to the end of the translation unit.
3453
3454* The pragma clang section is enabled automatically, without need of any flags.
3455
3456* This feature is only defined to work sensibly for ELF targets.
3457
3458* If section name is specified through _attribute_((section("myname"))), then
3459 the attribute name gains precedence.
3460
3461* Global variables that are initialized to zero will be placed in the named
3462 bss section, if one is present.
3463
3464* The ``#pragma clang section`` directive does not does try to infer section-kind
3465 from the name. For example, naming a section "``.bss.mySec``" does NOT mean
3466 it will be a bss section name.
3467
3468* The decision about which section-kind applies to each global is taken in the back-end.
3469 Once the section-kind is known, appropriate section name, as specified by the user using
3470 ``#pragma clang section`` directive, is applied to that global.
Saleem Abdulrasoolfd4db532018-02-07 01:46:46 +00003471
3472Specifying Linker Options on ELF Targets
3473========================================
3474
3475The ``#pragma comment(lib, ...)`` directive is supported on all ELF targets.
3476The second parameter is the library name (without the traditional Unix prefix of
3477``lib``). This allows you to provide an implicit link of dependent libraries.
Erik Pilkington9c3b5882019-01-30 20:34:53 +00003478
3479Evaluating Object Size Dynamically
3480==================================
3481
3482Clang supports the builtin ``__builtin_dynamic_object_size``, the semantics are
3483the same as GCC's ``__builtin_object_size`` (which Clang also supports), but
3484``__builtin_dynamic_object_size`` can evaluate the object's size at runtime.
3485``__builtin_dynamic_object_size`` is meant to be used as a drop-in replacement
3486for ``__builtin_object_size`` in libraries that support it.
3487
3488For instance, here is a program that ``__builtin_dynamic_object_size`` will make
3489safer:
3490
3491.. code-block:: c
3492
3493 void copy_into_buffer(size_t size) {
3494 char* buffer = malloc(size);
3495 strlcpy(buffer, "some string", strlen("some string"));
3496 // Previous line preprocesses to:
3497 // __builtin___strlcpy_chk(buffer, "some string", strlen("some string"), __builtin_object_size(buffer, 0))
3498 }
3499
3500Since the size of ``buffer`` can't be known at compile time, Clang will fold
3501``__builtin_object_size(buffer, 0)`` into ``-1``. However, if this was written
3502as ``__builtin_dynamic_object_size(buffer, 0)``, Clang will fold it into
3503``size``, providing some extra runtime safety.