]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-tree.h
Remove trailing white spaces.
[thirdparty/gcc.git] / gcc / c-tree.h
CommitLineData
40754343 1/* Definitions for C parsing and type checking.
3c71940f 2 Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
66647d44 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
b295aee2 4 Free Software Foundation, Inc.
40754343 5
1322177d 6This file is part of GCC.
40754343 7
1322177d
LB
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
9dcd6f09 10Software Foundation; either version 3, or (at your option) any later
1322177d 11version.
40754343 12
1322177d
LB
13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
40754343
RS
17
18You should have received a copy of the GNU General Public License
9dcd6f09
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
40754343 21
88657302
RH
22#ifndef GCC_C_TREE_H
23#define GCC_C_TREE_H
cf1c49cb 24
7f4edbcb 25#include "c-common.h"
db857e7d 26#include "toplev.h"
ede1a387 27#include "diagnostic.h"
7f4edbcb 28
18d5f982
ZW
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 *))
40754343 33
40754343 34/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */
a8086abf 35#define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE)
40754343
RS
36
37/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */
a8086abf 38#define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE)
40754343
RS
39
40/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE
41 nonzero if the definition of the type has already started. */
a8086abf 42#define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE)
bf7a697f
ZW
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)
40754343 47
0e5921e8
ZW
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. */
a8086abf 51#define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID)
0e5921e8 52
40754343
RS
53/* Record whether a type or decl was written with nonconstant size.
54 Note that TYPE_SIZE may have simplified to a constant. */
a8086abf
GS
55#define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE)
56#define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE)
40754343 57
24b97832
ILT
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
40754343 62/* Record whether a typedef for type `int' was actually `signed int'. */
a8086abf 63#define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
40754343 64
5ce89b2e
JM
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
339a28b9
ZW
69/* For a FUNCTION_DECL, nonzero if it was an implicit declaration. */
70#define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP)
71
f75fbaf7
ZW
72/* For FUNCTION_DECLs, evaluates true if the decl is built-in but has
73 been declared. */
187230a7
JM
74#define C_DECL_DECLARED_BUILTIN(EXP) \
75 DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP))
339a28b9 76
6fb58bba
JM
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
5baeaac0
JM
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. */
9aaabf8a 85#define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP)
5baeaac0 86
bc4b653b
JM
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. */
187230a7 91#define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP))
bc4b653b 92
953ff289
DN
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
339a28b9
ZW
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)))
96735c06 104
40754343
RS
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. */
95b4aca6 108#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE)
4e28fa00 109
928c19bb
JM
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
487a92fe
JM
114/* Record parser information about an expression that is irrelevant
115 for code generation alongside a tree representing its value. */
116struct c_expr
117{
118 /* The value of the expression. */
119 tree value;
100d537d 120 /* Record the original unary/binary operator of an expression, which may
647eea9d 121 have been changed by fold, STRING_CST for unparenthesized string
928c19bb
JM
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
916c5919 125 parenthesized expressions). */
487a92fe 126 enum tree_code original_code;
6866c6e8
ILT
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;
487a92fe
JM
132};
133
81da229b
JM
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. */
137enum 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. */
160struct c_typespec {
161 /* What kind of type specifier this is. */
162 enum c_typespec_kind kind;
163 /* The specifier itself. */
164 tree spec;
928c19bb
JM
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;
81da229b
JM
177};
178
d6a1dfd9
JM
179/* A storage class specifier. */
180enum c_storage_class {
181 csc_none,
182 csc_auto,
183 csc_extern,
184 csc_register,
185 csc_static,
186 csc_typedef
187};
188
98c3a782 189/* A type specifier keyword "void", "_Bool", "char", "int", "float",
ab22c1fa
CF
190 "double", "_Decimal32", "_Decimal64", "_Decimal128", "_Fract", "_Accum",
191 or none of these. */
98c3a782
JM
192enum c_typespec_keyword {
193 cts_none,
194 cts_void,
195 cts_bool,
196 cts_char,
197 cts_int,
198 cts_float,
9a8ce21f
JG
199 cts_double,
200 cts_dfloat32,
201 cts_dfloat64,
ab22c1fa
CF
202 cts_dfloat128,
203 cts_fract,
204 cts_accum
98c3a782
JM
205};
206
deb176fa
JM
207/* A sequence of declaration specifiers in C. */
208struct c_declspecs {
98c3a782
JM
209 /* The type specified, if a single type specifier such as a struct,
210 union or enum specifier, typedef name or typeof specifies the
211 whole type, or NULL_TREE if none or a keyword such as "void" or
212 "char" is used. Does not include qualifiers. */
deb176fa 213 tree type;
928c19bb
JM
214 /* Any expression to be evaluated before the type, from a typeof
215 specifier. */
216 tree expr;
deb176fa
JM
217 /* The attributes from a typedef decl. */
218 tree decl_attr;
219 /* When parsing, the attributes. Outside the parser, this will be
220 NULL; attributes (possibly from multiple lists) will be passed
221 separately. */
222 tree attrs;
98c3a782
JM
223 /* Any type specifier keyword used such as "int", not reflecting
224 modifiers such as "short", or cts_none if none. */
225 enum c_typespec_keyword typespec_word;
d6a1dfd9
JM
226 /* The storage class specifier, or csc_none if none. */
227 enum c_storage_class storage_class;
928c19bb
JM
228 /* Whether any expressions in typeof specifiers may appear in
229 constant expressions. */
230 BOOL_BITFIELD expr_const_operands : 1;
27bf414c
JM
231 /* Whether any declaration specifiers have been seen at all. */
232 BOOL_BITFIELD declspecs_seen_p : 1;
233 /* Whether a type specifier has been seen. */
234 BOOL_BITFIELD type_seen_p : 1;
deb176fa
JM
235 /* Whether something other than a storage class specifier or
236 attribute has been seen. This is used to warn for the
237 obsolescent usage of storage class specifiers other than at the
238 start of the list. (Doing this properly would require function
239 specifiers to be handled separately from storage class
240 specifiers.) */
241 BOOL_BITFIELD non_sc_seen_p : 1;
81da229b 242 /* Whether the type is specified by a typedef or typeof name. */
616aeba2 243 BOOL_BITFIELD typedef_p : 1;
81da229b
JM
244 /* Whether a struct, union or enum type either had its content
245 defined by a type specifier in the list or was the first visible
246 declaration of its tag. */
247 BOOL_BITFIELD tag_defined_p : 1;
98c3a782
JM
248 /* Whether the type is explicitly "signed" or specified by a typedef
249 whose type is explicitly "signed". */
250 BOOL_BITFIELD explicit_signed_p : 1;
deb176fa
JM
251 /* Whether the specifiers include a deprecated typedef. */
252 BOOL_BITFIELD deprecated_p : 1;
98c3a782
JM
253 /* Whether the type defaulted to "int" because there were no type
254 specifiers. */
255 BOOL_BITFIELD default_int_p;
256 /* Whether "long" was specified. */
257 BOOL_BITFIELD long_p : 1;
deb176fa
JM
258 /* Whether "long" was specified more than once. */
259 BOOL_BITFIELD long_long_p : 1;
98c3a782
JM
260 /* Whether "short" was specified. */
261 BOOL_BITFIELD short_p : 1;
262 /* Whether "signed" was specified. */
263 BOOL_BITFIELD signed_p : 1;
264 /* Whether "unsigned" was specified. */
265 BOOL_BITFIELD unsigned_p : 1;
266 /* Whether "complex" was specified. */
267 BOOL_BITFIELD complex_p : 1;
d6a1dfd9
JM
268 /* Whether "inline" was specified. */
269 BOOL_BITFIELD inline_p : 1;
270 /* Whether "__thread" was specified. */
271 BOOL_BITFIELD thread_p : 1;
3b53cddc
JM
272 /* Whether "const" was specified. */
273 BOOL_BITFIELD const_p : 1;
274 /* Whether "volatile" was specified. */
275 BOOL_BITFIELD volatile_p : 1;
276 /* Whether "restrict" was specified. */
277 BOOL_BITFIELD restrict_p : 1;
ab22c1fa
CF
278 /* Whether "_Sat" was specified. */
279 BOOL_BITFIELD saturating_p : 1;
36c5e70a
BE
280 /* The address space that the declaration belongs to. */
281 addr_space_t address_space;
deb176fa
JM
282};
283
f8893e47
JM
284/* The various kinds of declarators in C. */
285enum c_declarator_kind {
286 /* An identifier. */
287 cdk_id,
288 /* A function. */
289 cdk_function,
290 /* An array. */
291 cdk_array,
292 /* A pointer. */
293 cdk_pointer,
294 /* Parenthesized declarator with nested attributes. */
295 cdk_attrs
296};
297
298/* Information about the parameters in a function declarator. */
299struct c_arg_info {
300 /* A list of parameter decls. */
301 tree parms;
302 /* A list of structure, union and enum tags defined. */
303 tree tags;
304 /* A list of argument types to go in the FUNCTION_TYPE. */
305 tree types;
306 /* A list of non-parameter decls (notably enumeration constants)
307 defined with the parameters. */
308 tree others;
3542a5c0
JM
309 /* A list of VLA sizes from the parameters. In a function
310 definition, these are used to ensure that side-effects in sizes
311 of arrays converted to pointers (such as a parameter int i[n++])
312 take place; otherwise, they are ignored. */
313 tree pending_sizes;
52ffd86e
MS
314 /* True when these arguments had [*]. */
315 BOOL_BITFIELD had_vla_unspec : 1;
f8893e47
JM
316};
317
318/* A declarator. */
319struct c_declarator {
320 /* The kind of declarator. */
321 enum c_declarator_kind kind;
322 /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */
323 struct c_declarator *declarator;
c2255bc4 324 location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
f8893e47
JM
325 union {
326 /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
327 declarator. */
328 tree id;
329 /* For functions. */
330 struct c_arg_info *arg_info;
331 /* For arrays. */
332 struct {
333 /* The array dimension, or NULL for [] and [*]. */
334 tree dimen;
3b53cddc
JM
335 /* The qualifiers inside []. */
336 int quals;
337 /* The attributes (currently ignored) inside []. */
338 tree attrs;
f8893e47
JM
339 /* Whether [static] was used. */
340 BOOL_BITFIELD static_p : 1;
341 /* Whether [*] was used. */
342 BOOL_BITFIELD vla_unspec_p : 1;
343 } array;
344 /* For pointers, the qualifiers on the pointer type. */
3b53cddc 345 int pointer_quals;
f8893e47
JM
346 /* For attributes. */
347 tree attrs;
348 } u;
349};
350
351/* A type name. */
352struct c_type_name {
353 /* The declaration specifiers. */
deb176fa 354 struct c_declspecs *specs;
f8893e47
JM
355 /* The declarator. */
356 struct c_declarator *declarator;
357};
358
359/* A parameter. */
360struct c_parm {
361 /* The declaration specifiers, minus any prefix attributes. */
deb176fa 362 struct c_declspecs *specs;
f8893e47
JM
363 /* The attributes. */
364 tree attrs;
365 /* The declarator. */
366 struct c_declarator *declarator;
367};
368
7114359f
TT
369/* Used when parsing an enum. Initialized by start_enum. */
370struct c_enum_contents
371{
372 /* While defining an enum type, this is 1 plus the last enumerator
373 constant value. */
374 tree enum_next_value;
375
376 /* Nonzero means that there was overflow computing enum_next_value. */
377 int enum_overflow;
378};
379
991d6621
JM
380/* A type of reference to a static identifier in an inline
381 function. */
382enum c_inline_static_type {
383 /* Identifier with internal linkage used in function that may be an
384 inline definition (i.e., file-scope static). */
385 csi_internal,
386 /* Modifiable object with static storage duration defined in
387 function that may be an inline definition (i.e., local
388 static). */
389 csi_modifiable
390};
391
7c57c798 392\f
27bf414c 393/* in c-parser.c */
2f6e4e97 394extern void c_parse_init (void);
1526a060 395
7c57c798 396/* in c-aux-info.c */
2f6e4e97 397extern void gen_aux_info_record (tree, int, int, int);
40754343 398
7c57c798 399/* in c-decl.c */
e1b7793c 400struct c_spot_bindings;
dc491a25 401struct c_struct_parse_info;
bc4b653b 402extern struct obstack parser_obstack;
506e2710
RH
403extern tree c_break_label;
404extern tree c_cont_label;
cfe79ecf 405
2f6e4e97 406extern int global_bindings_p (void);
f75fbaf7
ZW
407extern void push_scope (void);
408extern tree pop_scope (void);
e1b7793c
ILT
409extern void c_bindings_start_stmt_expr (struct c_spot_bindings *);
410extern void c_bindings_end_stmt_expr (struct c_spot_bindings *);
2f6e4e97 411
991d6621
JM
412extern void record_inline_static (location_t, tree, tree,
413 enum c_inline_static_type);
2f6e4e97 414extern void c_init_decl_processing (void);
2f6e4e97 415extern void c_print_identifier (FILE *, tree, int);
3b53cddc 416extern int quals_from_declspecs (const struct c_declspecs *);
c2255bc4
AH
417extern struct c_declarator *build_array_declarator (location_t, tree,
418 struct c_declspecs *,
deb176fa 419 bool, bool);
c2255bc4
AH
420extern tree build_enumerator (location_t, struct c_enum_contents *, tree, tree);
421extern tree check_for_loop_decls (location_t);
55d54003 422extern void mark_forward_parm_decls (void);
eb1dfbb2 423extern void declare_parm_level (void);
c2255bc4 424extern void undeclared_variable (location_t, tree);
e1b7793c 425extern tree lookup_label_for_goto (location_t, tree);
14e33ee8 426extern tree declare_label (tree);
5b030314 427extern tree define_label (location_t, tree);
e1b7793c
ILT
428extern struct c_spot_bindings *c_get_switch_bindings (void);
429extern void c_release_switch_bindings (struct c_spot_bindings *);
430extern bool c_check_switch_jump_warnings (struct c_spot_bindings *,
431 location_t, location_t);
c2255bc4 432extern void finish_decl (tree, location_t, tree, tree, tree);
2f6e4e97 433extern tree finish_enum (tree, tree, tree);
4a46cbfb 434extern void finish_function (void);
dc491a25
ILT
435extern tree finish_struct (location_t, tree, tree, tree,
436 struct c_struct_parse_info *);
f8893e47 437extern struct c_arg_info *get_parm_info (bool);
3d10ed6c
AH
438extern tree grokfield (location_t, struct c_declarator *,
439 struct c_declspecs *, tree, tree *);
928c19bb 440extern tree groktypename (struct c_type_name *, tree *, bool *);
f8893e47 441extern tree grokparm (const struct c_parm *);
c2255bc4 442extern tree implicitly_declare (location_t, tree);
2f6e4e97 443extern void keep_next_level (void);
2f6e4e97 444extern void pending_xref_error (void);
d2784db4
PB
445extern void c_push_function_context (void);
446extern void c_pop_function_context (void);
f8893e47 447extern void push_parm_decl (const struct c_parm *);
f8893e47 448extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
6ac0194d 449 struct c_declarator *);
c79efc4d 450extern tree c_builtin_function (tree);
5779e713 451extern tree c_builtin_function_ext_scope (tree);
deb176fa
JM
452extern void shadow_tag (const struct c_declspecs *);
453extern void shadow_tag_warned (const struct c_declspecs *, int);
c2255bc4 454extern tree start_enum (location_t, struct c_enum_contents *, tree);
deb176fa
JM
455extern int start_function (struct c_declspecs *, struct c_declarator *, tree);
456extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool,
457 tree);
dc491a25
ILT
458extern tree start_struct (location_t, enum tree_code, tree,
459 struct c_struct_parse_info **);
2f6e4e97 460extern void store_parm_decls (void);
f8893e47 461extern void store_parm_decls_from (struct c_arg_info *);
2f6e4e97 462extern tree xref_tag (enum tree_code, tree);
c2255bc4 463extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree);
325c3691 464extern int c_expand_decl (tree);
deb176fa
JM
465extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
466 struct c_declarator *);
f8893e47
JM
467extern struct c_declarator *build_attrs_declarator (tree,
468 struct c_declarator *);
469extern struct c_declarator *build_function_declarator (struct c_arg_info *,
470 struct c_declarator *);
471extern struct c_declarator *build_id_declarator (tree);
deb176fa 472extern struct c_declarator *make_pointer_declarator (struct c_declspecs *,
f8893e47 473 struct c_declarator *);
deb176fa
JM
474extern struct c_declspecs *build_null_declspecs (void);
475extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree);
dc491a25
ILT
476extern struct c_declspecs *declspecs_add_type (location_t,
477 struct c_declspecs *,
81da229b 478 struct c_typespec);
deb176fa
JM
479extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree);
480extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree);
36c5e70a
BE
481extern struct c_declspecs *declspecs_add_addrspace (struct c_declspecs *,
482 addr_space_t);
98c3a782 483extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
f797f486
NP
484
485/* in c-objc-common.c */
2f6e4e97 486extern bool c_objc_common_init (void);
6de9cd9a 487extern bool c_missing_noreturn_ok_p (tree);
ac7d7749 488extern bool c_warn_unused_global_decl (const_tree);
ede1a387 489extern void c_initialize_diagnostics (diagnostic_context *);
52ffd86e 490extern bool c_vla_unspec_p (tree x, tree fn);
f797f486
NP
491
492#define c_build_type_variant(TYPE, CONST_P, VOLATILE_P) \
493 c_build_qualified_type ((TYPE), \
494 ((CONST_P) ? TYPE_QUAL_CONST : 0) | \
495 ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
496
7c57c798 497/* in c-typeck.c */
928c19bb 498extern bool in_late_binary_op;
bc4b653b
JM
499extern int in_alignof;
500extern int in_sizeof;
501extern int in_typeof;
502
506e2710 503extern struct c_switch *c_switch_stack;
d1bd0ded 504
ba47d38d 505extern tree c_objc_common_truthvalue_conversion (location_t, tree);
2f6e4e97 506extern tree require_complete_type (tree);
58f9752a 507extern int same_translation_unit_p (const_tree, const_tree);
132da1a5 508extern int comptypes (tree, tree);
ac7d7749 509extern bool c_vla_type_p (const_tree);
2f6e4e97 510extern bool c_mark_addressable (tree);
ac7d7749 511extern void c_incomplete_type_error (const_tree, const_tree);
2f6e4e97 512extern tree c_type_promotes_to (tree);
c2255bc4
AH
513extern struct c_expr default_function_array_conversion (location_t,
514 struct c_expr);
10bc1b1b 515extern tree composite_type (tree, tree);
c2255bc4
AH
516extern tree build_component_ref (location_t, tree, tree);
517extern tree build_array_ref (location_t, tree, tree);
518extern tree build_external_ref (location_t, tree, int, tree *);
bc4b653b 519extern void pop_maybe_used (bool);
c2255bc4
AH
520extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr);
521extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *);
522extern struct c_expr parser_build_unary_op (location_t, enum tree_code,
523 struct c_expr);
b8698a0f 524extern struct c_expr parser_build_binary_op (location_t,
ba47d38d 525 enum tree_code, struct c_expr,
487a92fe 526 struct c_expr);
d130ae11
ILT
527extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
528 tree, tree);
c2255bc4
AH
529extern tree build_compound_expr (location_t, tree, tree);
530extern tree c_cast_expr (location_t, struct c_type_name *, tree);
531extern tree build_c_cast (location_t, tree, tree);
532extern void store_init_value (location_t, tree, tree, tree);
2f6e4e97 533extern void error_init (const char *);
509c9d60 534extern void pedwarn_init (location_t, int opt, const char *);
916c5919 535extern void maybe_warn_string_init (tree, struct c_expr);
2f6e4e97
AJ
536extern void start_init (tree, tree, int);
537extern void finish_init (void);
538extern void really_start_incremental_init (tree);
539extern void push_init_level (int);
916c5919 540extern struct c_expr pop_init_level (int);
2f6e4e97
AJ
541extern void set_init_index (tree, tree);
542extern void set_init_label (tree);
b295aee2 543extern void process_init_element (struct c_expr, bool);
c2255bc4
AH
544extern tree build_compound_literal (location_t, tree, tree, bool);
545extern void check_compound_literal_type (location_t, struct c_type_name *);
546extern tree c_start_case (location_t, location_t, tree);
325c3691 547extern void c_finish_case (tree);
1c384bf1 548extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool);
9f0e2d86 549extern tree build_asm_stmt (tree, tree);
6de9cd9a 550extern int c_types_compatible_p (tree, tree);
325c3691 551extern tree c_begin_compound_stmt (bool);
c2255bc4 552extern tree c_end_compound_stmt (location_t, tree, bool);
506e2710
RH
553extern void c_finish_if_stmt (location_t, tree, tree, tree, bool);
554extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool);
325c3691 555extern tree c_begin_stmt_expr (void);
c2255bc4
AH
556extern tree c_finish_stmt_expr (location_t, tree);
557extern tree c_process_expr_stmt (location_t, tree);
558extern tree c_finish_expr_stmt (location_t, tree);
559extern tree c_finish_return (location_t, tree, tree);
560extern tree c_finish_bc_stmt (location_t, tree *, bool);
561extern tree c_finish_goto_label (location_t, tree);
562extern tree c_finish_goto_ptr (location_t, tree);
51eed280 563extern tree c_expr_to_decl (tree, bool *, bool *);
953ff289 564extern tree c_begin_omp_parallel (void);
c2255bc4 565extern tree c_finish_omp_parallel (location_t, tree, tree);
a68ab351 566extern tree c_begin_omp_task (void);
c2255bc4 567extern tree c_finish_omp_task (location_t, tree, tree);
953ff289 568extern tree c_finish_omp_clauses (tree);
c2255bc4 569extern tree c_build_va_arg (location_t, tree, tree);
40754343
RS
570
571/* Set to 0 at beginning of a function definition, set to 1 if
572 a return statement that specifies a return value is seen. */
573
574extern int current_function_returns_value;
575
576/* Set to 0 at beginning of a function definition, set to 1 if
577 a return statement with no argument is seen. */
578
579extern int current_function_returns_null;
580
5ce89b2e
JM
581/* Set to 0 at beginning of a function definition, set to 1 if
582 a call to a noreturn function is seen. */
583
584extern int current_function_returns_abnormally;
585
40754343
RS
586/* Nonzero means we are reading code that came from a system header file. */
587
588extern int system_header_p;
7c57c798 589
f75fbaf7
ZW
590/* True means global_bindings_p should return false even if the scope stack
591 says we are in file scope. */
592
593extern bool c_override_global_bindings_to_false;
594
0bb0a00b 595/* In c-decl.c */
2f6e4e97 596extern void c_finish_incomplete_decl (tree);
d1bd0ded 597extern void c_write_global_declarations (void);
0bb0a00b 598
5f1989e6
KG
599/* In order for the format checking to accept the C frontend
600 diagnostic framework extensions, you must include this file before
601 toplev.h, not after. */
ea40ba9c 602#if GCC_VERSION >= 4001
bda67431
JM
603#define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m)
604#else
605#define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m)
606#endif
607
509c9d60
MLI
608extern void pedwarn_c90 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4);
609extern void pedwarn_c99 (location_t, int opt, const char *, ...) ATTRIBUTE_GCC_CDIAG(3,4);
5f1989e6 610
148e4216
JM
611extern bool c_cpp_error (cpp_reader *, int, location_t, unsigned int,
612 const char *, va_list *)
613 ATTRIBUTE_GCC_CDIAG(5,0);
614
88657302 615#endif /* ! GCC_C_TREE_H */