]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-common.h
c-tree.h (struct c_declspecs): Remove typedef_decl.
[thirdparty/gcc.git] / gcc / c-common.h
CommitLineData
7f4edbcb 1/* Definitions for c-common.c.
517cbe13 2 Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
d9221e01 3 1999, 2000, 2001, 2002, 2003, 2004 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"
d07605f5 27#include "ggc.h"
8f17b5c5 28
f2c5f623 29/* Usage of TREE_LANG_FLAG_?:
325c3691 30 0: TREE_NEGATED_INT (in INTEGER_CST).
f2c5f623 31 IDENTIFIER_MARKED (used by search routines).
f2c5f623 32 DECL_PRETTY_FUNCTION_P (in VAR_DECL)
b2123dc0 33 STMT_EXPR_NO_SCOPE (in STMT_EXPR)
f2c5f623
BC
34 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
35 STMT_IS_FULL_EXPR_P (in _STMT)
325c3691 36 STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
6de9cd9a 37 2: unused
174283a3 38 3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
325c3691 39 4: unused
f2c5f623
BC
40*/
41
0e5921e8 42/* Reserved identifiers. This is the union of all the keywords for C,
40f03658 43 C++, and Objective-C. All the type modifiers have to be in one
0e5921e8
ZW
44 block at the beginning, because they are used as mask bits. There
45 are 27 type modifiers; if we add many more we will have to redesign
46 the mask mechanism. */
f09f1de5
MM
47
48enum rid
49{
0e5921e8 50 /* Modifiers: */
2ba84f36 51 /* C, in empirical order of frequency. */
0e5921e8
ZW
52 RID_STATIC = 0,
53 RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
54 RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
55 RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
56
57 /* C extensions */
66804d9e 58 RID_COMPLEX, RID_THREAD,
0e5921e8
ZW
59
60 /* C++ */
61 RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
62
63 /* ObjC */
b8363a24 64 RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
0e5921e8
ZW
65
66 /* C */
67 RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
68 RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
69 RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
70 RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
71 RID_SIZEOF,
72
73 /* C extensions */
74 RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
75 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_PTRBASE,
ecbcf7b3 76 RID_PTREXTENT, RID_PTRVALUE, RID_CHOOSE_EXPR, RID_TYPES_COMPATIBLE_P,
0e5921e8 77
0ba8a114
NS
78 /* Too many ways of getting the name of a function as a string */
79 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
80
0e5921e8
ZW
81 /* C++ */
82 RID_BOOL, RID_WCHAR, RID_CLASS,
83 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
84 RID_TEMPLATE, RID_NULL, RID_CATCH,
85 RID_DELETE, RID_FALSE, RID_NAMESPACE,
263ee052
MM
86 RID_NEW, RID_OFFSETOF, RID_OPERATOR,
87 RID_THIS, RID_THROW, RID_TRUE,
88 RID_TRY, RID_TYPENAME, RID_TYPEID,
89 RID_USING,
0e5921e8
ZW
90
91 /* casts */
92 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
93
40f03658 94 /* Objective-C */
0e5921e8
ZW
95 RID_ID, RID_AT_ENCODE, RID_AT_END,
96 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
97 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
264fa2db
ZL
98 RID_AT_PROTOCOL, RID_AT_SELECTOR,
99 RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
100 RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
101 RID_AT_INTERFACE,
0e5921e8
ZW
102 RID_AT_IMPLEMENTATION,
103
104 RID_MAX,
105
106 RID_FIRST_MODIFIER = RID_STATIC,
b8363a24
ZW
107 RID_LAST_MODIFIER = RID_ONEWAY,
108
109 RID_FIRST_AT = RID_AT_ENCODE,
110 RID_LAST_AT = RID_AT_IMPLEMENTATION,
111 RID_FIRST_PQ = RID_IN,
112 RID_LAST_PQ = RID_ONEWAY
f09f1de5
MM
113};
114
b8363a24
ZW
115#define OBJC_IS_AT_KEYWORD(rid) \
116 ((unsigned int)(rid) >= (unsigned int)RID_FIRST_AT && \
117 (unsigned int)(rid) <= (unsigned int)RID_LAST_AT)
118
119#define OBJC_IS_PQ_KEYWORD(rid) \
120 ((unsigned int)(rid) >= (unsigned int)RID_FIRST_PQ && \
121 (unsigned int)(rid) <= (unsigned int)RID_LAST_PQ)
122
f09f1de5
MM
123/* The elements of `ridpointers' are identifier nodes for the reserved
124 type names and storage classes. It is indexed by a RID_... value. */
17211ab5 125extern GTY ((length ("(int)RID_MAX"))) tree *ridpointers;
f09f1de5 126
7f4edbcb
BS
127/* Standard named or nameless data types of the C compiler. */
128
129enum c_tree_index
130{
7f4edbcb
BS
131 CTI_WCHAR_TYPE,
132 CTI_SIGNED_WCHAR_TYPE,
133 CTI_UNSIGNED_WCHAR_TYPE,
c5ab7f91 134 CTI_WINT_TYPE,
cd732418
JM
135 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
136 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
b15ad712
JM
137 CTI_INTMAX_TYPE,
138 CTI_UINTMAX_TYPE,
7f4edbcb
BS
139 CTI_WIDEST_INT_LIT_TYPE,
140 CTI_WIDEST_UINT_LIT_TYPE,
141
7f4edbcb
BS
142 CTI_CHAR_ARRAY_TYPE,
143 CTI_WCHAR_ARRAY_TYPE,
144 CTI_INT_ARRAY_TYPE,
145 CTI_STRING_TYPE,
146 CTI_CONST_STRING_TYPE,
147
19552aa5 148 /* Type for boolean expressions (bool in C++, int in C). */
de7df9eb
JM
149 CTI_TRUTHVALUE_TYPE,
150 CTI_TRUTHVALUE_TRUE,
151 CTI_TRUTHVALUE_FALSE,
152
7f4edbcb 153 CTI_DEFAULT_FUNCTION_TYPE,
7f4edbcb 154
2ba84f36 155 /* These are not types, but we have to look them up all the time. */
0ba8a114
NS
156 CTI_FUNCTION_NAME_DECL,
157 CTI_PRETTY_FUNCTION_NAME_DECL,
158 CTI_C99_FUNCTION_NAME_DECL,
159 CTI_SAVED_FUNCTION_NAME_DECLS,
160
ae499cce
MM
161 CTI_VOID_ZERO,
162
7f4edbcb
BS
163 CTI_MAX
164};
165
b621a4dd 166#define C_RID_CODE(id) (((struct c_common_identifier *) (id))->node.rid_code)
2a967f3d
NB
167
168/* Identifier part common to the C front ends. Inherits from
169 tree_identifier, despite appearances. */
e2500fed 170struct c_common_identifier GTY(())
2a967f3d
NB
171{
172 struct tree_common common;
17211ab5 173 struct cpp_hashnode node;
2a967f3d
NB
174};
175
7f4edbcb
BS
176#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
177#define signed_wchar_type_node c_global_trees[CTI_SIGNED_WCHAR_TYPE]
178#define unsigned_wchar_type_node c_global_trees[CTI_UNSIGNED_WCHAR_TYPE]
c5ab7f91 179#define wint_type_node c_global_trees[CTI_WINT_TYPE]
cd732418
JM
180#define signed_size_type_node c_global_trees[CTI_SIGNED_SIZE_TYPE]
181#define unsigned_ptrdiff_type_node c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
b15ad712
JM
182#define intmax_type_node c_global_trees[CTI_INTMAX_TYPE]
183#define uintmax_type_node c_global_trees[CTI_UINTMAX_TYPE]
7f4edbcb
BS
184#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
185#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
186
de7df9eb
JM
187#define truthvalue_type_node c_global_trees[CTI_TRUTHVALUE_TYPE]
188#define truthvalue_true_node c_global_trees[CTI_TRUTHVALUE_TRUE]
189#define truthvalue_false_node c_global_trees[CTI_TRUTHVALUE_FALSE]
19552aa5 190
7f4edbcb
BS
191#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
192#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
193#define int_array_type_node c_global_trees[CTI_INT_ARRAY_TYPE]
194#define string_type_node c_global_trees[CTI_STRING_TYPE]
195#define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE]
196
197#define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
7f4edbcb 198
0ba8a114
NS
199#define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL]
200#define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
201#define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
202#define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
63ad61ed 203
ae499cce
MM
204/* A node for `((void) 0)'. */
205#define void_zero_node c_global_trees[CTI_VOID_ZERO]
206
e2500fed 207extern GTY(()) tree c_global_trees[CTI_MAX];
ab76ca54 208
e0a21ab9
KH
209/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
210 tree for size reasons. */
d07605f5
AP
211struct sorted_fields_type GTY(())
212{
213 int len;
214 tree GTY((length ("%h.len"))) elts[1];
215};
216
8f17b5c5
MM
217/* Mark which labels are explicitly declared.
218 These may be shadowed, and may be referenced from nested functions. */
219#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
220
9aa8a1df
NB
221/* Flag strings given by __FUNCTION__ and __PRETTY_FUNCTION__ for a
222 warning if they undergo concatenation. */
223#define C_ARTIFICIAL_STRING_P(NODE) TREE_LANG_FLAG_0 (NODE)
224
ab76ca54
MM
225typedef enum c_language_kind
226{
37fa72e9
NB
227 clk_c = 0, /* C90, C94 or C99 */
228 clk_objc = 1, /* clk_c with ObjC features. */
229 clk_cxx = 2, /* ANSI/ISO C++ */
230 clk_objcxx = 3 /* clk_cxx with ObjC features. */
21c7361e 231}
ab76ca54
MM
232c_language_kind;
233
37fa72e9
NB
234/* To test for a specific language use c_language, defined by each
235 front end. For "ObjC features" or "not C++" use the macros. */
236extern c_language_kind c_language;
237
238#define c_dialect_cxx() (c_language & clk_cxx)
239#define c_dialect_objc() (c_language & clk_objc)
240
ae499cce
MM
241/* Information about a statement tree. */
242
e2500fed 243struct stmt_tree_s GTY(()) {
325c3691
RH
244 /* The current statment list being collected. */
245 tree x_cur_stmt_list;
246
da7d8304 247 /* In C++, Nonzero if we should treat statements as full
ae499cce
MM
248 expressions. In particular, this variable is no-zero if at the
249 end of a statement we should destroy any temporaries created
250 during that statement. Similarly, if, at the end of a block, we
251 should destroy any local variables in this block. Normally, this
da7d8304 252 variable is nonzero, since those are the normal semantics of
ae499cce
MM
253 C++.
254
255 However, in order to represent aggregate initialization code as
256 tree structure, we use statement-expressions. The statements
257 within the statement expression should not result in cleanups
21c7361e 258 being run until the entire enclosing statement is complete.
ae499cce
MM
259
260 This flag has no effect in C. */
21c7361e 261 int stmts_are_full_exprs_p;
ae499cce
MM
262};
263
264typedef struct stmt_tree_s *stmt_tree;
265
266/* Global state pertinent to the current function. Some C dialects
267 extend this structure with additional fields. */
268
e2500fed 269struct c_language_function GTY(()) {
ae499cce
MM
270 /* While we are parsing the function, this contains information
271 about the statement-tree that we are building. */
272 struct stmt_tree_s x_stmt_tree;
273};
274
325c3691
RH
275/* When building a statement-tree, this is the current statment list
276 being collected. It's TREE_CHAIN is a back-pointer to the previous
277 statment list. */
ae499cce 278
325c3691 279#define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list)
8f17b5c5
MM
280
281/* Language-specific hooks. */
282
35b1a6fa 283extern void (*lang_expand_function_end) (void);
8f17b5c5 284
21c7361e
AJ
285/* Callback that determines if it's ok for a function to have no
286 noreturn attribute. */
35b1a6fa
AJ
287extern int (*lang_missing_noreturn_ok_p) (tree);
288
4684cd27
MM
289/* If non-NULL, this function is called after a precompile header file
290 is loaded. */
291extern void (*lang_post_pch_load) (void);
292
f75fbaf7
ZW
293extern void push_file_scope (void);
294extern void pop_file_scope (void);
35b1a6fa 295extern int yyparse (void);
35b1a6fa 296extern stmt_tree current_stmt_tree (void);
325c3691
RH
297extern tree push_stmt_list (void);
298extern tree re_push_stmt_list (tree);
299extern tree pop_stmt_list (tree);
35b1a6fa 300extern tree add_stmt (tree);
325c3691 301extern void push_cleanup (tree, tree, bool);
35b1a6fa
AJ
302
303extern tree walk_stmt_tree (tree *, walk_tree_fn, void *);
3c79fa86 304extern int c_expand_decl (tree);
c1e14513 305
d07605f5
AP
306extern int field_decl_cmp (const void *, const void *);
307extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
308 void *);
84b8b0e0 309extern bool has_c_linkage (tree decl);
17211ab5 310\f
4078b403
NB
311/* Switches common to the C front ends. */
312
aaf93206 313/* Nonzero if prepreprocessing only. */
17211ab5 314
aaf93206
NB
315extern int flag_preprocess_only;
316
264fa2db
ZL
317/* Zero means that faster, ...NonNil variants of objc_msgSend...
318 calls will be used in ObjC; passing nil receivers to such calls
319 will most likely result in crashes. */
320extern int flag_nil_receivers;
321
322/* Nonzero means that we will allow new ObjC exception syntax (@throw,
323 @try, etc.) in source code. */
324extern int flag_objc_exceptions;
325
093c7153
RH
326/* Nonzero means that we generate NeXT setjmp based exceptions. */
327extern int flag_objc_sjlj_exceptions;
328
264fa2db
ZL
329/* Nonzero means that code generation will be altered to support
330 "zero-link" execution. This currently affects ObjC only, but may
331 affect other languages in the future. */
332extern int flag_zero_link;
333
334/* Nonzero means emit an '__OBJC, __image_info' for the current translation
335 unit. It will inform the ObjC runtime that class definition(s) herein
336 contained are to replace one(s) previously loaded. */
337extern int flag_replace_objc_classes;
338
63973df3
NB
339/* Nonzero means don't output line number information. */
340
341extern char flag_no_line_commands;
342
343/* Nonzero causes -E output not to be done, but directives such as
344 #define that have side effects are still obeyed. */
345
346extern char flag_no_output;
347
348/* Nonzero means dump macros in some fashion; contains the 'D', 'M' or
349 'N' of the command line switch. */
350
351extern char flag_dump_macros;
352
353/* Nonzero means pass #include lines through to the output. */
354
355extern char flag_dump_includes;
356
c0d578e6
GK
357/* Nonzero means process PCH files while preprocessing. */
358
359extern bool flag_pch_preprocess;
360
17211ab5
GK
361/* The file name to which we should write a precompiled header, or
362 NULL if no header will be written in this compile. */
363
364extern const char *pch_file;
365
3df89291
NB
366/* Nonzero if an ISO standard was selected. It rejects macros in the
367 user's namespace. */
17211ab5 368
3df89291
NB
369extern int flag_iso;
370
371/* Nonzero if -undef was given. It suppresses target built-in macros
372 and assertions. */
17211ab5 373
3df89291
NB
374extern int flag_undef;
375
4078b403 376/* Nonzero means don't recognize the non-ANSI builtin functions. */
ab76ca54 377
4078b403
NB
378extern int flag_no_builtin;
379
380/* Nonzero means don't recognize the non-ANSI builtin functions.
381 -ansi sets this. */
382
383extern int flag_no_nonansi_builtin;
ab76ca54 384
eaa7c03f
JM
385/* Nonzero means give `double' the same size as `float'. */
386
387extern int flag_short_double;
388
389/* Nonzero means give `wchar_t' the same size as `short'. */
390
391extern int flag_short_wchar;
392
750491fc
RH
393/* Nonzero means allow Microsoft extensions without warnings or errors. */
394extern int flag_ms_extensions;
395
4078b403
NB
396/* Nonzero means don't recognize the keyword `asm'. */
397
398extern int flag_no_asm;
399
400/* Nonzero means give string constants the type `const char *', as mandated
401 by the standard. */
402
403extern int flag_const_strings;
404
4078b403
NB
405/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
406
407extern int flag_signed_bitfields;
408extern int explicit_flag_signed_bitfields;
409
4078b403
NB
410/* Nonzero means warn about deprecated conversion from string constant to
411 `char *'. */
412
413extern int warn_write_strings;
414
05713b80 415/* Warn about #pragma directives that are not recognized. */
4078b403
NB
416
417extern int warn_unknown_pragmas; /* Tri state variable. */
418
4078b403
NB
419/* Warn about format/argument anomalies in calls to formatted I/O functions
420 (*printf, *scanf, strftime, strfmon, etc.). */
ab76ca54
MM
421
422extern int warn_format;
423
b34c7881 424
4078b403 425/* C/ObjC language option variables. */
b34c7881 426
2683ed8d 427
4078b403
NB
428/* Nonzero means allow type mismatches in conditional expressions;
429 just make their values `void'. */
74ff4629 430
4078b403 431extern int flag_cond_mismatch;
6c36d76b 432
eaf299c6 433/* Nonzero means enable C89 Amendment 1 features. */
b8458e3e
JM
434
435extern int flag_isoc94;
436
ab76ca54
MM
437/* Nonzero means use the ISO C99 dialect of C. */
438
439extern int flag_isoc99;
440
6614fd40 441/* Nonzero means that we have builtin functions, and main is an int. */
93e2382f
JM
442
443extern int flag_hosted;
444
4078b403
NB
445/* Warn if main is suspicious. */
446
447extern int warn_main;
448
4078b403
NB
449
450/* ObjC language option variables. */
451
452
453/* Open and close the file for outputting class declarations, if
454 requested (ObjC). */
455
456extern int flag_gen_declaration;
457
458/* Generate code for GNU or NeXT runtime environment. */
459
460extern int flag_next_runtime;
461
462/* Tells the compiler that this is a special run. Do not perform any
463 compiling, instead we are to test some platform dependent features
464 and output a C header file with appropriate definitions. */
465
466extern int print_struct_values;
467
468/* ???. Undocumented. */
469
fd350d24 470extern const char *constant_string_class_name;
4078b403 471
4078b403
NB
472
473/* C++ language option variables. */
474
475
476/* Nonzero means don't recognize any extension keywords. */
477
478extern int flag_no_gnu_keywords;
479
480/* Nonzero means do emit exported implementations of functions even if
481 they can be inlined. */
482
483extern int flag_implement_inlines;
484
4078b403
NB
485/* Nonzero means that implicit instantiations will be emitted if needed. */
486
487extern int flag_implicit_templates;
488
489/* Nonzero means that implicit instantiations of inline templates will be
490 emitted if needed, even if instantiations of non-inline templates
491 aren't. */
492
493extern int flag_implicit_inline_templates;
494
495/* Nonzero means generate separate instantiation control files and
496 juggle them at link time. */
497
498extern int flag_use_repository;
499
500/* Nonzero if we want to issue diagnostics that the standard says are not
501 required. */
502
503extern int flag_optional_diags;
504
505/* Nonzero means we should attempt to elide constructors when possible. */
506
507extern int flag_elide_constructors;
508
509/* Nonzero means that member functions defined in class scope are
510 inline by default. */
511
512extern int flag_default_inline;
513
514/* Controls whether compiler generates 'type descriptor' that give
515 run-time type information. */
516
517extern int flag_rtti;
518
519/* Nonzero if we want to conserve space in the .o files. We do this
520 by putting uninitialized data and runtime initialized data into
521 .common instead of .data at the expense of not flagging multiple
522 definitions. */
523
524extern int flag_conserve_space;
525
526/* Nonzero if we want to obey access control semantics. */
527
528extern int flag_access_control;
529
530/* Nonzero if we want to check the return value of new and avoid calling
531 constructors if it is a null pointer. */
532
533extern int flag_check_new;
534
535/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
536 initialization variables.
537 0: Old rules, set by -fno-for-scope.
538 2: New ISO rules, set by -ffor-scope.
539 1: Try to implement new ISO rules, but with backup compatibility
540 (and warnings). This is the default, for now. */
541
542extern int flag_new_for_scope;
543
544/* Nonzero if we want to emit defined symbols with common-like linkage as
545 weak symbols where possible, in order to conform to C++ semantics.
546 Otherwise, emit them as local symbols. */
547
548extern int flag_weak;
549
b20d9f0c
AO
550/* 0 means we want the preprocessor to not emit line directives for
551 the current working directory. 1 means we want it to do it. -1
552 means we should decide depending on whether debugging information
553 is being emitted or not. */
554
555extern int flag_working_directory;
556
4078b403
NB
557/* Nonzero to use __cxa_atexit, rather than atexit, to register
558 destructors for local statics and global objects. */
559
560extern int flag_use_cxa_atexit;
561
4078b403
NB
562/* Nonzero means make the default pedwarns warnings instead of errors.
563 The value of this flag is ignored if -pedantic is specified. */
564
565extern int flag_permissive;
566
567/* Nonzero means to implement standard semantics for exception
568 specifications, calling unexpected if an exception is thrown that
569 doesn't match the specification. Zero means to treat them as
570 assertions and optimize accordingly, but not check them. */
571
572extern int flag_enforce_eh_specs;
573
40aac948
JM
574/* Nonzero (the default) means to generate thread-safe code for
575 initializing local statics. */
576
577extern int flag_threadsafe_statics;
578
4078b403
NB
579/* Nonzero means warn about implicit declarations. */
580
581extern int warn_implicit;
582
4078b403
NB
583/* Maximum template instantiation depth. This limit is rather
584 arbitrary, but it exists to limit the time it takes to notice
585 infinite template instantiations. */
586
587extern int max_tinst_depth;
ab76ca54 588
25587e40
AO
589/* Nonzero means the expression being parsed will never be evaluated.
590 This is a count, since unevaluated expressions can nest. */
591
592extern int skip_evaluation;
593
ab76ca54
MM
594/* C types are partitioned into three subsets: object, function, and
595 incomplete types. */
596#define C_TYPE_OBJECT_P(type) \
597 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
598
599#define C_TYPE_INCOMPLETE_P(type) \
600 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
601
602#define C_TYPE_FUNCTION_P(type) \
603 (TREE_CODE (type) == FUNCTION_TYPE)
604
605/* For convenience we define a single macro to identify the class of
606 object or incomplete types. */
607#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
608 (!C_TYPE_FUNCTION_P (type))
609
349ae713
NB
610/* Attribute table common to the C front ends. */
611extern const struct attribute_spec c_common_attribute_table[];
612extern const struct attribute_spec c_common_format_attribute_table[];
613
0ba8a114 614/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
2ce07e2d
NS
615 ID is the identifier to use, NAME is the string.
616 TYPE_DEP indicates whether it depends on type of the function or not
617 (i.e. __PRETTY_FUNCTION__). */
618
35b1a6fa
AJ
619extern tree (*make_fname_decl) (tree, int);
620
621extern tree identifier_global_value (tree);
622extern void record_builtin_type (enum rid, const char *, tree);
623extern tree build_void_list_node (void);
624extern void start_fname_decls (void);
625extern void finish_fname_decls (void);
626extern const char *fname_as_string (int);
627extern tree fname_decl (unsigned, tree);
35b1a6fa
AJ
628
629extern void check_function_arguments (tree, tree);
630extern void check_function_arguments_recurse (void (*)
631 (void *, tree,
632 unsigned HOST_WIDE_INT),
633 void *, tree,
634 unsigned HOST_WIDE_INT);
99801548 635extern void check_function_format (tree, tree);
35b1a6fa
AJ
636extern void set_Wformat (int);
637extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
638extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
2772ef3e 639extern int c_common_handle_option (size_t code, const char *arg, int value);
cb66e385 640extern bool c_common_missing_argument (const char *opt, size_t code);
35b1a6fa
AJ
641extern tree c_common_type_for_mode (enum machine_mode, int);
642extern tree c_common_type_for_size (unsigned int, int);
643extern tree c_common_unsigned_type (tree);
644extern tree c_common_signed_type (tree);
645extern tree c_common_signed_or_unsigned_type (int, tree);
646extern tree c_common_truthvalue_conversion (tree);
647extern void c_apply_type_quals_to_decl (int, tree);
648extern tree c_sizeof_or_alignof_type (tree, enum tree_code, int);
649extern tree c_alignof_expr (tree);
7f4edbcb
BS
650/* Print an error message for invalid operands to arith operation CODE.
651 NOP_EXPR is used as a special case (see truthvalue_conversion). */
35b1a6fa 652extern void binary_op_error (enum tree_code);
35b1a6fa 653extern tree fix_string_type (tree);
b84a3874 654struct varray_head_tag;
35b1a6fa
AJ
655extern void constant_expression_warning (tree);
656extern tree convert_and_check (tree, tree);
657extern void overflow_warning (tree);
658extern void unsigned_conversion_warning (tree, tree);
b2ca3702 659extern bool c_determine_visibility (tree);
ab76ca54 660
ea793912
GDR
661#define c_sizeof(T) c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 1)
662#define c_alignof(T) c_sizeof_or_alignof_type (T, ALIGNOF_EXPR, 1)
7f4edbcb
BS
663
664/* Subroutine of build_binary_op, used for comparison operations.
665 See if the operands have both been converted from subword integer types
666 and, if so, perhaps change them both back to their original type. */
35b1a6fa 667extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
7f4edbcb 668
35b1a6fa
AJ
669extern tree pointer_int_sum (enum tree_code, tree, tree);
670extern unsigned int min_precision (tree, int);
50e60bc3
ZW
671
672/* Add qualifiers to a type, in the fashion for C. */
35b1a6fa 673extern tree c_build_qualified_type (tree, int);
50e60bc3 674
7f4edbcb
BS
675/* Build tree nodes and builtin functions common to both C and C++ language
676 frontends. */
35b1a6fa 677extern void c_common_nodes_and_builtins (void);
d3707adb 678
35b1a6fa 679extern void disable_builtin_function (const char *);
7d14c755 680
35b1a6fa 681extern tree build_va_arg (tree, tree);
7e8176d7 682
b86f6cd9 683extern unsigned int c_common_init_options (unsigned int, const char **);
35b1a6fa
AJ
684extern bool c_common_post_options (const char **);
685extern bool c_common_init (void);
686extern void c_common_finish (void);
687extern void c_common_parse_file (int);
688extern HOST_WIDE_INT c_common_get_alias_set (tree);
9649812a 689extern void c_register_builtin_type (tree, const char*);
35b1a6fa
AJ
690extern bool c_promoting_integer_type_p (tree);
691extern int self_promoting_args_p (tree);
692extern tree strip_array_types (tree);
12ea3302 693extern tree strip_pointer_operator (tree);
d7e7759d 694
d1bd0ded
GK
695/* This is the basic parsing function. */
696extern void c_parse_file (void);
697/* This is misnamed, it actually performs end-of-compilation processing. */
698extern void finish_file (void);
699
ae499cce
MM
700/* These macros provide convenient access to the various _STMT nodes. */
701
702/* Nonzero if this statement should be considered a full-expression,
703 i.e., if temporaries created during this statement should have
704 their destructors run at the end of this statement. (In C, this
705 will always be false, since there are no destructors.) */
706#define STMT_IS_FULL_EXPR_P(NODE) TREE_LANG_FLAG_1 ((NODE))
35b1567d 707
325c3691
RH
708/* Nonzero if a given STATEMENT_LIST represents the outermost binding
709 if a statement expression. */
710#define STATEMENT_LIST_STMT_EXPR(NODE) \
711 TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
174283a3
RH
712
713/* Nonzero if a label has been added to the statement list. */
714#define STATEMENT_LIST_HAS_LABEL(NODE) \
715 TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
325c3691 716
ff7cc307 717/* WHILE_STMT accessors. These give access to the condition of the
2ba84f36 718 while statement and the body of the while statement, respectively. */
d7e7759d
BC
719#define WHILE_COND(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 0)
720#define WHILE_BODY(NODE) TREE_OPERAND (WHILE_STMT_CHECK (NODE), 1)
35b1567d
BC
721
722/* DO_STMT accessors. These give access to the condition of the do
2ba84f36 723 statement and the body of the do statement, respectively. */
d7e7759d
BC
724#define DO_COND(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 0)
725#define DO_BODY(NODE) TREE_OPERAND (DO_STMT_CHECK (NODE), 1)
35b1567d 726
35b1567d 727/* EXPR_STMT accessor. This gives the expression associated with an
2ba84f36 728 expression statement. */
d7e7759d 729#define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
35b1567d
BC
730
731/* FOR_STMT accessors. These give access to the init statement,
732 condition, update expression, and body of the for statement,
2ba84f36 733 respectively. */
d7e7759d
BC
734#define FOR_INIT_STMT(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 0)
735#define FOR_COND(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 1)
736#define FOR_EXPR(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 2)
737#define FOR_BODY(NODE) TREE_OPERAND (FOR_STMT_CHECK (NODE), 3)
35b1567d 738
6f9fdf4d 739#define SWITCH_TYPE(NODE) TREE_OPERAND (SWITCH_STMT_CHECK (NODE), 2)
35b1567d 740
2ba84f36 741/* STMT_EXPR accessor. */
d7e7759d 742#define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
35b1567d 743
b2123dc0
MM
744/* Nonzero if this statement-expression does not have an associated scope. */
745#define STMT_EXPR_NO_SCOPE(NODE) \
746 TREE_LANG_FLAG_0 (STMT_EXPR_CHECK (NODE))
747
8d37a5c0
JM
748/* COMPOUND_LITERAL_EXPR accessors. */
749#define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \
db3acfa5 750 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
8d37a5c0 751#define COMPOUND_LITERAL_EXPR_DECL(NODE) \
350fae66 752 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE))
db3acfa5 753
c7d87c0a
BC
754#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
755
756enum c_tree_code {
757 C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
758#include "c-common.def"
759 LAST_C_TREE_CODE
760};
761
762#undef DEFTREECODE
763
009ed910 764#define c_common_stmt_codes \
350fae66 765 EXPR_STMT, FOR_STMT, \
5088b058 766 WHILE_STMT, DO_STMT, \
8c161995 767 BREAK_STMT, CONTINUE_STMT, SWITCH_STMT
009ed910
SB
768
769/* TRUE if a code represents a statement. The front end init
770 langhook should take care of initialization of this array. */
771extern bool statement_code_p[MAX_TREE_CODES];
772
773#define STATEMENT_CODE_P(CODE) statement_code_p[(int) (CODE)]
774
775#define INIT_STATEMENT_CODES(STMT_CODES) \
776 do { \
777 unsigned int i; \
778 memset (&statement_code_p, 0, sizeof (statement_code_p)); \
779 for (i = 0; i < ARRAY_SIZE (STMT_CODES); i++) \
780 statement_code_p[STMT_CODES[i]] = true; \
781 } while (0)
782
35b1a6fa
AJ
783extern int stmts_are_full_exprs_p (void);
784extern int anon_aggr_type_p (tree);
f2c5f623
BC
785
786/* For a VAR_DECL that is an anonymous union, these are the various
787 sub-variables that make up the anonymous union. */
788#define DECL_ANON_UNION_ELEMS(NODE) DECL_ARGUMENTS ((NODE))
789
0a7394bc
MM
790/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
791#define DECL_C_BIT_FIELD(NODE) \
792 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
793#define SET_DECL_C_BIT_FIELD(NODE) \
794 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
795#define CLEAR_DECL_C_BIT_FIELD(NODE) \
796 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
797
35b1a6fa 798extern void emit_local_var (tree);
35b1a6fa
AJ
799extern tree do_case (tree, tree);
800extern tree build_stmt (enum tree_code, ...);
801extern tree build_case_label (tree, tree, tree);
802extern tree build_continue_stmt (void);
803extern tree build_break_stmt (void);
f2c5f623 804
ab76ca54
MM
805/* These functions must be defined by each front-end which implements
806 a variant of the C language. They are used in c-common.c. */
807
35b1a6fa
AJ
808extern tree build_unary_op (enum tree_code, tree, int);
809extern tree build_binary_op (enum tree_code, tree, tree, int);
810extern int lvalue_p (tree);
811extern tree default_conversion (tree);
ab76ca54
MM
812
813/* Given two integer or real types, return the type for their sum.
814 Given two compatible ANSI C types, returns the merged type. */
815
35b1a6fa 816extern tree common_type (tree, tree);
44835fdd 817
35b1a6fa 818extern tree decl_constant_value (tree);
56cb9733 819
19552aa5 820/* Handle increment and decrement of boolean types. */
35b1a6fa 821extern tree boolean_increment (enum tree_code, tree);
19552aa5 822
0e5921e8
ZW
823/* Hook currently used only by the C++ front end to reset internal state
824 after entering or leaving a header file. */
35b1a6fa 825extern void extract_interface_info (void);
0e5921e8 826
35b1a6fa 827extern int case_compare (splay_tree_key, splay_tree_key);
8f17b5c5 828
a6c0a76c 829extern tree c_add_case_label (splay_tree, tree, tree, tree, tree);
8f17b5c5 830
6de9cd9a
DN
831extern void c_do_switch_warnings (splay_tree, tree);
832
35b1a6fa 833extern tree build_function_call (tree, tree);
c70eaeaf 834
35b1a6fa 835extern tree finish_label_address_expr (tree);
15b732b2
NB
836
837/* Same function prototype, but the C and C++ front ends have
838 different implementations. Used in c-common.c. */
35b1a6fa 839extern tree lookup_label (tree);
15b732b2 840
cc27e657
PB
841extern int vector_types_convertible_p (tree t1, tree t2);
842
0fab64a3 843extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
8f17b5c5 844
525c6bf5 845extern tree c_staticp (tree);
db3acfa5 846
35b1a6fa 847extern int c_common_unsafe_for_reeval (tree);
3fe30ff6 848
35b1a6fa 849extern void init_c_lex (void);
81a75f0f 850
35b1a6fa 851extern void c_cpp_builtins (cpp_reader *);
76c3e73e 852
731e8b38
MM
853/* Positive if an implicit `extern "C"' scope has just been entered;
854 negative if such a scope has just been exited. */
7876228d 855extern GTY(()) int pending_lang_change;
731e8b38 856
0e5921e8
ZW
857/* Information recorded about each file examined during compilation. */
858
859struct c_fileinfo
860{
861 int time; /* Time spent in the file. */
862 short interface_only; /* Flags - used only by C++ */
863 short interface_unknown;
864};
865
35b1a6fa
AJ
866struct c_fileinfo *get_fileinfo (const char *);
867extern void dump_time_statistics (void);
868
869extern bool c_dump_tree (void *, tree);
870
6de9cd9a
DN
871extern void c_warn_unused_result (tree *);
872
3a5b9284
RH
873extern void verify_sequence_points (tree);
874
ee8a6a3e
RH
875extern tree fold_offsetof (tree);
876
7c34ced1 877/* In c-gimplify.c */
6de9cd9a 878extern void c_genericize (tree);
7c34ced1 879extern int c_gimplify_expr (tree *, tree *, tree *);
325c3691 880extern tree c_build_bind_expr (tree, tree);
6de9cd9a 881
c0d578e6 882/* In c-pch.c */
35b1a6fa
AJ
883extern void pch_init (void);
884extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
885extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
886 const char *orig);
887extern void c_common_write_pch (void);
18c81520 888extern void c_common_no_more_pch (void);
c0d578e6
GK
889extern void c_common_pch_pragma (cpp_reader *pfile);
890
35b1a6fa
AJ
891extern void builtin_define_with_value (const char *, const char *, int);
892extern void c_stddef_cpp_builtins (void);
893extern void fe_file_change (const struct line_map *);
4bb8ca28 894extern void c_parse_error (const char *, enum cpp_ttype, tree);
9d10c9a9 895
e5a002e3
ZL
896/* Objective-C / Objective-C++ entry points. */
897
898/* The following ObjC/ObjC++ functions are called by the C and/or C++
899 front-ends; they all must have corresponding stubs in stub-objc.c. */
bc095846 900extern tree objc_is_class_name (tree);
264fa2db
ZL
901extern tree objc_is_object_ptr (tree);
902extern void objc_check_decl (tree);
e5a002e3 903extern int objc_is_reserved_word (tree);
264fa2db
ZL
904extern int objc_comptypes (tree, tree, int);
905extern tree objc_message_selector (void);
bc095846 906extern tree objc_lookup_ivar (tree);
325c3691 907extern void objc_clear_super_receiver (void);
7a3ea201 908extern int objc_is_public (tree, tree);
a45bcfb2
ZL
909extern tree objc_is_id (tree);
910extern void objc_declare_alias (tree, tree);
911extern void objc_declare_class (tree);
912extern void objc_declare_protocols (tree);
913extern tree objc_build_message_expr (tree);
914extern tree objc_finish_message_expr (tree, tree, tree);
915extern tree objc_build_selector_expr (tree);
916extern tree objc_build_protocol_expr (tree);
917extern tree objc_build_encode_expr (tree);
918extern tree objc_build_string_object (tree);
919extern tree objc_get_protocol_qualified_type (tree, tree);
920extern tree objc_get_class_reference (tree);
921extern tree objc_get_class_ivars (tree);
922extern void objc_start_class_interface (tree, tree, tree);
923extern void objc_start_category_interface (tree, tree, tree);
924extern void objc_start_protocol (tree, tree);
925extern void objc_continue_interface (void);
926extern void objc_finish_interface (void);
927extern void objc_start_class_implementation (tree, tree);
928extern void objc_start_category_implementation (tree, tree);
929extern void objc_continue_implementation (void);
930extern void objc_finish_implementation (void);
931extern void objc_set_visibility (int);
932extern void objc_set_method_type (enum tree_code);
933extern tree objc_build_method_signature (tree, tree, tree);
934extern void objc_add_method_declaration (tree);
935extern void objc_start_method_definition (tree);
936extern void objc_finish_method_definition (tree);
937extern void objc_add_instance_variable (tree);
938extern tree objc_build_keyword_decl (tree, tree, tree);
939extern tree objc_build_throw_stmt (tree);
940extern void objc_begin_try_stmt (location_t, tree);
941extern void objc_finish_try_stmt (void);
942extern void objc_begin_catch_clause (tree);
943extern void objc_finish_catch_clause (void);
944extern void objc_build_finally_clause (location_t, tree);
945extern void objc_build_synchronized (location_t, tree, tree);
946extern int objc_static_init_needed_p (void);
947extern tree objc_generate_static_init_call (tree);
264fa2db 948
e5a002e3
ZL
949/* The following are provided by the C and C++ front-ends, and called by
950 ObjC/ObjC++. */
bc095846 951extern void *objc_get_current_scope (void);
e5a002e3
ZL
952extern void objc_mark_locals_volatile (void *);
953
9d10c9a9 954/* In c-ppoutput.c */
35b1a6fa
AJ
955extern void init_pp_output (FILE *);
956extern void preprocess_file (cpp_reader *);
957extern void pp_file_change (const struct line_map *);
8e9ea4d7 958extern void pp_dir_change (cpp_reader *, const char *);
17211ab5 959
88657302 960#endif /* ! GCC_C_COMMON_H */