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