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