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