aboutsummaryrefslogtreecommitdiffstats
path: root/lib/attribute.h
diff options
context:
space:
mode:
authorPaul Eggert2020-05-11 17:28:23 -0700
committerPaul Eggert2020-05-11 17:54:23 -0700
commit00f0ad55cd7cbb71e42de0d52b7607ffb6a3c220 (patch)
treec7ea55a573abdb8a1583d59ca38ef035e33978f7 /lib/attribute.h
parentdd0b910f1a9d08e65f59cc7ebc10fb6cd0fecfc9 (diff)
downloademacs-00f0ad55cd7cbb71e42de0d52b7607ffb6a3c220.tar.gz
emacs-00f0ad55cd7cbb71e42de0d52b7607ffb6a3c220.zip
Update from gnulib
This incorporates: 2020-05-11 careadlinkat: fix GCC 10 workaround 2020-05-10 careadlinkat: limit GCC workaround 2020-05-10 attribute: clarify list of attributes 2020-05-10 string: fix compilation error in C++ mode 2020-05-09 manywarnings: port to GCC 10.1 2020-05-09 careadlinkat: pacify -Wreturn-local-addr 2020-05-09 attribute: remove ATTRIBUTE_DEPRECATED 2020-05-09 attribute: Add comments * lib/attribute.h, lib/careadlinkat.c, lib/string.in.h: * lib/warn-on-use.h, m4/manywarnings.m4: Copy from Gnulib.
Diffstat (limited to 'lib/attribute.h')
-rw-r--r--lib/attribute.h203
1 files changed, 180 insertions, 23 deletions
diff --git a/lib/attribute.h b/lib/attribute.h
index c5919d97005..2836b99dad0 100644
--- a/lib/attribute.h
+++ b/lib/attribute.h
@@ -20,39 +20,196 @@
20/* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* 20/* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_*
21 macros used within Gnulib. */ 21 macros used within Gnulib. */
22 22
23/* These attributes can be placed in two ways:
24 - At the start of a declaration (i.e. even before storage-class
25 specifiers!); then they apply to all entities that are declared
26 by the declaration.
27 - Immediately after the name of an entity being declared by the
28 declaration; then they apply to that entity only. */
29
23#ifndef _GL_ATTRIBUTE_H 30#ifndef _GL_ATTRIBUTE_H
24#define _GL_ATTRIBUTE_H 31#define _GL_ATTRIBUTE_H
25 32
26/* C2X standard attributes have macro names that do not begin with 33
27 'ATTRIBUTE_'. */ 34/* This file defines two types of attributes:
35 * C2X standard attributes. These have macro names that do not begin with
36 'ATTRIBUTE_'.
37 * Selected GCC attributes; see:
38 https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
39 https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
40 https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html
41 These names begin with 'ATTRIBUTE_' to avoid name clashes. */
42
43
44/* =============== Attributes for specific kinds of functions =============== */
45
46/* Attributes for functions that should not be used. */
47
48/* Warn if the entity is used. */
49/* Applies to:
50 - function, variable,
51 - struct, union, struct/union member,
52 - enumeration, enumeration item,
53 - typedef,
54 in C++ also: namespace, class, template specialization. */
28#define DEPRECATED _GL_ATTRIBUTE_DEPRECATED 55#define DEPRECATED _GL_ATTRIBUTE_DEPRECATED
29#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH
30#define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
31#define NODISCARD _GL_ATTRIBUTE_NODISCARD
32 56
33/* Selected GCC attributes; see: 57/* If a function call is not optimized way, warn with MSG. */
34 https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html 58/* Applies to: functions. */
35 These names begin with 'ATTRIBUTE_' to avoid name clashes. */ 59#define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg)
36#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) 60
37#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE 61/* If a function call is not optimized way, report an error with MSG. */
38#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL 62/* Applies to: functions. */
39#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD
40#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
41#define ATTRIBUTE_DEPRECATED _GL_ATTRIBUTE_DEPRECATED
42#define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) 63#define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg)
43#define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE 64
44#define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) 65
45#define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF 66/* Attributes for memory-allocating functions. */
46#define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS 67
68/* The function returns a pointer to freshly allocated memory. */
69/* Applies to: functions. */
47#define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC 70#define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC
48#define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE 71
72/* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function
73 is the size of the returned memory block.
74 ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments
75 to determine the size of the returned memory block. */
76/* Applies to: function, pointer to function, function types. */
77#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args)
78
79
80/* Attributes for variadic functions. */
81
82/* The variadic function expects a trailing NULL argument.
83 ATTRIBUTE_SENTINEL () - The last argument is NULL.
84 ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
85/* Applies to: functions. */
86#define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos)
87
88
89/* ================== Attributes for compiler diagnostics ================== */
90
91/* Attributes that help the compiler diagnose programmer mistakes.
92 Some of them may also help for some compiler optimizations. */
93
94/* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) -
95 The STRING-INDEXth function argument is a format string of style
96 ARCHETYPE, which is one of:
97 printf, gnu_printf
98 scanf, gnu_scanf,
99 strftime, gnu_strftime,
100 strfmon,
101 or the same thing prefixed and suffixed with '__'.
102 If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
103 are suitable for the format string. */
104/* Applies to: functions. */
105#define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec)
106
107/* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL.
108 ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */
109/* Applies to: functions. */
49#define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) 110#define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args)
111
112/* The function's return value is a non-NULL pointer. */
113/* Applies to: functions. */
114#define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL
115
116/* Warn if the caller does not use the return value,
117 unless the caller uses something like ignore_value. */
118/* Applies to: function, enumeration, class. */
119#define NODISCARD _GL_ATTRIBUTE_NODISCARD
120
121
122/* Attributes that disable false alarms when the compiler diagnoses
123 programmer "mistakes". */
124
125/* Do not warn if the entity is not used. */
126/* Applies to:
127 - function, variable,
128 - struct, union, struct/union member,
129 - enumeration, enumeration item,
130 - typedef,
131 in C++ also: class. */
132#define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
133
134/* The contents of a character array is not meant to be NUL-terminated. */
135/* Applies to: struct/union members and variables that are arrays of element
136 type '[[un]signed] char'. */
50#define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING 137#define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING
138
139/* Do not warn if control flow falls through to the immediately
140 following 'case' or 'default' label. */
141/* Applies to: Empty statement (;), inside a 'switch' statement. */
142#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH
143
144
145/* ================== Attributes for debugging information ================== */
146
147/* Attributes regarding debugging information emitted by the compiler. */
148
149/* Omit the function from stack traces when debugging. */
150/* Applies to: function. */
151#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL
152
153/* Make the entity visible to debuggers etc., even with '-fwhole-program'. */
154/* Applies to: functions, variables. */
155#define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
156
157
158/* ========== Attributes that mainly direct compiler optimizations ========== */
159
160/* The function does not throw exceptions. */
161/* Applies to: functions. */
51#define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW 162#define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW
52#define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED 163
164/* Do not inline the function. */
165/* Applies to: functions. */
166#define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE
167
168/* Always inline the function, and report an error if the compiler
169 cannot inline. */
170/* Applies to: function. */
171#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
172
173/* The function does not affect observable state, and always returns a value.
174 Compilers can omit duplicate calls with the same arguments if
175 observable state is not changed between calls. (This attribute is
176 looser than ATTRIBUTE_CONST.) */
177/* Applies to: functions. */
53#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE 178#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE
54#define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL 179
55#define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) 180/* The function neither depends on nor affects observable state,
56#define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) 181 and always returns a value. Compilers can omit duplicate calls with
182 the same arguments. (This attribute is stricter than ATTRIBUTE_PURE.) */
183/* Applies to: functions. */
184#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
185
186/* The function is rarely executed. */
187/* Applies to: functions. */
188#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD
189
190/* If called from some other compilation unit, the function executes
191 code from that unit only by return or by exception handling,
192 letting the compiler optimize that unit more aggressively. */
193/* Applies to: functions. */
194#define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF
195
196/* For struct members: The member has the smallest possible alignment.
197 For struct, union, class: All members have the smallest possible alignment,
198 minimizing the memory required. */
199/* Applies to: struct members, struct, union,
200 in C++ also: class. */
201#define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED
202
203
204/* ================ Attributes that make invalid code valid ================ */
205
206/* Attributes that prevent fatal compiler optimizations for code that is not
207 fully ISO C compliant. */
208
209/* Pointers to the type may point to the same storage as pointers to
210 other types, thus disabling strict aliasing optimization. */
211/* Applies to: types. */
212#define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS
213
57 214
58#endif /* _GL_ATTRIBUTE_H */ 215#endif /* _GL_ATTRIBUTE_H */