blob: 115a217c4c19805f9c13c5253d580ba1fb981357 [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001..
2 -------------------------------------------------------------------
3 NOTE: This file is automatically generated by running clang-tblgen
4 -gen-attr-docs. Do not edit this file by hand!!
5 -------------------------------------------------------------------
6
7===================
8Attributes in Clang
9===================
10.. contents::
11 :local:
12
13Introduction
14============
15
16This page lists the attributes currently supported by Clang.
17
18Function Attributes
19===================
20
21
22interrupt
23---------
24.. csv-table:: Supported Syntaxes
25 :header: "GNU", "C++11", "__declspec", "Keyword"
26
27 "X","","",""
28
29Clang supports the GNU style ``__attribute__((interrupt("TYPE")))`` attribute on
30ARM targets. This attribute may be attached to a function definition and
31instructs the backend to generate appropriate function entry/exit code so that
32it can be used directly as an interrupt service routine.
33
34The parameter passed to the interrupt attribute is optional, but if
35provided it must be a string literal with one of the following values: "IRQ",
36"FIQ", "SWI", "ABORT", "UNDEF".
37
38The semantics are as follows:
39
40- If the function is AAPCS, Clang instructs the backend to realign the stack to
41 8 bytes on entry. This is a general requirement of the AAPCS at public
42 interfaces, but may not hold when an exception is taken. Doing this allows
43 other AAPCS functions to be called.
44- If the CPU is M-class this is all that needs to be done since the architecture
45 itself is designed in such a way that functions obeying the normal AAPCS ABI
46 constraints are valid exception handlers.
47- If the CPU is not M-class, the prologue and epilogue are modified to save all
48 non-banked registers that are used, so that upon return the user-mode state
49 will not be corrupted. Note that to avoid unnecessary overhead, only
50 general-purpose (integer) registers are saved in this way. If VFP operations
51 are needed, that state must be saved manually.
52
53 Specifically, interrupt kinds other than "FIQ" will save all core registers
54 except "lr" and "sp". "FIQ" interrupts will save r0-r7.
55- If the CPU is not M-class, the return instruction is changed to one of the
56 canonical sequences permitted by the architecture for exception return. Where
57 possible the function itself will make the necessary "lr" adjustments so that
58 the "preferred return address" is selected.
59
60 Unfortunately the compiler is unable to make this guarantee for an "UNDEF"
61 handler, where the offset from "lr" to the preferred return address depends on
62 the execution state of the code which generated the exception. In this case
63 a sequence equivalent to "movs pc, lr" will be used.
64
65
66acquire_capability (acquire_shared_capability, clang::acquire_capability, clang::acquire_shared_capability)
67-----------------------------------------------------------------------------------------------------------
68.. csv-table:: Supported Syntaxes
69 :header: "GNU", "C++11", "__declspec", "Keyword"
70
71 "X","X","",""
72
73Marks a function as acquiring a capability.
74
75
76assert_capability (assert_shared_capability, clang::assert_capability, clang::assert_shared_capability)
77-------------------------------------------------------------------------------------------------------
78.. csv-table:: Supported Syntaxes
79 :header: "GNU", "C++11", "__declspec", "Keyword"
80
81 "X","X","",""
82
83Marks a function that dynamically tests whether a capability is held, and halts
84the program if it is not held.
85
86
87availability
88------------
89.. csv-table:: Supported Syntaxes
90 :header: "GNU", "C++11", "__declspec", "Keyword"
91
92 "X","","",""
93
94The ``availability`` attribute can be placed on declarations to describe the
95lifecycle of that declaration relative to operating system versions. Consider
96the function declaration for a hypothetical function ``f``:
97
98.. code-block:: c++
99
100 void f(void) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,obsoleted=10.7)));
101
102The availability attribute states that ``f`` was introduced in Mac OS X 10.4,
103deprecated in Mac OS X 10.6, and obsoleted in Mac OS X 10.7. This information
104is used by Clang to determine when it is safe to use ``f``: for example, if
105Clang is instructed to compile code for Mac OS X 10.5, a call to ``f()``
106succeeds. If Clang is instructed to compile code for Mac OS X 10.6, the call
107succeeds but Clang emits a warning specifying that the function is deprecated.
108Finally, if Clang is instructed to compile code for Mac OS X 10.7, the call
109fails because ``f()`` is no longer available.
110
111The availability attribute is a comma-separated list starting with the
112platform name and then including clauses specifying important milestones in the
113declaration's lifetime (in any order) along with additional information. Those
114clauses can be:
115
116introduced=\ *version*
117 The first version in which this declaration was introduced.
118
119deprecated=\ *version*
120 The first version in which this declaration was deprecated, meaning that
121 users should migrate away from this API.
122
123obsoleted=\ *version*
124 The first version in which this declaration was obsoleted, meaning that it
125 was removed completely and can no longer be used.
126
127unavailable
128 This declaration is never available on this platform.
129
130message=\ *string-literal*
131 Additional message text that Clang will provide when emitting a warning or
132 error about use of a deprecated or obsoleted declaration. Useful to direct
133 users to replacement APIs.
134
135Multiple availability attributes can be placed on a declaration, which may
136correspond to different platforms. Only the availability attribute with the
137platform corresponding to the target platform will be used; any others will be
138ignored. If no availability attribute specifies availability for the current
139target platform, the availability attributes are ignored. Supported platforms
140are:
141
142``ios``
143 Apple's iOS operating system. The minimum deployment target is specified by
144 the ``-mios-version-min=*version*`` or ``-miphoneos-version-min=*version*``
145 command-line arguments.
146
147``macosx``
148 Apple's Mac OS X operating system. The minimum deployment target is
149 specified by the ``-mmacosx-version-min=*version*`` command-line argument.
150
151A declaration can be used even when deploying back to a platform version prior
152to when the declaration was introduced. When this happens, the declaration is
153`weakly linked
154<https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html>`_,
155as if the ``weak_import`` attribute were added to the declaration. A
156weakly-linked declaration may or may not be present a run-time, and a program
157can determine whether the declaration is present by checking whether the
158address of that declaration is non-NULL.
159
160If there are multiple declarations of the same entity, the availability
161attributes must either match on a per-platform basis or later
162declarations must not have availability attributes for that
163platform. For example:
164
165.. code-block:: c
166
167 void g(void) __attribute__((availability(macosx,introduced=10.4)));
168 void g(void) __attribute__((availability(macosx,introduced=10.4))); // okay, matches
169 void g(void) __attribute__((availability(ios,introduced=4.0))); // okay, adds a new platform
170 void g(void); // okay, inherits both macosx and ios availability from above.
171 void g(void) __attribute__((availability(macosx,introduced=10.5))); // error: mismatch
172
173When one method overrides another, the overriding method can be more widely available than the overridden method, e.g.,:
174
175.. code-block:: objc
176
177 @interface A
178 - (id)method __attribute__((availability(macosx,introduced=10.4)));
179 - (id)method2 __attribute__((availability(macosx,introduced=10.4)));
180 @end
181
182 @interface B : A
183 - (id)method __attribute__((availability(macosx,introduced=10.3))); // okay: method moved into base class later
184 - (id)method __attribute__((availability(macosx,introduced=10.5))); // error: this method was available via the base class in 10.4
185 @end
186
187
188_Noreturn
189---------
190.. csv-table:: Supported Syntaxes
191 :header: "GNU", "C++11", "__declspec", "Keyword"
192
193 "","","","X"
194
195A function declared as ``_Noreturn`` shall not return to its caller. The
196compiler will generate a diagnostic for a function declared as ``_Noreturn``
197that appears to be capable of returning to its caller.
198
199
200noreturn
201--------
202.. csv-table:: Supported Syntaxes
203 :header: "GNU", "C++11", "__declspec", "Keyword"
204
205 "","X","",""
206
207A function declared as ``[[noreturn]]`` shall not return to its caller. The
208compiler will generate a diagnostic for a function declared as ``[[noreturn]]``
209that appears to be capable of returning to its caller.
210
211
212carries_dependency
213------------------
214.. csv-table:: Supported Syntaxes
215 :header: "GNU", "C++11", "__declspec", "Keyword"
216
217 "X","X","",""
218
219The ``carries_dependency`` attribute specifies dependency propagation into and
220out of functions.
221
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700222When specified on a function or Objective-C method, the ``carries_dependency``
Stephen Hines651f13c2014-04-23 16:59:28 -0700223attribute means that the return value carries a dependency out of the function,
224so that the implementation need not constrain ordering upon return from that
225function. Implementations of the function and its caller may choose to preserve
226dependencies instead of emitting memory ordering instructions such as fences.
227
228Note, this attribute does not change the meaning of the program, but may result
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700229in generation of more efficient code.
Stephen Hines651f13c2014-04-23 16:59:28 -0700230
231
232enable_if
233---------
234.. csv-table:: Supported Syntaxes
235 :header: "GNU", "C++11", "__declspec", "Keyword"
236
237 "X","","",""
238
Stephen Hines176edba2014-12-01 14:53:08 -0800239.. Note:: Some features of this attribute are experimental. The meaning of
240 multiple enable_if attributes on a single declaration is subject to change in
241 a future version of clang. Also, the ABI is not standardized and the name
242 mangling may change in future versions. To avoid that, use asm labels.
243
Stephen Hines651f13c2014-04-23 16:59:28 -0700244The ``enable_if`` attribute can be placed on function declarations to control
245which overload is selected based on the values of the function's arguments.
246When combined with the ``overloadable`` attribute, this feature is also
247available in C.
248
249.. code-block:: c++
250
251 int isdigit(int c);
252 int isdigit(int c) __attribute__((enable_if(c <= -1 || c > 255, "chosen when 'c' is out of range"))) __attribute__((unavailable("'c' must have the value of an unsigned char or EOF")));
253
254 void foo(char c) {
255 isdigit(c);
256 isdigit(10);
257 isdigit(-10); // results in a compile-time error.
258 }
259
260The enable_if attribute takes two arguments, the first is an expression written
261in terms of the function parameters, the second is a string explaining why this
262overload candidate could not be selected to be displayed in diagnostics. The
263expression is part of the function signature for the purposes of determining
264whether it is a redeclaration (following the rules used when determining
265whether a C++ template specialization is ODR-equivalent), but is not part of
266the type.
267
268The enable_if expression is evaluated as if it were the body of a
269bool-returning constexpr function declared with the arguments of the function
270it is being applied to, then called with the parameters at the callsite. If the
271result is false or could not be determined through constant expression
272evaluation, then this overload will not be chosen and the provided string may
273be used in a diagnostic if the compile fails as a result.
274
275Because the enable_if expression is an unevaluated context, there are no global
276state changes, nor the ability to pass information from the enable_if
277expression to the function body. For example, suppose we want calls to
278strnlen(strbuf, maxlen) to resolve to strnlen_chk(strbuf, maxlen, size of
279strbuf) only if the size of strbuf can be determined:
280
281.. code-block:: c++
282
283 __attribute__((always_inline))
284 static inline size_t strnlen(const char *s, size_t maxlen)
285 __attribute__((overloadable))
286 __attribute__((enable_if(__builtin_object_size(s, 0) != -1))),
287 "chosen when the buffer size is known but 'maxlen' is not")))
288 {
289 return strnlen_chk(s, maxlen, __builtin_object_size(s, 0));
290 }
291
292Multiple enable_if attributes may be applied to a single declaration. In this
293case, the enable_if expressions are evaluated from left to right in the
294following manner. First, the candidates whose enable_if expressions evaluate to
295false or cannot be evaluated are discarded. If the remaining candidates do not
296share ODR-equivalent enable_if expressions, the overload resolution is
297ambiguous. Otherwise, enable_if overload resolution continues with the next
298enable_if attribute on the candidates that have not been discarded and have
299remaining enable_if attributes. In this way, we pick the most specific
300overload out of a number of viable overloads using enable_if.
301
302.. code-block:: c++
303
304 void f() __attribute__((enable_if(true, ""))); // #1
305 void f() __attribute__((enable_if(true, ""))) __attribute__((enable_if(true, ""))); // #2
306
307 void g(int i, int j) __attribute__((enable_if(i, ""))); // #1
308 void g(int i, int j) __attribute__((enable_if(j, ""))) __attribute__((enable_if(true))); // #2
309
310In this example, a call to f() is always resolved to #2, as the first enable_if
311expression is ODR-equivalent for both declarations, but #1 does not have another
312enable_if expression to continue evaluating, so the next round of evaluation has
313only a single candidate. In a call to g(1, 1), the call is ambiguous even though
314#2 has more enable_if attributes, because the first enable_if expressions are
315not ODR-equivalent.
316
317Query for this feature with ``__has_attribute(enable_if)``.
318
319
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700320flatten (gnu::flatten)
321----------------------
322.. csv-table:: Supported Syntaxes
323 :header: "GNU", "C++11", "__declspec", "Keyword"
324
325 "X","X","",""
326
327The ``flatten`` attribute causes calls within the attributed function to
328be inlined unless it is impossible to do so, for example if the body of the
329callee is unavailable or if the callee has the ``noinline`` attribute.
330
331
Stephen Hines651f13c2014-04-23 16:59:28 -0700332format (gnu::format)
333--------------------
334.. csv-table:: Supported Syntaxes
335 :header: "GNU", "C++11", "__declspec", "Keyword"
336
337 "X","X","",""
338
339Clang supports the ``format`` attribute, which indicates that the function
340accepts a ``printf`` or ``scanf``-like format string and corresponding
341arguments or a ``va_list`` that contains these arguments.
342
343Please see `GCC documentation about format attribute
344<http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html>`_ to find details
345about attribute syntax.
346
347Clang implements two kinds of checks with this attribute.
348
349#. Clang checks that the function with the ``format`` attribute is called with
350 a format string that uses format specifiers that are allowed, and that
351 arguments match the format string. This is the ``-Wformat`` warning, it is
352 on by default.
353
354#. Clang checks that the format string argument is a literal string. This is
355 the ``-Wformat-nonliteral`` warning, it is off by default.
356
357 Clang implements this mostly the same way as GCC, but there is a difference
358 for functions that accept a ``va_list`` argument (for example, ``vprintf``).
359 GCC does not emit ``-Wformat-nonliteral`` warning for calls to such
360 fuctions. Clang does not warn if the format string comes from a function
361 parameter, where the function is annotated with a compatible attribute,
362 otherwise it warns. For example:
363
364 .. code-block:: c
365
366 __attribute__((__format__ (__scanf__, 1, 3)))
367 void foo(const char* s, char *buf, ...) {
368 va_list ap;
369 va_start(ap, buf);
370
371 vprintf(s, ap); // warning: format string is not a string literal
372 }
373
374 In this case we warn because ``s`` contains a format string for a
375 ``scanf``-like function, but it is passed to a ``printf``-like function.
376
377 If the attribute is removed, clang still warns, because the format string is
378 not a string literal.
379
380 Another example:
381
382 .. code-block:: c
383
384 __attribute__((__format__ (__printf__, 1, 3)))
385 void foo(const char* s, char *buf, ...) {
386 va_list ap;
387 va_start(ap, buf);
388
389 vprintf(s, ap); // warning
390 }
391
392 In this case Clang does not warn because the format string ``s`` and
393 the corresponding arguments are annotated. If the arguments are
394 incorrect, the caller of ``foo`` will receive a warning.
395
396
397noduplicate (clang::noduplicate)
398--------------------------------
399.. csv-table:: Supported Syntaxes
400 :header: "GNU", "C++11", "__declspec", "Keyword"
401
402 "X","X","",""
403
404The ``noduplicate`` attribute can be placed on function declarations to control
405whether function calls to this function can be duplicated or not as a result of
406optimizations. This is required for the implementation of functions with
407certain special requirements, like the OpenCL "barrier" function, that might
408need to be run concurrently by all the threads that are executing in lockstep
409on the hardware. For example this attribute applied on the function
410"nodupfunc" in the code below avoids that:
411
412.. code-block:: c
413
414 void nodupfunc() __attribute__((noduplicate));
415 // Setting it as a C++11 attribute is also valid
416 // void nodupfunc() [[clang::noduplicate]];
417 void foo();
418 void bar();
419
420 nodupfunc();
421 if (a > n) {
422 foo();
423 } else {
424 bar();
425 }
426
427gets possibly modified by some optimizations into code similar to this:
428
429.. code-block:: c
430
431 if (a > n) {
432 nodupfunc();
433 foo();
434 } else {
435 nodupfunc();
436 bar();
437 }
438
439where the call to "nodupfunc" is duplicated and sunk into the two branches
440of the condition.
441
442
443no_sanitize_address (no_address_safety_analysis, gnu::no_address_safety_analysis, gnu::no_sanitize_address)
444-----------------------------------------------------------------------------------------------------------
445.. csv-table:: Supported Syntaxes
446 :header: "GNU", "C++11", "__declspec", "Keyword"
447
448 "X","X","",""
449
450.. _langext-address_sanitizer:
451
452Use ``__attribute__((no_sanitize_address))`` on a function declaration to
453specify that address safety instrumentation (e.g. AddressSanitizer) should
454not be applied to that function.
455
456
457no_sanitize_memory
458------------------
459.. csv-table:: Supported Syntaxes
460 :header: "GNU", "C++11", "__declspec", "Keyword"
461
462 "X","","",""
463
464.. _langext-memory_sanitizer:
465
466Use ``__attribute__((no_sanitize_memory))`` on a function declaration to
467specify that checks for uninitialized memory should not be inserted
468(e.g. by MemorySanitizer). The function may still be instrumented by the tool
469to avoid false positives in other places.
470
471
472no_sanitize_thread
473------------------
474.. csv-table:: Supported Syntaxes
475 :header: "GNU", "C++11", "__declspec", "Keyword"
476
477 "X","","",""
478
479.. _langext-thread_sanitizer:
480
481Use ``__attribute__((no_sanitize_thread))`` on a function declaration to
482specify that checks for data races on plain (non-atomic) memory accesses should
483not be inserted by ThreadSanitizer. The function is still instrumented by the
484tool to avoid false positives and provide meaningful stack traces.
485
486
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700487no_split_stack (gnu::no_split_stack)
488------------------------------------
489.. csv-table:: Supported Syntaxes
490 :header: "GNU", "C++11", "__declspec", "Keyword"
491
492 "X","X","",""
493
494The ``no_split_stack`` attribute disables the emission of the split stack
495preamble for a particular function. It has no effect if ``-fsplit-stack``
496is not specified.
497
498
Stephen Hines651f13c2014-04-23 16:59:28 -0700499objc_method_family
500------------------
501.. csv-table:: Supported Syntaxes
502 :header: "GNU", "C++11", "__declspec", "Keyword"
503
504 "X","","",""
505
506Many methods in Objective-C have conventional meanings determined by their
507selectors. It is sometimes useful to be able to mark a method as having a
508particular conventional meaning despite not having the right selector, or as
509not having the conventional meaning that its selector would suggest. For these
510use cases, we provide an attribute to specifically describe the "method family"
511that a method belongs to.
512
513**Usage**: ``__attribute__((objc_method_family(X)))``, where ``X`` is one of
514``none``, ``alloc``, ``copy``, ``init``, ``mutableCopy``, or ``new``. This
515attribute can only be placed at the end of a method declaration:
516
517.. code-block:: objc
518
519 - (NSString *)initMyStringValue __attribute__((objc_method_family(none)));
520
521Users who do not wish to change the conventional meaning of a method, and who
522merely want to document its non-standard retain and release semantics, should
523use the retaining behavior attributes (``ns_returns_retained``,
524``ns_returns_not_retained``, etc).
525
526Query for this feature with ``__has_attribute(objc_method_family)``.
527
528
529objc_requires_super
530-------------------
531.. csv-table:: Supported Syntaxes
532 :header: "GNU", "C++11", "__declspec", "Keyword"
533
534 "X","","",""
535
536Some Objective-C classes allow a subclass to override a particular method in a
537parent class but expect that the overriding method also calls the overridden
538method in the parent class. For these cases, we provide an attribute to
539designate that a method requires a "call to ``super``" in the overriding
540method in the subclass.
541
542**Usage**: ``__attribute__((objc_requires_super))``. This attribute can only
543be placed at the end of a method declaration:
544
545.. code-block:: objc
546
547 - (void)foo __attribute__((objc_requires_super));
548
549This attribute can only be applied the method declarations within a class, and
550not a protocol. Currently this attribute does not enforce any placement of
551where the call occurs in the overriding method (such as in the case of
552``-dealloc`` where the call must appear at the end). It checks only that it
553exists.
554
555Note that on both OS X and iOS that the Foundation framework provides a
556convenience macro ``NS_REQUIRES_SUPER`` that provides syntactic sugar for this
557attribute:
558
559.. code-block:: objc
560
561 - (void)foo NS_REQUIRES_SUPER;
562
563This macro is conditionally defined depending on the compiler's support for
564this attribute. If the compiler does not support the attribute the macro
565expands to nothing.
566
567Operationally, when a method has this annotation the compiler will warn if the
568implementation of an override in a subclass does not call super. For example:
569
570.. code-block:: objc
571
572 warning: method possibly missing a [super AnnotMeth] call
573 - (void) AnnotMeth{};
574 ^
575
576
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700577optnone (clang::optnone)
578------------------------
579.. csv-table:: Supported Syntaxes
580 :header: "GNU", "C++11", "__declspec", "Keyword"
581
582 "X","X","",""
583
584The ``optnone`` attribute suppresses essentially all optimizations
585on a function or method, regardless of the optimization level applied to
586the compilation unit as a whole. This is particularly useful when you
587need to debug a particular function, but it is infeasible to build the
588entire application without optimization. Avoiding optimization on the
589specified function can improve the quality of the debugging information
590for that function.
591
592This attribute is incompatible with the ``always_inline`` attribute.
593
594
Stephen Hines651f13c2014-04-23 16:59:28 -0700595overloadable
596------------
597.. csv-table:: Supported Syntaxes
598 :header: "GNU", "C++11", "__declspec", "Keyword"
599
600 "X","","",""
601
602Clang provides support for C++ function overloading in C. Function overloading
603in C is introduced using the ``overloadable`` attribute. For example, one
604might provide several overloaded versions of a ``tgsin`` function that invokes
605the appropriate standard function computing the sine of a value with ``float``,
606``double``, or ``long double`` precision:
607
608.. code-block:: c
609
610 #include <math.h>
611 float __attribute__((overloadable)) tgsin(float x) { return sinf(x); }
612 double __attribute__((overloadable)) tgsin(double x) { return sin(x); }
613 long double __attribute__((overloadable)) tgsin(long double x) { return sinl(x); }
614
615Given these declarations, one can call ``tgsin`` with a ``float`` value to
616receive a ``float`` result, with a ``double`` to receive a ``double`` result,
617etc. Function overloading in C follows the rules of C++ function overloading
618to pick the best overload given the call arguments, with a few C-specific
619semantics:
620
621* Conversion from ``float`` or ``double`` to ``long double`` is ranked as a
622 floating-point promotion (per C99) rather than as a floating-point conversion
623 (as in C++).
624
625* A conversion from a pointer of type ``T*`` to a pointer of type ``U*`` is
626 considered a pointer conversion (with conversion rank) if ``T`` and ``U`` are
627 compatible types.
628
629* A conversion from type ``T`` to a value of type ``U`` is permitted if ``T``
630 and ``U`` are compatible types. This conversion is given "conversion" rank.
631
632The declaration of ``overloadable`` functions is restricted to function
633declarations and definitions. Most importantly, if any function with a given
634name is given the ``overloadable`` attribute, then all function declarations
635and definitions with that name (and in that scope) must have the
636``overloadable`` attribute. This rule even applies to redeclarations of
637functions whose original declaration had the ``overloadable`` attribute, e.g.,
638
639.. code-block:: c
640
641 int f(int) __attribute__((overloadable));
642 float f(float); // error: declaration of "f" must have the "overloadable" attribute
643
644 int g(int) __attribute__((overloadable));
645 int g(int) { } // error: redeclaration of "g" must also have the "overloadable" attribute
646
647Functions marked ``overloadable`` must have prototypes. Therefore, the
648following code is ill-formed:
649
650.. code-block:: c
651
652 int h() __attribute__((overloadable)); // error: h does not have a prototype
653
654However, ``overloadable`` functions are allowed to use a ellipsis even if there
655are no named parameters (as is permitted in C++). This feature is particularly
656useful when combined with the ``unavailable`` attribute:
657
658.. code-block:: c++
659
660 void honeypot(...) __attribute__((overloadable, unavailable)); // calling me is an error
661
662Functions declared with the ``overloadable`` attribute have their names mangled
663according to the same rules as C++ function names. For example, the three
664``tgsin`` functions in our motivating example get the mangled names
665``_Z5tgsinf``, ``_Z5tgsind``, and ``_Z5tgsine``, respectively. There are two
666caveats to this use of name mangling:
667
668* Future versions of Clang may change the name mangling of functions overloaded
669 in C, so you should not depend on an specific mangling. To be completely
670 safe, we strongly urge the use of ``static inline`` with ``overloadable``
671 functions.
672
673* The ``overloadable`` attribute has almost no meaning when used in C++,
674 because names will already be mangled and functions are already overloadable.
675 However, when an ``overloadable`` function occurs within an ``extern "C"``
676 linkage specification, it's name *will* be mangled in the same way as it
677 would in C.
678
679Query for this feature with ``__has_extension(attribute_overloadable)``.
680
681
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700682pcs (gnu::pcs)
683--------------
684.. csv-table:: Supported Syntaxes
685 :header: "GNU", "C++11", "__declspec", "Keyword"
686
687 "X","X","",""
688
689On ARM targets, this can attribute can be used to select calling conventions,
690similar to ``stdcall`` on x86. Valid parameter values are "aapcs" and
691"aapcs-vfp".
692
693
Stephen Hines651f13c2014-04-23 16:59:28 -0700694release_capability (release_shared_capability, clang::release_capability, clang::release_shared_capability)
695-----------------------------------------------------------------------------------------------------------
696.. csv-table:: Supported Syntaxes
697 :header: "GNU", "C++11", "__declspec", "Keyword"
698
699 "X","X","",""
700
701Marks a function as releasing a capability.
702
703
704try_acquire_capability (try_acquire_shared_capability, clang::try_acquire_capability, clang::try_acquire_shared_capability)
705---------------------------------------------------------------------------------------------------------------------------
706.. csv-table:: Supported Syntaxes
707 :header: "GNU", "C++11", "__declspec", "Keyword"
708
709 "X","X","",""
710
711Marks a function that attempts to acquire a capability. This function may fail to
712actually acquire the capability; they accept a Boolean value determining
713whether acquiring the capability means success (true), or failing to acquire
714the capability means success (false).
715
716
717Variable Attributes
718===================
719
720
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700721section (gnu::section, __declspec(allocate))
722--------------------------------------------
723.. csv-table:: Supported Syntaxes
724 :header: "GNU", "C++11", "__declspec", "Keyword"
725
726 "X","X","X",""
727
728The ``section`` attribute allows you to specify a specific section a
729global variable or function should be in after translation.
730
731
Stephen Hines651f13c2014-04-23 16:59:28 -0700732tls_model (gnu::tls_model)
733--------------------------
734.. csv-table:: Supported Syntaxes
735 :header: "GNU", "C++11", "__declspec", "Keyword"
736
737 "X","X","",""
738
739The ``tls_model`` attribute allows you to specify which thread-local storage
740model to use. It accepts the following strings:
741
742* global-dynamic
743* local-dynamic
744* initial-exec
745* local-exec
746
747TLS models are mutually exclusive.
748
749
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700750thread
751------
752.. csv-table:: Supported Syntaxes
753 :header: "GNU", "C++11", "__declspec", "Keyword"
754
755 "","","X",""
756
757The ``__declspec(thread)`` attribute declares a variable with thread local
758storage. It is available under the ``-fms-extensions`` flag for MSVC
759compatibility. Documentation for the Visual C++ attribute is available on MSDN_.
760
761.. _MSDN: http://msdn.microsoft.com/en-us/library/9w1sdazb.aspx
762
763In Clang, ``__declspec(thread)`` is generally equivalent in functionality to the
764GNU ``__thread`` keyword. The variable must not have a destructor and must have
765a constant initializer, if any. The attribute only applies to variables
766declared with static storage duration, such as globals, class static data
767members, and static locals.
768
769
Stephen Hines651f13c2014-04-23 16:59:28 -0700770Type Attributes
771===============
772
773
774__single_inhertiance, __multiple_inheritance, __virtual_inheritance
775-------------------------------------------------------------------
776.. csv-table:: Supported Syntaxes
777 :header: "GNU", "C++11", "__declspec", "Keyword"
778
779 "","","","X"
780
781This collection of keywords is enabled under ``-fms-extensions`` and controls
782the pointer-to-member representation used on ``*-*-win32`` targets.
783
784The ``*-*-win32`` targets utilize a pointer-to-member representation which
785varies in size and alignment depending on the definition of the underlying
786class.
787
788However, this is problematic when a forward declaration is only available and
789no definition has been made yet. In such cases, Clang is forced to utilize the
790most general representation that is available to it.
791
792These keywords make it possible to use a pointer-to-member representation other
793than the most general one regardless of whether or not the definition will ever
794be present in the current translation unit.
795
796This family of keywords belong between the ``class-key`` and ``class-name``:
797
798.. code-block:: c++
799
800 struct __single_inheritance S;
801 int S::*i;
802 struct S {};
803
804This keyword can be applied to class templates but only has an effect when used
805on full specializations:
806
807.. code-block:: c++
808
809 template <typename T, typename U> struct __single_inheritance A; // warning: inheritance model ignored on primary template
810 template <typename T> struct __multiple_inheritance A<T, T>; // warning: inheritance model ignored on partial specialization
811 template <> struct __single_inheritance A<int, float>;
812
813Note that choosing an inheritance model less general than strictly necessary is
814an error:
815
816.. code-block:: c++
817
818 struct __multiple_inheritance S; // error: inheritance model does not match definition
819 int S::*i;
820 struct S {};
821
822
823Statement Attributes
824====================
825
826
827fallthrough (clang::fallthrough)
828--------------------------------
829.. csv-table:: Supported Syntaxes
830 :header: "GNU", "C++11", "__declspec", "Keyword"
831
832 "","X","",""
833
834The ``clang::fallthrough`` attribute is used along with the
835``-Wimplicit-fallthrough`` argument to annotate intentional fall-through
836between switch labels. It can only be applied to a null statement placed at a
837point of execution between any statement and the next switch label. It is
838common to mark these places with a specific comment, but this attribute is
839meant to replace comments with a more strict annotation, which can be checked
840by the compiler. This attribute doesn't change semantics of the code and can
841be used wherever an intended fall-through occurs. It is designed to mimic
842control-flow statements like ``break;``, so it can be placed in most places
843where ``break;`` can, but only if there are no statements on the execution path
844between it and the next switch label.
845
846Here is an example:
847
848.. code-block:: c++
849
850 // compile with -Wimplicit-fallthrough
851 switch (n) {
852 case 22:
853 case 33: // no warning: no statements between case labels
854 f();
855 case 44: // warning: unannotated fall-through
856 g();
857 [[clang::fallthrough]];
858 case 55: // no warning
859 if (x) {
860 h();
861 break;
862 }
863 else {
864 i();
865 [[clang::fallthrough]];
866 }
867 case 66: // no warning
868 p();
869 [[clang::fallthrough]]; // warning: fallthrough annotation does not
870 // directly precede case label
871 q();
872 case 77: // warning: unannotated fall-through
873 r();
874 }
875
876
877Consumed Annotation Checking
878============================
879Clang supports additional attributes for checking basic resource management
880properties, specifically for unique objects that have a single owning reference.
881The following attributes are currently supported, although **the implementation
882for these annotations is currently in development and are subject to change.**
883
884callable_when
885-------------
886.. csv-table:: Supported Syntaxes
887 :header: "GNU", "C++11", "__declspec", "Keyword"
888
889 "X","","",""
890
891Use ``__attribute__((callable_when(...)))`` to indicate what states a method
892may be called in. Valid states are unconsumed, consumed, or unknown. Each
893argument to this attribute must be a quoted string. E.g.:
894
895``__attribute__((callable_when("unconsumed", "unknown")))``
896
897
898consumable
899----------
900.. csv-table:: Supported Syntaxes
901 :header: "GNU", "C++11", "__declspec", "Keyword"
902
903 "X","","",""
904
905Each ``class`` that uses any of the typestate annotations must first be marked
906using the ``consumable`` attribute. Failure to do so will result in a warning.
907
908This attribute accepts a single parameter that must be one of the following:
909``unknown``, ``consumed``, or ``unconsumed``.
910
911
912param_typestate
913---------------
914.. csv-table:: Supported Syntaxes
915 :header: "GNU", "C++11", "__declspec", "Keyword"
916
917 "X","","",""
918
919This attribute specifies expectations about function parameters. Calls to an
920function with annotated parameters will issue a warning if the corresponding
921argument isn't in the expected state. The attribute is also used to set the
922initial state of the parameter when analyzing the function's body.
923
924
925return_typestate
926----------------
927.. csv-table:: Supported Syntaxes
928 :header: "GNU", "C++11", "__declspec", "Keyword"
929
930 "X","","",""
931
932The ``return_typestate`` attribute can be applied to functions or parameters.
933When applied to a function the attribute specifies the state of the returned
934value. The function's body is checked to ensure that it always returns a value
935in the specified state. On the caller side, values returned by the annotated
936function are initialized to the given state.
937
938When applied to a function parameter it modifies the state of an argument after
939a call to the function returns. The function's body is checked to ensure that
940the parameter is in the expected state before returning.
941
942
943set_typestate
944-------------
945.. csv-table:: Supported Syntaxes
946 :header: "GNU", "C++11", "__declspec", "Keyword"
947
948 "X","","",""
949
950Annotate methods that transition an object into a new state with
951``__attribute__((set_typestate(new_state)))``. The new new state must be
952unconsumed, consumed, or unknown.
953
954
955test_typestate
956--------------
957.. csv-table:: Supported Syntaxes
958 :header: "GNU", "C++11", "__declspec", "Keyword"
959
960 "X","","",""
961
962Use ``__attribute__((test_typestate(tested_state)))`` to indicate that a method
963returns true if the object is in the specified state..
964
965
966Type Safety Checking
967====================
968Clang supports additional attributes to enable checking type safety properties
969that can't be enforced by the C type system. Use cases include:
970
971* MPI library implementations, where these attributes enable checking that
972 the buffer type matches the passed ``MPI_Datatype``;
973* for HDF5 library there is a similar use case to MPI;
974* checking types of variadic functions' arguments for functions like
975 ``fcntl()`` and ``ioctl()``.
976
977You can detect support for these attributes with ``__has_attribute()``. For
978example:
979
980.. code-block:: c++
981
982 #if defined(__has_attribute)
983 # if __has_attribute(argument_with_type_tag) && \
984 __has_attribute(pointer_with_type_tag) && \
985 __has_attribute(type_tag_for_datatype)
986 # define ATTR_MPI_PWT(buffer_idx, type_idx) __attribute__((pointer_with_type_tag(mpi,buffer_idx,type_idx)))
987 /* ... other macros ... */
988 # endif
989 #endif
990
991 #if !defined(ATTR_MPI_PWT)
992 # define ATTR_MPI_PWT(buffer_idx, type_idx)
993 #endif
994
995 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
996 ATTR_MPI_PWT(1,3);
997
998argument_with_type_tag
999----------------------
1000.. csv-table:: Supported Syntaxes
1001 :header: "GNU", "C++11", "__declspec", "Keyword"
1002
1003 "X","","",""
1004
1005Use ``__attribute__((argument_with_type_tag(arg_kind, arg_idx,
1006type_tag_idx)))`` on a function declaration to specify that the function
1007accepts a type tag that determines the type of some other argument.
1008``arg_kind`` is an identifier that should be used when annotating all
1009applicable type tags.
1010
1011This attribute is primarily useful for checking arguments of variadic functions
1012(``pointer_with_type_tag`` can be used in most non-variadic cases).
1013
1014For example:
1015
1016.. code-block:: c++
1017
1018 int fcntl(int fd, int cmd, ...)
1019 __attribute__(( argument_with_type_tag(fcntl,3,2) ));
1020
1021
1022pointer_with_type_tag
1023---------------------
1024.. csv-table:: Supported Syntaxes
1025 :header: "GNU", "C++11", "__declspec", "Keyword"
1026
1027 "X","","",""
1028
1029Use ``__attribute__((pointer_with_type_tag(ptr_kind, ptr_idx, type_tag_idx)))``
1030on a function declaration to specify that the function accepts a type tag that
1031determines the pointee type of some other pointer argument.
1032
1033For example:
1034
1035.. code-block:: c++
1036
1037 int MPI_Send(void *buf, int count, MPI_Datatype datatype /*, other args omitted */)
1038 __attribute__(( pointer_with_type_tag(mpi,1,3) ));
1039
1040
1041type_tag_for_datatype
1042---------------------
1043.. csv-table:: Supported Syntaxes
1044 :header: "GNU", "C++11", "__declspec", "Keyword"
1045
1046 "X","","",""
1047
1048Clang supports annotating type tags of two forms.
1049
1050* **Type tag that is an expression containing a reference to some declared
1051 identifier.** Use ``__attribute__((type_tag_for_datatype(kind, type)))`` on a
1052 declaration with that identifier:
1053
1054 .. code-block:: c++
1055
1056 extern struct mpi_datatype mpi_datatype_int
1057 __attribute__(( type_tag_for_datatype(mpi,int) ));
1058 #define MPI_INT ((MPI_Datatype) &mpi_datatype_int)
1059
1060* **Type tag that is an integral literal.** Introduce a ``static const``
1061 variable with a corresponding initializer value and attach
1062 ``__attribute__((type_tag_for_datatype(kind, type)))`` on that declaration,
1063 for example:
1064
1065 .. code-block:: c++
1066
1067 #define MPI_INT ((MPI_Datatype) 42)
1068 static const MPI_Datatype mpi_datatype_int
1069 __attribute__(( type_tag_for_datatype(mpi,int) )) = 42
1070
1071The attribute also accepts an optional third argument that determines how the
1072expression is compared to the type tag. There are two supported flags:
1073
1074* ``layout_compatible`` will cause types to be compared according to
1075 layout-compatibility rules (C++11 [class.mem] p 17, 18). This is
1076 implemented to support annotating types like ``MPI_DOUBLE_INT``.
1077
1078 For example:
1079
1080 .. code-block:: c++
1081
1082 /* In mpi.h */
1083 struct internal_mpi_double_int { double d; int i; };
1084 extern struct mpi_datatype mpi_datatype_double_int
1085 __attribute__(( type_tag_for_datatype(mpi, struct internal_mpi_double_int, layout_compatible) ));
1086
1087 #define MPI_DOUBLE_INT ((MPI_Datatype) &mpi_datatype_double_int)
1088
1089 /* In user code */
1090 struct my_pair { double a; int b; };
1091 struct my_pair *buffer;
1092 MPI_Send(buffer, 1, MPI_DOUBLE_INT /*, ... */); // no warning
1093
1094 struct my_int_pair { int a; int b; }
1095 struct my_int_pair *buffer2;
1096 MPI_Send(buffer2, 1, MPI_DOUBLE_INT /*, ... */); // warning: actual buffer element
1097 // type 'struct my_int_pair'
1098 // doesn't match specified MPI_Datatype
1099
1100* ``must_be_null`` specifies that the expression should be a null pointer
1101 constant, for example:
1102
1103 .. code-block:: c++
1104
1105 /* In mpi.h */
1106 extern struct mpi_datatype mpi_datatype_null
1107 __attribute__(( type_tag_for_datatype(mpi, void, must_be_null) ));
1108
1109 #define MPI_DATATYPE_NULL ((MPI_Datatype) &mpi_datatype_null)
1110
1111 /* In user code */
1112 MPI_Send(buffer, 1, MPI_DATATYPE_NULL /*, ... */); // warning: MPI_DATATYPE_NULL
1113 // was specified but buffer
1114 // is not a null pointer
1115
1116