OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [builtin-attrs.def] - Blame information for rev 867

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.