1 /* Copyright (C
) 2001-2016 Free Software Foundation
, Inc.
2 Contributed by Joseph Myers
<jsm28@cam.ac.uk
>.
4 This file is part of GCC.
6 GCC is free software
; you can redistribute it and
/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation
; either version
3, or (at your option
) any later
11 GCC is distributed in the hope that it will be useful
, but WITHOUT ANY
12 WARRANTY
; without even the implied warranty of MERCHANTABILITY or
13 FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC
; see the file COPYING3. If not see
18 <http
://www.gnu.org
/licenses
/>.
*/
20 /* This header provides a declarative way of describing the attributes
21 that are applied to some functions by default.
23 Before including this header
, you must define the following macros.
24 In each case where there is an ENUM
, it is an identifier used to
25 reference the tree in subsequent definitions.
27 DEF_ATTR_NULL_TREE (ENUM
)
29 Constructs a NULL_TREE.
31 DEF_ATTR_INT (ENUM
, VALUE
)
33 Constructs an INTEGER_CST with value
VALUE (an integer representable
36 DEF_ATTR_IDENT (ENUM
, STRING
)
38 Constructs an IDENTIFIER_NODE for STRING.
40 DEF_ATTR_TREE_LIST (ENUM
, PURPOSE
, VALUE
, CHAIN
)
42 Constructs a TREE_LIST with given PURPOSE
, VALUE and
CHAIN (given
43 as previous ENUM names
).
*/
45 DEF_ATTR_NULL_TREE (ATTR_NULL
)
47 /* Construct a tree for a given integer and a list containing it.
*/
48 #define
DEF_ATTR_FOR_INT(VALUE
) \
49 DEF_ATTR_INT (ATTR_##VALUE
, VALUE
) \
50 DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE
, ATTR_NULL
, \
51 ATTR_##VALUE
, ATTR_NULL
)
59 #undef DEF_ATTR_FOR_INT
61 /* Construct a tree for a given string and a list containing it.
*/
62 #define
DEF_ATTR_FOR_STRING(ENUM
, VALUE
) \
63 DEF_ATTR_STRING (ATTR_##ENUM
, VALUE
) \
64 DEF_ATTR_TREE_LIST (ATTR_LIST_##ENUM
, ATTR_NULL
, \
65 ATTR_##ENUM
, ATTR_NULL
)
66 DEF_ATTR_FOR_STRING (STR1
, "1")
67 #undef DEF_ATTR_FOR_STRING
69 /* Construct a tree for a list of two integers.
*/
70 #define
DEF_LIST_INT_INT(VALUE1
, VALUE2
) \
71 DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE1##_##VALUE2
, ATTR_NULL
, \
72 ATTR_##VALUE1
, ATTR_LIST_##VALUE2
)
73 DEF_LIST_INT_INT (1,0)
74 DEF_LIST_INT_INT (1,2)
75 DEF_LIST_INT_INT (2,0)
76 DEF_LIST_INT_INT (2,3)
77 DEF_LIST_INT_INT (3,0)
78 DEF_LIST_INT_INT (3,4)
79 DEF_LIST_INT_INT (4,0)
80 DEF_LIST_INT_INT (4,5)
81 DEF_LIST_INT_INT (5,0)
82 DEF_LIST_INT_INT (5,6)
83 #undef DEF_LIST_INT_INT
85 /* Construct trees for identifiers.
*/
86 DEF_ATTR_IDENT (ATTR_ALLOC_SIZE
, "alloc_size")
87 DEF_ATTR_IDENT (ATTR_COLD
, "cold")
88 DEF_ATTR_IDENT (ATTR_CONST
, "const")
89 DEF_ATTR_IDENT (ATTR_FORMAT
, "format")
90 DEF_ATTR_IDENT (ATTR_FORMAT_ARG
, "format_arg")
91 DEF_ATTR_IDENT (ATTR_MALLOC
, "malloc")
92 DEF_ATTR_IDENT (ATTR_NONNULL
, "nonnull")
93 DEF_ATTR_IDENT (ATTR_NORETURN
, "noreturn")
94 DEF_ATTR_IDENT (ATTR_NOTHROW
, "nothrow")
95 DEF_ATTR_IDENT (ATTR_LEAF
, "leaf")
96 DEF_ATTR_IDENT (ATTR_FNSPEC
, "fn spec")
97 DEF_ATTR_IDENT (ATTR_PRINTF
, "printf")
98 DEF_ATTR_IDENT (ATTR_ASM_FPRINTF
, "asm_fprintf")
99 DEF_ATTR_IDENT (ATTR_GCC_DIAG
, "gcc_diag")
100 DEF_ATTR_IDENT (ATTR_GCC_CDIAG
, "gcc_cdiag")
101 DEF_ATTR_IDENT (ATTR_GCC_CXXDIAG
, "gcc_cxxdiag")
102 DEF_ATTR_IDENT (ATTR_PURE
, "pure")
103 DEF_ATTR_IDENT (ATTR_NOVOPS
, "no vops")
104 DEF_ATTR_IDENT (ATTR_SCANF
, "scanf")
105 DEF_ATTR_IDENT (ATTR_SENTINEL
, "sentinel")
106 DEF_ATTR_IDENT (ATTR_STRFMON
, "strfmon")
107 DEF_ATTR_IDENT (ATTR_STRFTIME
, "strftime")
108 DEF_ATTR_IDENT (ATTR_TYPEGENERIC
, "type generic")
109 DEF_ATTR_IDENT (ATTR_TM_REGPARM
, "*tm regparm")
110 DEF_ATTR_IDENT (ATTR_TM_TMPURE
, "transaction_pure")
111 DEF_ATTR_IDENT (ATTR_RETURNS_TWICE
, "returns_twice")
112 DEF_ATTR_IDENT (ATTR_RETURNS_NONNULL
, "returns_nonnull")
114 DEF_ATTR_TREE_LIST (ATTR_NOVOPS_LIST
, ATTR_NOVOPS
, ATTR_NULL
, ATTR_NULL
)
116 DEF_ATTR_TREE_LIST (ATTR_NOVOPS_LEAF_LIST
, ATTR_LEAF
, ATTR_NULL
, ATTR_NOVOPS_LIST
)
118 DEF_ATTR_TREE_LIST (ATTR_LEAF_LIST
, ATTR_LEAF
, ATTR_NULL
, ATTR_NULL
)
120 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_LIST
, ATTR_NOTHROW
, ATTR_NULL
, ATTR_NULL
)
122 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_LEAF_LIST
, ATTR_LEAF
, ATTR_NULL
, ATTR_NOTHROW_LIST
)
124 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LIST
, ATTR_CONST
, \
125 ATTR_NULL
, ATTR_NOTHROW_LIST
)
126 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LEAF_LIST
, ATTR_CONST
, \
127 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
128 DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LIST
, ATTR_PURE
, \
129 ATTR_NULL
, ATTR_NOTHROW_LIST
)
130 DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LEAF_LIST
, ATTR_PURE
, \
131 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
132 DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LIST
, ATTR_NORETURN
, \
133 ATTR_NULL
, ATTR_NOTHROW_LIST
)
134 DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST
, ATTR_NORETURN
,\
135 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
136 DEF_ATTR_TREE_LIST (ATTR_RT_NOTHROW_LEAF_LIST
, ATTR_RETURNS_TWICE
,\
137 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
138 DEF_ATTR_TREE_LIST (ATTR_COLD_NOTHROW_LEAF_LIST
, ATTR_COLD
,\
139 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
140 DEF_ATTR_TREE_LIST (ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST
, ATTR_COLD
,\
141 ATTR_NULL
, ATTR_NORETURN_NOTHROW_LEAF_LIST
)
142 DEF_ATTR_TREE_LIST (ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
, ATTR_CONST
,\
143 ATTR_NULL
, ATTR_NORETURN_NOTHROW_LEAF_LIST
)
144 DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LIST
, ATTR_MALLOC
, \
145 ATTR_NULL
, ATTR_NOTHROW_LIST
)
146 DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LEAF_LIST
, ATTR_MALLOC
, \
147 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
148 DEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LIST
, ATTR_SENTINEL
, \
149 ATTR_NULL
, ATTR_NOTHROW_LIST
)
150 DEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LEAF_LIST
, ATTR_SENTINEL
, \
151 ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
152 DEF_ATTR_TREE_LIST (ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST
, ATTR_CONST
,\
153 ATTR_NULL
, ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST
)
155 /* Allocation functions like malloc and realloc whose first argument
156 specifies the size of the allocated object.
*/
157 DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_NOTHROW_LIST
, ATTR_ALLOC_SIZE
, \
158 ATTR_LIST_1
, ATTR_MALLOC_NOTHROW_LIST
)
159 DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST
, ATTR_ALLOC_SIZE
, \
160 ATTR_LIST_1
, ATTR_MALLOC_NOTHROW_LEAF_LIST
)
161 /* Alloca is just like malloc except that it never returns null.
*/
162 DEF_ATTR_TREE_LIST (ATTR_ALLOCA_SIZE_1_NOTHROW_LEAF_LIST
, ATTR_RETURNS_NONNULL
,
163 ATTR_NULL
, ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST
)
165 /* Allocation functions like calloc the product of whose first two arguments
166 specifies the size of the allocated object.
*/
167 DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_2_NOTHROW_LEAF_LIST
, ATTR_ALLOC_SIZE
, \
168 ATTR_LIST_1_2
, ATTR_MALLOC_NOTHROW_LEAF_LIST
)
170 /* Allocation functions like realloc whose second argument specifies
171 the size of the allocated object.
*/
172 DEF_ATTR_TREE_LIST (ATTR_ALLOC_SIZE_2_NOTHROW_LEAF_LIST
, ATTR_ALLOC_SIZE
, \
173 ATTR_LIST_2
, ATTR_NOTHROW_LEAF_LIST
)
175 /* Functions whose pointer
parameter(s
) are all nonnull.
*/
176 DEF_ATTR_TREE_LIST (ATTR_NONNULL_LIST
, ATTR_NONNULL
, ATTR_NULL
, ATTR_NULL
)
177 /* Functions whose first parameter is a nonnull pointer.
*/
178 DEF_ATTR_TREE_LIST (ATTR_NONNULL_1
, ATTR_NONNULL
, ATTR_LIST_1
, ATTR_NULL
)
179 /* Functions whose second parameter is a nonnull pointer.
*/
180 DEF_ATTR_TREE_LIST (ATTR_NONNULL_2
, ATTR_NONNULL
, ATTR_LIST_2
, ATTR_NULL
)
181 /* Functions whose third parameter is a nonnull pointer.
*/
182 DEF_ATTR_TREE_LIST (ATTR_NONNULL_3
, ATTR_NONNULL
, ATTR_LIST_3
, ATTR_NULL
)
183 /* Nothrow functions with the
sentinel(1) attribute.
*/
184 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1
, ATTR_SENTINEL
, ATTR_LIST_1
, \
186 /* Nothrow functions whose pointer
parameter(s
) are all nonnull.
*/
187 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL
, ATTR_NONNULL
, ATTR_NULL
, \
189 /* Nothrow leaf functions whose pointer
parameter(s
) are all nonnull.
*/
190 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF
, ATTR_NONNULL
, ATTR_NULL
, \
191 ATTR_NOTHROW_LEAF_LIST
)
192 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF_LIST
, ATTR_LEAF
, ATTR_NULL
, ATTR_NOTHROW_NONNULL_LEAF
)
193 /* Nothrow functions whose first parameter is a nonnull pointer.
*/
194 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1
, ATTR_NONNULL
, ATTR_LIST_1
, \
196 /* Nothrow functions whose second parameter is a nonnull pointer.
*/
197 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_2
, ATTR_NONNULL
, ATTR_LIST_2
, \
199 /* Nothrow functions whose third parameter is a nonnull pointer.
*/
200 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_3
, ATTR_NONNULL
, ATTR_LIST_3
, \
202 /* Nothrow functions whose fourth parameter is a nonnull pointer.
*/
203 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_4
, ATTR_NONNULL
, ATTR_LIST_4
, \
205 /* Nothrow functions whose fifth parameter is a nonnull pointer.
*/
206 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_5
, ATTR_NONNULL
, ATTR_LIST_5
, \
208 /* Nothrow leaf functions which are type
-generic.
*/
209 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_TYPEGENERIC_LEAF
, ATTR_TYPEGENERIC
, ATTR_NULL
, \
210 ATTR_NOTHROW_LEAF_LIST
)
211 /* Nothrow nonnull leaf functions that are type
-generic.
*/
212 DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF
,
213 ATTR_TYPEGENERIC
, ATTR_NULL
,
214 ATTR_NOTHROW_NONNULL_LEAF
)
215 /* Nothrow const functions whose pointer
parameter(s
) are all nonnull.
*/
216 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL
, ATTR_CONST
, ATTR_NULL
, \
217 ATTR_NOTHROW_NONNULL
)
218 /* Nothrow leaf functions whose pointer
parameter(s
) are all nonnull
,
219 and which return their first argument.
*/
220 DEF_ATTR_TREE_LIST (ATTR_RET1_NOTHROW_NONNULL_LEAF
, ATTR_FNSPEC
, ATTR_LIST_STR1
, \
221 ATTR_NOTHROW_NONNULL_LEAF
)
222 /* Nothrow leaf functions whose pointer
parameter(s
) are all nonnull
,
223 and return value is also nonnull.
*/
224 DEF_ATTR_TREE_LIST (ATTR_RETNONNULL_NOTHROW_LEAF
, ATTR_RETURNS_NONNULL
, ATTR_NULL
, \
225 ATTR_NOTHROW_NONNULL_LEAF
)
226 /* Nothrow const leaf functions whose pointer
parameter(s
) are all nonnull.
*/
227 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL_LEAF
, ATTR_CONST
, ATTR_NULL
, \
228 ATTR_NOTHROW_NONNULL_LEAF
)
229 /* Nothrow const functions which are type
-generic.
*/
230 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC
, ATTR_TYPEGENERIC
, ATTR_NULL
, \
231 ATTR_CONST_NOTHROW_LIST
)
232 /* Nothrow const leaf functions which are type
-generic.
*/
233 DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF
, ATTR_TYPEGENERIC
, ATTR_NULL
, \
234 ATTR_CONST_NOTHROW_LEAF_LIST
)
235 /* Nothrow pure functions whose pointer
parameter(s
) are all nonnull.
*/
236 DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL
, ATTR_PURE
, ATTR_NULL
, \
237 ATTR_NOTHROW_NONNULL
)
238 /* Nothrow pure leaf functions whose pointer
parameter(s
) are all nonnull.
*/
239 DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL_LEAF
, ATTR_PURE
, ATTR_NULL
, \
240 ATTR_NOTHROW_NONNULL_LEAF
)
241 /* Nothrow malloc functions whose pointer
parameter(s
) are all nonnull.
*/
242 DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL
, ATTR_MALLOC
, ATTR_NULL
, \
243 ATTR_NOTHROW_NONNULL
)
244 /* Nothrow malloc leaf functions whose pointer
parameter(s
) are all nonnull.
*/
245 DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL_LEAF
, ATTR_MALLOC
, ATTR_NULL
, \
246 ATTR_NOTHROW_NONNULL_LEAF
)
248 /* Construct a tree for a format attribute.
*/
249 #define
DEF_FORMAT_ATTRIBUTE(TYPE, FA
, VALUES
) \
250 DEF_ATTR_TREE_LIST (ATTR_##
TYPE##_##VALUES
, ATTR_NULL
, \
251 ATTR_##
TYPE, ATTR_LIST_##VALUES
) \
252 DEF_ATTR_TREE_LIST (ATTR_FORMAT_##
TYPE##_##VALUES
, ATTR_FORMAT
, \
253 ATTR_##
TYPE##_##VALUES
, ATTR_NONNULL_##FA
)
254 #define
DEF_FORMAT_ATTRIBUTE_NOTHROW(TYPE, FA
, VALUES
) \
255 DEF_ATTR_TREE_LIST (ATTR_##
TYPE##_##VALUES
, ATTR_NULL
, \
256 ATTR_##
TYPE, ATTR_LIST_##VALUES
) \
257 DEF_ATTR_TREE_LIST (ATTR_FORMAT_##
TYPE##_NOTHROW_##VALUES
, ATTR_FORMAT
,\
258 ATTR_##
TYPE##_##VALUES
, ATTR_NOTHROW_NONNULL_##FA
)
259 #define
DEF_FORMAT_ATTRIBUTE_BOTH(TYPE, FA
, VALUES
) \
260 DEF_ATTR_TREE_LIST (ATTR_##
TYPE##_##VALUES
, ATTR_NULL
, \
261 ATTR_##
TYPE, ATTR_LIST_##VALUES
) \
262 DEF_ATTR_TREE_LIST (ATTR_FORMAT_##
TYPE##_##VALUES
, ATTR_FORMAT
, \
263 ATTR_##
TYPE##_##VALUES
, ATTR_NONNULL_##FA
) \
264 DEF_ATTR_TREE_LIST (ATTR_FORMAT_##
TYPE##_NOTHROW_##VALUES
, ATTR_FORMAT
,\
265 ATTR_##
TYPE##_##VALUES
, ATTR_NOTHROW_NONNULL_##FA
)
266 DEF_FORMAT_ATTRIBUTE(PRINTF
,1,1_0
)
267 DEF_FORMAT_ATTRIBUTE(PRINTF
,1,1_2
)
268 DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF
,2,2_0
)
269 DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF
,2,2_3
)
270 DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF
,3,3_0
)
271 DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF
,3,3_4
)
272 DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF
,4,4_0
)
273 DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF
,4,4_5
)
274 DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF
,5,5_0
)
275 DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF
,5,5_6
)
276 DEF_FORMAT_ATTRIBUTE(SCANF
,1,1_0
)
277 DEF_FORMAT_ATTRIBUTE(SCANF
,1,1_2
)
278 DEF_FORMAT_ATTRIBUTE_BOTH(SCANF
,2,2_0
)
279 DEF_FORMAT_ATTRIBUTE_BOTH(SCANF
,2,2_3
)
280 DEF_FORMAT_ATTRIBUTE_NOTHROW(STRFTIME
,3,3_0
)
281 DEF_FORMAT_ATTRIBUTE_NOTHROW(STRFMON
,3,3_4
)
282 #undef DEF_FORMAT_ATTRIBUTE
283 #undef DEF_FORMAT_ATTRIBUTE_NOTHROW
284 #undef DEF_FORMAT_ATTRIBUTE_BOTH
286 /* Transactional memory variants of the above.
*/
288 DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_LIST
,
289 ATTR_TM_REGPARM
, ATTR_NULL
, ATTR_NOTHROW_LIST
)
290 DEF_ATTR_TREE_LIST (ATTR_TM_TMPURE_NOTHROW_LIST
,
291 ATTR_TM_TMPURE
, ATTR_NULL
, ATTR_TM_NOTHROW_LIST
)
292 DEF_ATTR_TREE_LIST (ATTR_TM_PURE_TMPURE_NOTHROW_LIST
,
293 ATTR_PURE
, ATTR_NULL
, ATTR_TM_TMPURE_NOTHROW_LIST
)
294 DEF_ATTR_TREE_LIST (ATTR_TM_NORETURN_NOTHROW_LIST
,
295 ATTR_TM_REGPARM
, ATTR_NULL
, ATTR_NORETURN_NOTHROW_LIST
)
296 DEF_ATTR_TREE_LIST (ATTR_TM_CONST_NOTHROW_LIST
,
297 ATTR_TM_REGPARM
, ATTR_NULL
, ATTR_CONST_NOTHROW_LIST
)
298 DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_LIST
,
299 ATTR_RETURNS_TWICE
, ATTR_NULL
, ATTR_TM_NOTHROW_LIST
)
301 /* Same attributes used for BUILT_IN_MALLOC except with TM_PURE thrown in.
*/
302 DEF_ATTR_TREE_LIST (ATTR_TMPURE_MALLOC_NOTHROW_LIST
,
303 ATTR_TM_TMPURE
, ATTR_NULL
, ATTR_MALLOC_NOTHROW_LIST
)
304 /* Same attributes used for BUILT_IN_FREE except with TM_PURE thrown in.
*/
305 DEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LIST
,
306 ATTR_TM_TMPURE
, ATTR_NULL
, ATTR_NOTHROW_LIST
)
308 DEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LEAF_LIST
,
309 ATTR_TM_TMPURE
, ATTR_NULL
, ATTR_NOTHROW_LEAF_LIST
)
310 DEF_ATTR_TREE_LIST (ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST
,
311 ATTR_TM_TMPURE
, ATTR_NULL
, ATTR_NORETURN_NOTHROW_LEAF_LIST
)
313 /* Construct a tree for a format_arg attribute.
*/
314 #define
DEF_FORMAT_ARG_ATTRIBUTE(FA
) \
315 DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_##FA
, ATTR_FORMAT_ARG
, \
316 ATTR_LIST_##FA
, ATTR_NOTHROW_NONNULL_##FA
)
317 DEF_FORMAT_ARG_ATTRIBUTE(1)
318 DEF_FORMAT_ARG_ATTRIBUTE(2)
319 #undef DEF_FORMAT_ARG_ATTRIBUTE