Mercurial > hg > CbC > CbC_gcc
comparison gcc/c-tree.h @ 57:326d9e06c2e3
modify c-parser.c
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 15 Feb 2010 00:54:17 +0900 |
parents | caeb520cebed 77e2b8dfacca |
children | 1b10fe6932e1 |
comparison
equal
deleted
inserted
replaced
54:f62c169bbc24 | 57:326d9e06c2e3 |
---|---|
29 /* struct lang_identifier is private to c-decl.c, but langhooks.c needs to | 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. */ | 30 know how big it is. This is sanity-checked in c-decl.c. */ |
31 #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \ | 31 #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \ |
32 (sizeof (struct c_common_identifier) + 3 * sizeof (void *)) | 32 (sizeof (struct c_common_identifier) + 3 * sizeof (void *)) |
33 | 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. */ | 34 /* 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) | 35 #define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE) |
43 | 36 |
44 /* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */ | 37 /* 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) | 38 #define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE) |
55 /* In an IDENTIFIER_NODE, nonzero if this identifier is actually a | 48 /* 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, | 49 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. */ | 50 and C_RID_YYCODE is the token number wanted by Yacc. */ |
58 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) | 51 #define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID) |
59 | 52 |
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. | 53 /* Record whether a type or decl was written with nonconstant size. |
74 Note that TYPE_SIZE may have simplified to a constant. */ | 54 Note that TYPE_SIZE may have simplified to a constant. */ |
75 #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) | 55 #define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE) |
76 #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) | 56 #define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE) |
77 | 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 | |
78 /* Record whether a typedef for type `int' was actually `signed int'. */ | 62 /* Record whether a typedef for type `int' was actually `signed int'. */ |
79 #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) | 63 #define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP) |
80 | 64 |
81 /* For a FUNCTION_DECL, nonzero if it was defined without an explicit | 65 /* For a FUNCTION_DECL, nonzero if it was defined without an explicit |
82 return type. */ | 66 return type. */ |
85 /* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */ | 69 /* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */ |
86 #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP) | 70 #define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP) |
87 | 71 |
88 /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has | 72 /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has |
89 been declared. */ | 73 been declared. */ |
90 #define C_DECL_DECLARED_BUILTIN(EXP) \ | 74 #define C_DECL_DECLARED_BUILTIN(EXP) \ |
91 DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP)) | 75 DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP)) |
92 | 76 |
93 /* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a | 77 /* 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. */ | 78 built-in prototype and does not have a non-built-in prototype. */ |
95 #define C_DECL_BUILTIN_PROTOTYPE(EXP) \ | 79 #define C_DECL_BUILTIN_PROTOTYPE(EXP) \ |
96 DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP)) | 80 DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP)) |
97 | 81 |
98 /* Record whether a decl was declared register. This is strictly a | 82 /* Record whether a decl was declared register. This is strictly a |
99 front-end flag, whereas DECL_REGISTER is used for code generation; | 83 front-end flag, whereas DECL_REGISTER is used for code generation; |
100 they may differ for structures with volatile fields. */ | 84 they may differ for structures with volatile fields. */ |
104 unevaluated operand of sizeof / typeof / alignof. This is only | 88 unevaluated operand of sizeof / typeof / alignof. This is only |
105 used for functions declared static but not defined, though outside | 89 used for functions declared static but not defined, though outside |
106 sizeof and typeof it is set for other function decls as well. */ | 90 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)) | 91 #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP)) |
108 | 92 |
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 | 93 /* Record whether a variable has been declared threadprivate by |
133 #pragma omp threadprivate. */ | 94 #pragma omp threadprivate. */ |
134 #define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL)) | 95 #define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL)) |
135 | 96 |
136 /* Nonzero for a decl which either doesn't exist or isn't a prototype. | 97 /* 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 | 98 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*). */ | 99 (but this is presently difficult because some of them need FILE*). */ |
139 #define C_DECL_ISNT_PROTOTYPE(EXP) \ | 100 #define C_DECL_ISNT_PROTOTYPE(EXP) \ |
140 (EXP == 0 \ | 101 (EXP == 0 \ |
141 || (TYPE_ARG_TYPES (TREE_TYPE (EXP)) == 0 \ | 102 || (TYPE_ARG_TYPES (TREE_TYPE (EXP)) == 0 \ |
142 && !DECL_BUILT_IN (EXP))) | 103 && !DECL_BUILT_IN (EXP))) |
143 | 104 |
144 /* For FUNCTION_TYPE, a hidden list of types of arguments. The same as | 105 /* 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 | 106 TYPE_ARG_TYPES for functions with prototypes, but created for functions |
146 without prototypes. */ | 107 without prototypes. */ |
147 #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE) | 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)) | |
148 | 113 |
149 /* Record parser information about an expression that is irrelevant | 114 /* Record parser information about an expression that is irrelevant |
150 for code generation alongside a tree representing its value. */ | 115 for code generation alongside a tree representing its value. */ |
151 struct c_expr | 116 struct c_expr |
152 { | 117 { |
153 /* The value of the expression. */ | 118 /* The value of the expression. */ |
154 tree value; | 119 tree value; |
155 /* Record the original unary/binary operator of an expression, which may | 120 /* Record the original unary/binary operator of an expression, which may |
156 have been changed by fold, STRING_CST for unparenthesized string | 121 have been changed by fold, STRING_CST for unparenthesized string |
157 constants, or ERROR_MARK for other expressions (including | 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 | |
158 parenthesized expressions). */ | 125 parenthesized expressions). */ |
159 enum tree_code original_code; | 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; | |
160 }; | 132 }; |
161 | 133 |
162 /* A kind of type specifier. Note that this information is currently | 134 /* A kind of type specifier. Note that this information is currently |
163 only used to distinguish tag definitions, tag references and typeof | 135 only used to distinguish tag definitions, tag references and typeof |
164 uses. */ | 136 uses. */ |
188 struct c_typespec { | 160 struct c_typespec { |
189 /* What kind of type specifier this is. */ | 161 /* What kind of type specifier this is. */ |
190 enum c_typespec_kind kind; | 162 enum c_typespec_kind kind; |
191 /* The specifier itself. */ | 163 /* The specifier itself. */ |
192 tree spec; | 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; | |
193 }; | 177 }; |
194 | 178 |
195 /* A storage class specifier. */ | 179 /* A storage class specifier. */ |
196 enum c_storage_class { | 180 enum c_storage_class { |
197 csc_none, | 181 csc_none, |
228 /* The type specified, if a single type specifier such as a struct, | 212 /* The type specified, if a single type specifier such as a struct, |
229 union or enum specifier, typedef name or typeof specifies the | 213 union or enum specifier, typedef name or typeof specifies the |
230 whole type, or NULL_TREE if none or a keyword such as "void" or | 214 whole type, or NULL_TREE if none or a keyword such as "void" or |
231 "char" is used. Does not include qualifiers. */ | 215 "char" is used. Does not include qualifiers. */ |
232 tree type; | 216 tree type; |
217 /* Any expression to be evaluated before the type, from a typeof | |
218 specifier. */ | |
219 tree expr; | |
233 /* The attributes from a typedef decl. */ | 220 /* The attributes from a typedef decl. */ |
234 tree decl_attr; | 221 tree decl_attr; |
235 /* When parsing, the attributes. Outside the parser, this will be | 222 /* When parsing, the attributes. Outside the parser, this will be |
236 NULL; attributes (possibly from multiple lists) will be passed | 223 NULL; attributes (possibly from multiple lists) will be passed |
237 separately. */ | 224 separately. */ |
239 /* Any type specifier keyword used such as "int", not reflecting | 226 /* Any type specifier keyword used such as "int", not reflecting |
240 modifiers such as "short", or cts_none if none. */ | 227 modifiers such as "short", or cts_none if none. */ |
241 enum c_typespec_keyword typespec_word; | 228 enum c_typespec_keyword typespec_word; |
242 /* The storage class specifier, or csc_none if none. */ | 229 /* The storage class specifier, or csc_none if none. */ |
243 enum c_storage_class storage_class; | 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; | |
244 /* Whether any declaration specifiers have been seen at all. */ | 234 /* Whether any declaration specifiers have been seen at all. */ |
245 BOOL_BITFIELD declspecs_seen_p : 1; | 235 BOOL_BITFIELD declspecs_seen_p : 1; |
246 /* Whether a type specifier has been seen. */ | 236 /* Whether a type specifier has been seen. */ |
247 BOOL_BITFIELD type_seen_p : 1; | 237 BOOL_BITFIELD type_seen_p : 1; |
248 /* Whether something other than a storage class specifier or | 238 /* Whether something other than a storage class specifier or |
288 BOOL_BITFIELD volatile_p : 1; | 278 BOOL_BITFIELD volatile_p : 1; |
289 /* Whether "restrict" was specified. */ | 279 /* Whether "restrict" was specified. */ |
290 BOOL_BITFIELD restrict_p : 1; | 280 BOOL_BITFIELD restrict_p : 1; |
291 /* Whether "_Sat" was specified. */ | 281 /* Whether "_Sat" was specified. */ |
292 BOOL_BITFIELD saturating_p : 1; | 282 BOOL_BITFIELD saturating_p : 1; |
283 /* The address space that the declaration belongs to. */ | |
284 addr_space_t address_space; | |
293 }; | 285 }; |
294 | 286 |
295 /* The various kinds of declarators in C. */ | 287 /* The various kinds of declarators in C. */ |
296 enum c_declarator_kind { | 288 enum c_declarator_kind { |
297 /* An identifier. */ | 289 /* An identifier. */ |
330 struct c_declarator { | 322 struct c_declarator { |
331 /* The kind of declarator. */ | 323 /* The kind of declarator. */ |
332 enum c_declarator_kind kind; | 324 enum c_declarator_kind kind; |
333 /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ | 325 /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */ |
334 struct c_declarator *declarator; | 326 struct c_declarator *declarator; |
335 location_t id_loc; /* Currently only set for cdk_id. */ | 327 location_t id_loc; /* Currently only set for cdk_id, cdk_array. */ |
336 union { | 328 union { |
337 /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract | 329 /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract |
338 declarator. */ | 330 declarator. */ |
339 tree id; | 331 tree id; |
340 /* For functions. */ | 332 /* For functions. */ |
375 tree attrs; | 367 tree attrs; |
376 /* The declarator. */ | 368 /* The declarator. */ |
377 struct c_declarator *declarator; | 369 struct c_declarator *declarator; |
378 }; | 370 }; |
379 | 371 |
380 /* Save and restore the variables in this file and elsewhere | |
381 that keep track of the progress of compilation of the current function. | |
382 Used for nested functions. */ | |
383 | |
384 struct language_function GTY(()) | |
385 { | |
386 struct c_language_function base; | |
387 tree x_break_label; | |
388 tree x_cont_label; | |
389 struct c_switch * GTY((skip)) x_switch_stack; | |
390 struct c_arg_info * GTY((skip)) arg_info; | |
391 int returns_value; | |
392 int returns_null; | |
393 int returns_abnormally; | |
394 int warn_about_return_type; | |
395 }; | |
396 | |
397 /* Save lists of labels used or defined in particular contexts. | |
398 Allocated on the parser obstack. */ | |
399 | |
400 struct c_label_list | |
401 { | |
402 /* The label at the head of the list. */ | |
403 tree label; | |
404 /* The rest of the list. */ | |
405 struct c_label_list *next; | |
406 }; | |
407 | |
408 /* Statement expression context. */ | |
409 | |
410 struct c_label_context_se | |
411 { | |
412 /* The labels defined at this level of nesting. */ | |
413 struct c_label_list *labels_def; | |
414 /* The labels used at this level of nesting. */ | |
415 struct c_label_list *labels_used; | |
416 /* The next outermost context. */ | |
417 struct c_label_context_se *next; | |
418 }; | |
419 | |
420 /* Context of variably modified declarations. */ | |
421 | |
422 struct c_label_context_vm | |
423 { | |
424 /* The labels defined at this level of nesting. */ | |
425 struct c_label_list *labels_def; | |
426 /* The labels used at this level of nesting. */ | |
427 struct c_label_list *labels_used; | |
428 /* The scope of this context. Multiple contexts may be at the same | |
429 numbered scope, since each variably modified declaration starts a | |
430 new context. */ | |
431 unsigned scope; | |
432 /* The next outermost context. */ | |
433 struct c_label_context_vm *next; | |
434 }; | |
435 | |
436 /* Used when parsing an enum. Initialized by start_enum. */ | 372 /* Used when parsing an enum. Initialized by start_enum. */ |
437 struct c_enum_contents | 373 struct c_enum_contents |
438 { | 374 { |
439 /* While defining an enum type, this is 1 plus the last enumerator | 375 /* While defining an enum type, this is 1 plus the last enumerator |
440 constant value. */ | 376 constant value. */ |
442 | 378 |
443 /* Nonzero means that there was overflow computing enum_next_value. */ | 379 /* Nonzero means that there was overflow computing enum_next_value. */ |
444 int enum_overflow; | 380 int enum_overflow; |
445 }; | 381 }; |
446 | 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 | |
447 | 395 |
448 /* in c-parser.c */ | 396 /* in c-parser.c */ |
449 extern void c_parse_init (void); | 397 extern void c_parse_init (void); |
450 | 398 |
451 /* in c-aux-info.c */ | 399 /* in c-aux-info.c */ |
452 extern void gen_aux_info_record (tree, int, int, int); | 400 extern void gen_aux_info_record (tree, int, int, int); |
453 | 401 |
454 /* in c-decl.c */ | 402 /* in c-decl.c */ |
403 struct c_spot_bindings; | |
404 struct c_struct_parse_info; | |
455 extern struct obstack parser_obstack; | 405 extern struct obstack parser_obstack; |
456 extern tree c_break_label; | 406 extern tree c_break_label; |
457 extern tree c_cont_label; | 407 extern tree c_cont_label; |
458 | 408 |
459 extern int global_bindings_p (void); | 409 extern int global_bindings_p (void); |
460 extern void push_scope (void); | 410 extern void push_scope (void); |
461 extern tree pop_scope (void); | 411 extern tree pop_scope (void); |
462 | 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); | |
463 extern void c_init_decl_processing (void); | 417 extern void c_init_decl_processing (void); |
464 extern void c_dup_lang_specific_decl (tree); | |
465 extern void c_print_identifier (FILE *, tree, int); | 418 extern void c_print_identifier (FILE *, tree, int); |
466 extern int quals_from_declspecs (const struct c_declspecs *); | 419 extern int quals_from_declspecs (const struct c_declspecs *); |
467 extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *, | 420 extern struct c_declarator *build_array_declarator (location_t, tree, |
468 bool, bool); | 421 struct c_declspecs *, |
469 extern tree build_enumerator (struct c_enum_contents *, tree, tree, location_t); | 422 bool, bool); |
470 extern tree check_for_loop_decls (void); | 423 extern tree build_enumerator (location_t, struct c_enum_contents *, tree, tree); |
424 extern tree check_for_loop_decls (location_t); | |
471 extern void mark_forward_parm_decls (void); | 425 extern void mark_forward_parm_decls (void); |
472 extern void declare_parm_level (void); | 426 extern void declare_parm_level (void); |
473 extern void undeclared_variable (tree, location_t); | 427 extern void undeclared_variable (location_t, tree); |
428 extern tree lookup_label_for_goto (location_t, tree); | |
474 extern tree declare_label (tree); | 429 extern tree declare_label (tree); |
475 extern tree define_label (location_t, tree); | 430 extern tree define_label (location_t, tree); |
476 extern void c_maybe_initialize_eh (void); | 431 extern struct c_spot_bindings *c_get_switch_bindings (void); |
477 extern void finish_decl (tree, tree, tree); | 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); | |
478 extern tree finish_enum (tree, tree, tree); | 436 extern tree finish_enum (tree, tree, tree); |
479 extern void finish_function (void); | 437 extern void finish_function (void); |
480 extern tree finish_struct (tree, tree, tree); | 438 extern tree finish_struct (location_t, tree, tree, tree, |
439 struct c_struct_parse_info *); | |
481 extern struct c_arg_info *get_parm_info (bool); | 440 extern struct c_arg_info *get_parm_info (bool); |
482 extern tree grokfield (location_t, struct c_declarator *, | 441 extern tree grokfield (location_t, struct c_declarator *, |
483 struct c_declspecs *, tree, tree *); | 442 struct c_declspecs *, tree, tree *); |
484 extern tree groktypename (struct c_type_name *); | 443 extern tree groktypename (struct c_type_name *, tree *, bool *); |
485 extern tree grokparm (const struct c_parm *); | 444 extern tree grokparm (const struct c_parm *); |
445 | |
486 #ifndef noCbC | 446 #ifndef noCbC |
487 extern tree implicitly_declare (tree,int); | 447 extern tree implicitly_declare (location_t, tree, int); |
488 #else | 448 #else |
489 extern tree implicitly_declare (tree); | 449 extern tree implicitly_declare (location_t, tree); |
490 #endif | 450 #endif |
451 | |
491 extern void keep_next_level (void); | 452 extern void keep_next_level (void); |
492 extern void pending_xref_error (void); | 453 extern void pending_xref_error (void); |
493 extern void c_push_function_context (void); | 454 extern void c_push_function_context (void); |
494 extern void c_pop_function_context (void); | 455 extern void c_pop_function_context (void); |
495 extern void push_parm_decl (const struct c_parm *); | 456 extern void push_parm_decl (const struct c_parm *); |
496 extern struct c_declarator *set_array_declarator_inner (struct c_declarator *, | 457 extern struct c_declarator *set_array_declarator_inner (struct c_declarator *, |
497 struct c_declarator *); | 458 struct c_declarator *); |
498 extern tree c_builtin_function (tree); | 459 extern tree c_builtin_function (tree); |
499 extern tree c_builtin_function_ext_scope (tree); | 460 extern tree c_builtin_function_ext_scope (tree); |
500 extern void shadow_tag (const struct c_declspecs *); | 461 extern void shadow_tag (const struct c_declspecs *); |
501 extern void shadow_tag_warned (const struct c_declspecs *, int); | 462 extern void shadow_tag_warned (const struct c_declspecs *, int); |
502 extern tree start_enum (struct c_enum_contents *, tree); | 463 extern tree start_enum (location_t, struct c_enum_contents *, tree); |
503 extern int start_function (struct c_declspecs *, struct c_declarator *, tree); | 464 extern int start_function (struct c_declspecs *, struct c_declarator *, tree); |
504 extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool, | 465 extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool, |
505 tree); | 466 tree); |
506 extern tree start_struct (enum tree_code, tree); | 467 extern tree start_struct (location_t, enum tree_code, tree, |
468 struct c_struct_parse_info **); | |
507 extern void store_parm_decls (void); | 469 extern void store_parm_decls (void); |
508 extern void store_parm_decls_from (struct c_arg_info *); | 470 extern void store_parm_decls_from (struct c_arg_info *); |
509 extern tree xref_tag (enum tree_code, tree); | 471 extern tree xref_tag (enum tree_code, tree); |
510 extern struct c_typespec parser_xref_tag (enum tree_code, tree); | 472 extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree); |
511 extern int c_expand_decl (tree); | 473 extern int c_expand_decl (tree); |
512 extern struct c_parm *build_c_parm (struct c_declspecs *, tree, | 474 extern struct c_parm *build_c_parm (struct c_declspecs *, tree, |
513 struct c_declarator *); | 475 struct c_declarator *); |
514 extern struct c_declarator *build_attrs_declarator (tree, | 476 extern struct c_declarator *build_attrs_declarator (tree, |
515 struct c_declarator *); | 477 struct c_declarator *); |
516 extern struct c_declarator *build_function_declarator (struct c_arg_info *, | 478 extern struct c_declarator *build_function_declarator (struct c_arg_info *, |
517 struct c_declarator *); | 479 struct c_declarator *); |
518 extern struct c_declarator *build_id_declarator (tree); | 480 extern struct c_declarator *build_id_declarator (tree); |
519 extern struct c_declarator *make_pointer_declarator (struct c_declspecs *, | 481 extern struct c_declarator *make_pointer_declarator (struct c_declspecs *, |
520 struct c_declarator *); | 482 struct c_declarator *); |
521 extern struct c_declspecs *build_null_declspecs (void); | 483 extern struct c_declspecs *build_null_declspecs (void); |
522 extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree); | 484 extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree); |
523 extern struct c_declspecs *declspecs_add_type (struct c_declspecs *, | 485 extern struct c_declspecs *declspecs_add_type (location_t, |
524 struct c_typespec); | 486 struct c_declspecs *, |
487 struct c_typespec); | |
525 extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree); | 488 extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree); |
526 extern struct c_declspecs *declspecs_add_attrs (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); | |
527 extern struct c_declspecs *finish_declspecs (struct c_declspecs *); | 492 extern struct c_declspecs *finish_declspecs (struct c_declspecs *); |
528 | 493 |
529 /* in c-objc-common.c */ | 494 /* in c-objc-common.c */ |
530 extern bool c_objc_common_init (void); | 495 extern bool c_objc_common_init (void); |
531 extern bool c_missing_noreturn_ok_p (tree); | 496 extern bool c_missing_noreturn_ok_p (tree); |
532 extern bool c_warn_unused_global_decl (const_tree); | 497 extern bool c_warn_unused_global_decl (const_tree); |
533 extern void c_initialize_diagnostics (diagnostic_context *); | 498 extern void c_initialize_diagnostics (diagnostic_context *); |
534 extern bool c_vla_unspec_p (tree x, tree fn); | 499 extern bool c_vla_unspec_p (tree x, tree fn); |
535 | 500 |
536 #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ | 501 #define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \ |
537 c_build_qualified_type ((TYPE), \ | 502 c_build_qualified_type ((TYPE), \ |
538 ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ | 503 ((CONST_P) ? TYPE_QUAL_CONST : 0) | \ |
539 ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) | 504 ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) |
540 | 505 |
541 /* in c-typeck.c */ | 506 /* in c-typeck.c */ |
507 extern bool in_late_binary_op; | |
542 extern int in_alignof; | 508 extern int in_alignof; |
543 extern int in_sizeof; | 509 extern int in_sizeof; |
544 extern int in_typeof; | 510 extern int in_typeof; |
545 | 511 |
546 extern struct c_switch *c_switch_stack; | 512 extern struct c_switch *c_switch_stack; |
547 extern struct c_label_context_se *label_context_stack_se; | |
548 extern struct c_label_context_vm *label_context_stack_vm; | |
549 | 513 |
550 extern tree c_objc_common_truthvalue_conversion (location_t, tree); | 514 extern tree c_objc_common_truthvalue_conversion (location_t, tree); |
551 extern tree require_complete_type (tree); | 515 extern tree require_complete_type (tree); |
552 extern int same_translation_unit_p (const_tree, const_tree); | 516 extern int same_translation_unit_p (const_tree, const_tree); |
553 extern int comptypes (tree, tree); | 517 extern int comptypes (tree, tree); |
554 extern bool c_vla_type_p (const_tree); | 518 extern bool c_vla_type_p (const_tree); |
555 extern bool c_mark_addressable (tree); | 519 extern bool c_mark_addressable (tree); |
556 extern void c_incomplete_type_error (const_tree, const_tree); | 520 extern void c_incomplete_type_error (const_tree, const_tree); |
557 extern tree c_type_promotes_to (tree); | 521 extern tree c_type_promotes_to (tree); |
558 extern struct c_expr default_function_array_conversion (struct c_expr); | 522 extern struct c_expr default_function_array_conversion (location_t, |
523 struct c_expr); | |
559 extern tree composite_type (tree, tree); | 524 extern tree composite_type (tree, tree); |
560 extern tree build_component_ref (tree, tree); | 525 extern tree build_component_ref (location_t, tree, tree); |
561 extern tree build_array_ref (tree, tree, location_t); | 526 extern tree build_array_ref (location_t, tree, tree); |
562 extern tree build_external_ref (tree, int, location_t); | 527 extern tree build_external_ref (location_t, tree, int, tree *); |
563 extern void pop_maybe_used (bool); | 528 extern void pop_maybe_used (bool); |
564 extern struct c_expr c_expr_sizeof_expr (struct c_expr); | 529 extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr); |
565 extern struct c_expr c_expr_sizeof_type (struct c_type_name *); | 530 extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *); |
566 extern struct c_expr parser_build_unary_op (enum tree_code, struct c_expr, | 531 extern struct c_expr parser_build_unary_op (location_t, enum tree_code, |
567 location_t); | 532 struct c_expr); |
568 extern struct c_expr parser_build_binary_op (location_t, | 533 extern struct c_expr parser_build_binary_op (location_t, |
569 enum tree_code, struct c_expr, | 534 enum tree_code, struct c_expr, |
570 struct c_expr); | 535 struct c_expr); |
571 extern tree build_conditional_expr (tree, tree, tree); | 536 extern tree build_conditional_expr (location_t, tree, bool, tree, tree, |
572 extern tree build_compound_expr (tree, tree); | 537 tree, tree); |
573 extern tree c_cast_expr (struct c_type_name *, tree); | 538 extern tree build_compound_expr (location_t, tree, tree); |
574 extern tree build_c_cast (tree, tree); | 539 extern tree c_cast_expr (location_t, struct c_type_name *, tree); |
575 extern void store_init_value (tree, tree); | 540 extern tree build_c_cast (location_t, tree, tree); |
541 extern void store_init_value (location_t, tree, tree, tree); | |
576 extern void error_init (const char *); | 542 extern void error_init (const char *); |
577 extern void pedwarn_init (location_t, int opt, const char *); | 543 extern void pedwarn_init (location_t, int opt, const char *); |
578 extern void maybe_warn_string_init (tree, struct c_expr); | 544 extern void maybe_warn_string_init (tree, struct c_expr); |
579 extern void start_init (tree, tree, int); | 545 extern void start_init (tree, tree, int); |
580 extern void finish_init (void); | 546 extern void finish_init (void); |
582 extern void push_init_level (int); | 548 extern void push_init_level (int); |
583 extern struct c_expr pop_init_level (int); | 549 extern struct c_expr pop_init_level (int); |
584 extern void set_init_index (tree, tree); | 550 extern void set_init_index (tree, tree); |
585 extern void set_init_label (tree); | 551 extern void set_init_label (tree); |
586 extern void process_init_element (struct c_expr, bool); | 552 extern void process_init_element (struct c_expr, bool); |
587 extern tree build_compound_literal (tree, tree); | 553 extern tree build_compound_literal (location_t, tree, tree, bool); |
588 extern tree c_start_case (tree); | 554 extern void check_compound_literal_type (location_t, struct c_type_name *); |
555 extern tree c_start_case (location_t, location_t, tree); | |
589 extern void c_finish_case (tree); | 556 extern void c_finish_case (tree); |
590 extern tree build_asm_expr (tree, tree, tree, tree, bool); | 557 extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool); |
591 extern tree build_asm_stmt (tree, tree); | 558 extern tree build_asm_stmt (tree, tree); |
592 extern int c_types_compatible_p (tree, tree); | 559 extern int c_types_compatible_p (tree, tree); |
593 extern tree c_begin_compound_stmt (bool); | 560 extern tree c_begin_compound_stmt (bool); |
594 extern tree c_end_compound_stmt (tree, bool); | 561 extern tree c_end_compound_stmt (location_t, tree, bool); |
595 extern void c_finish_if_stmt (location_t, tree, tree, tree, bool); | 562 extern void c_finish_if_stmt (location_t, tree, tree, tree, bool); |
596 extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool); | 563 extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool); |
597 extern tree c_begin_stmt_expr (void); | 564 extern tree c_begin_stmt_expr (void); |
598 extern tree c_finish_stmt_expr (tree); | 565 extern tree c_finish_stmt_expr (location_t, tree); |
599 extern tree c_process_expr_stmt (tree); | 566 extern tree c_process_expr_stmt (location_t, tree); |
600 extern tree c_finish_expr_stmt (tree); | 567 extern tree c_finish_expr_stmt (location_t, tree); |
601 extern tree c_finish_return (tree); | 568 extern tree c_finish_return (location_t, tree, tree); |
602 extern tree c_finish_bc_stmt (tree *, bool); | 569 extern tree c_finish_bc_stmt (location_t, tree *, bool); |
603 extern tree c_finish_goto_label (tree); | 570 extern tree c_finish_goto_label (location_t, tree); |
604 extern tree c_finish_goto_ptr (tree); | 571 extern tree c_finish_goto_ptr (location_t, tree); |
605 extern void c_begin_vm_scope (unsigned int); | |
606 extern void c_end_vm_scope (unsigned int); | |
607 extern tree c_expr_to_decl (tree, bool *, bool *); | 572 extern tree c_expr_to_decl (tree, bool *, bool *); |
608 extern tree c_begin_omp_parallel (void); | 573 extern tree c_begin_omp_parallel (void); |
609 extern tree c_finish_omp_parallel (tree, tree); | 574 extern tree c_finish_omp_parallel (location_t, tree, tree); |
610 extern tree c_begin_omp_task (void); | 575 extern tree c_begin_omp_task (void); |
611 extern tree c_finish_omp_task (tree, tree); | 576 extern tree c_finish_omp_task (location_t, tree, tree); |
612 extern tree c_finish_omp_clauses (tree); | 577 extern tree c_finish_omp_clauses (tree); |
578 extern tree c_build_va_arg (location_t, tree, tree); | |
613 | 579 |
614 /* Set to 0 at beginning of a function definition, set to 1 if | 580 /* Set to 0 at beginning of a function definition, set to 1 if |
615 a return statement that specifies a return value is seen. */ | 581 a return statement that specifies a return value is seen. */ |
616 | 582 |
617 extern int current_function_returns_value; | 583 extern int current_function_returns_value; |
632 | 598 |
633 /* True means global_bindings_p should return false even if the scope stack | 599 /* True means global_bindings_p should return false even if the scope stack |
634 says we are in file scope. */ | 600 says we are in file scope. */ |
635 | 601 |
636 extern bool c_override_global_bindings_to_false; | 602 extern bool c_override_global_bindings_to_false; |
637 | |
638 /* True means we've initialized exception handling. */ | |
639 extern bool c_eh_initialized_p; | |
640 | 603 |
641 /* In c-decl.c */ | 604 /* In c-decl.c */ |
642 extern void c_finish_incomplete_decl (tree); | 605 extern void c_finish_incomplete_decl (tree); |
643 extern void c_write_global_declarations (void); | 606 extern void c_write_global_declarations (void); |
644 | 607 |
652 #endif | 615 #endif |
653 | 616 |
654 extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); | 617 extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4); |
655 extern void pedwarn_c99 (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); |
656 | 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 | |
657 #endif /* ! GCC_C_TREE_H */ | 624 #endif /* ! GCC_C_TREE_H */ |