]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-common.h
trans-array.c (gfc_conv_descriptor_data_get): Rename from gfc_conv_descriptor_data.
[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,
35fd3193 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 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)
f2c5f623 33 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
325c3691 34 STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
6de9cd9a 35 2: unused
174283a3 36 3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
325c3691 37 4: unused
f2c5f623
BC
38*/
39
0e5921e8 40/* Reserved identifiers. This is the union of all the keywords for C,
40f03658 41 C++, and Objective-C. All the type modifiers have to be in one
0e5921e8
ZW
42 block at the beginning, because they are used as mask bits. There
43 are 27 type modifiers; if we add many more we will have to redesign
44 the mask mechanism. */
f09f1de5
MM
45
46enum rid
47{
0e5921e8 48 /* Modifiers: */
2ba84f36 49 /* C, in empirical order of frequency. */
0e5921e8
ZW
50 RID_STATIC = 0,
51 RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
52 RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
53 RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
54
55 /* C extensions */
66804d9e 56 RID_COMPLEX, RID_THREAD,
0e5921e8
ZW
57
58 /* C++ */
59 RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
60
61 /* ObjC */
b8363a24 62 RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
0e5921e8
ZW
63
64 /* C */
65 RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
66 RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
67 RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
68 RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
69 RID_SIZEOF,
70
71 /* C extensions */
72 RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
da5b307a
JM
73 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR,
74 RID_TYPES_COMPATIBLE_P,
0e5921e8 75
0ba8a114
NS
76 /* Too many ways of getting the name of a function as a string */
77 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
78
0e5921e8
ZW
79 /* C++ */
80 RID_BOOL, RID_WCHAR, RID_CLASS,
81 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
82 RID_TEMPLATE, RID_NULL, RID_CATCH,
83 RID_DELETE, RID_FALSE, RID_NAMESPACE,
263ee052
MM
84 RID_NEW, RID_OFFSETOF, RID_OPERATOR,
85 RID_THIS, RID_THROW, RID_TRUE,
86 RID_TRY, RID_TYPENAME, RID_TYPEID,
87 RID_USING,
0e5921e8
ZW
88
89 /* casts */
90 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
91
40f03658 92 /* Objective-C */
3a3589b4 93 RID_AT_ENCODE, RID_AT_END,
0e5921e8
ZW
94 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
95 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
264fa2db
ZL
96 RID_AT_PROTOCOL, RID_AT_SELECTOR,
97 RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
98 RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
99 RID_AT_INTERFACE,
0e5921e8
ZW
100 RID_AT_IMPLEMENTATION,
101
102 RID_MAX,
103
104 RID_FIRST_MODIFIER = RID_STATIC,
b8363a24
ZW
105 RID_LAST_MODIFIER = RID_ONEWAY,
106
107 RID_FIRST_AT = RID_AT_ENCODE,
108 RID_LAST_AT = RID_AT_IMPLEMENTATION,
109 RID_FIRST_PQ = RID_IN,
110 RID_LAST_PQ = RID_ONEWAY
f09f1de5
MM
111};
112
b8363a24 113#define OBJC_IS_AT_KEYWORD(rid) \
3f75a254
JM
114 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
115 (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
b8363a24
ZW
116
117#define OBJC_IS_PQ_KEYWORD(rid) \
3f75a254
JM
118 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
119 (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
b8363a24 120
f09f1de5
MM
121/* The elements of `ridpointers' are identifier nodes for the reserved
122 type names and storage classes. It is indexed by a RID_... value. */
3f75a254 123extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
f09f1de5 124
7f4edbcb
BS
125/* Standard named or nameless data types of the C compiler. */
126
127enum c_tree_index
128{
7f4edbcb
BS
129 CTI_WCHAR_TYPE,
130 CTI_SIGNED_WCHAR_TYPE,
131 CTI_UNSIGNED_WCHAR_TYPE,
c5ab7f91 132 CTI_WINT_TYPE,
cd732418
JM
133 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
134 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
b15ad712
JM
135 CTI_INTMAX_TYPE,
136 CTI_UINTMAX_TYPE,
7f4edbcb
BS
137 CTI_WIDEST_INT_LIT_TYPE,
138 CTI_WIDEST_UINT_LIT_TYPE,
139
7f4edbcb
BS
140 CTI_CHAR_ARRAY_TYPE,
141 CTI_WCHAR_ARRAY_TYPE,
142 CTI_INT_ARRAY_TYPE,
143 CTI_STRING_TYPE,
144 CTI_CONST_STRING_TYPE,
145
19552aa5 146 /* Type for boolean expressions (bool in C++, int in C). */
de7df9eb
JM
147 CTI_TRUTHVALUE_TYPE,
148 CTI_TRUTHVALUE_TRUE,
149 CTI_TRUTHVALUE_FALSE,
150
7f4edbcb 151 CTI_DEFAULT_FUNCTION_TYPE,
7f4edbcb 152
2ba84f36 153 /* These are not types, but we have to look them up all the time. */
0ba8a114
NS
154 CTI_FUNCTION_NAME_DECL,
155 CTI_PRETTY_FUNCTION_NAME_DECL,
156 CTI_C99_FUNCTION_NAME_DECL,
157 CTI_SAVED_FUNCTION_NAME_DECLS,
158
ae499cce
MM
159 CTI_VOID_ZERO,
160
b2f97e4a
MM
161 CTI_NULL,
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
b2f97e4a
MM
207/* The node for C++ `__null'. */
208#define null_node c_global_trees[CTI_NULL]
209
e2500fed 210extern GTY(()) tree c_global_trees[CTI_MAX];
ab76ca54 211
e0a21ab9
KH
212/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
213 tree for size reasons. */
d07605f5
AP
214struct sorted_fields_type GTY(())
215{
216 int len;
217 tree GTY((length ("%h.len"))) elts[1];
218};
219
8f17b5c5
MM
220/* Mark which labels are explicitly declared.
221 These may be shadowed, and may be referenced from nested functions. */
222#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
223
ab76ca54
MM
224typedef enum c_language_kind
225{
37fa72e9
NB
226 clk_c = 0, /* C90, C94 or C99 */
227 clk_objc = 1, /* clk_c with ObjC features. */
228 clk_cxx = 2, /* ANSI/ISO C++ */
229 clk_objcxx = 3 /* clk_cxx with ObjC features. */
21c7361e 230}
ab76ca54
MM
231c_language_kind;
232
37fa72e9
NB
233/* To test for a specific language use c_language, defined by each
234 front end. For "ObjC features" or "not C++" use the macros. */
235extern c_language_kind c_language;
236
237#define c_dialect_cxx() (c_language & clk_cxx)
238#define c_dialect_objc() (c_language & clk_objc)
239
ae499cce
MM
240/* Information about a statement tree. */
241
e2500fed 242struct stmt_tree_s GTY(()) {
35fd3193 243 /* The current statement list being collected. */
325c3691
RH
244 tree x_cur_stmt_list;
245
da7d8304 246 /* In C++, Nonzero if we should treat statements as full
ae499cce
MM
247 expressions. In particular, this variable is no-zero if at the
248 end of a statement we should destroy any temporaries created
249 during that statement. Similarly, if, at the end of a block, we
250 should destroy any local variables in this block. Normally, this
da7d8304 251 variable is nonzero, since those are the normal semantics of
ae499cce
MM
252 C++.
253
254 However, in order to represent aggregate initialization code as
255 tree structure, we use statement-expressions. The statements
256 within the statement expression should not result in cleanups
21c7361e 257 being run until the entire enclosing statement is complete.
ae499cce
MM
258
259 This flag has no effect in C. */
21c7361e 260 int stmts_are_full_exprs_p;
ae499cce
MM
261};
262
263typedef struct stmt_tree_s *stmt_tree;
264
265/* Global state pertinent to the current function. Some C dialects
266 extend this structure with additional fields. */
267
e2500fed 268struct c_language_function GTY(()) {
ae499cce
MM
269 /* While we are parsing the function, this contains information
270 about the statement-tree that we are building. */
271 struct stmt_tree_s x_stmt_tree;
272};
273
35fd3193 274/* When building a statement-tree, this is the current statement list
325c3691 275 being collected. It's TREE_CHAIN is a back-pointer to the previous
35fd3193 276 statement list. */
ae499cce 277
325c3691 278#define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list)
8f17b5c5
MM
279
280/* Language-specific hooks. */
281
21c7361e
AJ
282/* Callback that determines if it's ok for a function to have no
283 noreturn attribute. */
35b1a6fa
AJ
284extern int (*lang_missing_noreturn_ok_p) (tree);
285
4684cd27
MM
286/* If non-NULL, this function is called after a precompile header file
287 is loaded. */
288extern void (*lang_post_pch_load) (void);
289
f75fbaf7
ZW
290extern void push_file_scope (void);
291extern void pop_file_scope (void);
35b1a6fa 292extern int yyparse (void);
35b1a6fa 293extern stmt_tree current_stmt_tree (void);
325c3691 294extern tree push_stmt_list (void);
325c3691 295extern tree pop_stmt_list (tree);
35b1a6fa 296extern tree add_stmt (tree);
325c3691 297extern void push_cleanup (tree, tree, bool);
35b1a6fa 298
3c79fa86 299extern int c_expand_decl (tree);
c1e14513 300
d07605f5
AP
301extern int field_decl_cmp (const void *, const void *);
302extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
303 void *);
84b8b0e0 304extern bool has_c_linkage (tree decl);
17211ab5 305\f
4078b403
NB
306/* Switches common to the C front ends. */
307
aaf93206 308/* Nonzero if prepreprocessing only. */
17211ab5 309
aaf93206
NB
310extern int flag_preprocess_only;
311
264fa2db
ZL
312/* Zero means that faster, ...NonNil variants of objc_msgSend...
313 calls will be used in ObjC; passing nil receivers to such calls
314 will most likely result in crashes. */
315extern int flag_nil_receivers;
316
317/* Nonzero means that we will allow new ObjC exception syntax (@throw,
318 @try, etc.) in source code. */
319extern int flag_objc_exceptions;
320
093c7153
RH
321/* Nonzero means that we generate NeXT setjmp based exceptions. */
322extern int flag_objc_sjlj_exceptions;
323
264fa2db
ZL
324/* Nonzero means that code generation will be altered to support
325 "zero-link" execution. This currently affects ObjC only, but may
326 affect other languages in the future. */
327extern int flag_zero_link;
328
329/* Nonzero means emit an '__OBJC, __image_info' for the current translation
330 unit. It will inform the ObjC runtime that class definition(s) herein
331 contained are to replace one(s) previously loaded. */
332extern int flag_replace_objc_classes;
333
63973df3
NB
334/* Nonzero means don't output line number information. */
335
336extern char flag_no_line_commands;
337
338/* Nonzero causes -E output not to be done, but directives such as
339 #define that have side effects are still obeyed. */
340
341extern char flag_no_output;
342
343/* Nonzero means dump macros in some fashion; contains the 'D', 'M' or
344 'N' of the command line switch. */
345
346extern char flag_dump_macros;
347
348/* Nonzero means pass #include lines through to the output. */
349
350extern char flag_dump_includes;
351
c0d578e6
GK
352/* Nonzero means process PCH files while preprocessing. */
353
354extern bool flag_pch_preprocess;
355
17211ab5
GK
356/* The file name to which we should write a precompiled header, or
357 NULL if no header will be written in this compile. */
358
359extern const char *pch_file;
360
3df89291
NB
361/* Nonzero if an ISO standard was selected. It rejects macros in the
362 user's namespace. */
17211ab5 363
3df89291
NB
364extern int flag_iso;
365
366/* Nonzero if -undef was given. It suppresses target built-in macros
367 and assertions. */
17211ab5 368
3df89291
NB
369extern int flag_undef;
370
4078b403 371/* Nonzero means don't recognize the non-ANSI builtin functions. */
ab76ca54 372
4078b403
NB
373extern int flag_no_builtin;
374
375/* Nonzero means don't recognize the non-ANSI builtin functions.
376 -ansi sets this. */
377
378extern int flag_no_nonansi_builtin;
ab76ca54 379
eaa7c03f
JM
380/* Nonzero means give `double' the same size as `float'. */
381
382extern int flag_short_double;
383
384/* Nonzero means give `wchar_t' the same size as `short'. */
385
386extern int flag_short_wchar;
387
750491fc
RH
388/* Nonzero means allow Microsoft extensions without warnings or errors. */
389extern int flag_ms_extensions;
390
4078b403
NB
391/* Nonzero means don't recognize the keyword `asm'. */
392
393extern int flag_no_asm;
394
395/* Nonzero means give string constants the type `const char *', as mandated
396 by the standard. */
397
398extern int flag_const_strings;
399
4078b403
NB
400/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
401
402extern int flag_signed_bitfields;
4078b403 403
4078b403
NB
404/* Nonzero means warn about deprecated conversion from string constant to
405 `char *'. */
406
407extern int warn_write_strings;
408
05713b80 409/* Warn about #pragma directives that are not recognized. */
4078b403
NB
410
411extern int warn_unknown_pragmas; /* Tri state variable. */
412
4078b403
NB
413/* Warn about format/argument anomalies in calls to formatted I/O functions
414 (*printf, *scanf, strftime, strfmon, etc.). */
ab76ca54
MM
415
416extern int warn_format;
417
b34c7881 418
4078b403 419/* C/ObjC language option variables. */
b34c7881 420
2683ed8d 421
4078b403
NB
422/* Nonzero means allow type mismatches in conditional expressions;
423 just make their values `void'. */
74ff4629 424
4078b403 425extern int flag_cond_mismatch;
6c36d76b 426
eaf299c6 427/* Nonzero means enable C89 Amendment 1 features. */
b8458e3e
JM
428
429extern int flag_isoc94;
430
ab76ca54
MM
431/* Nonzero means use the ISO C99 dialect of C. */
432
433extern int flag_isoc99;
434
6614fd40 435/* Nonzero means that we have builtin functions, and main is an int. */
93e2382f
JM
436
437extern int flag_hosted;
438
4078b403
NB
439/* Warn if main is suspicious. */
440
441extern int warn_main;
442
4078b403
NB
443
444/* ObjC language option variables. */
445
446
447/* Open and close the file for outputting class declarations, if
448 requested (ObjC). */
449
450extern int flag_gen_declaration;
451
452/* Generate code for GNU or NeXT runtime environment. */
453
454extern int flag_next_runtime;
455
456/* Tells the compiler that this is a special run. Do not perform any
457 compiling, instead we are to test some platform dependent features
458 and output a C header file with appropriate definitions. */
459
460extern int print_struct_values;
461
462/* ???. Undocumented. */
463
fd350d24 464extern const char *constant_string_class_name;
4078b403 465
4078b403
NB
466
467/* C++ language option variables. */
468
469
470/* Nonzero means don't recognize any extension keywords. */
471
472extern int flag_no_gnu_keywords;
473
474/* Nonzero means do emit exported implementations of functions even if
475 they can be inlined. */
476
477extern int flag_implement_inlines;
478
4078b403
NB
479/* Nonzero means that implicit instantiations will be emitted if needed. */
480
481extern int flag_implicit_templates;
482
483/* Nonzero means that implicit instantiations of inline templates will be
484 emitted if needed, even if instantiations of non-inline templates
485 aren't. */
486
487extern int flag_implicit_inline_templates;
488
489/* Nonzero means generate separate instantiation control files and
490 juggle them at link time. */
491
492extern int flag_use_repository;
493
494/* Nonzero if we want to issue diagnostics that the standard says are not
495 required. */
496
497extern int flag_optional_diags;
498
499/* Nonzero means we should attempt to elide constructors when possible. */
500
501extern int flag_elide_constructors;
502
503/* Nonzero means that member functions defined in class scope are
504 inline by default. */
505
506extern int flag_default_inline;
507
508/* Controls whether compiler generates 'type descriptor' that give
509 run-time type information. */
510
511extern int flag_rtti;
512
513/* Nonzero if we want to conserve space in the .o files. We do this
514 by putting uninitialized data and runtime initialized data into
515 .common instead of .data at the expense of not flagging multiple
516 definitions. */
517
518extern int flag_conserve_space;
519
520/* Nonzero if we want to obey access control semantics. */
521
522extern int flag_access_control;
523
524/* Nonzero if we want to check the return value of new and avoid calling
525 constructors if it is a null pointer. */
526
527extern int flag_check_new;
528
529/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
530 initialization variables.
531 0: Old rules, set by -fno-for-scope.
532 2: New ISO rules, set by -ffor-scope.
533 1: Try to implement new ISO rules, but with backup compatibility
534 (and warnings). This is the default, for now. */
535
536extern int flag_new_for_scope;
537
538/* Nonzero if we want to emit defined symbols with common-like linkage as
539 weak symbols where possible, in order to conform to C++ semantics.
540 Otherwise, emit them as local symbols. */
541
542extern int flag_weak;
543
b20d9f0c
AO
544/* 0 means we want the preprocessor to not emit line directives for
545 the current working directory. 1 means we want it to do it. -1
546 means we should decide depending on whether debugging information
547 is being emitted or not. */
548
549extern int flag_working_directory;
550
4078b403
NB
551/* Nonzero to use __cxa_atexit, rather than atexit, to register
552 destructors for local statics and global objects. */
553
554extern int flag_use_cxa_atexit;
555
4078b403
NB
556/* Nonzero means make the default pedwarns warnings instead of errors.
557 The value of this flag is ignored if -pedantic is specified. */
558
559extern int flag_permissive;
560
561/* Nonzero means to implement standard semantics for exception
562 specifications, calling unexpected if an exception is thrown that
563 doesn't match the specification. Zero means to treat them as
564 assertions and optimize accordingly, but not check them. */
565
566extern int flag_enforce_eh_specs;
567
40aac948
JM
568/* Nonzero (the default) means to generate thread-safe code for
569 initializing local statics. */
570
571extern int flag_threadsafe_statics;
572
4078b403
NB
573/* Nonzero means warn about implicit declarations. */
574
575extern int warn_implicit;
576
b2f97e4a
MM
577/* Warn about using __null (as NULL in C++) as sentinel. For code compiled
578 with GCC this doesn't matter as __null is guaranteed to have the right
579 size. */
580
581extern int warn_strict_null_sentinel;
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);
03a08664 648extern tree c_sizeof_or_alignof_type (tree, bool, int);
35b1a6fa 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
03a08664
ILT
661#define c_sizeof(T) c_sizeof_or_alignof_type (T, true, 1)
662#define c_alignof(T) c_sizeof_or_alignof_type (T, false, 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
b482789c
MA
679extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
680
35b1a6fa 681extern void disable_builtin_function (const char *);
7d14c755 682
35b1a6fa 683extern tree build_va_arg (tree, tree);
7e8176d7 684
b86f6cd9 685extern unsigned int c_common_init_options (unsigned int, const char **);
35b1a6fa
AJ
686extern bool c_common_post_options (const char **);
687extern bool c_common_init (void);
688extern void c_common_finish (void);
689extern void c_common_parse_file (int);
690extern HOST_WIDE_INT c_common_get_alias_set (tree);
9649812a 691extern void c_register_builtin_type (tree, const char*);
35b1a6fa
AJ
692extern bool c_promoting_integer_type_p (tree);
693extern int self_promoting_args_p (tree);
694extern tree strip_array_types (tree);
12ea3302 695extern tree strip_pointer_operator (tree);
c5ff069d 696extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
d7e7759d 697
d1bd0ded
GK
698/* This is the basic parsing function. */
699extern void c_parse_file (void);
700/* This is misnamed, it actually performs end-of-compilation processing. */
701extern void finish_file (void);
702
c5ff069d 703
ae499cce
MM
704/* These macros provide convenient access to the various _STMT nodes. */
705
325c3691
RH
706/* Nonzero if a given STATEMENT_LIST represents the outermost binding
707 if a statement expression. */
708#define STATEMENT_LIST_STMT_EXPR(NODE) \
709 TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
174283a3
RH
710
711/* Nonzero if a label has been added to the statement list. */
712#define STATEMENT_LIST_HAS_LABEL(NODE) \
713 TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
325c3691 714
8d37a5c0
JM
715/* COMPOUND_LITERAL_EXPR accessors. */
716#define COMPOUND_LITERAL_EXPR_DECL_STMT(NODE) \
db3acfa5 717 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
8d37a5c0 718#define COMPOUND_LITERAL_EXPR_DECL(NODE) \
350fae66 719 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_STMT (NODE))
db3acfa5 720
c7d87c0a
BC
721#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
722
723enum c_tree_code {
724 C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
725#include "c-common.def"
726 LAST_C_TREE_CODE
727};
728
729#undef DEFTREECODE
730
35b1a6fa 731extern int anon_aggr_type_p (tree);
f2c5f623
BC
732
733/* For a VAR_DECL that is an anonymous union, these are the various
734 sub-variables that make up the anonymous union. */
735#define DECL_ANON_UNION_ELEMS(NODE) DECL_ARGUMENTS ((NODE))
736
0a7394bc
MM
737/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
738#define DECL_C_BIT_FIELD(NODE) \
739 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
740#define SET_DECL_C_BIT_FIELD(NODE) \
741 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
742#define CLEAR_DECL_C_BIT_FIELD(NODE) \
743 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
744
35b1a6fa 745extern void emit_local_var (tree);
35b1a6fa
AJ
746extern tree do_case (tree, tree);
747extern tree build_stmt (enum tree_code, ...);
748extern tree build_case_label (tree, tree, tree);
f2c5f623 749
ab76ca54
MM
750/* These functions must be defined by each front-end which implements
751 a variant of the C language. They are used in c-common.c. */
752
35b1a6fa
AJ
753extern tree build_unary_op (enum tree_code, tree, int);
754extern tree build_binary_op (enum tree_code, tree, tree, int);
522ddfa2 755extern tree perform_integral_promotions (tree);
ab76ca54
MM
756
757/* Given two integer or real types, return the type for their sum.
758 Given two compatible ANSI C types, returns the merged type. */
759
35b1a6fa 760extern tree common_type (tree, tree);
44835fdd 761
35b1a6fa 762extern tree decl_constant_value (tree);
56cb9733 763
19552aa5 764/* Handle increment and decrement of boolean types. */
35b1a6fa 765extern tree boolean_increment (enum tree_code, tree);
19552aa5 766
35b1a6fa 767extern int case_compare (splay_tree_key, splay_tree_key);
8f17b5c5 768
a6c0a76c 769extern tree c_add_case_label (splay_tree, tree, tree, tree, tree);
8f17b5c5 770
fbc315db 771extern void c_do_switch_warnings (splay_tree, location_t, tree, tree);
6de9cd9a 772
35b1a6fa 773extern tree build_function_call (tree, tree);
c70eaeaf 774
48ae6c13
RH
775extern tree resolve_overloaded_builtin (tree, tree);
776
35b1a6fa 777extern tree finish_label_address_expr (tree);
15b732b2
NB
778
779/* Same function prototype, but the C and C++ front ends have
780 different implementations. Used in c-common.c. */
35b1a6fa 781extern tree lookup_label (tree);
15b732b2 782
cc27e657
PB
783extern int vector_types_convertible_p (tree t1, tree t2);
784
0fab64a3 785extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
8f17b5c5 786
525c6bf5 787extern tree c_staticp (tree);
db3acfa5 788
35b1a6fa 789extern void init_c_lex (void);
81a75f0f 790
35b1a6fa 791extern void c_cpp_builtins (cpp_reader *);
76c3e73e 792
731e8b38
MM
793/* Positive if an implicit `extern "C"' scope has just been entered;
794 negative if such a scope has just been exited. */
7876228d 795extern GTY(()) int pending_lang_change;
731e8b38 796
0e5921e8
ZW
797/* Information recorded about each file examined during compilation. */
798
799struct c_fileinfo
800{
801 int time; /* Time spent in the file. */
5d709b00
ZW
802
803 /* Flags used only by C++.
804 INTERFACE_ONLY nonzero means that we are in an "interface" section
805 of the compiler. INTERFACE_UNKNOWN nonzero means we cannot trust
806 the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN is zero and
807 INTERFACE_ONLY is zero, it means that we are responsible for
808 exporting definitions that others might need. */
809 short interface_only;
0e5921e8
ZW
810 short interface_unknown;
811};
812
35b1a6fa
AJ
813struct c_fileinfo *get_fileinfo (const char *);
814extern void dump_time_statistics (void);
815
816extern bool c_dump_tree (void *, tree);
817
6de9cd9a
DN
818extern void c_warn_unused_result (tree *);
819
3a5b9284
RH
820extern void verify_sequence_points (tree);
821
ee8a6a3e
RH
822extern tree fold_offsetof (tree);
823
5ae9ba3e 824/* Places where an lvalue, or modifiable lvalue, may be required.
37dc0d8d 825 Used to select diagnostic messages in lvalue_error and
5ae9ba3e
MM
826 readonly_error. */
827enum lvalue_use {
828 lv_assign,
829 lv_increment,
830 lv_decrement,
831 lv_addressof,
832 lv_asm
833};
834
37dc0d8d 835extern void lvalue_error (enum lvalue_use);
5ae9ba3e 836
aab038d5
RH
837extern int complete_array_type (tree *, tree, bool);
838
48ae6c13
RH
839extern tree builtin_type_for_size (int, bool);
840
7c34ced1 841/* In c-gimplify.c */
6de9cd9a 842extern void c_genericize (tree);
7c34ced1 843extern int c_gimplify_expr (tree *, tree *, tree *);
325c3691 844extern tree c_build_bind_expr (tree, tree);
6de9cd9a 845
c0d578e6 846/* In c-pch.c */
35b1a6fa
AJ
847extern void pch_init (void);
848extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
849extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
850 const char *orig);
851extern void c_common_write_pch (void);
18c81520 852extern void c_common_no_more_pch (void);
c0d578e6 853extern void c_common_pch_pragma (cpp_reader *pfile);
3fd30b88
GK
854extern void c_common_print_pch_checksum (FILE *f);
855
856/* In *-checksum.c */
857extern const unsigned char executable_checksum[16];
c0d578e6 858
35b1a6fa
AJ
859extern void builtin_define_with_value (const char *, const char *, int);
860extern void c_stddef_cpp_builtins (void);
861extern void fe_file_change (const struct line_map *);
4bb8ca28 862extern void c_parse_error (const char *, enum cpp_ttype, tree);
9d10c9a9 863
e5a002e3
ZL
864/* Objective-C / Objective-C++ entry points. */
865
866/* The following ObjC/ObjC++ functions are called by the C and/or C++
867 front-ends; they all must have corresponding stubs in stub-objc.c. */
bc095846 868extern tree objc_is_class_name (tree);
264fa2db
ZL
869extern tree objc_is_object_ptr (tree);
870extern void objc_check_decl (tree);
e5a002e3 871extern int objc_is_reserved_word (tree);
58393038
ZL
872extern bool objc_compare_types (tree, tree, int, tree);
873extern void objc_volatilize_decl (tree);
874extern bool objc_type_quals_match (tree, tree);
6e955430 875extern tree objc_rewrite_function_call (tree, tree);
264fa2db 876extern tree objc_message_selector (void);
16b34ad6 877extern tree objc_lookup_ivar (tree, tree);
325c3691 878extern void objc_clear_super_receiver (void);
7a3ea201 879extern int objc_is_public (tree, tree);
a45bcfb2
ZL
880extern tree objc_is_id (tree);
881extern void objc_declare_alias (tree, tree);
882extern void objc_declare_class (tree);
883extern void objc_declare_protocols (tree);
884extern tree objc_build_message_expr (tree);
885extern tree objc_finish_message_expr (tree, tree, tree);
886extern tree objc_build_selector_expr (tree);
887extern tree objc_build_protocol_expr (tree);
888extern tree objc_build_encode_expr (tree);
889extern tree objc_build_string_object (tree);
890extern tree objc_get_protocol_qualified_type (tree, tree);
891extern tree objc_get_class_reference (tree);
892extern tree objc_get_class_ivars (tree);
893extern void objc_start_class_interface (tree, tree, tree);
894extern void objc_start_category_interface (tree, tree, tree);
895extern void objc_start_protocol (tree, tree);
896extern void objc_continue_interface (void);
897extern void objc_finish_interface (void);
898extern void objc_start_class_implementation (tree, tree);
899extern void objc_start_category_implementation (tree, tree);
900extern void objc_continue_implementation (void);
901extern void objc_finish_implementation (void);
902extern void objc_set_visibility (int);
903extern void objc_set_method_type (enum tree_code);
dbb74365 904extern tree objc_build_method_signature (tree, tree, tree, bool);
a45bcfb2
ZL
905extern void objc_add_method_declaration (tree);
906extern void objc_start_method_definition (tree);
907extern void objc_finish_method_definition (tree);
908extern void objc_add_instance_variable (tree);
909extern tree objc_build_keyword_decl (tree, tree, tree);
910extern tree objc_build_throw_stmt (tree);
911extern void objc_begin_try_stmt (location_t, tree);
6e955430 912extern tree objc_finish_try_stmt (void);
a45bcfb2
ZL
913extern void objc_begin_catch_clause (tree);
914extern void objc_finish_catch_clause (void);
915extern void objc_build_finally_clause (location_t, tree);
6e955430 916extern tree objc_build_synchronized (location_t, tree, tree);
a45bcfb2
ZL
917extern int objc_static_init_needed_p (void);
918extern tree objc_generate_static_init_call (tree);
6e955430 919extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
264fa2db 920
e5a002e3
ZL
921/* The following are provided by the C and C++ front-ends, and called by
922 ObjC/ObjC++. */
bc095846 923extern void *objc_get_current_scope (void);
e5a002e3
ZL
924extern void objc_mark_locals_volatile (void *);
925
9d10c9a9 926/* In c-ppoutput.c */
35b1a6fa
AJ
927extern void init_pp_output (FILE *);
928extern void preprocess_file (cpp_reader *);
929extern void pp_file_change (const struct line_map *);
8e9ea4d7 930extern void pp_dir_change (cpp_reader *, const char *);
17211ab5 931
88657302 932#endif /* ! GCC_C_COMMON_H */