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