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