]> gcc.gnu.org Git - gcc.git/blame - gcc/c-common.h
gcse.c (try_replace_reg): Use num_changes_pending.
[gcc.git] / gcc / c-common.h
CommitLineData
7f4edbcb 1/* Definitions for c-common.c.
517cbe13 2 Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
1574ef13 3 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
7f4edbcb 4
1322177d 5This file is part of GCC.
7f4edbcb 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
7f4edbcb 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
7f4edbcb
BS
16
17You should have received a copy of the GNU General Public License
1322177d
LB
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA. */
7f4edbcb 21
0e5921e8
ZW
22#ifndef GCC_C_COMMON_H
23#define GCC_C_COMMON_H
24
8f17b5c5 25#include "splay-tree.h"
2a967f3d 26#include "cpplib.h"
8f17b5c5 27
f2c5f623
BC
28/* Usage of TREE_LANG_FLAG_?:
29 0: COMPOUND_STMT_NO_SCOPE (in COMPOUND_STMT).
30 TREE_NEGATED_INT (in INTEGER_CST).
31 IDENTIFIER_MARKED (used by search routines).
32 SCOPE_BEGIN_P (in SCOPE_STMT)
33 DECL_PRETTY_FUNCTION_P (in VAR_DECL)
34 NEW_FOR_SCOPE_P (in FOR_STMT)
4f78b9a8 35 ASM_INPUT_P (in ASM_STMT)
b2123dc0 36 STMT_EXPR_NO_SCOPE (in STMT_EXPR)
f2c5f623
BC
37 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
38 STMT_IS_FULL_EXPR_P (in _STMT)
39 2: STMT_LINENO_FOR_FN_P (in _STMT)
40 3: SCOPE_NO_CLEANUPS_P (in SCOPE_STMT)
ade3dc07 41 COMPOUND_STMT_BODY_BLOCK (in COMPOUND_STMT)
f2c5f623
BC
42 4: SCOPE_PARTIAL_P (in SCOPE_STMT)
43*/
44
0e5921e8
ZW
45/* Reserved identifiers. This is the union of all the keywords for C,
46 C++, and Objective C. All the type modifiers have to be in one
47 block at the beginning, because they are used as mask bits. There
48 are 27 type modifiers; if we add many more we will have to redesign
49 the mask mechanism. */
f09f1de5
MM
50
51enum rid
52{
0e5921e8 53 /* Modifiers: */
2ba84f36 54 /* C, in empirical order of frequency. */
0e5921e8
ZW
55 RID_STATIC = 0,
56 RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
57 RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
58 RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
59
60 /* C extensions */
3d78f2e9 61 RID_BOUNDED, RID_UNBOUNDED, RID_COMPLEX, RID_THREAD,
0e5921e8
ZW
62
63 /* C++ */
64 RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
65
66 /* ObjC */
b8363a24 67 RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
0e5921e8
ZW
68
69 /* C */
70 RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
71 RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
72 RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
73 RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
74 RID_SIZEOF,
75
76 /* C extensions */
77 RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
78 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE,
ecbcf7b3 79 RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P,
0e5921e8 80
0ba8a114
NS
81 /* Too many ways of getting the name of a function as a string */
82 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
83
0e5921e8
ZW
84 /* C++ */
85 RID_BOOL, RID_WCHAR, RID_CLASS,
86 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
87 RID_TEMPLATE, RID_NULL, RID_CATCH,
88 RID_DELETE, RID_FALSE, RID_NAMESPACE,
89 RID_NEW, RID_OPERATOR, RID_THIS,
90 RID_THROW, RID_TRUE, RID_TRY,
91 RID_TYPENAME, RID_TYPEID, RID_USING,
92
93 /* casts */
94 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
95
96 /* alternate spellings */
97 RID_AND, RID_AND_EQ, RID_NOT, RID_NOT_EQ,
98 RID_OR, RID_OR_EQ, RID_XOR, RID_XOR_EQ,
99 RID_BITAND, RID_BITOR, RID_COMPL,
100
101 /* Objective C */
102 RID_ID, RID_AT_ENCODE, RID_AT_END,
103 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
104 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
105 RID_AT_PROTOCOL, RID_AT_SELECTOR, RID_AT_INTERFACE,
106 RID_AT_IMPLEMENTATION,
107
108 RID_MAX,
109
110 RID_FIRST_MODIFIER = RID_STATIC,
b8363a24
ZW
111 RID_LAST_MODIFIER = RID_ONEWAY,
112
113 RID_FIRST_AT = RID_AT_ENCODE,
114 RID_LAST_AT = RID_AT_IMPLEMENTATION,
115 RID_FIRST_PQ = RID_IN,
116 RID_LAST_PQ = RID_ONEWAY
f09f1de5
MM
117};
118
b8363a24
ZW
119#define OBJC_IS_AT_KEYWORD(rid) \
120 ((unsigned int)(rid) >= (unsigned int)RID_FIRST_AT && \
121 (unsigned int)(rid) <= (unsigned int)RID_LAST_AT)
122
123#define OBJC_IS_PQ_KEYWORD(rid) \
124 ((unsigned int)(rid) >= (unsigned int)RID_FIRST_PQ && \
125 (unsigned int)(rid) <= (unsigned int)RID_LAST_PQ)
126
f09f1de5
MM
127/* The elements of `ridpointers' are identifier nodes for the reserved
128 type names and storage classes. It is indexed by a RID_... value. */
129extern tree *ridpointers;
130
7f4edbcb
BS
131/* Standard named or nameless data types of the C compiler. */
132
133enum c_tree_index
134{
7f4edbcb
BS
135 CTI_WCHAR_TYPE,
136 CTI_SIGNED_WCHAR_TYPE,
137 CTI_UNSIGNED_WCHAR_TYPE,
c5ab7f91 138 CTI_WINT_TYPE,
fe8ca71f
JM
139 CTI_C_SIZE_TYPE, /* The type used for the size_t typedef and the
140 result type of sizeof (an ordinary type without
141 TYPE_IS_SIZETYPE set, unlike the internal
142 sizetype). */
cd732418
JM
143 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
144 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
b15ad712
JM
145 CTI_INTMAX_TYPE,
146 CTI_UINTMAX_TYPE,
7f4edbcb
BS
147 CTI_WIDEST_INT_LIT_TYPE,
148 CTI_WIDEST_UINT_LIT_TYPE,
149
7f4edbcb
BS
150 CTI_CHAR_ARRAY_TYPE,
151 CTI_WCHAR_ARRAY_TYPE,
152 CTI_INT_ARRAY_TYPE,
153 CTI_STRING_TYPE,
154 CTI_CONST_STRING_TYPE,
155
19552aa5 156 /* Type for boolean expressions (bool in C++, int in C). */
7f4edbcb
BS
157 CTI_BOOLEAN_TYPE,
158 CTI_BOOLEAN_TRUE,
159 CTI_BOOLEAN_FALSE,
19552aa5
JM
160 /* C99's _Bool type. */
161 CTI_C_BOOL_TYPE,
162 CTI_C_BOOL_TRUE,
163 CTI_C_BOOL_FALSE,
7f4edbcb 164 CTI_DEFAULT_FUNCTION_TYPE,
7f4edbcb 165
7aba5a5f
CD
166 CTI_G77_INTEGER_TYPE,
167 CTI_G77_UINTEGER_TYPE,
168 CTI_G77_LONGINT_TYPE,
169 CTI_G77_ULONGINT_TYPE,
170
2ba84f36 171 /* These are not types, but we have to look them up all the time. */
0ba8a114
NS
172 CTI_FUNCTION_NAME_DECL,
173 CTI_PRETTY_FUNCTION_NAME_DECL,
174 CTI_C99_FUNCTION_NAME_DECL,
175 CTI_SAVED_FUNCTION_NAME_DECLS,
176
ae499cce
MM
177 CTI_VOID_ZERO,
178
7f4edbcb
BS
179 CTI_MAX
180};
181
b621a4dd 182#define C_RID_CODE(id) (((struct c_common_identifier *) (id))->node.rid_code)
2a967f3d
NB
183
184/* Identifier part common to the C front ends. Inherits from
185 tree_identifier, despite appearances. */
e2500fed 186struct c_common_identifier GTY(())
2a967f3d
NB
187{
188 struct tree_common common;
e2500fed 189 struct cpp_hashnode GTY ((skip (""))) node;
2a967f3d
NB
190};
191
7f4edbcb
BS
192#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
193#define signed_wchar_type_node c_global_trees[CTI_SIGNED_WCHAR_TYPE]
194#define unsigned_wchar_type_node c_global_trees[CTI_UNSIGNED_WCHAR_TYPE]
c5ab7f91 195#define wint_type_node c_global_trees[CTI_WINT_TYPE]
3c786c69 196#define c_size_type_node c_global_trees[CTI_C_SIZE_TYPE]
cd732418
JM
197#define signed_size_type_node c_global_trees[CTI_SIGNED_SIZE_TYPE]
198#define unsigned_ptrdiff_type_node c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
b15ad712
JM
199#define intmax_type_node c_global_trees[CTI_INTMAX_TYPE]
200#define uintmax_type_node c_global_trees[CTI_UINTMAX_TYPE]
7f4edbcb
BS
201#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
202#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
203
7f4edbcb
BS
204#define boolean_type_node c_global_trees[CTI_BOOLEAN_TYPE]
205#define boolean_true_node c_global_trees[CTI_BOOLEAN_TRUE]
206#define boolean_false_node c_global_trees[CTI_BOOLEAN_FALSE]
207
19552aa5
JM
208#define c_bool_type_node c_global_trees[CTI_C_BOOL_TYPE]
209#define c_bool_true_node c_global_trees[CTI_C_BOOL_TRUE]
210#define c_bool_false_node c_global_trees[CTI_C_BOOL_FALSE]
211
7f4edbcb
BS
212#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
213#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
214#define int_array_type_node c_global_trees[CTI_INT_ARRAY_TYPE]
215#define string_type_node c_global_trees[CTI_STRING_TYPE]
216#define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE]
217
218#define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
7f4edbcb 219
7aba5a5f
CD
220/* g77 integer types, which which must be kept in sync with f/com.h */
221#define g77_integer_type_node c_global_trees[CTI_G77_INTEGER_TYPE]
222#define g77_uinteger_type_node c_global_trees[CTI_G77_UINTEGER_TYPE]
223#define g77_longint_type_node c_global_trees[CTI_G77_LONGINT_TYPE]
224#define g77_ulongint_type_node c_global_trees[CTI_G77_ULONGINT_TYPE]
225
0ba8a114
NS
226#define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL]
227#define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
228#define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
229#define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
63ad61ed 230
ae499cce
MM
231/* A node for `((void) 0)'. */
232#define void_zero_node c_global_trees[CTI_VOID_ZERO]
233
e2500fed 234extern GTY(()) tree c_global_trees[CTI_MAX];
ab76ca54 235
8f17b5c5
MM
236/* Mark which labels are explicitly declared.
237 These may be shadowed, and may be referenced from nested functions. */
238#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
239
9aa8a1df
NB
240/* Flag strings given by __FUNCTION__ and __PRETTY_FUNCTION__ for a
241 warning if they undergo concatenation. */
242#define C_ARTIFICIAL_STRING_P(NODE) TREE_LANG_FLAG_0 (NODE)
243
ab76ca54
MM
244typedef enum c_language_kind
245{
246 clk_c, /* A dialect of C: K&R C, ANSI/ISO C89, C2000,
2ba84f36 247 etc. */
ab76ca54
MM
248 clk_cplusplus, /* ANSI/ISO C++ */
249 clk_objective_c /* Objective C */
21c7361e 250}
ab76ca54
MM
251c_language_kind;
252
ae499cce
MM
253/* Information about a statement tree. */
254
e2500fed 255struct stmt_tree_s GTY(()) {
ae499cce
MM
256 /* The last statement added to the tree. */
257 tree x_last_stmt;
258 /* The type of the last expression statement. (This information is
259 needed to implement the statement-expression extension.) */
260 tree x_last_expr_type;
de097a2d
JM
261 /* The last filename we recorded. */
262 const char *x_last_expr_filename;
ae499cce
MM
263 /* In C++, Non-zero if we should treat statements as full
264 expressions. In particular, this variable is no-zero if at the
265 end of a statement we should destroy any temporaries created
266 during that statement. Similarly, if, at the end of a block, we
267 should destroy any local variables in this block. Normally, this
268 variable is non-zero, since those are the normal semantics of
269 C++.
270
271 However, in order to represent aggregate initialization code as
272 tree structure, we use statement-expressions. The statements
273 within the statement expression should not result in cleanups
21c7361e 274 being run until the entire enclosing statement is complete.
ae499cce
MM
275
276 This flag has no effect in C. */
21c7361e 277 int stmts_are_full_exprs_p;
ae499cce
MM
278};
279
280typedef struct stmt_tree_s *stmt_tree;
281
282/* Global state pertinent to the current function. Some C dialects
283 extend this structure with additional fields. */
284
e2500fed 285struct c_language_function GTY(()) {
ae499cce
MM
286 /* While we are parsing the function, this contains information
287 about the statement-tree that we are building. */
288 struct stmt_tree_s x_stmt_tree;
8f17b5c5
MM
289 /* The stack of SCOPE_STMTs for the current function. */
290 tree x_scope_stmt_stack;
ae499cce
MM
291};
292
293/* When building a statement-tree, this is the last statement added to
294 the tree. */
295
296#define last_tree (current_stmt_tree ()->x_last_stmt)
297
298/* The type of the last expression-statement we have seen. */
299
300#define last_expr_type (current_stmt_tree ()->x_last_expr_type)
301
de097a2d
JM
302/* The name of the last file we have seen. */
303
304#define last_expr_filename (current_stmt_tree ()->x_last_expr_filename)
305
8f17b5c5
MM
306/* LAST_TREE contains the last statement parsed. These are chained
307 together through the TREE_CHAIN field, but often need to be
308 re-organized since the parse is performed bottom-up. This macro
309 makes LAST_TREE the indicated SUBSTMT of STMT. */
310
311#define RECHAIN_STMTS(stmt, substmt) \
312 do { \
313 substmt = TREE_CHAIN (stmt); \
314 TREE_CHAIN (stmt) = NULL_TREE; \
315 last_tree = stmt; \
316 } while (0)
317
318/* Language-specific hooks. */
319
320extern int (*lang_statement_code_p) PARAMS ((enum tree_code));
321extern void (*lang_expand_stmt) PARAMS ((tree));
322extern void (*lang_expand_decl_stmt) PARAMS ((tree));
323extern void (*lang_expand_function_end) PARAMS ((void));
43577e6b 324extern tree gettags PARAMS ((void));
8f17b5c5 325
21c7361e
AJ
326/* Callback that determines if it's ok for a function to have no
327 noreturn attribute. */
328extern int (*lang_missing_noreturn_ok_p) PARAMS ((tree));
329
52dabb6c 330extern int yyparse PARAMS ((void));
94a50397
RH
331extern void free_parser_stacks PARAMS ((void));
332
ae499cce 333extern stmt_tree current_stmt_tree PARAMS ((void));
8f17b5c5 334extern tree *current_scope_stmt_stack PARAMS ((void));
ae499cce 335extern void begin_stmt_tree PARAMS ((tree *));
56cb9733 336extern tree add_stmt PARAMS ((tree));
8f17b5c5
MM
337extern void add_decl_stmt PARAMS ((tree));
338extern tree add_scope_stmt PARAMS ((int, int));
ae499cce
MM
339extern void finish_stmt_tree PARAMS ((tree *));
340
341extern int statement_code_p PARAMS ((enum tree_code));
ae499cce
MM
342extern tree walk_stmt_tree PARAMS ((tree *,
343 walk_tree_fn,
344 void *));
54f7877c 345extern void prep_stmt PARAMS ((tree));
54f7877c 346extern void expand_stmt PARAMS ((tree));
26f943fd
NB
347extern void shadow_warning PARAMS ((const char *,
348 tree, tree));
c1e14513
JL
349extern tree c_begin_if_stmt PARAMS ((void));
350extern tree c_begin_while_stmt PARAMS ((void));
351extern void c_finish_while_stmt_cond PARAMS ((tree, tree));
352
ae499cce 353
8f17b5c5
MM
354/* Extra information associated with a DECL. Other C dialects extend
355 this structure in various ways. The C front-end only uses this
356 structure for FUNCTION_DECLs; all other DECLs have a NULL
357 DECL_LANG_SPECIFIC field. */
56cb9733 358
e2500fed 359struct c_lang_decl GTY(()) {
31ed8fea 360 unsigned declared_inline : 1;
8f17b5c5
MM
361};
362
b850de4f
MM
363/* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is
364 the approximate number of statements in this function. There is
365 no need for this number to be exact; it is only used in various
366 heuristics regarding optimization. */
367#define DECL_NUM_STMTS(NODE) \
368 (FUNCTION_DECL_CHECK (NODE)->decl.u1.i)
8f17b5c5 369
ab76ca54
MM
370/* The variant of the C language being processed. Each C language
371 front-end defines this variable. */
372
373extern c_language_kind c_language;
374
aaf93206
NB
375/* Nonzero if prepreprocessing only. */
376extern int flag_preprocess_only;
377
3df89291
NB
378/* Nonzero if an ISO standard was selected. It rejects macros in the
379 user's namespace. */
380extern int flag_iso;
381
382/* Nonzero if -undef was given. It suppresses target built-in macros
383 and assertions. */
384extern int flag_undef;
385
ab76ca54
MM
386/* Nonzero means give string constants the type `const char *', rather
387 than `char *'. */
388
389extern int flag_const_strings;
390
eaa7c03f
JM
391/* Nonzero means give `double' the same size as `float'. */
392
393extern int flag_short_double;
394
395/* Nonzero means give `wchar_t' the same size as `short'. */
396
397extern int flag_short_wchar;
398
750491fc
RH
399/* Nonzero means allow Microsoft extensions without warnings or errors. */
400extern int flag_ms_extensions;
401
a5a49440
NB
402/* Nonzero means warn about use of multicharacter literals. */
403extern int warn_multichar;
404
2ba84f36 405/* Warn about *printf or *scanf format/argument anomalies. */
ab76ca54
MM
406
407extern int warn_format;
408
4d808927
JM
409/* Warn about Y2K problems with strftime formats. */
410
411extern int warn_format_y2k;
412
413/* Warn about excess arguments to formats. */
414
415extern int warn_format_extra_args;
416
e964a556
JT
417/* Warn about zero-length formats. */
418
419extern int warn_format_zero_length;
420
4d808927
JM
421/* Warn about non-literal format arguments. */
422
423extern int warn_format_nonliteral;
424
c907e684
JM
425/* Warn about possible security problems with calls to format functions. */
426
427extern int warn_format_security;
428
b34c7881
JT
429/* Warn about NULL being passed to argument slots marked as requiring
430 non-NULL. */
431
432extern int warn_nonnull;
433
2683ed8d
BS
434/* Warn about possible violations of sequence point rules. */
435
436extern int warn_sequence_point;
437
74ff4629
JM
438/* Warn about functions which might be candidates for format attributes. */
439
440extern int warn_missing_format_attribute;
441
0213a355
JM
442/* Nonzero means warn about sizeof (function) or addition/subtraction
443 of function pointers. */
444
445extern int warn_pointer_arith;
446
6c36d76b
NB
447/* Nonzero means to warn about compile-time division by zero. */
448extern int warn_div_by_zero;
449
eaf299c6 450/* Nonzero means enable C89 Amendment 1 features. */
b8458e3e
JM
451
452extern int flag_isoc94;
453
ab76ca54
MM
454/* Nonzero means use the ISO C99 dialect of C. */
455
456extern int flag_isoc99;
457
93e2382f
JM
458/* Nonzero means environment is hosted (i.e., not freestanding) */
459
460extern int flag_hosted;
461
462/* Nonzero means add default format_arg attributes for functions not
463 in ISO C. */
464
465extern int flag_noniso_default_format_attributes;
466
6bcedb4e
MM
467/* Nonzero means don't recognize any builtin functions. */
468
469extern int flag_no_builtin;
470
471/* Nonzero means don't recognize the non-ANSI builtin functions.
472 -ansi sets this. */
473
474extern int flag_no_nonansi_builtin;
475
ab76ca54
MM
476/* Nonzero means warn about suggesting putting in ()'s. */
477
478extern int warn_parentheses;
479
480/* Warn if a type conversion is done that might have confusing results. */
481
482extern int warn_conversion;
483
20d380b1
JM
484/* Nonzero means warn about usage of long long,
485 when `-pedantic' and not C99. */
486
487extern int warn_long_long;
488
ab76ca54
MM
489/* C types are partitioned into three subsets: object, function, and
490 incomplete types. */
491#define C_TYPE_OBJECT_P(type) \
492 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
493
494#define C_TYPE_INCOMPLETE_P(type) \
495 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
496
497#define C_TYPE_FUNCTION_P(type) \
498 (TREE_CODE (type) == FUNCTION_TYPE)
499
500/* For convenience we define a single macro to identify the class of
501 object or incomplete types. */
502#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
503 (!C_TYPE_FUNCTION_P (type))
504
505/* Record in each node resulting from a binary operator
506 what operator was specified for it. */
507#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp))
508
349ae713
NB
509/* Attribute table common to the C front ends. */
510extern const struct attribute_spec c_common_attribute_table[];
511extern const struct attribute_spec c_common_format_attribute_table[];
512
0ba8a114 513/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
2ce07e2d
NS
514 ID is the identifier to use, NAME is the string.
515 TYPE_DEP indicates whether it depends on type of the function or not
516 (i.e. __PRETTY_FUNCTION__). */
517
0ba8a114 518extern tree (*make_fname_decl) PARAMS ((tree, int));
2ce07e2d 519
5fd8e536 520extern tree identifier_global_value PARAMS ((tree));
eaa7c03f
JM
521extern void record_builtin_type PARAMS ((enum rid,
522 const char *, tree));
523extern tree build_void_list_node PARAMS ((void));
0ba8a114
NS
524extern void start_fname_decls PARAMS ((void));
525extern void finish_fname_decls PARAMS ((void));
526extern const char *fname_as_string PARAMS ((int));
527extern tree fname_decl PARAMS ((unsigned, tree));
528extern const char *fname_string PARAMS ((unsigned));
59387d2e 529
b34c7881
JT
530extern void check_function_arguments PARAMS ((tree, tree));
531extern void check_function_arguments_recurse PARAMS ((void (*) (void *,
532 tree,
533 unsigned HOST_WIDE_INT),
534 void *, tree,
535 unsigned HOST_WIDE_INT));
80a497e4 536extern void check_function_format PARAMS ((int *, tree, tree));
4d808927 537extern void set_Wformat PARAMS ((int));
91d231cb
JM
538extern tree handle_format_attribute PARAMS ((tree *, tree, tree,
539 int, bool *));
540extern tree handle_format_arg_attribute PARAMS ((tree *, tree, tree,
541 int, bool *));
6431177a 542extern void c_common_insert_default_attributes PARAMS ((tree));
b0c48229
NB
543extern tree c_common_type_for_mode PARAMS ((enum machine_mode,
544 int));
545extern tree c_common_type_for_size PARAMS ((unsigned int, int));
ceef8ce4
NB
546extern tree c_common_unsigned_type PARAMS ((tree));
547extern tree c_common_signed_type PARAMS ((tree));
548extern tree c_common_signed_or_unsigned_type PARAMS ((int, tree));
78ef5b89 549extern tree c_common_truthvalue_conversion PARAMS ((tree));
6e090c76 550extern void c_apply_type_quals_to_decl PARAMS ((int, tree));
0213a355
JM
551extern tree c_sizeof PARAMS ((tree));
552extern tree c_alignof PARAMS ((tree));
553extern tree c_alignof_expr PARAMS ((tree));
7f4edbcb
BS
554/* Print an error message for invalid operands to arith operation CODE.
555 NOP_EXPR is used as a special case (see truthvalue_conversion). */
6e090c76 556extern void binary_op_error PARAMS ((enum tree_code));
64094f6a 557extern tree c_expand_expr_stmt PARAMS ((tree));
c1e14513 558extern void c_expand_start_cond PARAMS ((tree, int, tree));
8f17b5c5 559extern void c_finish_then PARAMS ((void));
6e090c76 560extern void c_expand_start_else PARAMS ((void));
b84a3874 561extern void c_finish_else PARAMS ((void));
6e090c76 562extern void c_expand_end_cond PARAMS ((void));
7f4edbcb 563/* Validate the expression after `case' and apply default promotions. */
6e090c76 564extern tree check_case_value PARAMS ((tree));
b84a3874
RH
565extern tree fix_string_type PARAMS ((tree));
566struct varray_head_tag;
567extern tree combine_strings PARAMS ((struct varray_head_tag *));
6e090c76
KG
568extern void constant_expression_warning PARAMS ((tree));
569extern tree convert_and_check PARAMS ((tree, tree));
570extern void overflow_warning PARAMS ((tree));
571extern void unsigned_conversion_warning PARAMS ((tree, tree));
ab76ca54 572
7f4edbcb 573/* Read the rest of the current #-directive line. */
6e090c76 574extern char *get_directive_line PARAMS ((void));
7f4edbcb 575#define GET_DIRECTIVE_LINE() get_directive_line ()
7f4edbcb
BS
576
577/* Subroutine of build_binary_op, used for comparison operations.
578 See if the operands have both been converted from subword integer types
579 and, if so, perhaps change them both back to their original type. */
6e090c76 580extern tree shorten_compare PARAMS ((tree *, tree *, tree *, enum tree_code *));
7f4edbcb 581
7552da58 582extern tree pointer_int_sum PARAMS ((enum tree_code, tree, tree));
50e60bc3
ZW
583extern unsigned int min_precision PARAMS ((tree, int));
584
585/* Add qualifiers to a type, in the fashion for C. */
586extern tree c_build_qualified_type PARAMS ((tree, int));
587
7f4edbcb
BS
588/* Build tree nodes and builtin functions common to both C and C++ language
589 frontends. */
6bcedb4e 590extern void c_common_nodes_and_builtins PARAMS ((void));
d3707adb 591
7d14c755
JM
592extern void disable_builtin_function PARAMS ((const char *));
593
6e090c76 594extern tree build_va_arg PARAMS ((tree, tree));
7e8176d7 595
4d6baafa 596extern void c_common_init_options PARAMS ((enum c_language_kind));
5351f1ca 597extern bool c_common_post_options PARAMS ((void));
4d6baafa 598extern const char *c_common_init PARAMS ((const char *));
22703ccc 599extern void c_common_finish PARAMS ((void));
ff45c01e 600extern void c_common_parse_file PARAMS ((int));
8ac61af7 601extern HOST_WIDE_INT c_common_get_alias_set PARAMS ((tree));
d72040f5 602extern bool c_promoting_integer_type_p PARAMS ((tree));
6e090c76 603extern int self_promoting_args_p PARAMS ((tree));
0a7394bc 604extern tree strip_array_types PARAMS ((tree));
d7e7759d 605
ae499cce
MM
606/* These macros provide convenient access to the various _STMT nodes. */
607
608/* Nonzero if this statement should be considered a full-expression,
609 i.e., if temporaries created during this statement should have
610 their destructors run at the end of this statement. (In C, this
611 will always be false, since there are no destructors.) */
612#define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
35b1567d 613
ff7cc307 614/* IF_STMT accessors. These give access to the condition of the if
35b1567d 615 statement, the then block of the if statement, and the else block
684d9f3b 616 of the if statement if it exists. */
d7e7759d
BC
617#define IF_COND(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 0)
618#define THEN_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 1)
619#define ELSE_CLAUSE(NODE) TREE_OPERAND (IF_STMT_CHECK (NODE), 2)
35b1567d 620
ff7cc307 621/* WHILE_STMT accessors. These give access to the condition of the
2ba84f36 622 while statement and the body of the while statement, respectively. */
d7e7759d
BC
623#define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
624#define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
35b1567d
BC
625
626/* DO_STMT accessors. These give access to the condition of the do
2ba84f36 627 statement and the body of the do statement, respectively. */
d7e7759d
BC
628#define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
629#define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
35b1567d 630
0d97bf4c
JM
631/* RETURN_STMT accessors. These give the expression associated with a
632 return statement, and whether it should be ignored when expanding
633 (as opposed to inlining). */
d7e7759d 634#define RETURN_EXPR(NODE) TREE_OPERAND (RETURN_STMT_CHECK (NODE), 0)
35b1567d
BC
635
636/* EXPR_STMT accessor. This gives the expression associated with an
2ba84f36 637 expression statement. */
d7e7759d 638#define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
35b1567d
BC
639
640/* FOR_STMT accessors. These give access to the init statement,
641 condition, update expression, and body of the for statement,
2ba84f36 642 respectively. */
d7e7759d
BC
643#define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
644#define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
645#define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
646#define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
35b1567d 647
6f9fdf4d
JJ
648/* SWITCH_STMT accessors. These give access to the condition, body and
649 original condition type (before any compiler conversions)
2ba84f36 650 of the switch statement, respectively. */
d7e7759d
BC
651#define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 0)
652#define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 1)
6f9fdf4d 653#define SWITCH_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
35b1567d
BC
654
655/* CASE_LABEL accessors. These give access to the high and low values
2ba84f36 656 of a case label, respectively. */
d7e7759d
BC
657#define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 0)
658#define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 1)
56cb9733 659#define CASE_LABEL_DECL(NODE) TREE_OPERAND (CASE_LABEL_CHECK (NODE), 2)
35b1567d
BC
660
661/* GOTO_STMT accessor. This gives access to the label associated with
2ba84f36 662 a goto statement. */
d7e7759d 663#define GOTO_DESTINATION(NODE) TREE_OPERAND (GOTO_STMT_CHECK (NODE), 0)
db4a8254
JH
664/* True for goto created artifically by the compiler. */
665#define GOTO_FAKE_P(NODE) (TREE_LANG_FLAG_0 (GOTO_STMT_CHECK (NODE)))
35b1567d
BC
666
667/* COMPOUND_STMT accessor. This gives access to the TREE_LIST of
684d9f3b
JM
668 statements associated with a compound statement. The result is the
669 first statement in the list. Succeeding nodes can be accessed by
2ba84f36 670 calling TREE_CHAIN on a node in the list. */
d7e7759d 671#define COMPOUND_BODY(NODE) TREE_OPERAND (COMPOUND_STMT_CHECK (NODE), 0)
35b1567d
BC
672
673/* ASM_STMT accessors. ASM_STRING returns a STRING_CST for the
674 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
675 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
2ba84f36 676 statement. */
d7e7759d
BC
677#define ASM_CV_QUAL(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 0)
678#define ASM_STRING(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 1)
679#define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 2)
680#define ASM_INPUTS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 3)
681#define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_STMT_CHECK (NODE), 4)
35b1567d
BC
682
683/* DECL_STMT accessor. This gives access to the DECL associated with
2ba84f36 684 the given declaration statement. */
d7e7759d 685#define DECL_STMT_DECL(NODE) TREE_OPERAND (DECL_STMT_CHECK (NODE), 0)
35b1567d 686
2ba84f36 687/* STMT_EXPR accessor. */
d7e7759d 688#define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
35b1567d 689
b2123dc0
MM
690/* Nonzero if this statement-expression does not have an associated scope. */
691#define STMT_EXPR_NO_SCOPE(NODE) \
692 TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
693
35b1567d 694/* LABEL_STMT accessor. This gives access to the label associated with
2ba84f36 695 the given label statement. */
d7e7759d
BC
696#define LABEL_STMT_LABEL(NODE) TREE_OPERAND (LABEL_STMT_CHECK (NODE), 0)
697
8d37a5c0
JM
698/* COMPOUND_LITERAL_EXPR accessors. */
699#define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \
db3acfa5 700 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
8d37a5c0
JM
701#define COMPOUND_LITERAL_EXPR_DECL(NODE) \
702 DECL_STMT_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE))
db3acfa5 703
d7e7759d
BC
704/* Nonzero if this SCOPE_STMT is for the beginning of a scope. */
705#define SCOPE_BEGIN_P(NODE) \
21c7361e 706 (TREE_LANG_FLAG_0 (SCOPE_STMT_CHECK (NODE)))
d7e7759d
BC
707
708/* Nonzero if this SCOPE_STMT is for the end of a scope. */
709#define SCOPE_END_P(NODE) \
710 (!SCOPE_BEGIN_P (SCOPE_STMT_CHECK (NODE)))
711
712/* The BLOCK containing the declarations contained in this scope. */
713#define SCOPE_STMT_BLOCK(NODE) \
714 (TREE_OPERAND (SCOPE_STMT_CHECK (NODE), 0))
715
716/* Nonzero for a SCOPE_STMT if there were no variables in this scope. */
717#define SCOPE_NULLIFIED_P(NODE) \
718 (SCOPE_STMT_BLOCK ((NODE)) == NULL_TREE)
719
720/* Nonzero for a SCOPE_STMT which represents a lexical scope, but
ff7cc307 721 which should be treated as non-existent from the point of view of
d7e7759d
BC
722 running cleanup actions. */
723#define SCOPE_NO_CLEANUPS_P(NODE) \
724 (TREE_LANG_FLAG_3 (SCOPE_STMT_CHECK (NODE)))
725
726/* Nonzero for a SCOPE_STMT if this statement is for a partial scope.
727 For example, in:
21c7361e 728
d7e7759d
BC
729 S s;
730 l:
731 S s2;
732 goto l;
733
734 there is (implicitly) a new scope after `l', even though there are
735 no curly braces. In particular, when we hit the goto, we must
736 destroy s2 and then re-construct it. For the implicit scope,
737 SCOPE_PARTIAL_P will be set. */
738#define SCOPE_PARTIAL_P(NODE) \
739 (TREE_LANG_FLAG_4 (SCOPE_STMT_CHECK (NODE)))
740
741/* Nonzero for an ASM_STMT if the assembly statement is volatile. */
742#define ASM_VOLATILE_P(NODE) \
743 (ASM_CV_QUAL (ASM_STMT_CHECK (NODE)) != NULL_TREE)
744
6e4ae815
MM
745/* The VAR_DECL to clean up in a CLEANUP_STMT. */
746#define CLEANUP_DECL(NODE) \
747 TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 0)
748/* The cleanup to run in a CLEANUP_STMT. */
749#define CLEANUP_EXPR(NODE) \
750 TREE_OPERAND (CLEANUP_STMT_CHECK (NODE), 1)
751
de097a2d
JM
752/* The filename we are changing to as of this FILE_STMT. */
753#define FILE_STMT_FILENAME_NODE(NODE) \
754 (TREE_OPERAND (FILE_STMT_CHECK (NODE), 0))
755#define FILE_STMT_FILENAME(NODE) \
756 (IDENTIFIER_POINTER (FILE_STMT_FILENAME_NODE (NODE)))
757
d7e7759d
BC
758/* The line-number at which a statement began. But if
759 STMT_LINENO_FOR_FN_P does holds, then this macro gives the
760 line number for the end of the current function instead. */
761#define STMT_LINENO(NODE) \
762 (TREE_COMPLEXITY ((NODE)))
763
764/* If non-zero, the STMT_LINENO for NODE is the line at which the
765 function ended. */
21c7361e 766#define STMT_LINENO_FOR_FN_P(NODE) \
d7e7759d 767 (TREE_LANG_FLAG_2 ((NODE)))
c7d87c0a 768
f2c5f623 769/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
2ba84f36 770 initialization variables. */
21c7361e 771#define NEW_FOR_SCOPE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
c7d87c0a 772
4f78b9a8
RH
773/* Nonzero if we want to create an ASM_INPUT instead of an
774 ASM_OPERAND with no operands. */
775#define ASM_INPUT_P(NODE) (TREE_LANG_FLAG_0 (NODE))
776
c7d87c0a
BC
777#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
778
779enum c_tree_code {
780 C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
781#include "c-common.def"
782 LAST_C_TREE_CODE
783};
784
785#undef DEFTREECODE
786
f2c5f623 787extern void genrtl_do_pushlevel PARAMS ((void));
f2c5f623
BC
788extern void genrtl_goto_stmt PARAMS ((tree));
789extern void genrtl_expr_stmt PARAMS ((tree));
b0832fe1 790extern void genrtl_expr_stmt_value PARAMS ((tree, int, int));
f2c5f623
BC
791extern void genrtl_decl_stmt PARAMS ((tree));
792extern void genrtl_if_stmt PARAMS ((tree));
793extern void genrtl_while_stmt PARAMS ((tree));
794extern void genrtl_do_stmt PARAMS ((tree));
795extern void genrtl_return_stmt PARAMS ((tree));
796extern void genrtl_for_stmt PARAMS ((tree));
797extern void genrtl_break_stmt PARAMS ((void));
798extern void genrtl_continue_stmt PARAMS ((void));
799extern void genrtl_scope_stmt PARAMS ((tree));
800extern void genrtl_switch_stmt PARAMS ((tree));
56cb9733 801extern void genrtl_case_label PARAMS ((tree));
4cf88f57 802extern void genrtl_compound_stmt PARAMS ((tree));
f2c5f623
BC
803extern void genrtl_asm_stmt PARAMS ((tree, tree,
804 tree, tree,
4f78b9a8 805 tree, int));
659e5a7a 806extern void genrtl_decl_cleanup PARAMS ((tree));
f2c5f623 807extern int stmts_are_full_exprs_p PARAMS ((void));
f2c5f623
BC
808extern int anon_aggr_type_p PARAMS ((tree));
809
810/* For a VAR_DECL that is an anonymous union, these are the various
811 sub-variables that make up the anonymous union. */
812#define DECL_ANON_UNION_ELEMS(NODE) DECL_ARGUMENTS ((NODE))
813
0a7394bc
MM
814/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
815#define DECL_C_BIT_FIELD(NODE) \
816 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
817#define SET_DECL_C_BIT_FIELD(NODE) \
818 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
819#define CLEAR_DECL_C_BIT_FIELD(NODE) \
820 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
821
3645c4dc
RH
822/* In a VAR_DECL, nonzero if the decl is a register variable with
823 an explicit asm specification. */
824#define DECL_C_HARD_REGISTER(DECL) DECL_LANG_FLAG_4 (VAR_DECL_CHECK (DECL))
825
f2c5f623
BC
826extern void emit_local_var PARAMS ((tree));
827extern void make_rtl_for_local_static PARAMS ((tree));
828extern tree expand_cond PARAMS ((tree));
64094f6a
RH
829extern tree c_expand_return PARAMS ((tree));
830extern tree do_case PARAMS ((tree, tree));
0dfdeca6 831extern tree build_stmt PARAMS ((enum tree_code, ...));
56cb9733 832extern tree build_case_label PARAMS ((tree, tree, tree));
0dfdeca6
BC
833extern tree build_continue_stmt PARAMS ((void));
834extern tree build_break_stmt PARAMS ((void));
835extern tree build_return_stmt PARAMS ((tree));
f2c5f623
BC
836
837#define COMPOUND_STMT_NO_SCOPE(NODE) TREE_LANG_FLAG_0 (NODE)
838
ade3dc07
JM
839/* Used by the C++ frontend to mark the block around the member
840 initializers and cleanups. */
841#define COMPOUND_STMT_BODY_BLOCK(NODE) TREE_LANG_FLAG_3 (NODE)
842
f2c5f623 843extern void c_expand_asm_operands PARAMS ((tree, tree, tree, tree, int, const char *, int));
ab76ca54
MM
844
845/* These functions must be defined by each front-end which implements
846 a variant of the C language. They are used in c-common.c. */
847
848extern tree build_unary_op PARAMS ((enum tree_code,
849 tree, int));
850extern tree build_binary_op PARAMS ((enum tree_code,
851 tree, tree, int));
852extern int lvalue_p PARAMS ((tree));
853extern tree default_conversion PARAMS ((tree));
854
855/* Given two integer or real types, return the type for their sum.
856 Given two compatible ANSI C types, returns the merged type. */
857
858extern tree common_type PARAMS ((tree, tree));
44835fdd
MM
859
860extern tree expand_tree_builtin PARAMS ((tree, tree, tree));
0e5921e8 861
56cb9733
MM
862extern tree decl_constant_value PARAMS ((tree));
863
19552aa5
JM
864/* Handle increment and decrement of boolean types. */
865extern tree boolean_increment PARAMS ((enum tree_code,
866 tree));
867
0e5921e8
ZW
868/* Hook currently used only by the C++ front end to reset internal state
869 after entering or leaving a header file. */
870extern void extract_interface_info PARAMS ((void));
871
21c7361e 872extern int case_compare PARAMS ((splay_tree_key,
8f17b5c5
MM
873 splay_tree_key));
874
875extern tree c_add_case_label PARAMS ((splay_tree,
876 tree, tree,
877 tree));
878
c70eaeaf
KG
879extern tree build_function_call PARAMS ((tree, tree));
880
15b732b2
NB
881extern tree finish_label_address_expr PARAMS ((tree));
882
883/* Same function prototype, but the C and C++ front ends have
884 different implementations. Used in c-common.c. */
885extern tree lookup_label PARAMS ((tree));
886
c9d892a8
NB
887extern rtx c_expand_expr PARAMS ((tree, rtx,
888 enum machine_mode,
889 int));
8f17b5c5
MM
890
891extern int c_safe_from_p PARAMS ((rtx, tree));
8f17b5c5 892
db3acfa5
JM
893extern int c_staticp PARAMS ((tree));
894
48a7a235 895extern int c_common_unsafe_for_reeval PARAMS ((tree));
3fe30ff6 896
81a75f0f
NB
897extern const char *init_c_lex PARAMS ((const char *));
898
0e5921e8
ZW
899/* Information recorded about each file examined during compilation. */
900
901struct c_fileinfo
902{
903 int time; /* Time spent in the file. */
904 short interface_only; /* Flags - used only by C++ */
905 short interface_unknown;
906};
907
908struct c_fileinfo *get_fileinfo PARAMS ((const char *));
909extern void dump_time_statistics PARAMS ((void));
910
88657302 911#endif /* ! GCC_C_COMMON_H */
This page took 0.805788 seconds and 5 git commands to generate.