]>
Commit | Line | Data |
---|---|---|
40754343 | 1 | /* Definitions for C parsing and type checking. |
3c71940f | 2 | Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, |
a8086abf | 3 | 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
40754343 | 4 | |
1322177d | 5 | This file is part of GCC. |
40754343 | 6 | |
1322177d LB |
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 2, or (at your option) any later | |
10 | version. | |
40754343 | 11 | |
1322177d LB |
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. | |
40754343 RS |
16 | |
17 | You should have received a copy of the GNU General Public License | |
1322177d LB |
18 | along with GCC; see the file COPYING. If not, write to the Free |
19 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
20 | 02111-1307, USA. */ | |
40754343 | 21 | |
88657302 RH |
22 | #ifndef GCC_C_TREE_H |
23 | #define GCC_C_TREE_H | |
cf1c49cb | 24 | |
7f4edbcb BS |
25 | #include "c-common.h" |
26 | ||
40754343 RS |
27 | /* Language-dependent contents of an identifier. */ |
28 | ||
ff92a691 JW |
29 | /* The limbo_value is used for block level extern declarations, which need |
30 | to be type checked against subsequent extern declarations. They can't | |
0e5921e8 ZW |
31 | be referenced after they fall out of scope, so they can't be global. |
32 | ||
33 | The rid_code field is used for keywords. It is in all | |
34 | lang_identifier nodes, because some keywords are only special in a | |
35 | particular context. */ | |
ff92a691 | 36 | |
40754343 RS |
37 | struct lang_identifier |
38 | { | |
2a967f3d | 39 | struct c_common_identifier ignore; |
40754343 | 40 | tree global_value, local_value, label_value, implicit_decl; |
f2a02c3a | 41 | tree error_locus, limbo_value; |
40754343 RS |
42 | }; |
43 | ||
1f731749 | 44 | /* Language-specific declaration information. */ |
8f17b5c5 MM |
45 | |
46 | struct lang_decl | |
47 | { | |
48 | struct c_lang_decl base; | |
1f731749 MM |
49 | /* The return types and parameter types may have variable size. |
50 | This is a list of any SAVE_EXPRs that need to be evaluated to | |
51 | compute those sizes. */ | |
52 | tree pending_sizes; | |
8f17b5c5 MM |
53 | }; |
54 | ||
40754343 | 55 | /* Macros for access to language-specific slots in an identifier. */ |
db69cfcb | 56 | /* Each of these slots contains a DECL node or null. */ |
40754343 | 57 | |
db69cfcb RS |
58 | /* This represents the value which the identifier has in the |
59 | file-scope namespace. */ | |
40754343 | 60 | #define IDENTIFIER_GLOBAL_VALUE(NODE) \ |
0f41302f | 61 | (((struct lang_identifier *) (NODE))->global_value) |
db69cfcb RS |
62 | /* This represents the value which the identifier has in the current |
63 | scope. */ | |
40754343 | 64 | #define IDENTIFIER_LOCAL_VALUE(NODE) \ |
0f41302f | 65 | (((struct lang_identifier *) (NODE))->local_value) |
db69cfcb RS |
66 | /* This represents the value which the identifier has as a label in |
67 | the current label scope. */ | |
40754343 | 68 | #define IDENTIFIER_LABEL_VALUE(NODE) \ |
0f41302f | 69 | (((struct lang_identifier *) (NODE))->label_value) |
db69cfcb RS |
70 | /* This records the extern decl of this identifier, if it has had one |
71 | at any point in this compilation. */ | |
f2a02c3a | 72 | #define IDENTIFIER_LIMBO_VALUE(NODE) \ |
0f41302f | 73 | (((struct lang_identifier *) (NODE))->limbo_value) |
db69cfcb RS |
74 | /* This records the implicit function decl of this identifier, if it |
75 | has had one at any point in this compilation. */ | |
40754343 | 76 | #define IDENTIFIER_IMPLICIT_DECL(NODE) \ |
0f41302f | 77 | (((struct lang_identifier *) (NODE))->implicit_decl) |
db69cfcb RS |
78 | /* This is the last function in which we printed an "undefined variable" |
79 | message for this identifier. Value is a FUNCTION_DECL or null. */ | |
40754343 | 80 | #define IDENTIFIER_ERROR_LOCUS(NODE) \ |
0f41302f | 81 | (((struct lang_identifier *) (NODE))->error_locus) |
40754343 RS |
82 | |
83 | /* In identifiers, C uses the following fields in a special way: | |
84 | TREE_PUBLIC to record that there was a previous local extern decl. | |
85 | TREE_USED to record that such a decl was used. | |
86 | TREE_ADDRESSABLE to record that the address of such a decl was used. */ | |
87 | ||
40754343 | 88 | /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ |
a8086abf | 89 | #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) |
40754343 RS |
90 | |
91 | /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ | |
a8086abf | 92 | #define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE) |
40754343 RS |
93 | |
94 | /* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE | |
95 | nonzero if the definition of the type has already started. */ | |
a8086abf | 96 | #define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE) |
40754343 | 97 | |
0e5921e8 ZW |
98 | /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a |
99 | keyword. C_RID_CODE (node) is then the RID_* value of the keyword, | |
100 | and C_RID_YYCODE is the token number wanted by Yacc. */ | |
a8086abf | 101 | #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) |
0e5921e8 | 102 | |
31ed8fea RH |
103 | /* This function was declared inline. This flag controls the linkage |
104 | semantics of 'inline'; whether or not the function is inlined is | |
105 | controlled by DECL_INLINE. */ | |
106 | #define DECL_DECLARED_INLINE_P(NODE) \ | |
107 | (DECL_LANG_SPECIFIC (NODE)->base.declared_inline) | |
108 | ||
40754343 RS |
109 | /* In a RECORD_TYPE, a sorted array of the fields of the type. */ |
110 | struct lang_type | |
111 | { | |
112 | int len; | |
113 | tree elts[1]; | |
114 | }; | |
115 | ||
40754343 RS |
116 | /* Record whether a type or decl was written with nonconstant size. |
117 | Note that TYPE_SIZE may have simplified to a constant. */ | |
a8086abf GS |
118 | #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) |
119 | #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) | |
40754343 | 120 | |
40754343 RS |
121 | #if 0 /* Not used. */ |
122 | /* Record whether a decl for a function or function pointer has | |
123 | already been mentioned (in a warning) because it was called | |
124 | but didn't have a prototype. */ | |
a8086abf | 125 | #define C_MISSING_PROTOTYPE_WARNED(DECL) DECL_LANG_FLAG_2 (DECL) |
40754343 RS |
126 | #endif |
127 | ||
128 | /* Store a value in that field. */ | |
a8086abf GS |
129 | #define C_SET_EXP_ORIGINAL_CODE(EXP, CODE) \ |
130 | (TREE_COMPLEXITY (EXP) = (int) (CODE)) | |
40754343 RS |
131 | |
132 | /* Record whether a typedef for type `int' was actually `signed int'. */ | |
a8086abf | 133 | #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) |
40754343 | 134 | |
5ce89b2e JM |
135 | /* For a FUNCTION_DECL, nonzero if it was defined without an explicit |
136 | return type. */ | |
137 | #define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP) | |
138 | ||
96735c06 RS |
139 | /* Nonzero for a declaration of a built in function if there has been no |
140 | occasion that would declare the function in ordinary C. | |
141 | Using the function draws a pedantic warning in this case. */ | |
a8086abf | 142 | #define C_DECL_ANTICIPATED(EXP) DECL_LANG_FLAG_3 (EXP) |
96735c06 | 143 | |
40754343 RS |
144 | /* For FUNCTION_TYPE, a hidden list of types of arguments. The same as |
145 | TYPE_ARG_TYPES for functions with prototypes, but created for functions | |
146 | without prototypes. */ | |
6d0a3f67 | 147 | #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_BINFO (NODE) |
4e28fa00 | 148 | |
40754343 | 149 | \f |
bfb73556 | 150 | /* in c-lang.c and objc-act.c */ |
6e090c76 KG |
151 | extern tree lookup_interface PARAMS ((tree)); |
152 | extern tree is_class_name PARAMS ((tree)); | |
153 | extern void maybe_objc_check_decl PARAMS ((tree)); | |
154 | extern void finish_file PARAMS ((void)); | |
155 | extern int maybe_objc_comptypes PARAMS ((tree, tree, int)); | |
156 | extern tree maybe_building_objc_message_expr PARAMS ((void)); | |
6e090c76 | 157 | extern int recognize_objc_keyword PARAMS ((void)); |
7e585d16 | 158 | extern tree lookup_objc_ivar PARAMS ((tree)); |
0abc6a6a | 159 | |
7c57c798 | 160 | \f |
1526a060 | 161 | /* in c-parse.in */ |
6e090c76 | 162 | extern void c_parse_init PARAMS ((void)); |
5d69f816 | 163 | extern void c_set_yydebug PARAMS ((int)); |
1526a060 | 164 | |
7c57c798 | 165 | /* in c-aux-info.c */ |
6e090c76 | 166 | extern void gen_aux_info_record PARAMS ((tree, int, int, int)); |
40754343 | 167 | |
7c57c798 | 168 | /* in c-decl.c */ |
43577e6b NB |
169 | extern int global_bindings_p PARAMS ((void)); |
170 | extern int kept_level_p PARAMS ((void)); | |
171 | extern tree getdecls PARAMS ((void)); | |
172 | extern void pushlevel PARAMS ((int)); | |
173 | extern tree poplevel PARAMS ((int,int, int)); | |
174 | extern void insert_block PARAMS ((tree)); | |
175 | extern void set_block PARAMS ((tree)); | |
176 | extern tree pushdecl PARAMS ((tree)); | |
177 | ||
7ffb4fd2 | 178 | extern void c_insert_default_attributes PARAMS ((tree)); |
f5e99456 | 179 | extern void c_init_decl_processing PARAMS ((void)); |
63e1b1c4 | 180 | extern void c_dup_lang_specific_decl PARAMS ((tree)); |
5d69f816 | 181 | extern void c_print_identifier PARAMS ((FILE *, tree, int)); |
4f0ade92 | 182 | extern void c_mark_tree PARAMS ((tree)); |
0e03329a | 183 | extern tree build_array_declarator PARAMS ((tree, tree, int, int)); |
6e090c76 | 184 | extern tree build_enumerator PARAMS ((tree, tree)); |
6e090c76 KG |
185 | extern int c_decode_option PARAMS ((int, char **)); |
186 | extern void c_mark_varargs PARAMS ((void)); | |
77c4d6c0 | 187 | extern void check_for_loop_decls PARAMS ((void)); |
6e090c76 | 188 | extern void clear_parm_order PARAMS ((void)); |
6e090c76 KG |
189 | extern int complete_array_type PARAMS ((tree, tree, int)); |
190 | extern void declare_parm_level PARAMS ((int)); | |
3b304f5b ZW |
191 | extern tree define_label PARAMS ((const char *, int, |
192 | tree)); | |
6e090c76 | 193 | extern void finish_decl PARAMS ((tree, tree, tree)); |
6e090c76 | 194 | extern tree finish_enum PARAMS ((tree, tree, tree)); |
619708cc | 195 | extern void finish_function PARAMS ((int, int)); |
6e090c76 KG |
196 | extern tree finish_struct PARAMS ((tree, tree, tree)); |
197 | extern tree get_parm_info PARAMS ((int)); | |
6e090c76 KG |
198 | extern tree grokfield PARAMS ((const char *, int, tree, tree, tree)); |
199 | extern tree groktypename PARAMS ((tree)); | |
200 | extern tree groktypename_in_parm_context PARAMS ((tree)); | |
201 | extern tree implicitly_declare PARAMS ((tree)); | |
111458f1 | 202 | extern void implicit_decl_warning PARAMS ((tree)); |
6e090c76 | 203 | extern int in_parm_level_p PARAMS ((void)); |
6e090c76 | 204 | extern void keep_next_level PARAMS ((void)); |
6e090c76 KG |
205 | extern tree lookup_name PARAMS ((tree)); |
206 | extern tree lookup_name_current_level PARAMS ((tree)); | |
6e090c76 KG |
207 | extern void parmlist_tags_warning PARAMS ((void)); |
208 | extern void pending_xref_error PARAMS ((void)); | |
b03e38e1 NB |
209 | extern void c_mark_function_context PARAMS ((struct function *)); |
210 | extern void c_push_function_context PARAMS ((struct function *)); | |
211 | extern void c_pop_function_context PARAMS ((struct function *)); | |
6e090c76 | 212 | extern void pop_label_level PARAMS ((void)); |
6e090c76 KG |
213 | extern void push_label_level PARAMS ((void)); |
214 | extern void push_parm_decl PARAMS ((tree)); | |
6e090c76 | 215 | extern tree pushdecl_top_level PARAMS ((tree)); |
6e090c76 | 216 | extern void pushtag PARAMS ((tree, tree)); |
0e03329a | 217 | extern tree set_array_declarator_type PARAMS ((tree, tree, int)); |
6e090c76 | 218 | extern tree shadow_label PARAMS ((tree)); |
6e090c76 KG |
219 | extern void shadow_tag PARAMS ((tree)); |
220 | extern void shadow_tag_warned PARAMS ((tree, int)); | |
221 | extern tree start_enum PARAMS ((tree)); | |
f7a4cec0 | 222 | extern int start_function PARAMS ((tree, tree, tree)); |
6e090c76 | 223 | extern tree start_decl PARAMS ((tree, tree, int, |
f7a4cec0 | 224 | tree)); |
6e090c76 KG |
225 | extern tree start_struct PARAMS ((enum tree_code, tree)); |
226 | extern void store_parm_decls PARAMS ((void)); | |
227 | extern tree xref_tag PARAMS ((enum tree_code, tree)); | |
8f17b5c5 | 228 | extern tree c_begin_compound_stmt PARAMS ((void)); |
8b0e9a72 | 229 | extern void c_expand_deferred_function PARAMS ((tree)); |
8f17b5c5 | 230 | extern void c_expand_decl_stmt PARAMS ((tree)); |
7c57c798 | 231 | |
f797f486 NP |
232 | |
233 | /* in c-objc-common.c */ | |
234 | extern int c_disregard_inline_limits PARAMS ((tree)); | |
235 | extern int c_cannot_inline_tree_fn PARAMS ((tree *)); | |
236 | extern const char *c_objc_common_init PARAMS ((const char *)); | |
237 | extern int c_missing_noreturn_ok_p PARAMS ((tree)); | |
238 | extern void c_objc_common_finish_file PARAMS ((void)); | |
239 | extern int defer_fn PARAMS ((tree)); | |
ef4f94ac | 240 | extern bool c_warn_unused_global_decl PARAMS ((tree)); |
f797f486 NP |
241 | |
242 | #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ | |
243 | c_build_qualified_type ((TYPE), \ | |
244 | ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ | |
245 | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) | |
246 | ||
7c57c798 | 247 | /* in c-typeck.c */ |
6e090c76 | 248 | extern tree require_complete_type PARAMS ((tree)); |
6e090c76 | 249 | extern int comptypes PARAMS ((tree, tree)); |
4a56401d | 250 | extern tree c_sizeof_nowarn PARAMS ((tree)); |
6e090c76 | 251 | extern tree c_size_in_bytes PARAMS ((tree)); |
dffd7eb6 | 252 | extern bool c_mark_addressable PARAMS ((tree)); |
7a228918 | 253 | extern void c_incomplete_type_error PARAMS ((tree, tree)); |
ab393bf1 | 254 | extern tree c_type_promotes_to PARAMS ((tree)); |
6e090c76 KG |
255 | extern tree build_component_ref PARAMS ((tree, tree)); |
256 | extern tree build_indirect_ref PARAMS ((tree, const char *)); | |
257 | extern tree build_array_ref PARAMS ((tree, tree)); | |
7e585d16 | 258 | extern tree build_external_ref PARAMS ((tree, int)); |
6e090c76 KG |
259 | extern tree parser_build_binary_op PARAMS ((enum tree_code, |
260 | tree, tree)); | |
6e090c76 | 261 | extern void readonly_warning PARAMS ((tree, const char *)); |
6e090c76 KG |
262 | extern tree build_conditional_expr PARAMS ((tree, tree, tree)); |
263 | extern tree build_compound_expr PARAMS ((tree)); | |
15b732b2 NB |
264 | extern tree c_cast_expr PARAMS ((tree, tree)); |
265 | extern tree build_c_cast PARAMS ((tree, tree)); | |
6e090c76 KG |
266 | extern tree build_modify_expr PARAMS ((tree, enum tree_code, |
267 | tree)); | |
268 | extern void store_init_value PARAMS ((tree, tree)); | |
269 | extern void error_init PARAMS ((const char *)); | |
270 | extern void pedwarn_init PARAMS ((const char *)); | |
271 | extern void start_init PARAMS ((tree, tree, int)); | |
272 | extern void finish_init PARAMS ((void)); | |
273 | extern void really_start_incremental_init PARAMS ((tree)); | |
274 | extern void push_init_level PARAMS ((int)); | |
275 | extern tree pop_init_level PARAMS ((int)); | |
276 | extern void set_init_index PARAMS ((tree, tree)); | |
277 | extern void set_init_label PARAMS ((tree)); | |
278 | extern void process_init_element PARAMS ((tree)); | |
db3acfa5 | 279 | extern tree build_compound_literal PARAMS ((tree, tree)); |
903f51d9 RH |
280 | extern void pedwarn_c99 PARAMS ((const char *, ...)) |
281 | ATTRIBUTE_PRINTF_1; | |
8f17b5c5 MM |
282 | extern tree c_start_case PARAMS ((tree)); |
283 | extern void c_finish_case PARAMS ((void)); | |
15b732b2 | 284 | extern tree simple_asm_stmt PARAMS ((tree)); |
64094f6a RH |
285 | extern tree build_asm_stmt PARAMS ((tree, tree, tree, |
286 | tree, tree)); | |
f735a153 | 287 | extern tree c_convert_parm_for_inlining PARAMS ((tree, tree, tree)); |
40754343 RS |
288 | |
289 | /* Set to 0 at beginning of a function definition, set to 1 if | |
290 | a return statement that specifies a return value is seen. */ | |
291 | ||
292 | extern int current_function_returns_value; | |
293 | ||
294 | /* Set to 0 at beginning of a function definition, set to 1 if | |
295 | a return statement with no argument is seen. */ | |
296 | ||
297 | extern int current_function_returns_null; | |
298 | ||
5ce89b2e JM |
299 | /* Set to 0 at beginning of a function definition, set to 1 if |
300 | a call to a noreturn function is seen. */ | |
301 | ||
302 | extern int current_function_returns_abnormally; | |
303 | ||
6bdd692c RK |
304 | /* Nonzero means the expression being parsed will never be evaluated. |
305 | This is a count, since unevaluated expressions can nest. */ | |
306 | ||
307 | extern int skip_evaluation; | |
308 | ||
40754343 RS |
309 | /* Nonzero means `$' can be in an identifier. */ |
310 | ||
311 | extern int dollars_in_ident; | |
312 | ||
313 | /* Nonzero means allow type mismatches in conditional expressions; | |
eebedaa5 | 314 | just make their values `void'. */ |
40754343 RS |
315 | |
316 | extern int flag_cond_mismatch; | |
317 | ||
318 | /* Nonzero means don't recognize the keyword `asm'. */ | |
319 | ||
320 | extern int flag_no_asm; | |
321 | ||
40754343 RS |
322 | /* Nonzero means warn about implicit declarations. */ |
323 | ||
324 | extern int warn_implicit; | |
325 | ||
40754343 RS |
326 | /* Nonzero means warn for all old-style non-prototype function decls. */ |
327 | ||
328 | extern int warn_strict_prototypes; | |
329 | ||
330 | /* Nonzero means warn about multiple (redundant) decls for the same single | |
331 | variable or function. */ | |
332 | ||
333 | extern int warn_redundant_decls; | |
334 | ||
335 | /* Nonzero means warn about extern declarations of objects not at | |
336 | file-scope level and about *all* declarations of functions (whether | |
337 | extern or static) not at file-scope level. Note that we exclude | |
338 | implicit function declarations. To get warnings about those, use | |
339 | -Wimplicit. */ | |
340 | ||
341 | extern int warn_nested_externs; | |
342 | ||
343 | /* Nonzero means warn about pointer casts that can drop a type qualifier | |
344 | from the pointer target type. */ | |
345 | ||
346 | extern int warn_cast_qual; | |
347 | ||
95572adf RK |
348 | /* Nonzero means warn when casting a function call to a type that does |
349 | not match the return type (e.g. (float)sqrt() or (anything*)malloc() | |
350 | when there is no previous declaration of sqrt or malloc. */ | |
351 | ||
352 | extern int warn_bad_function_cast; | |
353 | ||
40754343 RS |
354 | /* Warn about traditional constructs whose meanings changed in ANSI C. */ |
355 | ||
356 | extern int warn_traditional; | |
357 | ||
40754343 RS |
358 | /* Warn about a subscript that has type char. */ |
359 | ||
360 | extern int warn_char_subscripts; | |
361 | ||
19eb1ad7 | 362 | /* Warn if main is suspicious. */ |
92fce8f5 RK |
363 | |
364 | extern int warn_main; | |
365 | ||
83091176 RS |
366 | /* Warn if initializer is not completely bracketed. */ |
367 | ||
368 | extern int warn_missing_braces; | |
369 | ||
d51f9363 JM |
370 | /* Warn about comparison of signed and unsigned values. */ |
371 | ||
ab684785 | 372 | extern int warn_sign_compare; |
d51f9363 | 373 | |
19eb1ad7 | 374 | /* Warn about testing equality of floating point numbers. */ |
b843d210 DZ |
375 | |
376 | extern int warn_float_equal; | |
377 | ||
4a870dba JM |
378 | /* Warn about multicharacter constants. */ |
379 | ||
380 | extern int warn_multichar; | |
381 | ||
40754343 RS |
382 | /* Nonzero means we are reading code that came from a system header file. */ |
383 | ||
384 | extern int system_header_p; | |
7c57c798 | 385 | |
111458f1 ZW |
386 | /* Warn about implicit declarations. 1 = warning, 2 = error. */ |
387 | extern int mesg_implicit_function_declaration; | |
388 | ||
0bb0a00b | 389 | /* In c-decl.c */ |
48a7a235 | 390 | extern void c_finish_incomplete_decl PARAMS ((tree)); |
0bb0a00b | 391 | |
3b27886e NB |
392 | extern tree static_ctors; |
393 | extern tree static_dtors; | |
394 | ||
88657302 | 395 | #endif /* ! GCC_C_TREE_H */ |