]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-family/c-common.h
* coretypes.h (struct cl_option_handlers): Declare.
[thirdparty/gcc.git] / gcc / c-family / c-common.h
CommitLineData
72040e7e 1/* Definitions for c-common.c.
0b387d23 2 Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
e88d34f6 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
cfaf579d 4 Free Software Foundation, Inc.
72040e7e 5
f12b58b3 6This file is part of GCC.
72040e7e 7
f12b58b3 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
8c4c00c1 10Software Foundation; either version 3, or (at your option) any later
f12b58b3 11version.
72040e7e 12
f12b58b3 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.
72040e7e 17
18You should have received a copy of the GNU General Public License
8c4c00c1 19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
72040e7e 21
518796ad 22#ifndef GCC_C_COMMON_H
23#define GCC_C_COMMON_H
24
e41f0d80 25#include "splay-tree.h"
0d086e18 26#include "cpplib.h"
860251be 27#include "ggc.h"
e41f0d80 28
9f19e0f9 29/* In order for the format checking to accept the C frontend
30 diagnostic framework extensions, you must include this file before
0b205f4c 31 diagnostic-core.h, not after. The C front end formats are a subset of those
9f19e0f9 32 for C++, so they are the appropriate set to use in common code;
33 cp-tree.h overrides this for C++. */
0b205f4c 34#if defined(GCC_DIAGNOSTIC_CORE_H)
35#error \
36In order for the format checking to accept the C front end diagnostic \
37framework extensions, you must include this file before diagnostic-core.h \
38never after.
39#endif
9f19e0f9 40#ifndef GCC_DIAG_STYLE
41#define GCC_DIAG_STYLE __gcc_cdiag__
42#endif
43#include "diagnostic-core.h"
44
5c3247a9 45/* Usage of TREE_LANG_FLAG_?:
2363ef00 46 0: TREE_NEGATED_INT (in INTEGER_CST).
5c3247a9 47 IDENTIFIER_MARKED (used by search routines).
5c3247a9 48 DECL_PRETTY_FUNCTION_P (in VAR_DECL)
a75b1c71 49 C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)
5c3247a9 50 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
2363ef00 51 STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
a75b1c71 52 C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)
4ee9c684 53 2: unused
2e3f4877 54 3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
2363ef00 55 4: unused
5c3247a9 56*/
57
518796ad 58/* Reserved identifiers. This is the union of all the keywords for C,
7fd957fe 59 C++, and Objective-C. All the type modifiers have to be in one
518796ad 60 block at the beginning, because they are used as mask bits. There
61 are 27 type modifiers; if we add many more we will have to redesign
62 the mask mechanism. */
988fc1d1 63
64enum rid
65{
518796ad 66 /* Modifiers: */
88b5b080 67 /* C, in empirical order of frequency. */
518796ad 68 RID_STATIC = 0,
69 RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
70 RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
71 RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
72
73 /* C extensions */
9421ebb9 74 RID_COMPLEX, RID_THREAD, RID_SAT,
518796ad 75
76 /* C++ */
77 RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
78
79 /* ObjC */
f17c0828 80 RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
518796ad 81
c1800156 82 /* C (reserved and imaginary types not implemented, so any use is a
83 syntax error) */
84 RID_IMAGINARY,
85
518796ad 86 /* C */
87 RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
6388cfe2 88 RID_INT128,
518796ad 89 RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
90 RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
91 RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
92 RID_SIZEOF,
93
94 /* C extensions */
95 RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
84e28d80 96 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR,
97 RID_TYPES_COMPATIBLE_P,
c4503c0a 98 RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,
9421ebb9 99 RID_FRACT, RID_ACCUM,
518796ad 100
5c6e5756 101 /* This means to warn that this is a C++ keyword, and then treat it
102 as a normal identifier. */
103 RID_CXX_COMPAT_WARN,
104
65b7f83f 105 /* Too many ways of getting the name of a function as a string */
106 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
107
518796ad 108 /* C++ */
109 RID_BOOL, RID_WCHAR, RID_CLASS,
110 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
111 RID_TEMPLATE, RID_NULL, RID_CATCH,
112 RID_DELETE, RID_FALSE, RID_NAMESPACE,
a0c938f0 113 RID_NEW, RID_OFFSETOF, RID_OPERATOR,
114 RID_THIS, RID_THROW, RID_TRUE,
115 RID_TRY, RID_TYPENAME, RID_TYPEID,
924bbf02 116 RID_USING, RID_CHAR16, RID_CHAR32,
518796ad 117
118 /* casts */
119 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
120
481451eb 121 /* C++ extensions */
122 RID_HAS_NOTHROW_ASSIGN, RID_HAS_NOTHROW_CONSTRUCTOR,
123 RID_HAS_NOTHROW_COPY, RID_HAS_TRIVIAL_ASSIGN,
124 RID_HAS_TRIVIAL_CONSTRUCTOR, RID_HAS_TRIVIAL_COPY,
125 RID_HAS_TRIVIAL_DESTRUCTOR, RID_HAS_VIRTUAL_DESTRUCTOR,
126 RID_IS_ABSTRACT, RID_IS_BASE_OF,
127 RID_IS_CONVERTIBLE_TO, RID_IS_CLASS,
128 RID_IS_EMPTY, RID_IS_ENUM,
129 RID_IS_POD, RID_IS_POLYMORPHIC,
c1c67b4f 130 RID_IS_STD_LAYOUT, RID_IS_TRIVIAL,
481451eb 131 RID_IS_UNION,
132
df1683c2 133 /* C++0x */
98fe9664 134 RID_CONSTEXPR, RID_DECLTYPE, RID_NOEXCEPT, RID_NULLPTR, RID_STATIC_ASSERT,
df1683c2 135
7fd957fe 136 /* Objective-C */
9e8a7e85 137 RID_AT_ENCODE, RID_AT_END,
518796ad 138 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
139 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC,
a0c938f0 140 RID_AT_PROTOCOL, RID_AT_SELECTOR,
c17b85ea 141 RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
142 RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
143 RID_AT_INTERFACE,
518796ad 144 RID_AT_IMPLEMENTATION,
145
6d5d708e 146 /* Named address support, mapping the keyword to a particular named address
147 number. Named address space 0 is reserved for the generic address. If
148 there are more than 254 named addresses, the addr_space_t type will need
149 to be grown from an unsigned char to unsigned short. */
150 RID_ADDR_SPACE_0, /* generic address */
151 RID_ADDR_SPACE_1,
152 RID_ADDR_SPACE_2,
153 RID_ADDR_SPACE_3,
154 RID_ADDR_SPACE_4,
155 RID_ADDR_SPACE_5,
156 RID_ADDR_SPACE_6,
157 RID_ADDR_SPACE_7,
158 RID_ADDR_SPACE_8,
159 RID_ADDR_SPACE_9,
160 RID_ADDR_SPACE_10,
161 RID_ADDR_SPACE_11,
162 RID_ADDR_SPACE_12,
163 RID_ADDR_SPACE_13,
164 RID_ADDR_SPACE_14,
165 RID_ADDR_SPACE_15,
166
167 RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
168 RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
169
518796ad 170 RID_MAX,
171
172 RID_FIRST_MODIFIER = RID_STATIC,
f17c0828 173 RID_LAST_MODIFIER = RID_ONEWAY,
174
6fe11077 175 RID_FIRST_CXX0X = RID_CONSTEXPR,
176 RID_LAST_CXX0X = RID_STATIC_ASSERT,
f17c0828 177 RID_FIRST_AT = RID_AT_ENCODE,
178 RID_LAST_AT = RID_AT_IMPLEMENTATION,
179 RID_FIRST_PQ = RID_IN,
180 RID_LAST_PQ = RID_ONEWAY
988fc1d1 181};
182
f17c0828 183#define OBJC_IS_AT_KEYWORD(rid) \
84166705 184 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
185 (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
f17c0828 186
187#define OBJC_IS_PQ_KEYWORD(rid) \
84166705 188 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
189 (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
f17c0828 190
988fc1d1 191/* The elements of `ridpointers' are identifier nodes for the reserved
192 type names and storage classes. It is indexed by a RID_... value. */
84166705 193extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
988fc1d1 194
72040e7e 195/* Standard named or nameless data types of the C compiler. */
196
197enum c_tree_index
198{
924bbf02 199 CTI_CHAR16_TYPE,
200 CTI_CHAR32_TYPE,
72040e7e 201 CTI_WCHAR_TYPE,
f3449a3c 202 CTI_UNDERLYING_WCHAR_TYPE,
55dbcdfe 203 CTI_WINT_TYPE,
428a1c21 204 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
205 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
e3fff6f2 206 CTI_INTMAX_TYPE,
207 CTI_UINTMAX_TYPE,
72040e7e 208 CTI_WIDEST_INT_LIT_TYPE,
209 CTI_WIDEST_UINT_LIT_TYPE,
210
f3449a3c 211 /* Types for <stdint.h>, that may not be defined on all
212 targets. */
213 CTI_SIG_ATOMIC_TYPE,
214 CTI_INT8_TYPE,
215 CTI_INT16_TYPE,
216 CTI_INT32_TYPE,
217 CTI_INT64_TYPE,
218 CTI_UINT8_TYPE,
219 CTI_UINT16_TYPE,
220 CTI_UINT32_TYPE,
221 CTI_UINT64_TYPE,
222 CTI_INT_LEAST8_TYPE,
223 CTI_INT_LEAST16_TYPE,
224 CTI_INT_LEAST32_TYPE,
225 CTI_INT_LEAST64_TYPE,
226 CTI_UINT_LEAST8_TYPE,
227 CTI_UINT_LEAST16_TYPE,
228 CTI_UINT_LEAST32_TYPE,
229 CTI_UINT_LEAST64_TYPE,
230 CTI_INT_FAST8_TYPE,
231 CTI_INT_FAST16_TYPE,
232 CTI_INT_FAST32_TYPE,
233 CTI_INT_FAST64_TYPE,
234 CTI_UINT_FAST8_TYPE,
235 CTI_UINT_FAST16_TYPE,
236 CTI_UINT_FAST32_TYPE,
237 CTI_UINT_FAST64_TYPE,
238 CTI_INTPTR_TYPE,
239 CTI_UINTPTR_TYPE,
240
72040e7e 241 CTI_CHAR_ARRAY_TYPE,
924bbf02 242 CTI_CHAR16_ARRAY_TYPE,
243 CTI_CHAR32_ARRAY_TYPE,
72040e7e 244 CTI_WCHAR_ARRAY_TYPE,
245 CTI_INT_ARRAY_TYPE,
246 CTI_STRING_TYPE,
247 CTI_CONST_STRING_TYPE,
248
4f9a1c9b 249 /* Type for boolean expressions (bool in C++, int in C). */
3c2239cf 250 CTI_TRUTHVALUE_TYPE,
251 CTI_TRUTHVALUE_TRUE,
252 CTI_TRUTHVALUE_FALSE,
253
72040e7e 254 CTI_DEFAULT_FUNCTION_TYPE,
72040e7e 255
88b5b080 256 /* These are not types, but we have to look them up all the time. */
65b7f83f 257 CTI_FUNCTION_NAME_DECL,
258 CTI_PRETTY_FUNCTION_NAME_DECL,
259 CTI_C99_FUNCTION_NAME_DECL,
260 CTI_SAVED_FUNCTION_NAME_DECLS,
a0c938f0 261
a08e60ae 262 CTI_VOID_ZERO,
263
ae84079f 264 CTI_NULL,
265
72040e7e 266 CTI_MAX
267};
268
89768577 269#define C_CPP_HASHNODE(id) \
270 (&(((struct c_common_identifier *) (id))->node))
7d339f93 271#define C_RID_CODE(id) \
272 ((enum rid) (((struct c_common_identifier *) (id))->node.rid_code))
273#define C_SET_RID_CODE(id, code) \
274 (((struct c_common_identifier *) (id))->node.rid_code = (unsigned char) code)
0d086e18 275
276/* Identifier part common to the C front ends. Inherits from
277 tree_identifier, despite appearances. */
fb1e4f4a 278struct GTY(()) c_common_identifier {
0d086e18 279 struct tree_common common;
573aba85 280 struct cpp_hashnode node;
0d086e18 281};
282
5c6e5756 283/* An entry in the reserved keyword table. */
284
285struct c_common_resword
286{
287 const char *const word;
288 ENUM_BITFIELD(rid) const rid : 16;
289 const unsigned int disable : 16;
290};
291
292/* Disable mask. Keywords are disabled if (reswords[i].disable &
293 mask) is _true_. Thus for keywords which are present in all
294 languages the disable field is zero. */
295
296#define D_CONLY 0x001 /* C only (not in C++). */
297#define D_CXXONLY 0x002 /* C++ only (not in C). */
298#define D_C99 0x004 /* In C, C99 only. */
299#define D_CXX0X 0x008 /* In C++, C++0X only. */
300#define D_EXT 0x010 /* GCC extension. */
301#define D_EXT89 0x020 /* GCC extension incorporated in C99. */
302#define D_ASM 0x040 /* Disabled by -fno-asm. */
303#define D_OBJC 0x080 /* In Objective C and neither C nor C++. */
304#define D_CXX_OBJC 0x100 /* In Objective C, and C++, but not C. */
305#define D_CXXWARN 0x200 /* In C warn with -Wcxx-compat. */
306
307/* The reserved keyword table. */
308extern const struct c_common_resword c_common_reswords[];
309
310/* The number of items in the reserved keyword table. */
311extern const unsigned int num_c_common_reswords;
312
924bbf02 313#define char16_type_node c_global_trees[CTI_CHAR16_TYPE]
314#define char32_type_node c_global_trees[CTI_CHAR32_TYPE]
72040e7e 315#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
f3449a3c 316#define underlying_wchar_type_node c_global_trees[CTI_UNDERLYING_WCHAR_TYPE]
55dbcdfe 317#define wint_type_node c_global_trees[CTI_WINT_TYPE]
428a1c21 318#define signed_size_type_node c_global_trees[CTI_SIGNED_SIZE_TYPE]
319#define unsigned_ptrdiff_type_node c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
e3fff6f2 320#define intmax_type_node c_global_trees[CTI_INTMAX_TYPE]
321#define uintmax_type_node c_global_trees[CTI_UINTMAX_TYPE]
72040e7e 322#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
323#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
324
f3449a3c 325#define sig_atomic_type_node c_global_trees[CTI_SIG_ATOMIC_TYPE]
326#define int8_type_node c_global_trees[CTI_INT8_TYPE]
327#define int16_type_node c_global_trees[CTI_INT16_TYPE]
328#define int32_type_node c_global_trees[CTI_INT32_TYPE]
329#define int64_type_node c_global_trees[CTI_INT64_TYPE]
330#define uint8_type_node c_global_trees[CTI_UINT8_TYPE]
331#define uint16_type_node c_global_trees[CTI_UINT16_TYPE]
332#define c_uint32_type_node c_global_trees[CTI_UINT32_TYPE]
333#define c_uint64_type_node c_global_trees[CTI_UINT64_TYPE]
334#define int_least8_type_node c_global_trees[CTI_INT_LEAST8_TYPE]
335#define int_least16_type_node c_global_trees[CTI_INT_LEAST16_TYPE]
336#define int_least32_type_node c_global_trees[CTI_INT_LEAST32_TYPE]
337#define int_least64_type_node c_global_trees[CTI_INT_LEAST64_TYPE]
338#define uint_least8_type_node c_global_trees[CTI_UINT_LEAST8_TYPE]
339#define uint_least16_type_node c_global_trees[CTI_UINT_LEAST16_TYPE]
340#define uint_least32_type_node c_global_trees[CTI_UINT_LEAST32_TYPE]
341#define uint_least64_type_node c_global_trees[CTI_UINT_LEAST64_TYPE]
342#define int_fast8_type_node c_global_trees[CTI_INT_FAST8_TYPE]
343#define int_fast16_type_node c_global_trees[CTI_INT_FAST16_TYPE]
344#define int_fast32_type_node c_global_trees[CTI_INT_FAST32_TYPE]
345#define int_fast64_type_node c_global_trees[CTI_INT_FAST64_TYPE]
346#define uint_fast8_type_node c_global_trees[CTI_UINT_FAST8_TYPE]
347#define uint_fast16_type_node c_global_trees[CTI_UINT_FAST16_TYPE]
348#define uint_fast32_type_node c_global_trees[CTI_UINT_FAST32_TYPE]
349#define uint_fast64_type_node c_global_trees[CTI_UINT_FAST64_TYPE]
350#define intptr_type_node c_global_trees[CTI_INTPTR_TYPE]
351#define uintptr_type_node c_global_trees[CTI_UINTPTR_TYPE]
352
3c2239cf 353#define truthvalue_type_node c_global_trees[CTI_TRUTHVALUE_TYPE]
354#define truthvalue_true_node c_global_trees[CTI_TRUTHVALUE_TRUE]
355#define truthvalue_false_node c_global_trees[CTI_TRUTHVALUE_FALSE]
4f9a1c9b 356
72040e7e 357#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
924bbf02 358#define char16_array_type_node c_global_trees[CTI_CHAR16_ARRAY_TYPE]
359#define char32_array_type_node c_global_trees[CTI_CHAR32_ARRAY_TYPE]
72040e7e 360#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
361#define int_array_type_node c_global_trees[CTI_INT_ARRAY_TYPE]
362#define string_type_node c_global_trees[CTI_STRING_TYPE]
363#define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE]
364
365#define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
72040e7e 366
65b7f83f 367#define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL]
368#define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
369#define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
370#define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
71d9fc9b 371
a08e60ae 372/* A node for `((void) 0)'. */
373#define void_zero_node c_global_trees[CTI_VOID_ZERO]
374
ae84079f 375/* The node for C++ `__null'. */
376#define null_node c_global_trees[CTI_NULL]
377
1f3233d1 378extern GTY(()) tree c_global_trees[CTI_MAX];
29d00ba7 379
21dda4ee 380/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
381 tree for size reasons. */
ba72912a 382struct GTY((variable_size)) sorted_fields_type {
860251be 383 int len;
384 tree GTY((length ("%h.len"))) elts[1];
385};
386
e41f0d80 387/* Mark which labels are explicitly declared.
388 These may be shadowed, and may be referenced from nested functions. */
389#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
390
29d00ba7 391typedef enum c_language_kind
392{
c0f19401 393 clk_c = 0, /* C90, C94 or C99 */
394 clk_objc = 1, /* clk_c with ObjC features. */
395 clk_cxx = 2, /* ANSI/ISO C++ */
396 clk_objcxx = 3 /* clk_cxx with ObjC features. */
5e6015b1 397}
29d00ba7 398c_language_kind;
399
c0f19401 400/* To test for a specific language use c_language, defined by each
401 front end. For "ObjC features" or "not C++" use the macros. */
402extern c_language_kind c_language;
403
90b8bebd 404#define c_dialect_cxx() ((c_language & clk_cxx) != 0)
405#define c_dialect_objc() ((c_language & clk_objc) != 0)
c0f19401 406
f08923b3 407/* The various name of operator that appears in error messages. */
408typedef enum ref_operator {
409 /* NULL */
410 RO_NULL,
411 /* array indexing */
412 RO_ARRAY_INDEXING,
413 /* unary * */
414 RO_UNARY_STAR,
415 /* -> */
416 RO_ARROW,
417 /* implicit conversion */
418 RO_IMPLICIT_CONVERSION
419} ref_operator;
420
a08e60ae 421/* Information about a statement tree. */
422
fb1e4f4a 423struct GTY(()) stmt_tree_s {
0975351b 424 /* The current statement list being collected. */
2363ef00 425 tree x_cur_stmt_list;
426
d10cfa8d 427 /* In C++, Nonzero if we should treat statements as full
a08e60ae 428 expressions. In particular, this variable is no-zero if at the
429 end of a statement we should destroy any temporaries created
430 during that statement. Similarly, if, at the end of a block, we
431 should destroy any local variables in this block. Normally, this
d10cfa8d 432 variable is nonzero, since those are the normal semantics of
a08e60ae 433 C++.
434
435 However, in order to represent aggregate initialization code as
436 tree structure, we use statement-expressions. The statements
437 within the statement expression should not result in cleanups
5e6015b1 438 being run until the entire enclosing statement is complete.
a08e60ae 439
440 This flag has no effect in C. */
5e6015b1 441 int stmts_are_full_exprs_p;
a08e60ae 442};
443
444typedef struct stmt_tree_s *stmt_tree;
445
446/* Global state pertinent to the current function. Some C dialects
447 extend this structure with additional fields. */
448
fb1e4f4a 449struct GTY(()) c_language_function {
a08e60ae 450 /* While we are parsing the function, this contains information
451 about the statement-tree that we are building. */
452 struct stmt_tree_s x_stmt_tree;
453};
454
0975351b 455/* When building a statement-tree, this is the current statement list
2363ef00 456 being collected. It's TREE_CHAIN is a back-pointer to the previous
0975351b 457 statement list. */
a08e60ae 458
2363ef00 459#define cur_stmt_list (current_stmt_tree ()->x_cur_stmt_list)
e41f0d80 460
461/* Language-specific hooks. */
462
caa6fdce 463/* If non-NULL, this function is called after a precompile header file
464 is loaded. */
465extern void (*lang_post_pch_load) (void);
466
393b349a 467extern void push_file_scope (void);
468extern void pop_file_scope (void);
1cae46be 469extern stmt_tree current_stmt_tree (void);
2363ef00 470extern tree push_stmt_list (void);
2363ef00 471extern tree pop_stmt_list (tree);
1cae46be 472extern tree add_stmt (tree);
2363ef00 473extern void push_cleanup (tree, tree, bool);
1e8e9920 474extern tree pushdecl_top_level (tree);
475extern tree pushdecl (tree);
8458f4ca 476extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
e60a6f7b 477 location_t, tree, tree);
f08923b3 478extern tree build_indirect_ref (location_t, tree, ref_operator);
1cae46be 479
05f9ea78 480extern int c_expand_decl (tree);
e87da6ae 481
860251be 482extern int field_decl_cmp (const void *, const void *);
a0c938f0 483extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
484 void *);
9f627b1a 485extern bool has_c_linkage (const_tree decl);
573aba85 486\f
574a6990 487/* Switches common to the C front ends. */
488
f7070933 489/* Nonzero means don't output line number information. */
490
491extern char flag_no_line_commands;
492
493/* Nonzero causes -E output not to be done, but directives such as
494 #define that have side effects are still obeyed. */
495
496extern char flag_no_output;
497
34c3de48 498/* Nonzero means dump macros in some fashion; contains the 'D', 'M',
499 'N' or 'U' of the command line switch. */
f7070933 500
501extern char flag_dump_macros;
502
503/* Nonzero means pass #include lines through to the output. */
504
505extern char flag_dump_includes;
506
d718b525 507/* Nonzero means process PCH files while preprocessing. */
508
509extern bool flag_pch_preprocess;
510
573aba85 511/* The file name to which we should write a precompiled header, or
512 NULL if no header will be written in this compile. */
513
514extern const char *pch_file;
515
1ed9d5f5 516/* Nonzero if an ISO standard was selected. It rejects macros in the
517 user's namespace. */
573aba85 518
1ed9d5f5 519extern int flag_iso;
520
a0c938f0 521/* Warn about #pragma directives that are not recognized. */
574a6990 522
a0c938f0 523extern int warn_unknown_pragmas; /* Tri state variable. */
574a6990 524
574a6990 525/* Warn about format/argument anomalies in calls to formatted I/O functions
526 (*printf, *scanf, strftime, strfmon, etc.). */
29d00ba7 527
528extern int warn_format;
529
dbf6c367 530
574a6990 531/* C/ObjC language option variables. */
dbf6c367 532
481c6ce6 533
574a6990 534/* Nonzero means allow type mismatches in conditional expressions;
535 just make their values `void'. */
e37414d8 536
574a6990 537extern int flag_cond_mismatch;
bd08a4e6 538
ec35ee92 539/* Nonzero means enable C89 Amendment 1 features. */
49bc3768 540
541extern int flag_isoc94;
542
39012afb 543/* Nonzero means use the ISO C99 (or C1X) dialect of C. */
29d00ba7 544
545extern int flag_isoc99;
546
39012afb 547/* Nonzero means use the ISO C1X dialect of C. */
548
549extern int flag_isoc1x;
550
8b332087 551/* Nonzero means that we have builtin functions, and main is an int. */
9bee1c90 552
553extern int flag_hosted;
554
574a6990 555/* ObjC language option variables. */
556
557
574a6990 558/* Tells the compiler that this is a special run. Do not perform any
559 compiling, instead we are to test some platform dependent features
560 and output a C header file with appropriate definitions. */
561
562extern int print_struct_values;
563
564/* ???. Undocumented. */
565
e23fd334 566extern const char *constant_string_class_name;
574a6990 567
574a6990 568
569/* C++ language option variables. */
570
571
574a6990 572/* Nonzero means generate separate instantiation control files and
573 juggle them at link time. */
574
575extern int flag_use_repository;
576
6dcdb5de 577/* The supported C++ dialects. */
578
579enum cxx_dialect {
580 /* C++98 */
581 cxx98,
582 /* Experimental features that are likely to become part of
583 C++0x. */
584 cxx0x
585};
0fe6eeac 586
6dcdb5de 587/* The C++ dialect being used. C++98 is the default. */
588extern enum cxx_dialect cxx_dialect;
0fe6eeac 589
574a6990 590/* Maximum template instantiation depth. This limit is rather
591 arbitrary, but it exists to limit the time it takes to notice
592 infinite template instantiations. */
593
594extern int max_tinst_depth;
29d00ba7 595
48d94ede 596/* Nonzero means that we should not issue warnings about problems that
597 occur when the code is executed, because the code being processed
598 is not expected to be executed. This is set during parsing. This
599 is used for cases like sizeof() and "0 ? a : b". This is a count,
600 not a bool, because unexecuted expressions can nest. */
93894129 601
48d94ede 602extern int c_inhibit_evaluation_warnings;
93894129 603
7f5f3953 604/* Whether lexing has been completed, so subsequent preprocessor
605 errors should use the compiler's input_location. */
606
607extern bool done_lexing;
608
29d00ba7 609/* C types are partitioned into three subsets: object, function, and
610 incomplete types. */
611#define C_TYPE_OBJECT_P(type) \
612 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
613
614#define C_TYPE_INCOMPLETE_P(type) \
615 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
616
617#define C_TYPE_FUNCTION_P(type) \
618 (TREE_CODE (type) == FUNCTION_TYPE)
619
620/* For convenience we define a single macro to identify the class of
621 object or incomplete types. */
622#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
623 (!C_TYPE_FUNCTION_P (type))
624
f8e93a2e 625/* Attribute table common to the C front ends. */
626extern const struct attribute_spec c_common_attribute_table[];
627extern const struct attribute_spec c_common_format_attribute_table[];
628
65b7f83f 629/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
9e5a737d 630 ID is the identifier to use, NAME is the string.
631 TYPE_DEP indicates whether it depends on type of the function or not
632 (i.e. __PRETTY_FUNCTION__). */
633
e60a6f7b 634extern tree (*make_fname_decl) (location_t, tree, int);
1cae46be 635
6ad8abad 636/* In c-decl.c and cp/tree.c. FIXME. */
34208e18 637extern void c_register_addr_space (const char *str, addr_space_t as);
6ad8abad 638
639/* In c-common.c. */
6d5d708e 640extern const char *c_addr_space_name (addr_space_t as);
1cae46be 641extern tree identifier_global_value (tree);
642extern void record_builtin_type (enum rid, const char *, tree);
643extern tree build_void_list_node (void);
644extern void start_fname_decls (void);
645extern void finish_fname_decls (void);
646extern const char *fname_as_string (int);
e3b80d49 647extern tree fname_decl (location_t, unsigned, tree);
1cae46be 648
d01f58f9 649extern void check_function_arguments (tree, int, tree *, tree);
1cae46be 650extern void check_function_arguments_recurse (void (*)
651 (void *, tree,
652 unsigned HOST_WIDE_INT),
653 void *, tree,
654 unsigned HOST_WIDE_INT);
d43cee80 655extern bool check_builtin_function_arguments (tree, int, tree *);
d01f58f9 656extern void check_function_format (tree, int, tree *);
1cae46be 657extern void set_Wformat (int);
658extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
659extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
47b19b94 660extern bool attribute_takes_identifier_p (const_tree);
b78351e5 661extern bool c_common_handle_option (size_t, const char *, int, int,
662 const struct cl_option_handlers *);
1cae46be 663extern tree c_common_type_for_mode (enum machine_mode, int);
664extern tree c_common_type_for_size (unsigned int, int);
9421ebb9 665extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int,
666 int, int);
11773141 667extern tree c_common_unsigned_type (tree);
1cae46be 668extern tree c_common_signed_type (tree);
669extern tree c_common_signed_or_unsigned_type (int, tree);
c0e47fd4 670extern tree c_build_bitfield_integer_type (unsigned HOST_WIDE_INT, int);
9f627b1a 671extern bool decl_with_nonnull_addr_p (const_tree);
a75b1c71 672extern tree c_fully_fold (tree, bool, bool *);
673extern tree decl_constant_value_for_optimization (tree);
f59e3889 674extern tree c_wrap_maybe_const (tree, bool);
a75b1c71 675extern tree c_save_expr (tree);
8e70fb09 676extern tree c_common_truthvalue_conversion (location_t, tree);
1cae46be 677extern void c_apply_type_quals_to_decl (int, tree);
e60a6f7b 678extern tree c_sizeof_or_alignof_type (location_t, tree, bool, int);
679extern tree c_alignof_expr (location_t, tree);
72040e7e 680/* Print an error message for invalid operands to arith operation CODE.
681 NOP_EXPR is used as a special case (see truthvalue_conversion). */
8e70fb09 682extern void binary_op_error (location_t, enum tree_code, tree, tree);
1cae46be 683extern tree fix_string_type (tree);
1cae46be 684extern void constant_expression_warning (tree);
07317e69 685extern void constant_expression_error (tree);
e6fa0ea6 686extern bool strict_aliasing_warning (tree, tree, tree);
59dd8856 687extern void warnings_for_convert_and_check (tree, tree, tree);
1cae46be 688extern tree convert_and_check (tree, tree);
e60a6f7b 689extern void overflow_warning (location_t, tree);
9c20c4fc 690extern void warn_logical_operator (location_t, enum tree_code, tree,
03033af4 691 enum tree_code, tree, enum tree_code, tree);
3f08e399 692extern void check_main_parameter_types (tree decl);
3aa0c315 693extern bool c_determine_visibility (tree);
491255f5 694extern bool same_scalar_type_ignoring_signedness (tree, tree);
3ae3a17f 695extern void mark_valid_location_for_stdc_pragma (bool);
696extern bool valid_location_for_stdc_pragma_p (void);
697extern void set_float_const_decimal64 (void);
698extern void clear_float_const_decimal64 (void);
699extern bool float_const_decimal64_p (void);
29d00ba7 700
e60a6f7b 701#define c_sizeof(LOC, T) c_sizeof_or_alignof_type (LOC, T, true, 1)
702#define c_alignof(LOC, T) c_sizeof_or_alignof_type (LOC, T, false, 1)
72040e7e 703
2561cea2 704/* Subroutine of build_binary_op, used for certain operations. */
705extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise);
706
72040e7e 707/* Subroutine of build_binary_op, used for comparison operations.
708 See if the operands have both been converted from subword integer types
709 and, if so, perhaps change them both back to their original type. */
1cae46be 710extern tree shorten_compare (tree *, tree *, tree *, enum tree_code *);
72040e7e 711
389dd41b 712extern tree pointer_int_sum (location_t, enum tree_code, tree, tree);
83e32a86 713
714/* Add qualifiers to a type, in the fashion for C. */
1cae46be 715extern tree c_build_qualified_type (tree, int);
83e32a86 716
72040e7e 717/* Build tree nodes and builtin functions common to both C and C++ language
718 frontends. */
1cae46be 719extern void c_common_nodes_and_builtins (void);
a66c9326 720
1cae46be 721extern void disable_builtin_function (const char *);
dd878098 722
79b01846 723extern void set_compound_literal_name (tree decl);
724
e60a6f7b 725extern tree build_va_arg (location_t, tree, tree);
43f74bc4 726
e88d34f6 727struct diagnostic_context;
728
729extern unsigned int c_common_option_lang_mask (void);
730extern void c_common_initialize_diagnostics (struct diagnostic_context *);
731extern bool c_common_complain_wrong_lang_p (const struct cl_option *);
732extern void c_common_init_options (unsigned int, struct cl_decoded_option *);
1cae46be 733extern bool c_common_post_options (const char **);
734extern bool c_common_init (void);
735extern void c_common_finish (void);
736extern void c_common_parse_file (int);
32c2fdea 737extern alias_set_type c_common_get_alias_set (tree);
b268e47e 738extern void c_register_builtin_type (tree, const char*);
9f627b1a 739extern bool c_promoting_integer_type_p (const_tree);
740extern int self_promoting_args_p (const_tree);
c10de5e7 741extern tree strip_pointer_operator (tree);
57a0ed23 742extern tree strip_pointer_or_array_types (tree);
624d37a6 743extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
92915e1c 744
40109983 745/* This is the basic parsing function. */
746extern void c_parse_file (void);
747/* This is misnamed, it actually performs end-of-compilation processing. */
748extern void finish_file (void);
749
b9bdfa0b 750extern void warn_for_omitted_condop (location_t, tree);
624d37a6 751
a08e60ae 752/* These macros provide convenient access to the various _STMT nodes. */
753
2363ef00 754/* Nonzero if a given STATEMENT_LIST represents the outermost binding
755 if a statement expression. */
756#define STATEMENT_LIST_STMT_EXPR(NODE) \
757 TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
2e3f4877 758
759/* Nonzero if a label has been added to the statement list. */
760#define STATEMENT_LIST_HAS_LABEL(NODE) \
761 TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
2363ef00 762
a75b1c71 763/* C_MAYBE_CONST_EXPR accessors. */
764#define C_MAYBE_CONST_EXPR_PRE(NODE) \
765 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 0)
766#define C_MAYBE_CONST_EXPR_EXPR(NODE) \
767 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 1)
768#define C_MAYBE_CONST_EXPR_INT_OPERANDS(NODE) \
769 TREE_LANG_FLAG_0 (C_MAYBE_CONST_EXPR_CHECK (NODE))
770#define C_MAYBE_CONST_EXPR_NON_CONST(NODE) \
771 TREE_LANG_FLAG_1 (C_MAYBE_CONST_EXPR_CHECK (NODE))
772#define EXPR_INT_CONST_OPERANDS(EXPR) \
773 (INTEGRAL_TYPE_P (TREE_TYPE (EXPR)) \
774 && (TREE_CODE (EXPR) == INTEGER_CST \
775 || (TREE_CODE (EXPR) == C_MAYBE_CONST_EXPR \
776 && C_MAYBE_CONST_EXPR_INT_OPERANDS (EXPR))))
777
c25509f2 778/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
779#define DECL_C_BIT_FIELD(NODE) \
780 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
781#define SET_DECL_C_BIT_FIELD(NODE) \
782 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
783#define CLEAR_DECL_C_BIT_FIELD(NODE) \
784 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
785
e60a6f7b 786extern tree do_case (location_t, tree, tree);
787extern tree build_stmt (location_t, enum tree_code, ...);
788extern tree build_case_label (location_t, tree, tree, tree);
5c3247a9 789
29d00ba7 790/* These functions must be defined by each front-end which implements
791 a variant of the C language. They are used in c-common.c. */
792
b6889cb0 793extern tree build_unary_op (location_t, enum tree_code, tree, int);
8e70fb09 794extern tree build_binary_op (location_t, enum tree_code, tree, tree, int);
b96dc121 795extern tree perform_integral_promotions (tree);
29d00ba7 796
8f0d6fd4 797/* These functions must be defined by each front-end which implements
798 a variant of the C language. They are used by port files. */
799
800extern tree default_conversion (tree);
801
29d00ba7 802/* Given two integer or real types, return the type for their sum.
803 Given two compatible ANSI C types, returns the merged type. */
804
1cae46be 805extern tree common_type (tree, tree);
351c3a61 806
1cae46be 807extern tree decl_constant_value (tree);
225ec6aa 808
4f9a1c9b 809/* Handle increment and decrement of boolean types. */
1cae46be 810extern tree boolean_increment (enum tree_code, tree);
4f9a1c9b 811
1cae46be 812extern int case_compare (splay_tree_key, splay_tree_key);
e41f0d80 813
e60a6f7b 814extern tree c_add_case_label (location_t, splay_tree, tree, tree, tree, tree);
e41f0d80 815
e7911019 816extern void c_do_switch_warnings (splay_tree, location_t, tree, tree);
4ee9c684 817
e60a6f7b 818extern tree build_function_call (location_t, tree, tree);
edbbe5ca 819
e60a6f7b 820extern tree build_function_call_vec (location_t, tree,
821 VEC(tree,gc) *, VEC(tree,gc) *);
b9c74b4d 822
e60a6f7b 823extern tree resolve_overloaded_builtin (location_t, tree, VEC(tree,gc) *);
b6a5fc45 824
dda49785 825extern tree finish_label_address_expr (tree, location_t);
d0a47c8d 826
827/* Same function prototype, but the C and C++ front ends have
828 different implementations. Used in c-common.c. */
1cae46be 829extern tree lookup_label (tree);
d1c41717 830extern tree lookup_name (tree);
79973b57 831extern bool lvalue_p (const_tree);
d0a47c8d 832
ed7c4e62 833extern bool vector_targets_convertible_p (const_tree t1, const_tree t2);
9f627b1a 834extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note);
8b4b9810 835
60ffaf4d 836extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
e41f0d80 837
1cae46be 838extern void init_c_lex (void);
90cc7820 839
1cae46be 840extern void c_cpp_builtins (cpp_reader *);
46f8e3b0 841extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
9f19e0f9 842extern bool c_cpp_error (cpp_reader *, int, int, location_t, unsigned int,
843 const char *, va_list *)
844 ATTRIBUTE_GCC_DIAG(6,0);
6019c708 845
be1ee46e 846/* Positive if an implicit `extern "C"' scope has just been entered;
847 negative if such a scope has just been exited. */
34585765 848extern GTY(()) int pending_lang_change;
be1ee46e 849
518796ad 850/* Information recorded about each file examined during compilation. */
851
852struct c_fileinfo
853{
854 int time; /* Time spent in the file. */
62bf98ad 855
856 /* Flags used only by C++.
857 INTERFACE_ONLY nonzero means that we are in an "interface" section
858 of the compiler. INTERFACE_UNKNOWN nonzero means we cannot trust
859 the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN is zero and
860 INTERFACE_ONLY is zero, it means that we are responsible for
861 exporting definitions that others might need. */
862 short interface_only;
518796ad 863 short interface_unknown;
864};
865
1cae46be 866struct c_fileinfo *get_fileinfo (const char *);
867extern void dump_time_statistics (void);
868
869extern bool c_dump_tree (void *, tree);
870
2569a1be 871extern void verify_sequence_points (tree);
872
d897f7c2 873extern tree fold_offsetof (tree, tree);
af28855b 874
ab6bb714 875/* Places where an lvalue, or modifiable lvalue, may be required.
e35976b1 876 Used to select diagnostic messages in lvalue_error and
ab6bb714 877 readonly_error. */
878enum lvalue_use {
879 lv_assign,
880 lv_increment,
881 lv_decrement,
882 lv_addressof,
883 lv_asm
884};
885
e35976b1 886extern void lvalue_error (enum lvalue_use);
ab6bb714 887
c271bdb2 888extern int complete_array_type (tree *, tree, bool);
889
b6a5fc45 890extern tree builtin_type_for_size (int, bool);
891
2840aae4 892extern void warn_array_subscript_with_type_char (tree);
82012ffe 893extern void warn_about_parentheses (enum tree_code,
894 enum tree_code, tree,
895 enum tree_code, tree);
92fccaaa 896extern void warn_for_unused_label (tree label);
b6889cb0 897extern void warn_for_div_by_zero (location_t, tree divisor);
8e70fb09 898extern void warn_for_sign_compare (location_t,
48e1416a 899 tree orig_op0, tree orig_op1,
900 tree op0, tree op1,
901 tree result_type,
13869a99 902 enum tree_code resultcode);
41771881 903extern void set_underlying_type (tree x);
f352a3fb 904extern VEC(tree,gc) *make_tree_vector (void);
905extern void release_tree_vector (VEC(tree,gc) *);
906extern VEC(tree,gc) *make_tree_vector_single (tree);
907extern VEC(tree,gc) *make_tree_vector_copy (const VEC(tree,gc) *);
e534436e 908
8495c0ca 909/* In c-gimplify.c */
4ee9c684 910extern void c_genericize (tree);
75a70cf9 911extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
e60a6f7b 912extern tree c_build_bind_expr (location_t, tree, tree);
4ee9c684 913
d718b525 914/* In c-pch.c */
1cae46be 915extern void pch_init (void);
916extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
917extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
918 const char *orig);
919extern void c_common_write_pch (void);
ddf4604f 920extern void c_common_no_more_pch (void);
b75b98aa 921extern void c_common_pch_pragma (cpp_reader *pfile, const char *);
f1035767 922extern void c_common_print_pch_checksum (FILE *f);
923
924/* In *-checksum.c */
925extern const unsigned char executable_checksum[16];
d718b525 926
46f8e3b0 927/* In c-cppbuiltin.c */
928extern void builtin_define_std (const char *macro);
1cae46be 929extern void builtin_define_with_value (const char *, const char *, int);
930extern void c_stddef_cpp_builtins (void);
931extern void fe_file_change (const struct line_map *);
ba99525e 932extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char);
e920deaf 933
11a35d8f 934/* Objective-C / Objective-C++ entry points. */
935
936/* The following ObjC/ObjC++ functions are called by the C and/or C++
937 front-ends; they all must have corresponding stubs in stub-objc.c. */
99d7d801 938extern tree objc_is_class_name (tree);
c17b85ea 939extern tree objc_is_object_ptr (tree);
940extern void objc_check_decl (tree);
11a35d8f 941extern int objc_is_reserved_word (tree);
34d3c5de 942extern bool objc_compare_types (tree, tree, int, tree);
943extern void objc_volatilize_decl (tree);
944extern bool objc_type_quals_match (tree, tree);
ddb5d39d 945extern tree objc_rewrite_function_call (tree, tree);
c17b85ea 946extern tree objc_message_selector (void);
e913c82d 947extern tree objc_lookup_ivar (tree, tree);
2363ef00 948extern void objc_clear_super_receiver (void);
43bf5d72 949extern int objc_is_public (tree, tree);
5bc0b3a8 950extern tree objc_is_id (tree);
951extern void objc_declare_alias (tree, tree);
952extern void objc_declare_class (tree);
953extern void objc_declare_protocols (tree);
954extern tree objc_build_message_expr (tree);
955extern tree objc_finish_message_expr (tree, tree, tree);
e60a6f7b 956extern tree objc_build_selector_expr (location_t, tree);
5bc0b3a8 957extern tree objc_build_protocol_expr (tree);
958extern tree objc_build_encode_expr (tree);
959extern tree objc_build_string_object (tree);
960extern tree objc_get_protocol_qualified_type (tree, tree);
961extern tree objc_get_class_reference (tree);
962extern tree objc_get_class_ivars (tree);
963extern void objc_start_class_interface (tree, tree, tree);
964extern void objc_start_category_interface (tree, tree, tree);
965extern void objc_start_protocol (tree, tree);
966extern void objc_continue_interface (void);
967extern void objc_finish_interface (void);
968extern void objc_start_class_implementation (tree, tree);
969extern void objc_start_category_implementation (tree, tree);
970extern void objc_continue_implementation (void);
971extern void objc_finish_implementation (void);
972extern void objc_set_visibility (int);
973extern void objc_set_method_type (enum tree_code);
450302fe 974extern tree objc_build_method_signature (tree, tree, tree, bool);
5bc0b3a8 975extern void objc_add_method_declaration (tree);
976extern void objc_start_method_definition (tree);
977extern void objc_finish_method_definition (tree);
978extern void objc_add_instance_variable (tree);
979extern tree objc_build_keyword_decl (tree, tree, tree);
e60a6f7b 980extern tree objc_build_throw_stmt (location_t, tree);
5bc0b3a8 981extern void objc_begin_try_stmt (location_t, tree);
ddb5d39d 982extern tree objc_finish_try_stmt (void);
5bc0b3a8 983extern void objc_begin_catch_clause (tree);
984extern void objc_finish_catch_clause (void);
985extern void objc_build_finally_clause (location_t, tree);
ddb5d39d 986extern tree objc_build_synchronized (location_t, tree, tree);
5bc0b3a8 987extern int objc_static_init_needed_p (void);
988extern tree objc_generate_static_init_call (tree);
ddb5d39d 989extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
c17b85ea 990
11a35d8f 991/* The following are provided by the C and C++ front-ends, and called by
992 ObjC/ObjC++. */
99d7d801 993extern void *objc_get_current_scope (void);
11a35d8f 994extern void objc_mark_locals_volatile (void *);
995
e920deaf 996/* In c-ppoutput.c */
1cae46be 997extern void init_pp_output (FILE *);
998extern void preprocess_file (cpp_reader *);
999extern void pp_file_change (const struct line_map *);
d732fcf0 1000extern void pp_dir_change (cpp_reader *, const char *);
be7350e7 1001extern bool check_missing_format_attribute (tree, tree);
573aba85 1002
1e8e9920 1003/* In c-omp.c */
e60a6f7b 1004extern tree c_finish_omp_master (location_t, tree);
1005extern tree c_finish_omp_critical (location_t, tree, tree);
1006extern tree c_finish_omp_ordered (location_t, tree);
1007extern void c_finish_omp_barrier (location_t);
1008extern tree c_finish_omp_atomic (location_t, enum tree_code, tree, tree);
1009extern void c_finish_omp_flush (location_t);
1010extern void c_finish_omp_taskwait (location_t);
1e8e9920 1011extern tree c_finish_omp_for (location_t, tree, tree, tree, tree, tree, tree);
e60a6f7b 1012extern void c_split_parallel_clauses (location_t, tree, tree *, tree *);
1e8e9920 1013extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree);
1014
1015/* Not in c-omp.c; provided by the front end. */
1016extern bool c_omp_sharing_predetermined (tree);
1017extern tree c_omp_remap_decl (tree, bool);
1a4c44c5 1018extern void record_types_used_by_current_var_decl (tree);
1e8e9920 1019
2a281353 1020#endif /* ! GCC_C_COMMON_H */