]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-common.h
trans.c (unchecked_conversion_lhs_nop): New predicate.
[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,
928c19bb 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
66647d44 4 Free Software Foundation, Inc.
7f4edbcb 5
1322177d 6This file is part of GCC.
7f4edbcb 7
1322177d
LB
8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
9dcd6f09 10Software Foundation; either version 3, or (at your option) any later
1322177d 11version.
7f4edbcb 12
1322177d
LB
13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
7f4edbcb
BS
17
18You should have received a copy of the GNU General Public License
9dcd6f09
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
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)
928c19bb 33 C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)
f2c5f623 34 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
325c3691 35 STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
928c19bb 36 C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)
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 */
ab22c1fa 58 RID_COMPLEX, RID_THREAD, RID_SAT,
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,
da5b307a
JM
75 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR,
76 RID_TYPES_COMPATIBLE_P,
9a8ce21f 77 RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,
ab22c1fa 78 RID_FRACT, RID_ACCUM,
0e5921e8 79
eea1139b
ILT
80 /* This means to warn that this is a C++ keyword, and then treat it
81 as a normal identifier. */
82 RID_CXX_COMPAT_WARN,
83
0ba8a114
NS
84 /* Too many ways of getting the name of a function as a string */
85 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
86
0e5921e8
ZW
87 /* C++ */
88 RID_BOOL, RID_WCHAR, RID_CLASS,
89 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
90 RID_TEMPLATE, RID_NULL, RID_CATCH,
91 RID_DELETE, RID_FALSE, RID_NAMESPACE,
c22cacf3
MS
92 RID_NEW, RID_OFFSETOF, RID_OPERATOR,
93 RID_THIS, RID_THROW, RID_TRUE,
94 RID_TRY, RID_TYPENAME, RID_TYPEID,
b6baa67d 95 RID_USING, RID_CHAR16, RID_CHAR32,
0e5921e8
ZW
96
97 /* casts */
98 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
99
cb68ec50
PC
100 /* C++ extensions */
101 RID_HAS_NOTHROW_ASSIGN, RID_HAS_NOTHROW_CONSTRUCTOR,
102 RID_HAS_NOTHROW_COPY, RID_HAS_TRIVIAL_ASSIGN,
103 RID_HAS_TRIVIAL_CONSTRUCTOR, RID_HAS_TRIVIAL_COPY,
104 RID_HAS_TRIVIAL_DESTRUCTOR, RID_HAS_VIRTUAL_DESTRUCTOR,
105 RID_IS_ABSTRACT, RID_IS_BASE_OF,
106 RID_IS_CONVERTIBLE_TO, RID_IS_CLASS,
107 RID_IS_EMPTY, RID_IS_ENUM,
108 RID_IS_POD, RID_IS_POLYMORPHIC,
109 RID_IS_UNION,
110
218f0015 111 /* C++0x */
3ad6a8e1 112 RID_STATIC_ASSERT, RID_DECLTYPE,
218f0015 113
40f03658 114 /* Objective-C */
3a3589b4 115 RID_AT_ENCODE, RID_AT_END,
0e5921e8
ZW
116 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
117 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
c22cacf3 118 RID_AT_PROTOCOL, RID_AT_SELECTOR,
264fa2db
ZL
119 RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
120 RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
121 RID_AT_INTERFACE,
0e5921e8
ZW
122 RID_AT_IMPLEMENTATION,
123
124 RID_MAX,
125
126 RID_FIRST_MODIFIER = RID_STATIC,
b8363a24
ZW
127 RID_LAST_MODIFIER = RID_ONEWAY,
128
e1f1ee86 129 RID_FIRST_CXX0X = RID_STATIC_ASSERT,
3ad6a8e1 130 RID_LAST_CXX0X = RID_DECLTYPE,
b8363a24
ZW
131 RID_FIRST_AT = RID_AT_ENCODE,
132 RID_LAST_AT = RID_AT_IMPLEMENTATION,
133 RID_FIRST_PQ = RID_IN,
134 RID_LAST_PQ = RID_ONEWAY
f09f1de5
MM
135};
136
b8363a24 137#define OBJC_IS_AT_KEYWORD(rid) \
3f75a254
JM
138 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
139 (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
b8363a24
ZW
140
141#define OBJC_IS_PQ_KEYWORD(rid) \
3f75a254
JM
142 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
143 (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
b8363a24 144
f09f1de5
MM
145/* The elements of `ridpointers' are identifier nodes for the reserved
146 type names and storage classes. It is indexed by a RID_... value. */
3f75a254 147extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
f09f1de5 148
7f4edbcb
BS
149/* Standard named or nameless data types of the C compiler. */
150
151enum c_tree_index
152{
b6baa67d
KVH
153 CTI_CHAR16_TYPE,
154 CTI_CHAR32_TYPE,
7f4edbcb 155 CTI_WCHAR_TYPE,
207bf79d 156 CTI_UNDERLYING_WCHAR_TYPE,
c5ab7f91 157 CTI_WINT_TYPE,
cd732418
JM
158 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
159 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
b15ad712
JM
160 CTI_INTMAX_TYPE,
161 CTI_UINTMAX_TYPE,
7f4edbcb
BS
162 CTI_WIDEST_INT_LIT_TYPE,
163 CTI_WIDEST_UINT_LIT_TYPE,
164
207bf79d
JM
165 /* Types for <stdint.h>, that may not be defined on all
166 targets. */
167 CTI_SIG_ATOMIC_TYPE,
168 CTI_INT8_TYPE,
169 CTI_INT16_TYPE,
170 CTI_INT32_TYPE,
171 CTI_INT64_TYPE,
172 CTI_UINT8_TYPE,
173 CTI_UINT16_TYPE,
174 CTI_UINT32_TYPE,
175 CTI_UINT64_TYPE,
176 CTI_INT_LEAST8_TYPE,
177 CTI_INT_LEAST16_TYPE,
178 CTI_INT_LEAST32_TYPE,
179 CTI_INT_LEAST64_TYPE,
180 CTI_UINT_LEAST8_TYPE,
181 CTI_UINT_LEAST16_TYPE,
182 CTI_UINT_LEAST32_TYPE,
183 CTI_UINT_LEAST64_TYPE,
184 CTI_INT_FAST8_TYPE,
185 CTI_INT_FAST16_TYPE,
186 CTI_INT_FAST32_TYPE,
187 CTI_INT_FAST64_TYPE,
188 CTI_UINT_FAST8_TYPE,
189 CTI_UINT_FAST16_TYPE,
190 CTI_UINT_FAST32_TYPE,
191 CTI_UINT_FAST64_TYPE,
192 CTI_INTPTR_TYPE,
193 CTI_UINTPTR_TYPE,
194
7f4edbcb 195 CTI_CHAR_ARRAY_TYPE,
b6baa67d
KVH
196 CTI_CHAR16_ARRAY_TYPE,
197 CTI_CHAR32_ARRAY_TYPE,
7f4edbcb
BS
198 CTI_WCHAR_ARRAY_TYPE,
199 CTI_INT_ARRAY_TYPE,
200 CTI_STRING_TYPE,
201 CTI_CONST_STRING_TYPE,
202
19552aa5 203 /* Type for boolean expressions (bool in C++, int in C). */
de7df9eb
JM
204 CTI_TRUTHVALUE_TYPE,
205 CTI_TRUTHVALUE_TRUE,
206 CTI_TRUTHVALUE_FALSE,
207
7f4edbcb 208 CTI_DEFAULT_FUNCTION_TYPE,
7f4edbcb 209
2ba84f36 210 /* These are not types, but we have to look them up all the time. */
0ba8a114
NS
211 CTI_FUNCTION_NAME_DECL,
212 CTI_PRETTY_FUNCTION_NAME_DECL,
213 CTI_C99_FUNCTION_NAME_DECL,
214 CTI_SAVED_FUNCTION_NAME_DECLS,
c22cacf3 215
ae499cce
MM
216 CTI_VOID_ZERO,
217
b2f97e4a
MM
218 CTI_NULL,
219
7f4edbcb
BS
220 CTI_MAX
221};
222
5950c3c9
BE
223#define C_CPP_HASHNODE(id) \
224 (&(((struct c_common_identifier *) (id))->node))
d75d71e0
ILT
225#define C_RID_CODE(id) \
226 ((enum rid) (((struct c_common_identifier *) (id))->node.rid_code))
227#define C_SET_RID_CODE(id, code) \
228 (((struct c_common_identifier *) (id))->node.rid_code = (unsigned char) code)
2a967f3d
NB
229
230/* Identifier part common to the C front ends. Inherits from
231 tree_identifier, despite appearances. */
e2500fed 232struct c_common_identifier GTY(())
2a967f3d
NB
233{
234 struct tree_common common;
17211ab5 235 struct cpp_hashnode node;
2a967f3d
NB
236};
237
eea1139b
ILT
238/* An entry in the reserved keyword table. */
239
240struct c_common_resword
241{
242 const char *const word;
243 ENUM_BITFIELD(rid) const rid : 16;
244 const unsigned int disable : 16;
245};
246
247/* Disable mask. Keywords are disabled if (reswords[i].disable &
248 mask) is _true_. Thus for keywords which are present in all
249 languages the disable field is zero. */
250
251#define D_CONLY 0x001 /* C only (not in C++). */
252#define D_CXXONLY 0x002 /* C++ only (not in C). */
253#define D_C99 0x004 /* In C, C99 only. */
254#define D_CXX0X 0x008 /* In C++, C++0X only. */
255#define D_EXT 0x010 /* GCC extension. */
256#define D_EXT89 0x020 /* GCC extension incorporated in C99. */
257#define D_ASM 0x040 /* Disabled by -fno-asm. */
258#define D_OBJC 0x080 /* In Objective C and neither C nor C++. */
259#define D_CXX_OBJC 0x100 /* In Objective C, and C++, but not C. */
260#define D_CXXWARN 0x200 /* In C warn with -Wcxx-compat. */
261
262/* The reserved keyword table. */
263extern const struct c_common_resword c_common_reswords[];
264
265/* The number of items in the reserved keyword table. */
266extern const unsigned int num_c_common_reswords;
267
b6baa67d
KVH
268#define char16_type_node c_global_trees[CTI_CHAR16_TYPE]
269#define char32_type_node c_global_trees[CTI_CHAR32_TYPE]
7f4edbcb 270#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
207bf79d 271#define underlying_wchar_type_node c_global_trees[CTI_UNDERLYING_WCHAR_TYPE]
c5ab7f91 272#define wint_type_node c_global_trees[CTI_WINT_TYPE]
cd732418
JM
273#define signed_size_type_node c_global_trees[CTI_SIGNED_SIZE_TYPE]
274#define unsigned_ptrdiff_type_node c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
b15ad712
JM
275#define intmax_type_node c_global_trees[CTI_INTMAX_TYPE]
276#define uintmax_type_node c_global_trees[CTI_UINTMAX_TYPE]
7f4edbcb
BS
277#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
278#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
279
207bf79d
JM
280#define sig_atomic_type_node c_global_trees[CTI_SIG_ATOMIC_TYPE]
281#define int8_type_node c_global_trees[CTI_INT8_TYPE]
282#define int16_type_node c_global_trees[CTI_INT16_TYPE]
283#define int32_type_node c_global_trees[CTI_INT32_TYPE]
284#define int64_type_node c_global_trees[CTI_INT64_TYPE]
285#define uint8_type_node c_global_trees[CTI_UINT8_TYPE]
286#define uint16_type_node c_global_trees[CTI_UINT16_TYPE]
287#define c_uint32_type_node c_global_trees[CTI_UINT32_TYPE]
288#define c_uint64_type_node c_global_trees[CTI_UINT64_TYPE]
289#define int_least8_type_node c_global_trees[CTI_INT_LEAST8_TYPE]
290#define int_least16_type_node c_global_trees[CTI_INT_LEAST16_TYPE]
291#define int_least32_type_node c_global_trees[CTI_INT_LEAST32_TYPE]
292#define int_least64_type_node c_global_trees[CTI_INT_LEAST64_TYPE]
293#define uint_least8_type_node c_global_trees[CTI_UINT_LEAST8_TYPE]
294#define uint_least16_type_node c_global_trees[CTI_UINT_LEAST16_TYPE]
295#define uint_least32_type_node c_global_trees[CTI_UINT_LEAST32_TYPE]
296#define uint_least64_type_node c_global_trees[CTI_UINT_LEAST64_TYPE]
297#define int_fast8_type_node c_global_trees[CTI_INT_FAST8_TYPE]
298#define int_fast16_type_node c_global_trees[CTI_INT_FAST16_TYPE]
299#define int_fast32_type_node c_global_trees[CTI_INT_FAST32_TYPE]
300#define int_fast64_type_node c_global_trees[CTI_INT_FAST64_TYPE]
301#define uint_fast8_type_node c_global_trees[CTI_UINT_FAST8_TYPE]
302#define uint_fast16_type_node c_global_trees[CTI_UINT_FAST16_TYPE]
303#define uint_fast32_type_node c_global_trees[CTI_UINT_FAST32_TYPE]
304#define uint_fast64_type_node c_global_trees[CTI_UINT_FAST64_TYPE]
305#define intptr_type_node c_global_trees[CTI_INTPTR_TYPE]
306#define uintptr_type_node c_global_trees[CTI_UINTPTR_TYPE]
307
de7df9eb
JM
308#define truthvalue_type_node c_global_trees[CTI_TRUTHVALUE_TYPE]
309#define truthvalue_true_node c_global_trees[CTI_TRUTHVALUE_TRUE]
310#define truthvalue_false_node c_global_trees[CTI_TRUTHVALUE_FALSE]
19552aa5 311
7f4edbcb 312#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
b6baa67d
KVH
313#define char16_array_type_node c_global_trees[CTI_CHAR16_ARRAY_TYPE]
314#define char32_array_type_node c_global_trees[CTI_CHAR32_ARRAY_TYPE]
7f4edbcb
BS
315#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
316#define int_array_type_node c_global_trees[CTI_INT_ARRAY_TYPE]
317#define string_type_node c_global_trees[CTI_STRING_TYPE]
318#define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE]
319
320#define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
7f4edbcb 321
0ba8a114
NS
322#define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL]
323#define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
324#define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
325#define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
63ad61ed 326
ae499cce
MM
327/* A node for `((void) 0)'. */
328#define void_zero_node c_global_trees[CTI_VOID_ZERO]
329
b2f97e4a
MM
330/* The node for C++ `__null'. */
331#define null_node c_global_trees[CTI_NULL]
332
e2500fed 333extern GTY(()) tree c_global_trees[CTI_MAX];
ab76ca54 334
e0a21ab9
KH
335/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
336 tree for size reasons. */
d07605f5
AP
337struct sorted_fields_type GTY(())
338{
339 int len;
340 tree GTY((length ("%h.len"))) elts[1];
341};
342
8f17b5c5
MM
343/* Mark which labels are explicitly declared.
344 These may be shadowed, and may be referenced from nested functions. */
345#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
346
ab76ca54
MM
347typedef enum c_language_kind
348{
37fa72e9
NB
349 clk_c = 0, /* C90, C94 or C99 */
350 clk_objc = 1, /* clk_c with ObjC features. */
351 clk_cxx = 2, /* ANSI/ISO C++ */
352 clk_objcxx = 3 /* clk_cxx with ObjC features. */
21c7361e 353}
ab76ca54
MM
354c_language_kind;
355
37fa72e9
NB
356/* To test for a specific language use c_language, defined by each
357 front end. For "ObjC features" or "not C++" use the macros. */
358extern c_language_kind c_language;
359
360#define c_dialect_cxx() (c_language & clk_cxx)
361#define c_dialect_objc() (c_language & clk_objc)
362
ae499cce
MM
363/* Information about a statement tree. */
364
e2500fed 365struct stmt_tree_s GTY(()) {
35fd3193 366 /* The current statement list being collected. */
325c3691
RH
367 tree x_cur_stmt_list;
368
da7d8304 369 /* In C++, Nonzero if we should treat statements as full
ae499cce
MM
370 expressions. In particular, this variable is no-zero if at the
371 end of a statement we should destroy any temporaries created
372 during that statement. Similarly, if, at the end of a block, we
373 should destroy any local variables in this block. Normally, this
da7d8304 374 variable is nonzero, since those are the normal semantics of
ae499cce
MM
375 C++.
376
377 However, in order to represent aggregate initialization code as
378 tree structure, we use statement-expressions. The statements
379 within the statement expression should not result in cleanups
21c7361e 380 being run until the entire enclosing statement is complete.
ae499cce
MM
381
382 This flag has no effect in C. */
21c7361e 383 int stmts_are_full_exprs_p;
ae499cce
MM
384};
385
386typedef struct stmt_tree_s *stmt_tree;
387
388/* Global state pertinent to the current function. Some C dialects
389 extend this structure with additional fields. */
390
e2500fed 391struct c_language_function GTY(()) {
ae499cce
MM
392 /* While we are parsing the function, this contains information
393 about the statement-tree that we are building. */
394 struct stmt_tree_s x_stmt_tree;
395};
396
35fd3193 397/* When building a statement-tree, this is the current statement list
325c3691 398 being collected. It's TREE_CHAIN is a back-pointer to the previous
35fd3193 399 statement list. */
ae499cce 400
325c3691 401#define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list)
8f17b5c5
MM
402
403/* Language-specific hooks. */
404
4684cd27
MM
405/* If non-NULL, this function is called after a precompile header file
406 is loaded. */
407extern void (*lang_post_pch_load) (void);
408
f75fbaf7
ZW
409extern void push_file_scope (void);
410extern void pop_file_scope (void);
35b1a6fa 411extern stmt_tree current_stmt_tree (void);
325c3691 412extern tree push_stmt_list (void);
325c3691 413extern tree pop_stmt_list (tree);
35b1a6fa 414extern tree add_stmt (tree);
325c3691 415extern void push_cleanup (tree, tree, bool);
953ff289
DN
416extern tree pushdecl_top_level (tree);
417extern tree pushdecl (tree);
c9f9eb5d
AH
418extern tree build_modify_expr (location_t, tree, enum tree_code, tree);
419extern tree build_indirect_ref (location_t, tree, const char *);
35b1a6fa 420
3c79fa86 421extern int c_expand_decl (tree);
c1e14513 422
d07605f5 423extern int field_decl_cmp (const void *, const void *);
c22cacf3
MS
424extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
425 void *);
58f9752a 426extern bool has_c_linkage (const_tree decl);
17211ab5 427\f
4078b403
NB
428/* Switches common to the C front ends. */
429
aaf93206 430/* Nonzero if prepreprocessing only. */
17211ab5 431
aaf93206
NB
432extern int flag_preprocess_only;
433
264fa2db
ZL
434/* Zero means that faster, ...NonNil variants of objc_msgSend...
435 calls will be used in ObjC; passing nil receivers to such calls
436 will most likely result in crashes. */
437extern int flag_nil_receivers;
438
439/* Nonzero means that we will allow new ObjC exception syntax (@throw,
440 @try, etc.) in source code. */
441extern int flag_objc_exceptions;
442
093c7153
RH
443/* Nonzero means that we generate NeXT setjmp based exceptions. */
444extern int flag_objc_sjlj_exceptions;
445
264fa2db
ZL
446/* Nonzero means that code generation will be altered to support
447 "zero-link" execution. This currently affects ObjC only, but may
448 affect other languages in the future. */
449extern int flag_zero_link;
450
451/* Nonzero means emit an '__OBJC, __image_info' for the current translation
452 unit. It will inform the ObjC runtime that class definition(s) herein
453 contained are to replace one(s) previously loaded. */
454extern int flag_replace_objc_classes;
455
63973df3
NB
456/* Nonzero means don't output line number information. */
457
458extern char flag_no_line_commands;
459
460/* Nonzero causes -E output not to be done, but directives such as
461 #define that have side effects are still obeyed. */
462
463extern char flag_no_output;
464
93d45d9e
JM
465/* Nonzero means dump macros in some fashion; contains the 'D', 'M',
466 'N' or 'U' of the command line switch. */
63973df3
NB
467
468extern char flag_dump_macros;
469
470/* Nonzero means pass #include lines through to the output. */
471
472extern char flag_dump_includes;
473
c0d578e6
GK
474/* Nonzero means process PCH files while preprocessing. */
475
476extern bool flag_pch_preprocess;
477
17211ab5
GK
478/* The file name to which we should write a precompiled header, or
479 NULL if no header will be written in this compile. */
480
481extern const char *pch_file;
482
3df89291
NB
483/* Nonzero if an ISO standard was selected. It rejects macros in the
484 user's namespace. */
17211ab5 485
3df89291
NB
486extern int flag_iso;
487
488/* Nonzero if -undef was given. It suppresses target built-in macros
489 and assertions. */
17211ab5 490
3df89291
NB
491extern int flag_undef;
492
4078b403 493/* Nonzero means don't recognize the non-ANSI builtin functions. */
ab76ca54 494
4078b403
NB
495extern int flag_no_builtin;
496
497/* Nonzero means don't recognize the non-ANSI builtin functions.
498 -ansi sets this. */
499
500extern int flag_no_nonansi_builtin;
ab76ca54 501
eaa7c03f
JM
502/* Nonzero means give `double' the same size as `float'. */
503
504extern int flag_short_double;
505
506/* Nonzero means give `wchar_t' the same size as `short'. */
507
508extern int flag_short_wchar;
509
00c8e9f6
MS
510/* Nonzero means allow implicit conversions between vectors with
511 differing numbers of subparts and/or differing element types. */
512extern int flag_lax_vector_conversions;
513
750491fc
RH
514/* Nonzero means allow Microsoft extensions without warnings or errors. */
515extern int flag_ms_extensions;
516
4078b403
NB
517/* Nonzero means don't recognize the keyword `asm'. */
518
519extern int flag_no_asm;
520
521/* Nonzero means give string constants the type `const char *', as mandated
522 by the standard. */
523
524extern int flag_const_strings;
525
4078b403
NB
526/* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
527
528extern int flag_signed_bitfields;
4078b403 529
c22cacf3 530/* Warn about #pragma directives that are not recognized. */
4078b403 531
c22cacf3 532extern int warn_unknown_pragmas; /* Tri state variable. */
4078b403 533
4078b403
NB
534/* Warn about format/argument anomalies in calls to formatted I/O functions
535 (*printf, *scanf, strftime, strfmon, etc.). */
ab76ca54
MM
536
537extern int warn_format;
538
b34c7881 539
4078b403 540/* C/ObjC language option variables. */
b34c7881 541
2683ed8d 542
4078b403
NB
543/* Nonzero means allow type mismatches in conditional expressions;
544 just make their values `void'. */
74ff4629 545
4078b403 546extern int flag_cond_mismatch;
6c36d76b 547
eaf299c6 548/* Nonzero means enable C89 Amendment 1 features. */
b8458e3e
JM
549
550extern int flag_isoc94;
551
ab76ca54
MM
552/* Nonzero means use the ISO C99 dialect of C. */
553
554extern int flag_isoc99;
555
6614fd40 556/* Nonzero means that we have builtin functions, and main is an int. */
93e2382f
JM
557
558extern int flag_hosted;
559
4078b403
NB
560/* ObjC language option variables. */
561
562
563/* Open and close the file for outputting class declarations, if
564 requested (ObjC). */
565
566extern int flag_gen_declaration;
567
4078b403
NB
568/* Tells the compiler that this is a special run. Do not perform any
569 compiling, instead we are to test some platform dependent features
570 and output a C header file with appropriate definitions. */
571
572extern int print_struct_values;
573
574/* ???. Undocumented. */
575
fd350d24 576extern const char *constant_string_class_name;
4078b403 577
4078b403
NB
578
579/* C++ language option variables. */
580
581
582/* Nonzero means don't recognize any extension keywords. */
583
584extern int flag_no_gnu_keywords;
585
586/* Nonzero means do emit exported implementations of functions even if
587 they can be inlined. */
588
589extern int flag_implement_inlines;
590
4078b403
NB
591/* Nonzero means that implicit instantiations will be emitted if needed. */
592
593extern int flag_implicit_templates;
594
595/* Nonzero means that implicit instantiations of inline templates will be
596 emitted if needed, even if instantiations of non-inline templates
597 aren't. */
598
599extern int flag_implicit_inline_templates;
600
601/* Nonzero means generate separate instantiation control files and
602 juggle them at link time. */
603
604extern int flag_use_repository;
605
606/* Nonzero if we want to issue diagnostics that the standard says are not
607 required. */
608
609extern int flag_optional_diags;
610
611/* Nonzero means we should attempt to elide constructors when possible. */
612
613extern int flag_elide_constructors;
614
615/* Nonzero means that member functions defined in class scope are
616 inline by default. */
617
618extern int flag_default_inline;
619
620/* Controls whether compiler generates 'type descriptor' that give
621 run-time type information. */
622
623extern int flag_rtti;
624
625/* Nonzero if we want to conserve space in the .o files. We do this
626 by putting uninitialized data and runtime initialized data into
627 .common instead of .data at the expense of not flagging multiple
628 definitions. */
629
630extern int flag_conserve_space;
631
632/* Nonzero if we want to obey access control semantics. */
633
634extern int flag_access_control;
635
636/* Nonzero if we want to check the return value of new and avoid calling
637 constructors if it is a null pointer. */
638
639extern int flag_check_new;
640
c1ae8be5
SM
641/* The supported C++ dialects. */
642
643enum cxx_dialect {
644 /* C++98 */
645 cxx98,
646 /* Experimental features that are likely to become part of
647 C++0x. */
648 cxx0x
649};
966541e3 650
c1ae8be5
SM
651/* The C++ dialect being used. C++98 is the default. */
652extern enum cxx_dialect cxx_dialect;
966541e3 653
4078b403
NB
654/* Nonzero if we want the new ISO rules for pushing a new scope for `for'
655 initialization variables.
656 0: Old rules, set by -fno-for-scope.
657 2: New ISO rules, set by -ffor-scope.
658 1: Try to implement new ISO rules, but with backup compatibility
659 (and warnings). This is the default, for now. */
660
661extern int flag_new_for_scope;
662
663/* Nonzero if we want to emit defined symbols with common-like linkage as
664 weak symbols where possible, in order to conform to C++ semantics.
665 Otherwise, emit them as local symbols. */
666
667extern int flag_weak;
668
b20d9f0c
AO
669/* 0 means we want the preprocessor to not emit line directives for
670 the current working directory. 1 means we want it to do it. -1
671 means we should decide depending on whether debugging information
672 is being emitted or not. */
673
674extern int flag_working_directory;
675
4078b403
NB
676/* Nonzero to use __cxa_atexit, rather than atexit, to register
677 destructors for local statics and global objects. */
678
679extern int flag_use_cxa_atexit;
680
c7b5e395
GK
681/* Nonzero to use __cxa_get_exception_ptr in the C++ exception-handling
682 logic. */
683
684extern int flag_use_cxa_get_exception_ptr;
685
4078b403
NB
686/* Nonzero means to implement standard semantics for exception
687 specifications, calling unexpected if an exception is thrown that
688 doesn't match the specification. Zero means to treat them as
689 assertions and optimize accordingly, but not check them. */
690
691extern int flag_enforce_eh_specs;
692
40aac948
JM
693/* Nonzero (the default) means to generate thread-safe code for
694 initializing local statics. */
695
696extern int flag_threadsafe_statics;
697
6ea2bd47
JM
698/* Nonzero if we want to pretty-print template specializations as the
699 template signature followed by the arguments. */
700
701extern int flag_pretty_templates;
702
4078b403
NB
703/* Nonzero means warn about implicit declarations. */
704
705extern int warn_implicit;
706
b2f97e4a
MM
707/* Warn about using __null (as NULL in C++) as sentinel. For code compiled
708 with GCC this doesn't matter as __null is guaranteed to have the right
709 size. */
710
711extern int warn_strict_null_sentinel;
712
4078b403
NB
713/* Maximum template instantiation depth. This limit is rather
714 arbitrary, but it exists to limit the time it takes to notice
715 infinite template instantiations. */
716
717extern int max_tinst_depth;
ab76ca54 718
25587e40
AO
719/* Nonzero means the expression being parsed will never be evaluated.
720 This is a count, since unevaluated expressions can nest. */
721
722extern int skip_evaluation;
723
148e4216
JM
724/* Whether lexing has been completed, so subsequent preprocessor
725 errors should use the compiler's input_location. */
726
727extern bool done_lexing;
728
ab76ca54
MM
729/* C types are partitioned into three subsets: object, function, and
730 incomplete types. */
731#define C_TYPE_OBJECT_P(type) \
732 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
733
734#define C_TYPE_INCOMPLETE_P(type) \
735 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
736
737#define C_TYPE_FUNCTION_P(type) \
738 (TREE_CODE (type) == FUNCTION_TYPE)
739
740/* For convenience we define a single macro to identify the class of
741 object or incomplete types. */
742#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
743 (!C_TYPE_FUNCTION_P (type))
744
349ae713
NB
745/* Attribute table common to the C front ends. */
746extern const struct attribute_spec c_common_attribute_table[];
747extern const struct attribute_spec c_common_format_attribute_table[];
748
0ba8a114 749/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
2ce07e2d
NS
750 ID is the identifier to use, NAME is the string.
751 TYPE_DEP indicates whether it depends on type of the function or not
752 (i.e. __PRETTY_FUNCTION__). */
753
35b1a6fa
AJ
754extern tree (*make_fname_decl) (tree, int);
755
756extern tree identifier_global_value (tree);
757extern void record_builtin_type (enum rid, const char *, tree);
758extern tree build_void_list_node (void);
759extern void start_fname_decls (void);
760extern void finish_fname_decls (void);
761extern const char *fname_as_string (int);
3ba09659 762extern tree fname_decl (location_t, unsigned, tree);
35b1a6fa 763
94a0dd7b 764extern void check_function_arguments (tree, int, tree *, tree);
35b1a6fa
AJ
765extern void check_function_arguments_recurse (void (*)
766 (void *, tree,
767 unsigned HOST_WIDE_INT),
768 void *, tree,
769 unsigned HOST_WIDE_INT);
83322951 770extern bool check_builtin_function_arguments (tree, int, tree *);
94a0dd7b 771extern void check_function_format (tree, int, tree *);
35b1a6fa
AJ
772extern void set_Wformat (int);
773extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
774extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
2772ef3e 775extern int c_common_handle_option (size_t code, const char *arg, int value);
cb66e385 776extern bool c_common_missing_argument (const char *opt, size_t code);
35b1a6fa
AJ
777extern tree c_common_type_for_mode (enum machine_mode, int);
778extern tree c_common_type_for_size (unsigned int, int);
ab22c1fa
CF
779extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int,
780 int, int);
12753674 781extern tree c_common_unsigned_type (tree);
35b1a6fa
AJ
782extern tree c_common_signed_type (tree);
783extern tree c_common_signed_or_unsigned_type (int, tree);
38a4afee 784extern tree c_build_bitfield_integer_type (unsigned HOST_WIDE_INT, int);
58f9752a 785extern bool decl_with_nonnull_addr_p (const_tree);
928c19bb
JM
786extern tree c_fully_fold (tree, bool, bool *);
787extern tree decl_constant_value_for_optimization (tree);
788extern tree c_save_expr (tree);
ba47d38d 789extern tree c_common_truthvalue_conversion (location_t, tree);
35b1a6fa 790extern void c_apply_type_quals_to_decl (int, tree);
03a08664 791extern tree c_sizeof_or_alignof_type (tree, bool, int);
35b1a6fa 792extern tree c_alignof_expr (tree);
7f4edbcb
BS
793/* Print an error message for invalid operands to arith operation CODE.
794 NOP_EXPR is used as a special case (see truthvalue_conversion). */
ba47d38d 795extern void binary_op_error (location_t, enum tree_code, tree, tree);
35b1a6fa 796extern tree fix_string_type (tree);
b84a3874 797struct varray_head_tag;
35b1a6fa 798extern void constant_expression_warning (tree);
393eda6a 799extern void constant_expression_error (tree);
79bedddc 800extern bool strict_aliasing_warning (tree, tree, tree);
07231d4f 801extern void warnings_for_convert_and_check (tree, tree, tree);
35b1a6fa
AJ
802extern tree convert_and_check (tree, tree);
803extern void overflow_warning (tree);
ca409efd
MLI
804extern void warn_logical_operator (location_t, enum tree_code,
805 enum tree_code, tree, enum tree_code, tree);
a1e45ff0 806extern void check_main_parameter_types (tree decl);
b2ca3702 807extern bool c_determine_visibility (tree);
5bed876a 808extern bool same_scalar_type_ignoring_signedness (tree, tree);
ab76ca54 809
03a08664
ILT
810#define c_sizeof(T) c_sizeof_or_alignof_type (T, true, 1)
811#define c_alignof(T) c_sizeof_or_alignof_type (T, false, 1)
7f4edbcb 812
6715192c
MLI
813/* Subroutine of build_binary_op, used for certain operations. */
814extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise);
815
7f4edbcb
BS
816/* Subroutine of build_binary_op, used for comparison operations.
817 See if the operands have both been converted from subword integer types
818 and, if so, perhaps change them both back to their original type. */
35b1a6fa 819extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
7f4edbcb 820
a5f805df 821extern tree pointer_int_sum (location_t, enum tree_code, tree, tree);
50e60bc3
ZW
822
823/* Add qualifiers to a type, in the fashion for C. */
35b1a6fa 824extern tree c_build_qualified_type (tree, int);
50e60bc3 825
7f4edbcb
BS
826/* Build tree nodes and builtin functions common to both C and C++ language
827 frontends. */
35b1a6fa 828extern void c_common_nodes_and_builtins (void);
d3707adb 829
b482789c
MA
830extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
831
35b1a6fa 832extern void disable_builtin_function (const char *);
7d14c755 833
3b2db49f
MM
834extern void set_compound_literal_name (tree decl);
835
35b1a6fa 836extern tree build_va_arg (tree, tree);
7e8176d7 837
b86f6cd9 838extern unsigned int c_common_init_options (unsigned int, const char **);
35b1a6fa
AJ
839extern bool c_common_post_options (const char **);
840extern bool c_common_init (void);
841extern void c_common_finish (void);
842extern void c_common_parse_file (int);
4862826d 843extern alias_set_type c_common_get_alias_set (tree);
9649812a 844extern void c_register_builtin_type (tree, const char*);
58f9752a
KG
845extern bool c_promoting_integer_type_p (const_tree);
846extern int self_promoting_args_p (const_tree);
12ea3302 847extern tree strip_pointer_operator (tree);
ba992967 848extern tree strip_pointer_or_array_types (tree);
c5ff069d 849extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
d7e7759d 850
d1bd0ded
GK
851/* This is the basic parsing function. */
852extern void c_parse_file (void);
853/* This is misnamed, it actually performs end-of-compilation processing. */
854extern void finish_file (void);
855
c5ff069d 856
ae499cce
MM
857/* These macros provide convenient access to the various _STMT nodes. */
858
325c3691
RH
859/* Nonzero if a given STATEMENT_LIST represents the outermost binding
860 if a statement expression. */
861#define STATEMENT_LIST_STMT_EXPR(NODE) \
862 TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
174283a3
RH
863
864/* Nonzero if a label has been added to the statement list. */
865#define STATEMENT_LIST_HAS_LABEL(NODE) \
866 TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
325c3691 867
928c19bb
JM
868/* C_MAYBE_CONST_EXPR accessors. */
869#define C_MAYBE_CONST_EXPR_PRE(NODE) \
870 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 0)
871#define C_MAYBE_CONST_EXPR_EXPR(NODE) \
872 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 1)
873#define C_MAYBE_CONST_EXPR_INT_OPERANDS(NODE) \
874 TREE_LANG_FLAG_0 (C_MAYBE_CONST_EXPR_CHECK (NODE))
875#define C_MAYBE_CONST_EXPR_NON_CONST(NODE) \
876 TREE_LANG_FLAG_1 (C_MAYBE_CONST_EXPR_CHECK (NODE))
877#define EXPR_INT_CONST_OPERANDS(EXPR) \
878 (INTEGRAL_TYPE_P (TREE_TYPE (EXPR)) \
879 && (TREE_CODE (EXPR) == INTEGER_CST \
880 || (TREE_CODE (EXPR) == C_MAYBE_CONST_EXPR \
881 && C_MAYBE_CONST_EXPR_INT_OPERANDS (EXPR))))
882
0a7394bc
MM
883/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
884#define DECL_C_BIT_FIELD(NODE) \
885 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
886#define SET_DECL_C_BIT_FIELD(NODE) \
887 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
888#define CLEAR_DECL_C_BIT_FIELD(NODE) \
889 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
890
35b1a6fa
AJ
891extern tree do_case (tree, tree);
892extern tree build_stmt (enum tree_code, ...);
893extern tree build_case_label (tree, tree, tree);
f2c5f623 894
ab76ca54
MM
895/* These functions must be defined by each front-end which implements
896 a variant of the C language. They are used in c-common.c. */
897
c9f9eb5d 898extern tree build_unary_op (location_t, enum tree_code, tree, int);
ba47d38d 899extern tree build_binary_op (location_t, enum tree_code, tree, tree, int);
522ddfa2 900extern tree perform_integral_promotions (tree);
ab76ca54 901
d593cb3d
MS
902/* These functions must be defined by each front-end which implements
903 a variant of the C language. They are used by port files. */
904
905extern tree default_conversion (tree);
906
ab76ca54
MM
907/* Given two integer or real types, return the type for their sum.
908 Given two compatible ANSI C types, returns the merged type. */
909
35b1a6fa 910extern tree common_type (tree, tree);
44835fdd 911
35b1a6fa 912extern tree decl_constant_value (tree);
56cb9733 913
19552aa5 914/* Handle increment and decrement of boolean types. */
35b1a6fa 915extern tree boolean_increment (enum tree_code, tree);
19552aa5 916
35b1a6fa 917extern int case_compare (splay_tree_key, splay_tree_key);
8f17b5c5 918
a6c0a76c 919extern tree c_add_case_label (splay_tree, tree, tree, tree, tree);
8f17b5c5 920
fbc315db 921extern void c_do_switch_warnings (splay_tree, location_t, tree, tree);
6de9cd9a 922
35b1a6fa 923extern tree build_function_call (tree, tree);
c70eaeaf 924
48ae6c13
RH
925extern tree resolve_overloaded_builtin (tree, tree);
926
6a3799eb 927extern tree finish_label_address_expr (tree, location_t);
15b732b2
NB
928
929/* Same function prototype, but the C and C++ front ends have
930 different implementations. Used in c-common.c. */
35b1a6fa 931extern tree lookup_label (tree);
10e6657a 932extern tree lookup_name (tree);
15b732b2 933
f83c7f63 934extern bool vector_targets_convertible_p (const_tree t1, const_tree t2);
58f9752a 935extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note);
cc27e657 936
0fab64a3 937extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
8f17b5c5 938
35b1a6fa 939extern void init_c_lex (void);
81a75f0f 940
35b1a6fa 941extern void c_cpp_builtins (cpp_reader *);
ab442df7 942extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
76c3e73e 943
731e8b38
MM
944/* Positive if an implicit `extern "C"' scope has just been entered;
945 negative if such a scope has just been exited. */
7876228d 946extern GTY(()) int pending_lang_change;
731e8b38 947
0e5921e8
ZW
948/* Information recorded about each file examined during compilation. */
949
950struct c_fileinfo
951{
952 int time; /* Time spent in the file. */
5d709b00
ZW
953
954 /* Flags used only by C++.
955 INTERFACE_ONLY nonzero means that we are in an "interface" section
956 of the compiler. INTERFACE_UNKNOWN nonzero means we cannot trust
957 the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN is zero and
958 INTERFACE_ONLY is zero, it means that we are responsible for
959 exporting definitions that others might need. */
960 short interface_only;
0e5921e8
ZW
961 short interface_unknown;
962};
963
35b1a6fa
AJ
964struct c_fileinfo *get_fileinfo (const char *);
965extern void dump_time_statistics (void);
966
967extern bool c_dump_tree (void *, tree);
968
726a989a 969extern void c_warn_unused_result (gimple_seq);
6de9cd9a 970
3a5b9284
RH
971extern void verify_sequence_points (tree);
972
6d4d7b0e 973extern tree fold_offsetof (tree, tree);
ee8a6a3e 974
5ae9ba3e 975/* Places where an lvalue, or modifiable lvalue, may be required.
37dc0d8d 976 Used to select diagnostic messages in lvalue_error and
5ae9ba3e
MM
977 readonly_error. */
978enum lvalue_use {
979 lv_assign,
980 lv_increment,
981 lv_decrement,
982 lv_addressof,
983 lv_asm
984};
985
37dc0d8d 986extern void lvalue_error (enum lvalue_use);
5ae9ba3e 987
aab038d5
RH
988extern int complete_array_type (tree *, tree, bool);
989
48ae6c13
RH
990extern tree builtin_type_for_size (int, bool);
991
ff6b6641 992extern void warn_array_subscript_with_type_char (tree);
100d537d
MLI
993extern void warn_about_parentheses (enum tree_code,
994 enum tree_code, tree,
995 enum tree_code, tree);
c616e51b 996extern void warn_for_unused_label (tree label);
c9f9eb5d 997extern void warn_for_div_by_zero (location_t, tree divisor);
ba47d38d
AH
998extern void warn_for_sign_compare (location_t,
999 tree orig_op0, tree orig_op1,
2d12797c
MLI
1000 tree op0, tree op1,
1001 tree result_type,
1002 enum tree_code resultcode);
d0940d56
DS
1003extern void set_underlying_type (tree x);
1004extern bool is_typedef_decl (tree x);
2a67bec2 1005
7c34ced1 1006/* In c-gimplify.c */
6de9cd9a 1007extern void c_genericize (tree);
726a989a 1008extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
325c3691 1009extern tree c_build_bind_expr (tree, tree);
6de9cd9a 1010
c0d578e6 1011/* In c-pch.c */
35b1a6fa
AJ
1012extern void pch_init (void);
1013extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
1014extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
1015 const char *orig);
1016extern void c_common_write_pch (void);
18c81520 1017extern void c_common_no_more_pch (void);
bc4071dd 1018extern void c_common_pch_pragma (cpp_reader *pfile, const char *);
3fd30b88
GK
1019extern void c_common_print_pch_checksum (FILE *f);
1020
1021/* In *-checksum.c */
1022extern const unsigned char executable_checksum[16];
c0d578e6 1023
ab442df7
MM
1024/* In c-cppbuiltin.c */
1025extern void builtin_define_std (const char *macro);
35b1a6fa
AJ
1026extern void builtin_define_with_value (const char *, const char *, int);
1027extern void c_stddef_cpp_builtins (void);
1028extern void fe_file_change (const struct line_map *);
4bb8ca28 1029extern void c_parse_error (const char *, enum cpp_ttype, tree);
9d10c9a9 1030
e5a002e3
ZL
1031/* Objective-C / Objective-C++ entry points. */
1032
1033/* The following ObjC/ObjC++ functions are called by the C and/or C++
1034 front-ends; they all must have corresponding stubs in stub-objc.c. */
bc095846 1035extern tree objc_is_class_name (tree);
264fa2db
ZL
1036extern tree objc_is_object_ptr (tree);
1037extern void objc_check_decl (tree);
e5a002e3 1038extern int objc_is_reserved_word (tree);
58393038
ZL
1039extern bool objc_compare_types (tree, tree, int, tree);
1040extern void objc_volatilize_decl (tree);
1041extern bool objc_type_quals_match (tree, tree);
6e955430 1042extern tree objc_rewrite_function_call (tree, tree);
264fa2db 1043extern tree objc_message_selector (void);
16b34ad6 1044extern tree objc_lookup_ivar (tree, tree);
325c3691 1045extern void objc_clear_super_receiver (void);
7a3ea201 1046extern int objc_is_public (tree, tree);
a45bcfb2
ZL
1047extern tree objc_is_id (tree);
1048extern void objc_declare_alias (tree, tree);
1049extern void objc_declare_class (tree);
1050extern void objc_declare_protocols (tree);
1051extern tree objc_build_message_expr (tree);
1052extern tree objc_finish_message_expr (tree, tree, tree);
1053extern tree objc_build_selector_expr (tree);
1054extern tree objc_build_protocol_expr (tree);
1055extern tree objc_build_encode_expr (tree);
1056extern tree objc_build_string_object (tree);
1057extern tree objc_get_protocol_qualified_type (tree, tree);
1058extern tree objc_get_class_reference (tree);
1059extern tree objc_get_class_ivars (tree);
1060extern void objc_start_class_interface (tree, tree, tree);
1061extern void objc_start_category_interface (tree, tree, tree);
1062extern void objc_start_protocol (tree, tree);
1063extern void objc_continue_interface (void);
1064extern void objc_finish_interface (void);
1065extern void objc_start_class_implementation (tree, tree);
1066extern void objc_start_category_implementation (tree, tree);
1067extern void objc_continue_implementation (void);
1068extern void objc_finish_implementation (void);
1069extern void objc_set_visibility (int);
1070extern void objc_set_method_type (enum tree_code);
dbb74365 1071extern tree objc_build_method_signature (tree, tree, tree, bool);
a45bcfb2
ZL
1072extern void objc_add_method_declaration (tree);
1073extern void objc_start_method_definition (tree);
1074extern void objc_finish_method_definition (tree);
1075extern void objc_add_instance_variable (tree);
1076extern tree objc_build_keyword_decl (tree, tree, tree);
1077extern tree objc_build_throw_stmt (tree);
1078extern void objc_begin_try_stmt (location_t, tree);
6e955430 1079extern tree objc_finish_try_stmt (void);
a45bcfb2
ZL
1080extern void objc_begin_catch_clause (tree);
1081extern void objc_finish_catch_clause (void);
1082extern void objc_build_finally_clause (location_t, tree);
6e955430 1083extern tree objc_build_synchronized (location_t, tree, tree);
a45bcfb2
ZL
1084extern int objc_static_init_needed_p (void);
1085extern tree objc_generate_static_init_call (tree);
6e955430 1086extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
264fa2db 1087
e5a002e3
ZL
1088/* The following are provided by the C and C++ front-ends, and called by
1089 ObjC/ObjC++. */
bc095846 1090extern void *objc_get_current_scope (void);
e5a002e3
ZL
1091extern void objc_mark_locals_volatile (void *);
1092
9d10c9a9 1093/* In c-ppoutput.c */
35b1a6fa
AJ
1094extern void init_pp_output (FILE *);
1095extern void preprocess_file (cpp_reader *);
1096extern void pp_file_change (const struct line_map *);
8e9ea4d7 1097extern void pp_dir_change (cpp_reader *, const char *);
104f8784 1098extern bool check_missing_format_attribute (tree, tree);
17211ab5 1099
953ff289
DN
1100/* In c-omp.c */
1101extern tree c_finish_omp_master (tree);
1102extern tree c_finish_omp_critical (tree, tree);
1103extern tree c_finish_omp_ordered (tree);
1104extern void c_finish_omp_barrier (void);
fe89d797 1105extern tree c_finish_omp_atomic (enum tree_code, tree, tree);
953ff289 1106extern void c_finish_omp_flush (void);
a68ab351 1107extern void c_finish_omp_taskwait (void);
953ff289
DN
1108extern tree c_finish_omp_for (location_t, tree, tree, tree, tree, tree, tree);
1109extern void c_split_parallel_clauses (tree, tree *, tree *);
1110extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree);
1111
1112/* Not in c-omp.c; provided by the front end. */
1113extern bool c_omp_sharing_predetermined (tree);
1114extern tree c_omp_remap_decl (tree, bool);
1115
ea40ba9c
JM
1116/* In order for the format checking to accept the C frontend
1117 diagnostic framework extensions, you must include this file before
1118 toplev.h, not after. The C front end formats are a subset of those
1119 for C++, so they are the appropriate set to use in common code;
1120 cp-tree.h overrides this for C++. */
1121#ifndef GCC_DIAG_STYLE
1122#define GCC_DIAG_STYLE __gcc_cdiag__
1123#endif
1124
88657302 1125#endif /* ! GCC_C_COMMON_H */