xref: /dflybsd-src/contrib/gcc-4.7/gcc/builtin-attrs.def (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino/* Copyright (C) 2001, 2002, 2004, 2005, 2007, 2010
2*e4b17023SJohn Marino   Free Software Foundation, Inc.
3*e4b17023SJohn Marino   Contributed by Joseph Myers <jsm28@cam.ac.uk>.
4*e4b17023SJohn Marino
5*e4b17023SJohn MarinoThis file is part of GCC.
6*e4b17023SJohn Marino
7*e4b17023SJohn MarinoGCC is free software; you can redistribute it and/or modify it under
8*e4b17023SJohn Marinothe terms of the GNU General Public License as published by the Free
9*e4b17023SJohn MarinoSoftware Foundation; either version 3, or (at your option) any later
10*e4b17023SJohn Marinoversion.
11*e4b17023SJohn Marino
12*e4b17023SJohn MarinoGCC is distributed in the hope that it will be useful, but WITHOUT ANY
13*e4b17023SJohn MarinoWARRANTY; without even the implied warranty of MERCHANTABILITY or
14*e4b17023SJohn MarinoFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15*e4b17023SJohn Marinofor more details.
16*e4b17023SJohn Marino
17*e4b17023SJohn MarinoYou should have received a copy of the GNU General Public License
18*e4b17023SJohn Marinoalong with GCC; see the file COPYING3.  If not see
19*e4b17023SJohn Marino<http://www.gnu.org/licenses/>.  */
20*e4b17023SJohn Marino
21*e4b17023SJohn Marino/* This header provides a declarative way of describing the attributes
22*e4b17023SJohn Marino   that are applied to some functions by default.
23*e4b17023SJohn Marino
24*e4b17023SJohn Marino   Before including this header, you must define the following macros.
25*e4b17023SJohn Marino   In each case where there is an ENUM, it is an identifier used to
26*e4b17023SJohn Marino   reference the tree in subsequent definitions.
27*e4b17023SJohn Marino
28*e4b17023SJohn Marino   DEF_ATTR_NULL_TREE (ENUM)
29*e4b17023SJohn Marino
30*e4b17023SJohn Marino     Constructs a NULL_TREE.
31*e4b17023SJohn Marino
32*e4b17023SJohn Marino   DEF_ATTR_INT (ENUM, VALUE)
33*e4b17023SJohn Marino
34*e4b17023SJohn Marino     Constructs an INTEGER_CST with value VALUE (an integer representable
35*e4b17023SJohn Marino     in HOST_WIDE_INT).
36*e4b17023SJohn Marino
37*e4b17023SJohn Marino   DEF_ATTR_IDENT (ENUM, STRING)
38*e4b17023SJohn Marino
39*e4b17023SJohn Marino     Constructs an IDENTIFIER_NODE for STRING.
40*e4b17023SJohn Marino
41*e4b17023SJohn Marino   DEF_ATTR_TREE_LIST (ENUM, PURPOSE, VALUE, CHAIN)
42*e4b17023SJohn Marino
43*e4b17023SJohn Marino     Constructs a TREE_LIST with given PURPOSE, VALUE and CHAIN (given
44*e4b17023SJohn Marino     as previous ENUM names).  */
45*e4b17023SJohn Marino
46*e4b17023SJohn MarinoDEF_ATTR_NULL_TREE (ATTR_NULL)
47*e4b17023SJohn Marino
48*e4b17023SJohn Marino/* Construct a tree for a given integer and a list containing it.  */
49*e4b17023SJohn Marino#define DEF_ATTR_FOR_INT(VALUE)					\
50*e4b17023SJohn Marino  DEF_ATTR_INT (ATTR_##VALUE, VALUE)			\
51*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE, ATTR_NULL,	\
52*e4b17023SJohn Marino		      ATTR_##VALUE, ATTR_NULL)
53*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (0)
54*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (1)
55*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (2)
56*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (3)
57*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (4)
58*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (5)
59*e4b17023SJohn MarinoDEF_ATTR_FOR_INT (6)
60*e4b17023SJohn Marino#undef DEF_ATTR_FOR_INT
61*e4b17023SJohn Marino
62*e4b17023SJohn Marino/* Construct a tree for a list of two integers.  */
63*e4b17023SJohn Marino#define DEF_LIST_INT_INT(VALUE1, VALUE2)				 \
64*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE1##_##VALUE2, ATTR_NULL,		 \
65*e4b17023SJohn Marino		      ATTR_##VALUE1, ATTR_LIST_##VALUE2)
66*e4b17023SJohn MarinoDEF_LIST_INT_INT (1,0)
67*e4b17023SJohn MarinoDEF_LIST_INT_INT (1,2)
68*e4b17023SJohn MarinoDEF_LIST_INT_INT (2,0)
69*e4b17023SJohn MarinoDEF_LIST_INT_INT (2,3)
70*e4b17023SJohn MarinoDEF_LIST_INT_INT (3,0)
71*e4b17023SJohn MarinoDEF_LIST_INT_INT (3,4)
72*e4b17023SJohn MarinoDEF_LIST_INT_INT (4,0)
73*e4b17023SJohn MarinoDEF_LIST_INT_INT (4,5)
74*e4b17023SJohn MarinoDEF_LIST_INT_INT (5,0)
75*e4b17023SJohn MarinoDEF_LIST_INT_INT (5,6)
76*e4b17023SJohn Marino#undef DEF_LIST_INT_INT
77*e4b17023SJohn Marino
78*e4b17023SJohn Marino/* Construct trees for identifiers.  */
79*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_CONST, "const")
80*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_FORMAT, "format")
81*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg")
82*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_MALLOC, "malloc")
83*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NONNULL, "nonnull")
84*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NORETURN, "noreturn")
85*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NOTHROW, "nothrow")
86*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_LEAF, "leaf")
87*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_PRINTF, "printf")
88*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_ASM_FPRINTF, "asm_fprintf")
89*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_DIAG, "gcc_diag")
90*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_CDIAG, "gcc_cdiag")
91*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_GCC_CXXDIAG, "gcc_cxxdiag")
92*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_PURE, "pure")
93*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_NOVOPS, "no vops")
94*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_SCANF, "scanf")
95*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_SENTINEL, "sentinel")
96*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_STRFMON, "strfmon")
97*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_STRFTIME, "strftime")
98*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TYPEGENERIC, "type generic")
99*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TM_REGPARM, "*tm regparm")
100*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_TM_TMPURE, "transaction_pure")
101*e4b17023SJohn MarinoDEF_ATTR_IDENT (ATTR_RETURNS_TWICE, "returns_twice")
102*e4b17023SJohn Marino
103*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOVOPS_LIST, ATTR_NOVOPS, ATTR_NULL, ATTR_NULL)
104*e4b17023SJohn Marino
105*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOVOPS_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOVOPS_LIST)
106*e4b17023SJohn Marino
107*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NULL)
108*e4b17023SJohn Marino
109*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_LIST, ATTR_NOTHROW, ATTR_NULL, ATTR_NULL)
110*e4b17023SJohn Marino
111*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOTHROW_LIST)
112*e4b17023SJohn Marino
113*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LIST, ATTR_CONST,	\
114*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LIST)
115*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LEAF_LIST, ATTR_CONST,	\
116*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
117*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LIST, ATTR_PURE,		\
118*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LIST)
119*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LEAF_LIST, ATTR_PURE,	\
120*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
121*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NOVOPS_LIST, ATTR_NOVOPS,	\
122*e4b17023SJohn Marino			ATTR_NULL, ATTR_PURE_NOTHROW_LIST)
123*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NOVOPS_LEAF_LIST, ATTR_NOVOPS,\
124*e4b17023SJohn Marino			ATTR_NULL, ATTR_PURE_NOTHROW_LEAF_LIST)
125*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LIST, ATTR_NORETURN,	\
126*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LIST)
127*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST, ATTR_NORETURN,\
128*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
129*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LIST, ATTR_MALLOC,	\
130*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LIST)
131*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LEAF_LIST, ATTR_MALLOC,	\
132*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
133*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LIST, ATTR_SENTINEL,	\
134*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LIST)
135*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LEAF_LIST, ATTR_SENTINEL,	\
136*e4b17023SJohn Marino			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
137*e4b17023SJohn Marino
138*e4b17023SJohn Marino/* Functions whose pointer parameter(s) are all nonnull.  */
139*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_LIST, ATTR_NONNULL, ATTR_NULL, ATTR_NULL)
140*e4b17023SJohn Marino/* Functions whose first parameter is a nonnull pointer.  */
141*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, ATTR_NULL)
142*e4b17023SJohn Marino/* Functions whose second parameter is a nonnull pointer.  */
143*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, ATTR_NULL)
144*e4b17023SJohn Marino/* Functions whose third parameter is a nonnull pointer.  */
145*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, ATTR_NULL)
146*e4b17023SJohn Marino/* Nothrow functions with the sentinel(1) attribute. */
147*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1, ATTR_SENTINEL, ATTR_LIST_1, \
148*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
149*e4b17023SJohn Marino/* Nothrow functions whose pointer parameter(s) are all nonnull.  */
150*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL, ATTR_NONNULL, ATTR_NULL, \
151*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
152*e4b17023SJohn Marino/* Nothrow leaf functions whose pointer parameter(s) are all nonnull.  */
153*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF, ATTR_NONNULL, ATTR_NULL, \
154*e4b17023SJohn Marino			ATTR_NOTHROW_LEAF_LIST)
155*e4b17023SJohn Marino/* Nothrow functions whose first parameter is a nonnull pointer.  */
156*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, \
157*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
158*e4b17023SJohn Marino/* Nothrow functions whose second parameter is a nonnull pointer.  */
159*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, \
160*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
161*e4b17023SJohn Marino/* Nothrow functions whose third parameter is a nonnull pointer.  */
162*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, \
163*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
164*e4b17023SJohn Marino/* Nothrow functions whose fourth parameter is a nonnull pointer.  */
165*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_4, ATTR_NONNULL, ATTR_LIST_4, \
166*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
167*e4b17023SJohn Marino/* Nothrow functions whose fifth parameter is a nonnull pointer.  */
168*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_5, ATTR_NONNULL, ATTR_LIST_5, \
169*e4b17023SJohn Marino			ATTR_NOTHROW_LIST)
170*e4b17023SJohn Marino/* Nothrow const functions whose pointer parameter(s) are all nonnull.  */
171*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL, ATTR_CONST, ATTR_NULL, \
172*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL)
173*e4b17023SJohn Marino/* Nothrow const leaf functions whose pointer parameter(s) are all nonnull.  */
174*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL_LEAF, ATTR_CONST, ATTR_NULL, \
175*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL_LEAF)
176*e4b17023SJohn Marino/* Nothrow const functions which are type-generic.  */
177*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC, ATTR_TYPEGENERIC, ATTR_NULL, \
178*e4b17023SJohn Marino			ATTR_CONST_NOTHROW_LIST)
179*e4b17023SJohn Marino/* Nothrow const leaf functions which are type-generic.  */
180*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF, ATTR_TYPEGENERIC, ATTR_NULL, \
181*e4b17023SJohn Marino			ATTR_CONST_NOTHROW_LEAF_LIST)
182*e4b17023SJohn Marino/* Nothrow pure functions whose pointer parameter(s) are all nonnull.  */
183*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL, ATTR_PURE, ATTR_NULL, \
184*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL)
185*e4b17023SJohn Marino/* Nothrow pure leaf functions whose pointer parameter(s) are all nonnull.  */
186*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL_LEAF, ATTR_PURE, ATTR_NULL, \
187*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL_LEAF)
188*e4b17023SJohn Marino/* Nothrow malloc functions whose pointer parameter(s) are all nonnull.  */
189*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL, ATTR_MALLOC, ATTR_NULL, \
190*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL)
191*e4b17023SJohn Marino/* Nothrow malloc leaf functions whose pointer parameter(s) are all nonnull.  */
192*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL_LEAF, ATTR_MALLOC, ATTR_NULL, \
193*e4b17023SJohn Marino			ATTR_NOTHROW_NONNULL_LEAF)
194*e4b17023SJohn Marino
195*e4b17023SJohn Marino/* Construct a tree for a format attribute.  */
196*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE(TYPE, FA, VALUES)				 \
197*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
198*e4b17023SJohn Marino		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
199*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT,	 \
200*e4b17023SJohn Marino		      ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA)
201*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE_NOTHROW(TYPE, FA, VALUES)			 \
202*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
203*e4b17023SJohn Marino		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
204*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\
205*e4b17023SJohn Marino		      ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA)
206*e4b17023SJohn Marino#define DEF_FORMAT_ATTRIBUTE_BOTH(TYPE, FA, VALUES)			 \
207*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
208*e4b17023SJohn Marino		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
209*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT,	 \
210*e4b17023SJohn Marino		      ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA)	 \
211*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\
212*e4b17023SJohn Marino		      ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA)
213*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(PRINTF,1,1_0)
214*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(PRINTF,1,1_2)
215*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_0)
216*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_3)
217*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_0)
218*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_4)
219*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_0)
220*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_5)
221*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_0)
222*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_6)
223*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(SCANF,1,1_0)
224*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE(SCANF,1,1_2)
225*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_0)
226*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_3)
227*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(STRFTIME,3,3_0)
228*e4b17023SJohn MarinoDEF_FORMAT_ATTRIBUTE_NOTHROW(STRFMON,3,3_4)
229*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE
230*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE_NOTHROW
231*e4b17023SJohn Marino#undef DEF_FORMAT_ATTRIBUTE_BOTH
232*e4b17023SJohn Marino
233*e4b17023SJohn Marino/* Transactional memory variants of the above.  */
234*e4b17023SJohn Marino
235*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_LIST,
236*e4b17023SJohn Marino		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_NOTHROW_LIST)
237*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_TMPURE_NOTHROW_LIST,
238*e4b17023SJohn Marino		    ATTR_TM_TMPURE, ATTR_NULL, ATTR_TM_NOTHROW_LIST)
239*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_PURE_TMPURE_NOTHROW_LIST,
240*e4b17023SJohn Marino		    ATTR_PURE, ATTR_NULL, ATTR_TM_TMPURE_NOTHROW_LIST)
241*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NORETURN_NOTHROW_LIST,
242*e4b17023SJohn Marino		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_NORETURN_NOTHROW_LIST)
243*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_CONST_NOTHROW_LIST,
244*e4b17023SJohn Marino		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_CONST_NOTHROW_LIST)
245*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_LIST,
246*e4b17023SJohn Marino		    ATTR_RETURNS_TWICE, ATTR_NULL, ATTR_TM_NOTHROW_LIST)
247*e4b17023SJohn Marino
248*e4b17023SJohn Marino/* Same attributes used for BUILT_IN_MALLOC except with TM_PURE thrown in.  */
249*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TMPURE_MALLOC_NOTHROW_LIST,
250*e4b17023SJohn Marino		   ATTR_TM_TMPURE, ATTR_NULL, ATTR_MALLOC_NOTHROW_LIST)
251*e4b17023SJohn Marino/* Same attributes used for BUILT_IN_FREE except with TM_PURE thrown in.  */
252*e4b17023SJohn MarinoDEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LIST,
253*e4b17023SJohn Marino		   ATTR_TM_TMPURE, ATTR_NULL, ATTR_NOTHROW_LIST)
254*e4b17023SJohn Marino
255*e4b17023SJohn Marino/* Construct a tree for a format_arg attribute.  */
256*e4b17023SJohn Marino#define DEF_FORMAT_ARG_ATTRIBUTE(FA)					\
257*e4b17023SJohn Marino  DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_##FA, ATTR_FORMAT_ARG,		\
258*e4b17023SJohn Marino		      ATTR_LIST_##FA, ATTR_NOTHROW_NONNULL_##FA)
259*e4b17023SJohn MarinoDEF_FORMAT_ARG_ATTRIBUTE(1)
260*e4b17023SJohn MarinoDEF_FORMAT_ARG_ATTRIBUTE(2)
261*e4b17023SJohn Marino#undef DEF_FORMAT_ARG_ATTRIBUTE
262*e4b17023SJohn Marino
263