Mercurial > hg > CbC > CbC_gcc
comparison gcc/c-tree.h @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | caeb520cebed 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Definitions for C parsing and type checking. | |
2 Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998, | |
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 | |
4 Free Software Foundation, Inc. | |
5 | |
6 This file is part of GCC. | |
7 | |
8 GCC is free software; you can redistribute it and/or modify it under | |
9 the terms of the GNU General Public License as published by the Free | |
10 Software Foundation; either version 3, or (at your option) any later | |
11 version. | |
12 | |
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GCC; see the file COPYING3. If not see | |
20 <http://www.gnu.org/licenses/>. */ | |
21 | |
22 #ifndef GCC_C_TREE_H | |
23 #define GCC_C_TREE_H | |
24 | |
25 #include "c-common.h" | |
26 #include "toplev.h" | |
27 #include "diagnostic.h" | |
28 | |
29 /* struct lang_identifier is private to c-decl.c, but langhooks.c needs to | |
30 know how big it is. This is sanity-checked in c-decl.c. */ | |
31 #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \ | |
32 (sizeof (struct c_common_identifier) + 3 * sizeof (void *)) | |
33 | |
34 /* Language-specific declaration information. */ | |
35 | |
36 struct lang_decl GTY(()) | |
37 { | |
38 char dummy; | |
39 }; | |
40 | |
41 /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */ | |
42 #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) | |
43 | |
44 /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ | |
45 #define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE) | |
46 | |
47 /* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE | |
48 nonzero if the definition of the type has already started. */ | |
49 #define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE) | |
50 | |
51 /* In an incomplete RECORD_TYPE or UNION_TYPE, a list of variable | |
52 declarations whose type would be completed by completing that type. */ | |
53 #define C_TYPE_INCOMPLETE_VARS(TYPE) TYPE_VFIELD (TYPE) | |
54 | |
55 /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a | |
56 keyword. C_RID_CODE (node) is then the RID_* value of the keyword, | |
57 and C_RID_YYCODE is the token number wanted by Yacc. */ | |
58 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) | |
59 | |
60 struct lang_type GTY(()) | |
61 { | |
62 /* In a RECORD_TYPE, a sorted array of the fields of the type. */ | |
63 struct sorted_fields_type * GTY ((reorder ("resort_sorted_fields"))) s; | |
64 /* In an ENUMERAL_TYPE, the min and max values. */ | |
65 tree enum_min; | |
66 tree enum_max; | |
67 /* In a RECORD_TYPE, information specific to Objective-C, such | |
68 as a list of adopted protocols or a pointer to a corresponding | |
69 @interface. See objc/objc-act.h for details. */ | |
70 tree objc_info; | |
71 }; | |
72 | |
73 /* Record whether a type or decl was written with nonconstant size. | |
74 Note that TYPE_SIZE may have simplified to a constant. */ | |
75 #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) | |
76 #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) | |
77 | |
78 /* Record whether a typedef for type `int' was actually `signed int'. */ | |
79 #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) | |
80 | |
81 /* For a FUNCTION_DECL, nonzero if it was defined without an explicit | |
82 return type. */ | |
83 #define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP) | |
84 | |
85 /* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */ | |
86 #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP) | |
87 | |
88 /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has | |
89 been declared. */ | |
90 #define C_DECL_DECLARED_BUILTIN(EXP) \ | |
91 DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP)) | |
92 | |
93 /* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a | |
94 built-in prototype and does not have a non-built-in prototype. */ | |
95 #define C_DECL_BUILTIN_PROTOTYPE(EXP) \ | |
96 DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP)) | |
97 | |
98 /* Record whether a decl was declared register. This is strictly a | |
99 front-end flag, whereas DECL_REGISTER is used for code generation; | |
100 they may differ for structures with volatile fields. */ | |
101 #define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP) | |
102 | |
103 /* Record whether a decl was used in an expression anywhere except an | |
104 unevaluated operand of sizeof / typeof / alignof. This is only | |
105 used for functions declared static but not defined, though outside | |
106 sizeof and typeof it is set for other function decls as well. */ | |
107 #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP)) | |
108 | |
109 /* Record whether a label was defined in a statement expression which | |
110 has finished and so can no longer be jumped to. */ | |
111 #define C_DECL_UNJUMPABLE_STMT_EXPR(EXP) \ | |
112 DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (EXP)) | |
113 | |
114 /* Record whether a label was the subject of a goto from outside the | |
115 current level of statement expression nesting and so cannot be | |
116 defined right now. */ | |
117 #define C_DECL_UNDEFINABLE_STMT_EXPR(EXP) \ | |
118 DECL_LANG_FLAG_7 (LABEL_DECL_CHECK (EXP)) | |
119 | |
120 /* Record whether a label was defined in the scope of an identifier | |
121 with variably modified type which has finished and so can no longer | |
122 be jumped to. */ | |
123 #define C_DECL_UNJUMPABLE_VM(EXP) \ | |
124 DECL_LANG_FLAG_3 (LABEL_DECL_CHECK (EXP)) | |
125 | |
126 /* Record whether a label was the subject of a goto from outside the | |
127 current level of scopes of identifiers with variably modified type | |
128 and so cannot be defined right now. */ | |
129 #define C_DECL_UNDEFINABLE_VM(EXP) \ | |
130 DECL_LANG_FLAG_5 (LABEL_DECL_CHECK (EXP)) | |
131 | |
132 /* Record whether a variable has been declared threadprivate by | |
133 #pragma omp threadprivate. */ | |
134 #define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL)) | |
135 | |
136 /* Nonzero for a decl which either doesn't exist or isn't a prototype. | |
137 N.B. Could be simplified if all built-in decls had complete prototypes | |
138 (but this is presently difficult because some of them need FILE*). */ | |
139 #define C_DECL_ISNT_PROTOTYPE(EXP) \ | |
140 (EXP == 0 \ | |
141 || (TYPE_ARG_TYPES (TREE_TYPE (EXP)) == 0 \ | |
142 && !DECL_BUILT_IN (EXP))) | |
143 | |
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. */ | |
147 #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE) | |
148 | |
149 /* Record parser information about an expression that is irrelevant | |
150 for code generation alongside a tree representing its value. */ | |
151 struct c_expr | |
152 { | |
153 /* The value of the expression. */ | |
154 tree value; | |
155 /* Record the original unary/binary operator of an expression, which may | |
156 have been changed by fold, STRING_CST for unparenthesized string | |
157 constants, or ERROR_MARK for other expressions (including | |
158 parenthesized expressions). */ | |
159 enum tree_code original_code; | |
160 }; | |
161 | |
162 /* A kind of type specifier. Note that this information is currently | |
163 only used to distinguish tag definitions, tag references and typeof | |
164 uses. */ | |
165 enum c_typespec_kind { | |
166 /* A reserved keyword type specifier. */ | |
167 ctsk_resword, | |
168 /* A reference to a tag, previously declared, such as "struct foo". | |
169 This includes where the previous declaration was as a different | |
170 kind of tag, in which case this is only valid if shadowing that | |
171 tag in an inner scope. */ | |
172 ctsk_tagref, | |
173 /* A reference to a tag, not previously declared in a visible | |
174 scope. */ | |
175 ctsk_tagfirstref, | |
176 /* A definition of a tag such as "struct foo { int a; }". */ | |
177 ctsk_tagdef, | |
178 /* A typedef name. */ | |
179 ctsk_typedef, | |
180 /* An ObjC-specific kind of type specifier. */ | |
181 ctsk_objc, | |
182 /* A typeof specifier. */ | |
183 ctsk_typeof | |
184 }; | |
185 | |
186 /* A type specifier: this structure is created in the parser and | |
187 passed to declspecs_add_type only. */ | |
188 struct c_typespec { | |
189 /* What kind of type specifier this is. */ | |
190 enum c_typespec_kind kind; | |
191 /* The specifier itself. */ | |
192 tree spec; | |
193 }; | |
194 | |
195 /* A storage class specifier. */ | |
196 enum c_storage_class { | |
197 csc_none, | |
198 csc_auto, | |
199 csc_extern, | |
200 csc_register, | |
201 csc_static, | |
202 csc_typedef | |
203 }; | |
204 | |
205 /* A type specifier keyword "void", "_Bool", "char", "int", "float", | |
206 "double", "_Decimal32", "_Decimal64", "_Decimal128", "_Fract", "_Accum", | |
207 or none of these. */ | |
208 enum c_typespec_keyword { | |
209 cts_none, | |
210 cts_void, | |
211 cts_bool, | |
212 cts_char, | |
213 cts_int, | |
214 cts_float, | |
215 cts_double, | |
216 cts_dfloat32, | |
217 cts_dfloat64, | |
218 cts_dfloat128, | |
219 cts_fract, | |
220 cts_accum | |
221 }; | |
222 | |
223 /* A sequence of declaration specifiers in C. */ | |
224 struct c_declspecs { | |
225 /* The type specified, if a single type specifier such as a struct, | |
226 union or enum specifier, typedef name or typeof specifies the | |
227 whole type, or NULL_TREE if none or a keyword such as "void" or | |
228 "char" is used. Does not include qualifiers. */ | |
229 tree type; | |
230 /* The attributes from a typedef decl. */ | |
231 tree decl_attr; | |
232 /* When parsing, the attributes. Outside the parser, this will be | |
233 NULL; attributes (possibly from multiple lists) will be passed | |
234 separately. */ | |
235 tree attrs; | |
236 /* Any type specifier keyword used such as "int", not reflecting | |
237 modifiers such as "short", or cts_none if none. */ | |
238 enum c_typespec_keyword typespec_word; | |
239 /* The storage class specifier, or csc_none if none. */ | |
240 enum c_storage_class storage_class; | |
241 /* Whether any declaration specifiers have been seen at all. */ | |
242 BOOL_BITFIELD declspecs_seen_p : 1; | |
243 /* Whether a type specifier has been seen. */ | |
244 BOOL_BITFIELD type_seen_p : 1; | |
245 /* Whether something other than a storage class specifier or | |
246 attribute has been seen. This is used to warn for the | |
247 obsolescent usage of storage class specifiers other than at the | |
248 start of the list. (Doing this properly would require function | |
249 specifiers to be handled separately from storage class | |
250 specifiers.) */ | |
251 BOOL_BITFIELD non_sc_seen_p : 1; | |
252 /* Whether the type is specified by a typedef or typeof name. */ | |
253 BOOL_BITFIELD typedef_p : 1; | |
254 /* Whether a struct, union or enum type either had its content | |
255 defined by a type specifier in the list or was the first visible | |
256 declaration of its tag. */ | |
257 BOOL_BITFIELD tag_defined_p : 1; | |
258 /* Whether the type is explicitly "signed" or specified by a typedef | |
259 whose type is explicitly "signed". */ | |
260 BOOL_BITFIELD explicit_signed_p : 1; | |
261 /* Whether the specifiers include a deprecated typedef. */ | |
262 BOOL_BITFIELD deprecated_p : 1; | |
263 /* Whether the type defaulted to "int" because there were no type | |
264 specifiers. */ | |
265 BOOL_BITFIELD default_int_p; | |
266 /* Whether "long" was specified. */ | |
267 BOOL_BITFIELD long_p : 1; | |
268 /* Whether "long" was specified more than once. */ | |
269 BOOL_BITFIELD long_long_p : 1; | |
270 /* Whether "short" was specified. */ | |
271 BOOL_BITFIELD short_p : 1; | |
272 /* Whether "signed" was specified. */ | |
273 BOOL_BITFIELD signed_p : 1; | |
274 /* Whether "unsigned" was specified. */ | |
275 BOOL_BITFIELD unsigned_p : 1; | |
276 /* Whether "complex" was specified. */ | |
277 BOOL_BITFIELD complex_p : 1; | |
278 /* Whether "inline" was specified. */ | |
279 BOOL_BITFIELD inline_p : 1; | |
280 /* Whether "__thread" was specified. */ | |
281 BOOL_BITFIELD thread_p : 1; | |
282 /* Whether "const" was specified. */ | |
283 BOOL_BITFIELD const_p : 1; | |
284 /* Whether "volatile" was specified. */ | |
285 BOOL_BITFIELD volatile_p : 1; | |
286 /* Whether "restrict" was specified. */ | |
287 BOOL_BITFIELD restrict_p : 1; | |
288 /* Whether "_Sat" was specified. */ | |
289 BOOL_BITFIELD saturating_p : 1; | |
290 }; | |
291 | |
292 /* The various kinds of declarators in C. */ | |
293 enum c_declarator_kind { | |
294 /* An identifier. */ | |
295 cdk_id, | |
296 /* A function. */ | |
297 cdk_function, | |
298 /* An array. */ | |
299 cdk_array, | |
300 /* A pointer. */ | |
301 cdk_pointer, | |
302 /* Parenthesized declarator with nested attributes. */ | |
303 cdk_attrs | |
304 }; | |
305 | |
306 /* Information about the parameters in a function declarator. */ | |
307 struct c_arg_info { | |
308 /* A list of parameter decls. */ | |
309 tree parms; | |
310 /* A list of structure, union and enum tags defined. */ | |
311 tree tags; | |
312 /* A list of argument types to go in the FUNCTION_TYPE. */ | |
313 tree types; | |
314 /* A list of non-parameter decls (notably enumeration constants) | |
315 defined with the parameters. */ | |
316 tree others; | |
317 /* A list of VLA sizes from the parameters. In a function | |
318 definition, these are used to ensure that side-effects in sizes | |
319 of arrays converted to pointers (such as a parameter int i[n++]) | |
320 take place; otherwise, they are ignored. */ | |
321 tree pending_sizes; | |
322 /* True when these arguments had [*]. */ | |
323 BOOL_BITFIELD had_vla_unspec : 1; | |
324 }; | |
325 | |
326 /* A declarator. */ | |
327 struct c_declarator { | |
328 /* The kind of declarator. */ | |
329 enum c_declarator_kind kind; | |
330 /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ | |
331 struct c_declarator *declarator; | |
332 location_t id_loc; /* Currently only set for cdk_id. */ | |
333 union { | |
334 /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract | |
335 declarator. */ | |
336 tree id; | |
337 /* For functions. */ | |
338 struct c_arg_info *arg_info; | |
339 /* For arrays. */ | |
340 struct { | |
341 /* The array dimension, or NULL for [] and [*]. */ | |
342 tree dimen; | |
343 /* The qualifiers inside []. */ | |
344 int quals; | |
345 /* The attributes (currently ignored) inside []. */ | |
346 tree attrs; | |
347 /* Whether [static] was used. */ | |
348 BOOL_BITFIELD static_p : 1; | |
349 /* Whether [*] was used. */ | |
350 BOOL_BITFIELD vla_unspec_p : 1; | |
351 } array; | |
352 /* For pointers, the qualifiers on the pointer type. */ | |
353 int pointer_quals; | |
354 /* For attributes. */ | |
355 tree attrs; | |
356 } u; | |
357 }; | |
358 | |
359 /* A type name. */ | |
360 struct c_type_name { | |
361 /* The declaration specifiers. */ | |
362 struct c_declspecs *specs; | |
363 /* The declarator. */ | |
364 struct c_declarator *declarator; | |
365 }; | |
366 | |
367 /* A parameter. */ | |
368 struct c_parm { | |
369 /* The declaration specifiers, minus any prefix attributes. */ | |
370 struct c_declspecs *specs; | |
371 /* The attributes. */ | |
372 tree attrs; | |
373 /* The declarator. */ | |
374 struct c_declarator *declarator; | |
375 }; | |
376 | |
377 /* Save and restore the variables in this file and elsewhere | |
378 that keep track of the progress of compilation of the current function. | |
379 Used for nested functions. */ | |
380 | |
381 struct language_function GTY(()) | |
382 { | |
383 struct c_language_function base; | |
384 tree x_break_label; | |
385 tree x_cont_label; | |
386 struct c_switch * GTY((skip)) x_switch_stack; | |
387 struct c_arg_info * GTY((skip)) arg_info; | |
388 int returns_value; | |
389 int returns_null; | |
390 int returns_abnormally; | |
391 int warn_about_return_type; | |
392 }; | |
393 | |
394 /* Save lists of labels used or defined in particular contexts. | |
395 Allocated on the parser obstack. */ | |
396 | |
397 struct c_label_list | |
398 { | |
399 /* The label at the head of the list. */ | |
400 tree label; | |
401 /* The rest of the list. */ | |
402 struct c_label_list *next; | |
403 }; | |
404 | |
405 /* Statement expression context. */ | |
406 | |
407 struct c_label_context_se | |
408 { | |
409 /* The labels defined at this level of nesting. */ | |
410 struct c_label_list *labels_def; | |
411 /* The labels used at this level of nesting. */ | |
412 struct c_label_list *labels_used; | |
413 /* The next outermost context. */ | |
414 struct c_label_context_se *next; | |
415 }; | |
416 | |
417 /* Context of variably modified declarations. */ | |
418 | |
419 struct c_label_context_vm | |
420 { | |
421 /* The labels defined at this level of nesting. */ | |
422 struct c_label_list *labels_def; | |
423 /* The labels used at this level of nesting. */ | |
424 struct c_label_list *labels_used; | |
425 /* The scope of this context. Multiple contexts may be at the same | |
426 numbered scope, since each variably modified declaration starts a | |
427 new context. */ | |
428 unsigned scope; | |
429 /* The next outermost context. */ | |
430 struct c_label_context_vm *next; | |
431 }; | |
432 | |
433 /* Used when parsing an enum. Initialized by start_enum. */ | |
434 struct c_enum_contents | |
435 { | |
436 /* While defining an enum type, this is 1 plus the last enumerator | |
437 constant value. */ | |
438 tree enum_next_value; | |
439 | |
440 /* Nonzero means that there was overflow computing enum_next_value. */ | |
441 int enum_overflow; | |
442 }; | |
443 | |
444 | |
445 /* in c-parser.c */ | |
446 extern void c_parse_init (void); | |
447 | |
448 /* in c-aux-info.c */ | |
449 extern void gen_aux_info_record (tree, int, int, int); | |
450 | |
451 /* in c-decl.c */ | |
452 extern struct obstack parser_obstack; | |
453 extern tree c_break_label; | |
454 extern tree c_cont_label; | |
455 | |
456 extern int global_bindings_p (void); | |
457 extern void push_scope (void); | |
458 extern tree pop_scope (void); | |
459 | |
460 extern void c_init_decl_processing (void); | |
461 extern void c_dup_lang_specific_decl (tree); | |
462 extern void c_print_identifier (FILE *, tree, int); | |
463 extern int quals_from_declspecs (const struct c_declspecs *); | |
464 extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *, | |
465 bool, bool); | |
466 extern tree build_enumerator (struct c_enum_contents *, tree, tree, location_t); | |
467 extern tree check_for_loop_decls (void); | |
468 extern void mark_forward_parm_decls (void); | |
469 extern void declare_parm_level (void); | |
470 extern void undeclared_variable (tree, location_t); | |
471 extern tree declare_label (tree); | |
472 extern tree define_label (location_t, tree); | |
473 extern void c_maybe_initialize_eh (void); | |
474 extern void finish_decl (tree, tree, tree); | |
475 extern tree finish_enum (tree, tree, tree); | |
476 extern void finish_function (void); | |
477 extern tree finish_struct (tree, tree, tree); | |
478 extern struct c_arg_info *get_parm_info (bool); | |
479 extern tree grokfield (location_t, struct c_declarator *, | |
480 struct c_declspecs *, tree, tree *); | |
481 extern tree groktypename (struct c_type_name *); | |
482 extern tree grokparm (const struct c_parm *); | |
483 extern tree implicitly_declare (tree); | |
484 extern void keep_next_level (void); | |
485 extern void pending_xref_error (void); | |
486 extern void c_push_function_context (void); | |
487 extern void c_pop_function_context (void); | |
488 extern void push_parm_decl (const struct c_parm *); | |
489 extern struct c_declarator *set_array_declarator_inner (struct c_declarator *, | |
490 struct c_declarator *); | |
491 extern tree c_builtin_function (tree); | |
492 extern tree c_builtin_function_ext_scope (tree); | |
493 extern void shadow_tag (const struct c_declspecs *); | |
494 extern void shadow_tag_warned (const struct c_declspecs *, int); | |
495 extern tree start_enum (struct c_enum_contents *, tree); | |
496 extern int start_function (struct c_declspecs *, struct c_declarator *, tree); | |
497 extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool, | |
498 tree); | |
499 extern tree start_struct (enum tree_code, tree); | |
500 extern void store_parm_decls (void); | |
501 extern void store_parm_decls_from (struct c_arg_info *); | |
502 extern tree xref_tag (enum tree_code, tree); | |
503 extern struct c_typespec parser_xref_tag (enum tree_code, tree); | |
504 extern int c_expand_decl (tree); | |
505 extern struct c_parm *build_c_parm (struct c_declspecs *, tree, | |
506 struct c_declarator *); | |
507 extern struct c_declarator *build_attrs_declarator (tree, | |
508 struct c_declarator *); | |
509 extern struct c_declarator *build_function_declarator (struct c_arg_info *, | |
510 struct c_declarator *); | |
511 extern struct c_declarator *build_id_declarator (tree); | |
512 extern struct c_declarator *make_pointer_declarator (struct c_declspecs *, | |
513 struct c_declarator *); | |
514 extern struct c_declspecs *build_null_declspecs (void); | |
515 extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree); | |
516 extern struct c_declspecs *declspecs_add_type (struct c_declspecs *, | |
517 struct c_typespec); | |
518 extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree); | |
519 extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree); | |
520 extern struct c_declspecs *finish_declspecs (struct c_declspecs *); | |
521 | |
522 /* in c-objc-common.c */ | |
523 extern bool c_objc_common_init (void); | |
524 extern bool c_missing_noreturn_ok_p (tree); | |
525 extern bool c_warn_unused_global_decl (const_tree); | |
526 extern void c_initialize_diagnostics (diagnostic_context *); | |
527 extern bool c_vla_unspec_p (tree x, tree fn); | |
528 | |
529 #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ | |
530 c_build_qualified_type ((TYPE), \ | |
531 ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ | |
532 ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) | |
533 | |
534 /* in c-typeck.c */ | |
535 extern int in_alignof; | |
536 extern int in_sizeof; | |
537 extern int in_typeof; | |
538 | |
539 extern struct c_switch *c_switch_stack; | |
540 extern struct c_label_context_se *label_context_stack_se; | |
541 extern struct c_label_context_vm *label_context_stack_vm; | |
542 | |
543 extern tree c_objc_common_truthvalue_conversion (location_t, tree); | |
544 extern tree require_complete_type (tree); | |
545 extern int same_translation_unit_p (const_tree, const_tree); | |
546 extern int comptypes (tree, tree); | |
547 extern bool c_vla_type_p (const_tree); | |
548 extern bool c_mark_addressable (tree); | |
549 extern void c_incomplete_type_error (const_tree, const_tree); | |
550 extern tree c_type_promotes_to (tree); | |
551 extern struct c_expr default_function_array_conversion (struct c_expr); | |
552 extern tree composite_type (tree, tree); | |
553 extern tree build_component_ref (tree, tree); | |
554 extern tree build_array_ref (tree, tree, location_t); | |
555 extern tree build_external_ref (tree, int, location_t); | |
556 extern void pop_maybe_used (bool); | |
557 extern struct c_expr c_expr_sizeof_expr (struct c_expr); | |
558 extern struct c_expr c_expr_sizeof_type (struct c_type_name *); | |
559 extern struct c_expr parser_build_unary_op (enum tree_code, struct c_expr, | |
560 location_t); | |
561 extern struct c_expr parser_build_binary_op (location_t, | |
562 enum tree_code, struct c_expr, | |
563 struct c_expr); | |
564 extern tree build_conditional_expr (tree, tree, tree); | |
565 extern tree build_compound_expr (tree, tree); | |
566 extern tree c_cast_expr (struct c_type_name *, tree); | |
567 extern tree build_c_cast (tree, tree); | |
568 extern void store_init_value (tree, tree); | |
569 extern void error_init (const char *); | |
570 extern void pedwarn_init (location_t, int opt, const char *); | |
571 extern void maybe_warn_string_init (tree, struct c_expr); | |
572 extern void start_init (tree, tree, int); | |
573 extern void finish_init (void); | |
574 extern void really_start_incremental_init (tree); | |
575 extern void push_init_level (int); | |
576 extern struct c_expr pop_init_level (int); | |
577 extern void set_init_index (tree, tree); | |
578 extern void set_init_label (tree); | |
579 extern void process_init_element (struct c_expr, bool); | |
580 extern tree build_compound_literal (tree, tree); | |
581 extern tree c_start_case (tree); | |
582 extern void c_finish_case (tree); | |
583 extern tree build_asm_expr (tree, tree, tree, tree, bool); | |
584 extern tree build_asm_stmt (tree, tree); | |
585 extern int c_types_compatible_p (tree, tree); | |
586 extern tree c_begin_compound_stmt (bool); | |
587 extern tree c_end_compound_stmt (tree, bool); | |
588 extern void c_finish_if_stmt (location_t, tree, tree, tree, bool); | |
589 extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool); | |
590 extern tree c_begin_stmt_expr (void); | |
591 extern tree c_finish_stmt_expr (tree); | |
592 extern tree c_process_expr_stmt (tree); | |
593 extern tree c_finish_expr_stmt (tree); | |
594 extern tree c_finish_return (tree); | |
595 extern tree c_finish_bc_stmt (tree *, bool); | |
596 extern tree c_finish_goto_label (tree); | |
597 extern tree c_finish_goto_ptr (tree); | |
598 extern void c_begin_vm_scope (unsigned int); | |
599 extern void c_end_vm_scope (unsigned int); | |
600 extern tree c_expr_to_decl (tree, bool *, bool *); | |
601 extern tree c_begin_omp_parallel (void); | |
602 extern tree c_finish_omp_parallel (tree, tree); | |
603 extern tree c_begin_omp_task (void); | |
604 extern tree c_finish_omp_task (tree, tree); | |
605 extern tree c_finish_omp_clauses (tree); | |
606 | |
607 /* Set to 0 at beginning of a function definition, set to 1 if | |
608 a return statement that specifies a return value is seen. */ | |
609 | |
610 extern int current_function_returns_value; | |
611 | |
612 /* Set to 0 at beginning of a function definition, set to 1 if | |
613 a return statement with no argument is seen. */ | |
614 | |
615 extern int current_function_returns_null; | |
616 | |
617 /* Set to 0 at beginning of a function definition, set to 1 if | |
618 a call to a noreturn function is seen. */ | |
619 | |
620 extern int current_function_returns_abnormally; | |
621 | |
622 /* Nonzero means we are reading code that came from a system header file. */ | |
623 | |
624 extern int system_header_p; | |
625 | |
626 /* True means global_bindings_p should return false even if the scope stack | |
627 says we are in file scope. */ | |
628 | |
629 extern bool c_override_global_bindings_to_false; | |
630 | |
631 /* True means we've initialized exception handling. */ | |
632 extern bool c_eh_initialized_p; | |
633 | |
634 /* In c-decl.c */ | |
635 extern void c_finish_incomplete_decl (tree); | |
636 extern void c_write_global_declarations (void); | |
637 | |
638 /* In order for the format checking to accept the C frontend | |
639 diagnostic framework extensions, you must include this file before | |
640 toplev.h, not after. */ | |
641 #if GCC_VERSION >= 4001 | |
642 #define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m) | |
643 #else | |
644 #define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m) | |
645 #endif | |
646 | |
647 extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); | |
648 extern void pedwarn_c99 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); | |
649 | |
650 #endif /* ! GCC_C_TREE_H */ |