]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-family/c-common.h
2015-06-04 Andrew MacLeod <amacleod@redhat.com>
[thirdparty/gcc.git] / gcc / c-family / c-common.h
CommitLineData
72040e7e 1/* Definitions for c-common.c.
d353bf18 2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
72040e7e 3
f12b58b3 4This file is part of GCC.
72040e7e 5
f12b58b3 6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8c4c00c1 8Software Foundation; either version 3, or (at your option) any later
f12b58b3 9version.
72040e7e 10
f12b58b3 11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
72040e7e 15
16You should have received a copy of the GNU General Public License
8c4c00c1 17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
72040e7e 19
518796ad 20#ifndef GCC_C_COMMON_H
21#define GCC_C_COMMON_H
22
e41f0d80 23#include "splay-tree.h"
0d086e18 24#include "cpplib.h"
860251be 25#include "ggc.h"
b20a8bb4 26#include "hashtab.h"
27#include "hash-set.h"
b20a8bb4 28#include "input.h"
29#include "statistics.h"
30#include "vec.h"
b20a8bb4 31#include "alias.h"
32#include "flags.h"
33#include "symtab.h"
b20a8bb4 34#include "inchash.h"
4a020a8c 35#include "tree.h"
b20a8bb4 36#include "fold-const.h"
e41f0d80 37
9f19e0f9 38/* In order for the format checking to accept the C frontend
39 diagnostic framework extensions, you must include this file before
0b205f4c 40 diagnostic-core.h, not after. The C front end formats are a subset of those
9f19e0f9 41 for C++, so they are the appropriate set to use in common code;
42 cp-tree.h overrides this for C++. */
0b205f4c 43#if defined(GCC_DIAGNOSTIC_CORE_H)
44#error \
45In order for the format checking to accept the C front end diagnostic \
46framework extensions, you must include this file before diagnostic-core.h \
47never after.
48#endif
9f19e0f9 49#ifndef GCC_DIAG_STYLE
50#define GCC_DIAG_STYLE __gcc_cdiag__
51#endif
52#include "diagnostic-core.h"
53
5c3247a9 54/* Usage of TREE_LANG_FLAG_?:
bf2a43ff 55 0: IDENTIFIER_MARKED (used by search routines).
a75b1c71 56 C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)
5c3247a9 57 1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
2363ef00 58 STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
a75b1c71 59 C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)
4ee9c684 60 2: unused
2e3f4877 61 3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
2363ef00 62 4: unused
5c3247a9 63*/
64
518796ad 65/* Reserved identifiers. This is the union of all the keywords for C,
7fd957fe 66 C++, and Objective-C. All the type modifiers have to be in one
518796ad 67 block at the beginning, because they are used as mask bits. There
985c6e3a 68 are 28 type modifiers; if we add many more we will have to redesign
518796ad 69 the mask mechanism. */
988fc1d1 70
71enum rid
72{
518796ad 73 /* Modifiers: */
88b5b080 74 /* C, in empirical order of frequency. */
518796ad 75 RID_STATIC = 0,
76 RID_UNSIGNED, RID_LONG, RID_CONST, RID_EXTERN,
77 RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
78 RID_VOLATILE, RID_SIGNED, RID_AUTO, RID_RESTRICT,
b560fabd 79 RID_NORETURN, RID_ATOMIC,
518796ad 80
81 /* C extensions */
9421ebb9 82 RID_COMPLEX, RID_THREAD, RID_SAT,
518796ad 83
84 /* C++ */
85 RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
86
b27e241e 87 /* ObjC ("PQ" reserved words - they do not appear after a '@' and
88 are keywords only in specific contexts) */
f17c0828 89 RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
518796ad 90
86c110ac 91 /* ObjC ("PATTR" reserved words - they do not appear after a '@'
92 and are keywords only as property attributes) */
7590f0e5 93 RID_GETTER, RID_SETTER,
94 RID_READONLY, RID_READWRITE,
95 RID_ASSIGN, RID_RETAIN, RID_COPY,
7590f0e5 96 RID_NONATOMIC,
86c110ac 97
c1800156 98 /* C (reserved and imaginary types not implemented, so any use is a
99 syntax error) */
100 RID_IMAGINARY,
101
518796ad 102 /* C */
103 RID_INT, RID_CHAR, RID_FLOAT, RID_DOUBLE, RID_VOID,
104 RID_ENUM, RID_STRUCT, RID_UNION, RID_IF, RID_ELSE,
105 RID_WHILE, RID_DO, RID_FOR, RID_SWITCH, RID_CASE,
106 RID_DEFAULT, RID_BREAK, RID_CONTINUE, RID_RETURN, RID_GOTO,
107 RID_SIZEOF,
108
109 /* C extensions */
110 RID_ASM, RID_TYPEOF, RID_ALIGNOF, RID_ATTRIBUTE, RID_VA_ARG,
84e28d80 111 RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR,
6cf89e04 112 RID_TYPES_COMPATIBLE_P, RID_BUILTIN_COMPLEX, RID_BUILTIN_SHUFFLE,
c4503c0a 113 RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,
6f58cf06 114 RID_FRACT, RID_ACCUM, RID_AUTO_TYPE, RID_BUILTIN_CALL_WITH_STATIC_CHAIN,
518796ad 115
32074525 116 /* C11 */
7aa04c8d 117 RID_ALIGNAS, RID_GENERIC,
83e25171 118
5c6e5756 119 /* This means to warn that this is a C++ keyword, and then treat it
120 as a normal identifier. */
121 RID_CXX_COMPAT_WARN,
122
4c0315d0 123 /* GNU transactional memory extension */
124 RID_TRANSACTION_ATOMIC, RID_TRANSACTION_RELAXED, RID_TRANSACTION_CANCEL,
125
65b7f83f 126 /* Too many ways of getting the name of a function as a string */
127 RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
128
b27e241e 129 /* C++ (some of these are keywords in Objective-C as well, but only
130 if they appear after a '@') */
518796ad 131 RID_BOOL, RID_WCHAR, RID_CLASS,
132 RID_PUBLIC, RID_PRIVATE, RID_PROTECTED,
133 RID_TEMPLATE, RID_NULL, RID_CATCH,
134 RID_DELETE, RID_FALSE, RID_NAMESPACE,
a0c938f0 135 RID_NEW, RID_OFFSETOF, RID_OPERATOR,
136 RID_THIS, RID_THROW, RID_TRUE,
137 RID_TRY, RID_TYPENAME, RID_TYPEID,
924bbf02 138 RID_USING, RID_CHAR16, RID_CHAR32,
518796ad 139
140 /* casts */
141 RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
142
481451eb 143 /* C++ extensions */
aa4313eb 144 RID_BASES, RID_DIRECT_BASES,
481451eb 145 RID_HAS_NOTHROW_ASSIGN, RID_HAS_NOTHROW_CONSTRUCTOR,
146 RID_HAS_NOTHROW_COPY, RID_HAS_TRIVIAL_ASSIGN,
147 RID_HAS_TRIVIAL_CONSTRUCTOR, RID_HAS_TRIVIAL_COPY,
148 RID_HAS_TRIVIAL_DESTRUCTOR, RID_HAS_VIRTUAL_DESTRUCTOR,
149 RID_IS_ABSTRACT, RID_IS_BASE_OF,
c33e051d 150 RID_IS_CLASS,
481451eb 151 RID_IS_EMPTY, RID_IS_ENUM,
aa4313eb 152 RID_IS_FINAL, RID_IS_LITERAL_TYPE,
153 RID_IS_POD, RID_IS_POLYMORPHIC,
154 RID_IS_STD_LAYOUT, RID_IS_TRIVIAL,
f76a9aa8 155 RID_IS_TRIVIALLY_ASSIGNABLE, RID_IS_TRIVIALLY_CONSTRUCTIBLE,
717e52f9 156 RID_IS_TRIVIALLY_COPYABLE,
aa4313eb 157 RID_IS_UNION, RID_UNDERLYING_TYPE,
481451eb 158
aa4313eb 159 /* C++11 */
98fe9664 160 RID_CONSTEXPR, RID_DECLTYPE, RID_NOEXCEPT, RID_NULLPTR, RID_STATIC_ASSERT,
df1683c2 161
d037099f 162 /* Cilk Plus keywords. */
40750995 163 RID_CILK_SPAWN, RID_CILK_SYNC, RID_CILK_FOR,
d037099f 164
b27e241e 165 /* Objective-C ("AT" reserved words - they are only keywords when
166 they follow '@') */
9e8a7e85 167 RID_AT_ENCODE, RID_AT_END,
518796ad 168 RID_AT_CLASS, RID_AT_ALIAS, RID_AT_DEFS,
4a8875ed 169 RID_AT_PRIVATE, RID_AT_PROTECTED, RID_AT_PUBLIC, RID_AT_PACKAGE,
a0c938f0 170 RID_AT_PROTOCOL, RID_AT_SELECTOR,
c17b85ea 171 RID_AT_THROW, RID_AT_TRY, RID_AT_CATCH,
069761fb 172 RID_AT_FINALLY, RID_AT_SYNCHRONIZED,
86c110ac 173 RID_AT_OPTIONAL, RID_AT_REQUIRED, RID_AT_PROPERTY,
e1f293c0 174 RID_AT_SYNTHESIZE, RID_AT_DYNAMIC,
c17b85ea 175 RID_AT_INTERFACE,
518796ad 176 RID_AT_IMPLEMENTATION,
177
6d5d708e 178 /* Named address support, mapping the keyword to a particular named address
179 number. Named address space 0 is reserved for the generic address. If
180 there are more than 254 named addresses, the addr_space_t type will need
181 to be grown from an unsigned char to unsigned short. */
182 RID_ADDR_SPACE_0, /* generic address */
183 RID_ADDR_SPACE_1,
184 RID_ADDR_SPACE_2,
185 RID_ADDR_SPACE_3,
186 RID_ADDR_SPACE_4,
187 RID_ADDR_SPACE_5,
188 RID_ADDR_SPACE_6,
189 RID_ADDR_SPACE_7,
190 RID_ADDR_SPACE_8,
191 RID_ADDR_SPACE_9,
192 RID_ADDR_SPACE_10,
193 RID_ADDR_SPACE_11,
194 RID_ADDR_SPACE_12,
195 RID_ADDR_SPACE_13,
196 RID_ADDR_SPACE_14,
197 RID_ADDR_SPACE_15,
198
199 RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
200 RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
201
9f75f026 202 /* __intN keywords. The _N_M here doesn't correspond to the intN
203 in the keyword; use the bitsize in int_n_t_data_t[M] for that.
204 For example, if int_n_t_data_t[0].bitsize is 13, then RID_INT_N_0
205 is for __int13. */
206
207 /* Note that the range to use is RID_FIRST_INT_N through
208 RID_FIRST_INT_N + NUM_INT_N_ENTS - 1 and c-parser.c has a list of
209 all RID_INT_N_* in a case statement. */
210
211 RID_INT_N_0,
212 RID_INT_N_1,
213 RID_INT_N_2,
214 RID_INT_N_3,
215
216 RID_FIRST_INT_N = RID_INT_N_0,
217 RID_LAST_INT_N = RID_INT_N_3,
218
518796ad 219 RID_MAX,
220
221 RID_FIRST_MODIFIER = RID_STATIC,
f17c0828 222 RID_LAST_MODIFIER = RID_ONEWAY,
223
6fe11077 224 RID_FIRST_CXX0X = RID_CONSTEXPR,
225 RID_LAST_CXX0X = RID_STATIC_ASSERT,
f17c0828 226 RID_FIRST_AT = RID_AT_ENCODE,
227 RID_LAST_AT = RID_AT_IMPLEMENTATION,
228 RID_FIRST_PQ = RID_IN,
86c110ac 229 RID_LAST_PQ = RID_ONEWAY,
7590f0e5 230 RID_FIRST_PATTR = RID_GETTER,
231 RID_LAST_PATTR = RID_NONATOMIC
988fc1d1 232};
233
f17c0828 234#define OBJC_IS_AT_KEYWORD(rid) \
84166705 235 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
236 (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
f17c0828 237
238#define OBJC_IS_PQ_KEYWORD(rid) \
84166705 239 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
240 (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
f17c0828 241
86c110ac 242#define OBJC_IS_PATTR_KEYWORD(rid) \
243 ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PATTR && \
244 (unsigned int) (rid) <= (unsigned int) RID_LAST_PATTR)
245
b27e241e 246/* OBJC_IS_CXX_KEYWORD recognizes the 'CXX_OBJC' keywords (such as
247 'class') which are shared in a subtle way between Objective-C and
248 C++. When the lexer is lexing in Objective-C/Objective-C++, if it
249 finds '@' followed by one of these identifiers (eg, '@class'), it
250 recognizes the whole as an Objective-C keyword. If the identifier
251 is found elsewhere, it follows the rules of the C/C++ language.
252 */
253#define OBJC_IS_CXX_KEYWORD(rid) \
254 (rid == RID_CLASS \
255 || rid == RID_PUBLIC || rid == RID_PROTECTED || rid == RID_PRIVATE \
256 || rid == RID_TRY || rid == RID_THROW || rid == RID_CATCH)
257
988fc1d1 258/* The elements of `ridpointers' are identifier nodes for the reserved
259 type names and storage classes. It is indexed by a RID_... value. */
84166705 260extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
988fc1d1 261
72040e7e 262/* Standard named or nameless data types of the C compiler. */
263
264enum c_tree_index
265{
924bbf02 266 CTI_CHAR16_TYPE,
267 CTI_CHAR32_TYPE,
72040e7e 268 CTI_WCHAR_TYPE,
f3449a3c 269 CTI_UNDERLYING_WCHAR_TYPE,
55dbcdfe 270 CTI_WINT_TYPE,
428a1c21 271 CTI_SIGNED_SIZE_TYPE, /* For format checking only. */
272 CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only. */
e3fff6f2 273 CTI_INTMAX_TYPE,
274 CTI_UINTMAX_TYPE,
72040e7e 275 CTI_WIDEST_INT_LIT_TYPE,
276 CTI_WIDEST_UINT_LIT_TYPE,
277
f3449a3c 278 /* Types for <stdint.h>, that may not be defined on all
279 targets. */
280 CTI_SIG_ATOMIC_TYPE,
281 CTI_INT8_TYPE,
282 CTI_INT16_TYPE,
283 CTI_INT32_TYPE,
284 CTI_INT64_TYPE,
285 CTI_UINT8_TYPE,
286 CTI_UINT16_TYPE,
287 CTI_UINT32_TYPE,
288 CTI_UINT64_TYPE,
289 CTI_INT_LEAST8_TYPE,
290 CTI_INT_LEAST16_TYPE,
291 CTI_INT_LEAST32_TYPE,
292 CTI_INT_LEAST64_TYPE,
293 CTI_UINT_LEAST8_TYPE,
294 CTI_UINT_LEAST16_TYPE,
295 CTI_UINT_LEAST32_TYPE,
296 CTI_UINT_LEAST64_TYPE,
297 CTI_INT_FAST8_TYPE,
298 CTI_INT_FAST16_TYPE,
299 CTI_INT_FAST32_TYPE,
300 CTI_INT_FAST64_TYPE,
301 CTI_UINT_FAST8_TYPE,
302 CTI_UINT_FAST16_TYPE,
303 CTI_UINT_FAST32_TYPE,
304 CTI_UINT_FAST64_TYPE,
305 CTI_INTPTR_TYPE,
306 CTI_UINTPTR_TYPE,
307
72040e7e 308 CTI_CHAR_ARRAY_TYPE,
924bbf02 309 CTI_CHAR16_ARRAY_TYPE,
310 CTI_CHAR32_ARRAY_TYPE,
72040e7e 311 CTI_WCHAR_ARRAY_TYPE,
72040e7e 312 CTI_STRING_TYPE,
313 CTI_CONST_STRING_TYPE,
314
4f9a1c9b 315 /* Type for boolean expressions (bool in C++, int in C). */
3c2239cf 316 CTI_TRUTHVALUE_TYPE,
317 CTI_TRUTHVALUE_TRUE,
318 CTI_TRUTHVALUE_FALSE,
319
72040e7e 320 CTI_DEFAULT_FUNCTION_TYPE,
72040e7e 321
88b5b080 322 /* These are not types, but we have to look them up all the time. */
65b7f83f 323 CTI_FUNCTION_NAME_DECL,
324 CTI_PRETTY_FUNCTION_NAME_DECL,
325 CTI_C99_FUNCTION_NAME_DECL,
326 CTI_SAVED_FUNCTION_NAME_DECLS,
a0c938f0 327
ae84079f 328 CTI_NULL,
329
72040e7e 330 CTI_MAX
331};
332
89768577 333#define C_CPP_HASHNODE(id) \
334 (&(((struct c_common_identifier *) (id))->node))
7d339f93 335#define C_RID_CODE(id) \
336 ((enum rid) (((struct c_common_identifier *) (id))->node.rid_code))
337#define C_SET_RID_CODE(id, code) \
338 (((struct c_common_identifier *) (id))->node.rid_code = (unsigned char) code)
0d086e18 339
340/* Identifier part common to the C front ends. Inherits from
341 tree_identifier, despite appearances. */
fb1e4f4a 342struct GTY(()) c_common_identifier {
fc9c9e87 343 struct tree_common common;
573aba85 344 struct cpp_hashnode node;
0d086e18 345};
346
5c6e5756 347/* An entry in the reserved keyword table. */
348
349struct c_common_resword
350{
351 const char *const word;
352 ENUM_BITFIELD(rid) const rid : 16;
353 const unsigned int disable : 16;
354};
355
de801c28 356/* Mode used to build pointers (VOIDmode means ptr_mode). */
357
358extern machine_mode c_default_pointer_mode;
359
07b8f133 360/* Extra cpp_ttype values for C++. */
361
07b8f133 362/* A token type for template-ids. If a template-id is processed while
363 parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
364 the value of the CPP_TEMPLATE_ID is whatever was returned by
365 cp_parser_template_id. */
366#define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
367
368/* A token type for nested-name-specifiers. If a
369 nested-name-specifier is processed while parsing tentatively, it is
370 replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
371 CPP_NESTED_NAME_SPECIFIER is whatever was returned by
372 cp_parser_nested_name_specifier_opt. */
373#define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
374
375/* A token type for pre-parsed C++0x decltype. */
376#define CPP_DECLTYPE ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
377
b0542e7c 378/* A token type for pre-parsed primary-expression (lambda- or statement-). */
379#define CPP_PREPARSED_EXPR ((enum cpp_ttype) (CPP_DECLTYPE + 1))
380
07b8f133 381/* The number of token types, including C++-specific ones. */
b0542e7c 382#define N_CP_TTYPES ((int) (CPP_PREPARSED_EXPR + 1))
07b8f133 383
5c6e5756 384/* Disable mask. Keywords are disabled if (reswords[i].disable &
385 mask) is _true_. Thus for keywords which are present in all
386 languages the disable field is zero. */
387
388#define D_CONLY 0x001 /* C only (not in C++). */
389#define D_CXXONLY 0x002 /* C++ only (not in C). */
390#define D_C99 0x004 /* In C, C99 only. */
391#define D_CXX0X 0x008 /* In C++, C++0X only. */
392#define D_EXT 0x010 /* GCC extension. */
393#define D_EXT89 0x020 /* GCC extension incorporated in C99. */
394#define D_ASM 0x040 /* Disabled by -fno-asm. */
395#define D_OBJC 0x080 /* In Objective C and neither C nor C++. */
396#define D_CXX_OBJC 0x100 /* In Objective C, and C++, but not C. */
397#define D_CXXWARN 0x200 /* In C warn with -Wcxx-compat. */
398
399/* The reserved keyword table. */
400extern const struct c_common_resword c_common_reswords[];
401
402/* The number of items in the reserved keyword table. */
403extern const unsigned int num_c_common_reswords;
404
924bbf02 405#define char16_type_node c_global_trees[CTI_CHAR16_TYPE]
406#define char32_type_node c_global_trees[CTI_CHAR32_TYPE]
72040e7e 407#define wchar_type_node c_global_trees[CTI_WCHAR_TYPE]
f3449a3c 408#define underlying_wchar_type_node c_global_trees[CTI_UNDERLYING_WCHAR_TYPE]
55dbcdfe 409#define wint_type_node c_global_trees[CTI_WINT_TYPE]
428a1c21 410#define signed_size_type_node c_global_trees[CTI_SIGNED_SIZE_TYPE]
411#define unsigned_ptrdiff_type_node c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
e3fff6f2 412#define intmax_type_node c_global_trees[CTI_INTMAX_TYPE]
413#define uintmax_type_node c_global_trees[CTI_UINTMAX_TYPE]
72040e7e 414#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
415#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
416
f3449a3c 417#define sig_atomic_type_node c_global_trees[CTI_SIG_ATOMIC_TYPE]
418#define int8_type_node c_global_trees[CTI_INT8_TYPE]
419#define int16_type_node c_global_trees[CTI_INT16_TYPE]
420#define int32_type_node c_global_trees[CTI_INT32_TYPE]
421#define int64_type_node c_global_trees[CTI_INT64_TYPE]
422#define uint8_type_node c_global_trees[CTI_UINT8_TYPE]
74bdbe96 423#define c_uint16_type_node c_global_trees[CTI_UINT16_TYPE]
f3449a3c 424#define c_uint32_type_node c_global_trees[CTI_UINT32_TYPE]
425#define c_uint64_type_node c_global_trees[CTI_UINT64_TYPE]
426#define int_least8_type_node c_global_trees[CTI_INT_LEAST8_TYPE]
427#define int_least16_type_node c_global_trees[CTI_INT_LEAST16_TYPE]
428#define int_least32_type_node c_global_trees[CTI_INT_LEAST32_TYPE]
429#define int_least64_type_node c_global_trees[CTI_INT_LEAST64_TYPE]
430#define uint_least8_type_node c_global_trees[CTI_UINT_LEAST8_TYPE]
431#define uint_least16_type_node c_global_trees[CTI_UINT_LEAST16_TYPE]
432#define uint_least32_type_node c_global_trees[CTI_UINT_LEAST32_TYPE]
433#define uint_least64_type_node c_global_trees[CTI_UINT_LEAST64_TYPE]
434#define int_fast8_type_node c_global_trees[CTI_INT_FAST8_TYPE]
435#define int_fast16_type_node c_global_trees[CTI_INT_FAST16_TYPE]
436#define int_fast32_type_node c_global_trees[CTI_INT_FAST32_TYPE]
437#define int_fast64_type_node c_global_trees[CTI_INT_FAST64_TYPE]
438#define uint_fast8_type_node c_global_trees[CTI_UINT_FAST8_TYPE]
439#define uint_fast16_type_node c_global_trees[CTI_UINT_FAST16_TYPE]
440#define uint_fast32_type_node c_global_trees[CTI_UINT_FAST32_TYPE]
441#define uint_fast64_type_node c_global_trees[CTI_UINT_FAST64_TYPE]
442#define intptr_type_node c_global_trees[CTI_INTPTR_TYPE]
443#define uintptr_type_node c_global_trees[CTI_UINTPTR_TYPE]
444
3c2239cf 445#define truthvalue_type_node c_global_trees[CTI_TRUTHVALUE_TYPE]
446#define truthvalue_true_node c_global_trees[CTI_TRUTHVALUE_TRUE]
447#define truthvalue_false_node c_global_trees[CTI_TRUTHVALUE_FALSE]
4f9a1c9b 448
72040e7e 449#define char_array_type_node c_global_trees[CTI_CHAR_ARRAY_TYPE]
924bbf02 450#define char16_array_type_node c_global_trees[CTI_CHAR16_ARRAY_TYPE]
451#define char32_array_type_node c_global_trees[CTI_CHAR32_ARRAY_TYPE]
72040e7e 452#define wchar_array_type_node c_global_trees[CTI_WCHAR_ARRAY_TYPE]
72040e7e 453#define string_type_node c_global_trees[CTI_STRING_TYPE]
454#define const_string_type_node c_global_trees[CTI_CONST_STRING_TYPE]
455
456#define default_function_type c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
72040e7e 457
65b7f83f 458#define function_name_decl_node c_global_trees[CTI_FUNCTION_NAME_DECL]
459#define pretty_function_name_decl_node c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
460#define c99_function_name_decl_node c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
461#define saved_function_name_decls c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
71d9fc9b 462
ae84079f 463/* The node for C++ `__null'. */
464#define null_node c_global_trees[CTI_NULL]
465
1f3233d1 466extern GTY(()) tree c_global_trees[CTI_MAX];
29d00ba7 467
21dda4ee 468/* In a RECORD_TYPE, a sorted array of the fields of the type, not a
469 tree for size reasons. */
25a27413 470struct GTY(()) sorted_fields_type {
860251be 471 int len;
472 tree GTY((length ("%h.len"))) elts[1];
473};
474
e41f0d80 475/* Mark which labels are explicitly declared.
476 These may be shadowed, and may be referenced from nested functions. */
477#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
478
29d00ba7 479typedef enum c_language_kind
480{
b2601928 481 clk_c = 0, /* C90, C94, C99 or C11 */
c0f19401 482 clk_objc = 1, /* clk_c with ObjC features. */
483 clk_cxx = 2, /* ANSI/ISO C++ */
484 clk_objcxx = 3 /* clk_cxx with ObjC features. */
5e6015b1 485}
29d00ba7 486c_language_kind;
487
c0f19401 488/* To test for a specific language use c_language, defined by each
489 front end. For "ObjC features" or "not C++" use the macros. */
490extern c_language_kind c_language;
491
90b8bebd 492#define c_dialect_cxx() ((c_language & clk_cxx) != 0)
493#define c_dialect_objc() ((c_language & clk_objc) != 0)
c0f19401 494
f08923b3 495/* The various name of operator that appears in error messages. */
496typedef enum ref_operator {
497 /* NULL */
498 RO_NULL,
499 /* array indexing */
500 RO_ARRAY_INDEXING,
501 /* unary * */
502 RO_UNARY_STAR,
503 /* -> */
504 RO_ARROW,
505 /* implicit conversion */
7354ad2e 506 RO_IMPLICIT_CONVERSION,
507 /* ->* */
508 RO_ARROW_STAR
f08923b3 509} ref_operator;
510
a08e60ae 511/* Information about a statement tree. */
512
fb1e4f4a 513struct GTY(()) stmt_tree_s {
cacfdc02 514 /* A stack of statement lists being collected. */
f1f41a6c 515 vec<tree, va_gc> *x_cur_stmt_list;
2363ef00 516
d10cfa8d 517 /* In C++, Nonzero if we should treat statements as full
61e987fc 518 expressions. In particular, this variable is non-zero if at the
a08e60ae 519 end of a statement we should destroy any temporaries created
520 during that statement. Similarly, if, at the end of a block, we
521 should destroy any local variables in this block. Normally, this
d10cfa8d 522 variable is nonzero, since those are the normal semantics of
a08e60ae 523 C++.
524
a08e60ae 525 This flag has no effect in C. */
5e6015b1 526 int stmts_are_full_exprs_p;
a08e60ae 527};
528
529typedef struct stmt_tree_s *stmt_tree;
530
531/* Global state pertinent to the current function. Some C dialects
532 extend this structure with additional fields. */
533
fb1e4f4a 534struct GTY(()) c_language_function {
a08e60ae 535 /* While we are parsing the function, this contains information
536 about the statement-tree that we are building. */
537 struct stmt_tree_s x_stmt_tree;
a4e3ffad 538
539 /* Vector of locally defined typedefs, for
540 -Wunused-local-typedefs. */
f1f41a6c 541 vec<tree, va_gc> *local_typedefs;
a08e60ae 542};
543
cacfdc02 544#define stmt_list_stack (current_stmt_tree ()->x_cur_stmt_list)
545
0975351b 546/* When building a statement-tree, this is the current statement list
f1f41a6c 547 being collected. */
548#define cur_stmt_list (stmt_list_stack->last ())
cacfdc02 549
f1f41a6c 550#define building_stmt_list_p() (stmt_list_stack && !stmt_list_stack->is_empty())
e41f0d80 551
552/* Language-specific hooks. */
553
caa6fdce 554/* If non-NULL, this function is called after a precompile header file
555 is loaded. */
556extern void (*lang_post_pch_load) (void);
557
393b349a 558extern void push_file_scope (void);
559extern void pop_file_scope (void);
1cae46be 560extern stmt_tree current_stmt_tree (void);
2363ef00 561extern tree push_stmt_list (void);
2363ef00 562extern tree pop_stmt_list (tree);
1cae46be 563extern tree add_stmt (tree);
2363ef00 564extern void push_cleanup (tree, tree, bool);
1e8e9920 565extern tree pushdecl_top_level (tree);
566extern tree pushdecl (tree);
8458f4ca 567extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
e60a6f7b 568 location_t, tree, tree);
3c6d4197 569extern tree build_array_notation_expr (location_t, tree, tree, enum tree_code,
570 location_t, tree, tree);
571extern tree build_array_notation_ref (location_t, tree, tree, tree, tree, tree);
f08923b3 572extern tree build_indirect_ref (location_t, tree, ref_operator);
1cae46be 573
860251be 574extern int field_decl_cmp (const void *, const void *);
a0c938f0 575extern void resort_sorted_fields (void *, void *, gt_pointer_operator,
576 void *);
9f627b1a 577extern bool has_c_linkage (const_tree decl);
573aba85 578\f
574a6990 579/* Switches common to the C front ends. */
580
f7070933 581/* Nonzero means don't output line number information. */
582
583extern char flag_no_line_commands;
584
585/* Nonzero causes -E output not to be done, but directives such as
586 #define that have side effects are still obeyed. */
587
588extern char flag_no_output;
589
34c3de48 590/* Nonzero means dump macros in some fashion; contains the 'D', 'M',
591 'N' or 'U' of the command line switch. */
f7070933 592
593extern char flag_dump_macros;
594
595/* Nonzero means pass #include lines through to the output. */
596
597extern char flag_dump_includes;
598
d718b525 599/* Nonzero means process PCH files while preprocessing. */
600
601extern bool flag_pch_preprocess;
602
573aba85 603/* The file name to which we should write a precompiled header, or
604 NULL if no header will be written in this compile. */
605
606extern const char *pch_file;
607
1ed9d5f5 608/* Nonzero if an ISO standard was selected. It rejects macros in the
609 user's namespace. */
573aba85 610
1ed9d5f5 611extern int flag_iso;
612
574a6990 613/* C/ObjC language option variables. */
dbf6c367 614
481c6ce6 615
574a6990 616/* Nonzero means allow type mismatches in conditional expressions;
617 just make their values `void'. */
e37414d8 618
574a6990 619extern int flag_cond_mismatch;
bd08a4e6 620
ec35ee92 621/* Nonzero means enable C89 Amendment 1 features. */
49bc3768 622
623extern int flag_isoc94;
624
32074525 625/* Nonzero means use the ISO C99 (or C11) dialect of C. */
29d00ba7 626
627extern int flag_isoc99;
628
32074525 629/* Nonzero means use the ISO C11 dialect of C. */
39012afb 630
32074525 631extern int flag_isoc11;
39012afb 632
8b332087 633/* Nonzero means that we have builtin functions, and main is an int. */
9bee1c90 634
635extern int flag_hosted;
636
574a6990 637/* ObjC language option variables. */
638
639
574a6990 640/* Tells the compiler that this is a special run. Do not perform any
641 compiling, instead we are to test some platform dependent features
642 and output a C header file with appropriate definitions. */
643
644extern int print_struct_values;
645
ec9c816b 646/* Tells the compiler what is the constant string class for ObjC. */
574a6990 647
e23fd334 648extern const char *constant_string_class_name;
574a6990 649
574a6990 650
651/* C++ language option variables. */
652
653
74b777e5 654/* Return TRUE if one of {flag_abi_version,flag_abi_compat_version} is
655 less than N and the other is at least N, for use by -Wabi. */
656#define abi_version_crosses(N) \
657 (abi_version_at_least(N) \
658 != (flag_abi_compat_version == 0 \
659 || flag_abi_compat_version >= (N)))
660
574a6990 661/* Nonzero means generate separate instantiation control files and
662 juggle them at link time. */
663
664extern int flag_use_repository;
665
6dcdb5de 666/* The supported C++ dialects. */
667
668enum cxx_dialect {
d875b9d2 669 cxx_unset,
0d84dc2d 670 /* C++98 with TC1 */
6dcdb5de 671 cxx98,
0d84dc2d 672 cxx03 = cxx98,
673 /* C++11 */
674 cxx0x,
543efdbe 675 cxx11 = cxx0x,
c35e53f1 676 /* C++14 */
677 cxx14,
4b53bc0f 678 /* C++1z (C++17?) */
679 cxx1z
6dcdb5de 680};
0fe6eeac 681
6dcdb5de 682/* The C++ dialect being used. C++98 is the default. */
683extern enum cxx_dialect cxx_dialect;
0fe6eeac 684
574a6990 685/* Maximum template instantiation depth. This limit is rather
686 arbitrary, but it exists to limit the time it takes to notice
54cf6eed 687 excessively recursive template instantiations. */
574a6990 688
689extern int max_tinst_depth;
29d00ba7 690
48d94ede 691/* Nonzero means that we should not issue warnings about problems that
692 occur when the code is executed, because the code being processed
693 is not expected to be executed. This is set during parsing. This
694 is used for cases like sizeof() and "0 ? a : b". This is a count,
695 not a bool, because unexecuted expressions can nest. */
93894129 696
48d94ede 697extern int c_inhibit_evaluation_warnings;
93894129 698
7f5f3953 699/* Whether lexing has been completed, so subsequent preprocessor
700 errors should use the compiler's input_location. */
701
702extern bool done_lexing;
703
29d00ba7 704/* C types are partitioned into three subsets: object, function, and
705 incomplete types. */
706#define C_TYPE_OBJECT_P(type) \
707 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
708
709#define C_TYPE_INCOMPLETE_P(type) \
710 (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
711
712#define C_TYPE_FUNCTION_P(type) \
713 (TREE_CODE (type) == FUNCTION_TYPE)
714
715/* For convenience we define a single macro to identify the class of
716 object or incomplete types. */
717#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
718 (!C_TYPE_FUNCTION_P (type))
719
79396169 720struct visibility_flags
721{
722 unsigned inpragma : 1; /* True when in #pragma GCC visibility. */
723 unsigned inlines_hidden : 1; /* True when -finlineshidden in effect. */
724};
725
e53013a8 726/* These enumerators are possible types of unsafe conversions. */
727enum conversion_safety {
728 /* The conversion is safe. */
729 SAFE_CONVERSION = 0,
730 /* Another type of conversion with problems. */
731 UNSAFE_OTHER,
732 /* Conversion between signed and unsigned integers
733 which are all warned about immediately, so this is unused. */
734 UNSAFE_SIGN,
735 /* Conversions that reduce the precision of reals including conversions
736 from reals to integers. */
737 UNSAFE_REAL,
738 /* Conversions from complex to reals or integers, that discard imaginary
739 component. */
740 UNSAFE_IMAGINARY
741};
ca9d7d74 742
79396169 743/* Global visibility options. */
744extern struct visibility_flags visibility_options;
745
f8e93a2e 746/* Attribute table common to the C front ends. */
747extern const struct attribute_spec c_common_attribute_table[];
748extern const struct attribute_spec c_common_format_attribute_table[];
749
65b7f83f 750/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
9e5a737d 751 ID is the identifier to use, NAME is the string.
752 TYPE_DEP indicates whether it depends on type of the function or not
753 (i.e. __PRETTY_FUNCTION__). */
754
e60a6f7b 755extern tree (*make_fname_decl) (location_t, tree, int);
1cae46be 756
6ad8abad 757/* In c-decl.c and cp/tree.c. FIXME. */
34208e18 758extern void c_register_addr_space (const char *str, addr_space_t as);
6ad8abad 759
760/* In c-common.c. */
93be21c0 761extern bool in_late_binary_op;
6d5d708e 762extern const char *c_addr_space_name (addr_space_t as);
1cae46be 763extern tree identifier_global_value (tree);
27282252 764extern tree c_linkage_bindings (tree);
1cae46be 765extern void record_builtin_type (enum rid, const char *, tree);
766extern tree build_void_list_node (void);
767extern void start_fname_decls (void);
768extern void finish_fname_decls (void);
769extern const char *fname_as_string (int);
e3b80d49 770extern tree fname_decl (location_t, unsigned, tree);
1cae46be 771
83e25171 772extern int check_user_alignment (const_tree, bool);
774e9d58 773extern void check_function_arguments (const_tree, int, tree *);
1cae46be 774extern void check_function_arguments_recurse (void (*)
775 (void *, tree,
776 unsigned HOST_WIDE_INT),
777 void *, tree,
778 unsigned HOST_WIDE_INT);
d43cee80 779extern bool check_builtin_function_arguments (tree, int, tree *);
d01f58f9 780extern void check_function_format (tree, int, tree *);
1cae46be 781extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
782extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
47b19b94 783extern bool attribute_takes_identifier_p (const_tree);
3c6c0e40 784extern bool c_common_handle_option (size_t, const char *, int, int, location_t,
b78351e5 785 const struct cl_option_handlers *);
c94b1d0e 786extern bool default_handle_c_option (size_t, const char *, int);
3754d046 787extern tree c_common_type_for_mode (machine_mode, int);
1cae46be 788extern tree c_common_type_for_size (unsigned int, int);
9421ebb9 789extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int,
790 int, int);
11773141 791extern tree c_common_unsigned_type (tree);
1cae46be 792extern tree c_common_signed_type (tree);
793extern tree c_common_signed_or_unsigned_type (int, tree);
9b88d08d 794extern void c_common_init_ts (void);
c0e47fd4 795extern tree c_build_bitfield_integer_type (unsigned HOST_WIDE_INT, int);
22a75734 796extern enum conversion_safety unsafe_conversion_p (location_t, tree, tree,
797 bool);
9f627b1a 798extern bool decl_with_nonnull_addr_p (const_tree);
a75b1c71 799extern tree c_fully_fold (tree, bool, bool *);
800extern tree decl_constant_value_for_optimization (tree);
f59e3889 801extern tree c_wrap_maybe_const (tree, bool);
a75b1c71 802extern tree c_save_expr (tree);
8e70fb09 803extern tree c_common_truthvalue_conversion (location_t, tree);
1cae46be 804extern void c_apply_type_quals_to_decl (int, tree);
a179a7dc 805extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
e60a6f7b 806extern tree c_alignof_expr (location_t, tree);
72040e7e 807/* Print an error message for invalid operands to arith operation CODE.
808 NOP_EXPR is used as a special case (see truthvalue_conversion). */
8e70fb09 809extern void binary_op_error (location_t, enum tree_code, tree, tree);
1cae46be 810extern tree fix_string_type (tree);
1cae46be 811extern void constant_expression_warning (tree);
07317e69 812extern void constant_expression_error (tree);
e6fa0ea6 813extern bool strict_aliasing_warning (tree, tree, tree);
57f872a2 814extern void sizeof_pointer_memaccess_warning (location_t *, tree,
f1f41a6c 815 vec<tree, va_gc> *, tree *,
f003f5dc 816 bool (*) (tree, tree));
22a75734 817extern void warnings_for_convert_and_check (location_t, tree, tree, tree);
818extern tree convert_and_check (location_t, tree, tree);
e60a6f7b 819extern void overflow_warning (location_t, tree);
3d177e8c 820extern bool warn_if_unused_value (const_tree, location_t);
9c20c4fc 821extern void warn_logical_operator (location_t, enum tree_code, tree,
03033af4 822 enum tree_code, tree, enum tree_code, tree);
dc6229e8 823extern void warn_logical_not_parentheses (location_t, enum tree_code, tree);
3f08e399 824extern void check_main_parameter_types (tree decl);
3aa0c315 825extern bool c_determine_visibility (tree);
73437615 826extern bool vector_types_compatible_elements_p (tree, tree);
3ae3a17f 827extern void mark_valid_location_for_stdc_pragma (bool);
828extern bool valid_location_for_stdc_pragma_p (void);
829extern void set_float_const_decimal64 (void);
830extern void clear_float_const_decimal64 (void);
831extern bool float_const_decimal64_p (void);
29d00ba7 832
a9ffdd35 833extern bool keyword_begins_type_specifier (enum rid);
834extern bool keyword_is_storage_class_specifier (enum rid);
835extern bool keyword_is_type_qualifier (enum rid);
fad3f658 836extern bool keyword_is_decl_specifier (enum rid);
ffcdbf9c 837extern bool cxx_fundamental_alignment_p (unsigned);
46da3601 838extern bool pointer_to_zero_sized_aggr_p (tree);
a9ffdd35 839
a179a7dc 840#define c_sizeof(LOC, T) c_sizeof_or_alignof_type (LOC, T, true, false, 1)
841#define c_alignof(LOC, T) c_sizeof_or_alignof_type (LOC, T, false, false, 1)
72040e7e 842
2561cea2 843/* Subroutine of build_binary_op, used for certain operations. */
844extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise);
845
72040e7e 846/* Subroutine of build_binary_op, used for comparison operations.
847 See if the operands have both been converted from subword integer types
848 and, if so, perhaps change them both back to their original type. */
2623625f 849extern tree shorten_compare (location_t, tree *, tree *, tree *,
850 enum tree_code *);
72040e7e 851
42f9a786 852extern tree pointer_int_sum (location_t, enum tree_code, tree, tree,
853 bool = true);
83e32a86 854
855/* Add qualifiers to a type, in the fashion for C. */
1cae46be 856extern tree c_build_qualified_type (tree, int);
83e32a86 857
72040e7e 858/* Build tree nodes and builtin functions common to both C and C++ language
859 frontends. */
1cae46be 860extern void c_common_nodes_and_builtins (void);
a66c9326 861
1cae46be 862extern void disable_builtin_function (const char *);
dd878098 863
79b01846 864extern void set_compound_literal_name (tree decl);
865
e60a6f7b 866extern tree build_va_arg (location_t, tree, tree);
43f74bc4 867
c123f04d 868extern const unsigned int c_family_lang_mask;
e88d34f6 869extern unsigned int c_common_option_lang_mask (void);
32ecf960 870extern void c_common_diagnostics_set_defaults (diagnostic_context *);
e88d34f6 871extern bool c_common_complain_wrong_lang_p (const struct cl_option *);
f3f006ad 872extern void c_common_init_options_struct (struct gcc_options *);
e88d34f6 873extern void c_common_init_options (unsigned int, struct cl_decoded_option *);
1cae46be 874extern bool c_common_post_options (const char **);
875extern bool c_common_init (void);
876extern void c_common_finish (void);
b8ba44e7 877extern void c_common_parse_file (void);
8f7fba47 878extern FILE *get_dump_info (int, int *);
32c2fdea 879extern alias_set_type c_common_get_alias_set (tree);
b268e47e 880extern void c_register_builtin_type (tree, const char*);
9f627b1a 881extern bool c_promoting_integer_type_p (const_tree);
882extern int self_promoting_args_p (const_tree);
c10de5e7 883extern tree strip_pointer_operator (tree);
57a0ed23 884extern tree strip_pointer_or_array_types (tree);
624d37a6 885extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
92915e1c 886
40109983 887/* This is the basic parsing function. */
888extern void c_parse_file (void);
40109983 889
b9bdfa0b 890extern void warn_for_omitted_condop (location_t, tree);
624d37a6 891
a08e60ae 892/* These macros provide convenient access to the various _STMT nodes. */
893
2363ef00 894/* Nonzero if a given STATEMENT_LIST represents the outermost binding
895 if a statement expression. */
896#define STATEMENT_LIST_STMT_EXPR(NODE) \
897 TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
2e3f4877 898
899/* Nonzero if a label has been added to the statement list. */
900#define STATEMENT_LIST_HAS_LABEL(NODE) \
901 TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
2363ef00 902
a75b1c71 903/* C_MAYBE_CONST_EXPR accessors. */
904#define C_MAYBE_CONST_EXPR_PRE(NODE) \
905 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 0)
906#define C_MAYBE_CONST_EXPR_EXPR(NODE) \
907 TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 1)
908#define C_MAYBE_CONST_EXPR_INT_OPERANDS(NODE) \
909 TREE_LANG_FLAG_0 (C_MAYBE_CONST_EXPR_CHECK (NODE))
910#define C_MAYBE_CONST_EXPR_NON_CONST(NODE) \
911 TREE_LANG_FLAG_1 (C_MAYBE_CONST_EXPR_CHECK (NODE))
912#define EXPR_INT_CONST_OPERANDS(EXPR) \
913 (INTEGRAL_TYPE_P (TREE_TYPE (EXPR)) \
914 && (TREE_CODE (EXPR) == INTEGER_CST \
915 || (TREE_CODE (EXPR) == C_MAYBE_CONST_EXPR \
916 && C_MAYBE_CONST_EXPR_INT_OPERANDS (EXPR))))
917
c25509f2 918/* In a FIELD_DECL, nonzero if the decl was originally a bitfield. */
919#define DECL_C_BIT_FIELD(NODE) \
920 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
921#define SET_DECL_C_BIT_FIELD(NODE) \
922 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
923#define CLEAR_DECL_C_BIT_FIELD(NODE) \
924 (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
925
e60a6f7b 926extern tree do_case (location_t, tree, tree);
927extern tree build_stmt (location_t, enum tree_code, ...);
0b5fc5d6 928extern tree build_real_imag_expr (location_t, enum tree_code, tree);
5c3247a9 929
29d00ba7 930/* These functions must be defined by each front-end which implements
931 a variant of the C language. They are used in c-common.c. */
932
b6889cb0 933extern tree build_unary_op (location_t, enum tree_code, tree, int);
8e70fb09 934extern tree build_binary_op (location_t, enum tree_code, tree, tree, int);
b96dc121 935extern tree perform_integral_promotions (tree);
29d00ba7 936
8f0d6fd4 937/* These functions must be defined by each front-end which implements
938 a variant of the C language. They are used by port files. */
939
940extern tree default_conversion (tree);
941
29d00ba7 942/* Given two integer or real types, return the type for their sum.
943 Given two compatible ANSI C types, returns the merged type. */
944
1cae46be 945extern tree common_type (tree, tree);
351c3a61 946
1cae46be 947extern tree decl_constant_value (tree);
225ec6aa 948
4f9a1c9b 949/* Handle increment and decrement of boolean types. */
1cae46be 950extern tree boolean_increment (enum tree_code, tree);
4f9a1c9b 951
1cae46be 952extern int case_compare (splay_tree_key, splay_tree_key);
e41f0d80 953
e60a6f7b 954extern tree c_add_case_label (location_t, splay_tree, tree, tree, tree, tree);
e41f0d80 955
e7911019 956extern void c_do_switch_warnings (splay_tree, location_t, tree, tree);
4ee9c684 957
e60a6f7b 958extern tree build_function_call (location_t, tree, tree);
edbbe5ca 959
ec761d5a 960extern tree build_function_call_vec (location_t, vec<location_t>, tree,
961 vec<tree, va_gc> *, vec<tree, va_gc> *);
b9c74b4d 962
f1f41a6c 963extern tree resolve_overloaded_builtin (location_t, tree, vec<tree, va_gc> *);
b6a5fc45 964
dda49785 965extern tree finish_label_address_expr (tree, location_t);
d0a47c8d 966
967/* Same function prototype, but the C and C++ front ends have
968 different implementations. Used in c-common.c. */
1cae46be 969extern tree lookup_label (tree);
d1c41717 970extern tree lookup_name (tree);
79973b57 971extern bool lvalue_p (const_tree);
d0a47c8d 972
ed7c4e62 973extern bool vector_targets_convertible_p (const_tree t1, const_tree t2);
9f627b1a 974extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note);
68ea4406 975extern tree c_build_vec_perm_expr (location_t, tree, tree, tree, bool = true);
8b4b9810 976
1cae46be 977extern void init_c_lex (void);
90cc7820 978
1cae46be 979extern void c_cpp_builtins (cpp_reader *);
46f8e3b0 980extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
9f19e0f9 981extern bool c_cpp_error (cpp_reader *, int, int, location_t, unsigned int,
982 const char *, va_list *)
983 ATTRIBUTE_GCC_DIAG(6,0);
33058239 984extern int c_common_has_attribute (cpp_reader *);
6019c708 985
92468061 986extern bool parse_optimize_options (tree, bool);
987
be1ee46e 988/* Positive if an implicit `extern "C"' scope has just been entered;
989 negative if such a scope has just been exited. */
34585765 990extern GTY(()) int pending_lang_change;
be1ee46e 991
518796ad 992/* Information recorded about each file examined during compilation. */
993
994struct c_fileinfo
995{
996 int time; /* Time spent in the file. */
62bf98ad 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;
518796ad 1005 short interface_unknown;
1006};
1007
1cae46be 1008struct c_fileinfo *get_fileinfo (const char *);
1009extern void dump_time_statistics (void);
1010
1011extern bool c_dump_tree (void *, tree);
1012
2569a1be 1013extern void verify_sequence_points (tree);
1014
7549df0d 1015extern tree fold_offsetof_1 (tree);
1016extern tree fold_offsetof (tree);
af28855b 1017
ab6bb714 1018/* Places where an lvalue, or modifiable lvalue, may be required.
e35976b1 1019 Used to select diagnostic messages in lvalue_error and
ab6bb714 1020 readonly_error. */
1021enum lvalue_use {
1022 lv_assign,
1023 lv_increment,
1024 lv_decrement,
1025 lv_addressof,
1026 lv_asm
1027};
1028
f2697631 1029extern void readonly_error (location_t, tree, enum lvalue_use);
fdd84b77 1030extern void lvalue_error (location_t, enum lvalue_use);
b1bbc8e5 1031extern void invalid_indirection_error (location_t, tree, ref_operator);
ab6bb714 1032
c271bdb2 1033extern int complete_array_type (tree *, tree, bool);
1034
b6a5fc45 1035extern tree builtin_type_for_size (int, bool);
1036
93426222 1037extern void c_common_mark_addressable_vec (tree);
1038
92b63884 1039extern void warn_array_subscript_with_type_char (location_t, tree);
b0e7825e 1040extern void warn_about_parentheses (location_t,
1041 enum tree_code,
82012ffe 1042 enum tree_code, tree,
1043 enum tree_code, tree);
92fccaaa 1044extern void warn_for_unused_label (tree label);
b6889cb0 1045extern void warn_for_div_by_zero (location_t, tree divisor);
8e70fb09 1046extern void warn_for_sign_compare (location_t,
48e1416a 1047 tree orig_op0, tree orig_op1,
1048 tree op0, tree op1,
1049 tree result_type,
13869a99 1050 enum tree_code resultcode);
5ba33bf4 1051extern void do_warn_double_promotion (tree, tree, tree, const char *,
1052 location_t);
ab77850e 1053extern void set_underlying_type (tree);
68a2c870 1054extern void record_types_used_by_current_var_decl (tree);
a4e3ffad 1055extern void record_locally_defined_typedef (tree);
1056extern void maybe_record_typedef_use (tree);
1057extern void maybe_warn_unused_local_typedefs (void);
78bf4156 1058extern void maybe_warn_bool_compare (location_t, enum tree_code, tree, tree);
f1f41a6c 1059extern vec<tree, va_gc> *make_tree_vector (void);
1060extern void release_tree_vector (vec<tree, va_gc> *);
1061extern vec<tree, va_gc> *make_tree_vector_single (tree);
1062extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
1063extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
e534436e 1064
c1917557 1065/* Used for communication between c_common_type_for_mode and
1066 c_register_builtin_type. */
1067extern GTY(()) tree registered_builtin_types;
1068
8495c0ca 1069/* In c-gimplify.c */
4ee9c684 1070extern void c_genericize (tree);
75a70cf9 1071extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
e60a6f7b 1072extern tree c_build_bind_expr (location_t, tree, tree);
4ee9c684 1073
d718b525 1074/* In c-pch.c */
1cae46be 1075extern void pch_init (void);
6adc88f8 1076extern void pch_cpp_save_state (void);
1cae46be 1077extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
1078extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
1079 const char *orig);
1080extern void c_common_write_pch (void);
ddf4604f 1081extern void c_common_no_more_pch (void);
b75b98aa 1082extern void c_common_pch_pragma (cpp_reader *pfile, const char *);
f1035767 1083
1084/* In *-checksum.c */
1085extern const unsigned char executable_checksum[16];
d718b525 1086
46f8e3b0 1087/* In c-cppbuiltin.c */
1088extern void builtin_define_std (const char *macro);
1cae46be 1089extern void builtin_define_with_value (const char *, const char *, int);
4b11ffbd 1090extern void builtin_define_with_int_value (const char *, HOST_WIDE_INT);
1091extern void builtin_define_type_sizeof (const char *, tree);
1cae46be 1092extern void c_stddef_cpp_builtins (void);
551e34da 1093extern void fe_file_change (const line_map_ordinary *);
ba99525e 1094extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char);
e920deaf 1095
1096/* In c-ppoutput.c */
1cae46be 1097extern void init_pp_output (FILE *);
1098extern void preprocess_file (cpp_reader *);
551e34da 1099extern void pp_file_change (const line_map_ordinary *);
d732fcf0 1100extern void pp_dir_change (cpp_reader *, const char *);
be7350e7 1101extern bool check_missing_format_attribute (tree, tree);
573aba85 1102
1e8e9920 1103/* In c-omp.c */
bc7bff74 1104struct omp_clause_mask
1105{
1106 inline omp_clause_mask ();
8c072e52 1107 inline omp_clause_mask (uint64_t l);
1108 inline omp_clause_mask (uint64_t l, uint64_t h);
bc7bff74 1109 inline omp_clause_mask &operator &= (omp_clause_mask);
1110 inline omp_clause_mask &operator |= (omp_clause_mask);
1111 inline omp_clause_mask operator ~ () const;
1112 inline omp_clause_mask operator & (omp_clause_mask) const;
1113 inline omp_clause_mask operator | (omp_clause_mask) const;
1114 inline omp_clause_mask operator >> (int);
1115 inline omp_clause_mask operator << (int);
1116 inline bool operator == (omp_clause_mask) const;
d62c713e 1117 inline bool operator != (omp_clause_mask) const;
8c072e52 1118 uint64_t low, high;
bc7bff74 1119};
1120
1121inline
1122omp_clause_mask::omp_clause_mask ()
1123{
1124}
1125
1126inline
8c072e52 1127omp_clause_mask::omp_clause_mask (uint64_t l)
bc7bff74 1128: low (l), high (0)
1129{
1130}
1131
1132inline
8c072e52 1133omp_clause_mask::omp_clause_mask (uint64_t l, uint64_t h)
bc7bff74 1134: low (l), high (h)
1135{
1136}
1137
1138inline omp_clause_mask &
1139omp_clause_mask::operator &= (omp_clause_mask b)
1140{
1141 low &= b.low;
1142 high &= b.high;
1143 return *this;
1144}
1145
1146inline omp_clause_mask &
1147omp_clause_mask::operator |= (omp_clause_mask b)
1148{
1149 low |= b.low;
1150 high |= b.high;
1151 return *this;
1152}
1153
1154inline omp_clause_mask
1155omp_clause_mask::operator ~ () const
1156{
1157 omp_clause_mask ret (~low, ~high);
1158 return ret;
1159}
1160
1161inline omp_clause_mask
1162omp_clause_mask::operator | (omp_clause_mask b) const
1163{
1164 omp_clause_mask ret (low | b.low, high | b.high);
1165 return ret;
1166}
1167
1168inline omp_clause_mask
1169omp_clause_mask::operator & (omp_clause_mask b) const
1170{
1171 omp_clause_mask ret (low & b.low, high & b.high);
1172 return ret;
1173}
1174
1175inline omp_clause_mask
1176omp_clause_mask::operator << (int amount)
1177{
1178 omp_clause_mask ret;
8c072e52 1179 if (amount >= 64)
bc7bff74 1180 {
1181 ret.low = 0;
8c072e52 1182 ret.high = low << (amount - 64);
bc7bff74 1183 }
1184 else if (amount == 0)
1185 ret = *this;
1186 else
1187 {
1188 ret.low = low << amount;
8c072e52 1189 ret.high = (low >> (64 - amount)) | (high << amount);
bc7bff74 1190 }
1191 return ret;
1192}
1193
1194inline omp_clause_mask
1195omp_clause_mask::operator >> (int amount)
1196{
1197 omp_clause_mask ret;
8c072e52 1198 if (amount >= 64)
bc7bff74 1199 {
8c072e52 1200 ret.low = high >> (amount - 64);
bc7bff74 1201 ret.high = 0;
1202 }
1203 else if (amount == 0)
1204 ret = *this;
1205 else
1206 {
8c072e52 1207 ret.low = (high << (64 - amount)) | (low >> amount);
bc7bff74 1208 ret.high = high >> amount;
1209 }
1210 return ret;
1211}
1212
1213inline bool
1214omp_clause_mask::operator == (omp_clause_mask b) const
1215{
1216 return low == b.low && high == b.high;
1217}
1218
d62c713e 1219inline bool
1220omp_clause_mask::operator != (omp_clause_mask b) const
1221{
1222 return low != b.low || high != b.high;
1223}
1224
8c072e52 1225#define OMP_CLAUSE_MASK_1 omp_clause_mask (1)
bc7bff74 1226
1227enum c_omp_clause_split
1228{
1229 C_OMP_CLAUSE_SPLIT_TARGET = 0,
1230 C_OMP_CLAUSE_SPLIT_TEAMS,
1231 C_OMP_CLAUSE_SPLIT_DISTRIBUTE,
1232 C_OMP_CLAUSE_SPLIT_PARALLEL,
1233 C_OMP_CLAUSE_SPLIT_FOR,
1234 C_OMP_CLAUSE_SPLIT_SIMD,
1235 C_OMP_CLAUSE_SPLIT_COUNT,
1236 C_OMP_CLAUSE_SPLIT_SECTIONS = C_OMP_CLAUSE_SPLIT_FOR
1237};
1238
e60a6f7b 1239extern tree c_finish_omp_master (location_t, tree);
bc7bff74 1240extern tree c_finish_omp_taskgroup (location_t, tree);
e60a6f7b 1241extern tree c_finish_omp_critical (location_t, tree, tree);
1242extern tree c_finish_omp_ordered (location_t, tree);
1243extern void c_finish_omp_barrier (location_t);
2169f33b 1244extern tree c_finish_omp_atomic (location_t, enum tree_code, enum tree_code,
bc7bff74 1245 tree, tree, tree, tree, tree, bool, bool);
e60a6f7b 1246extern void c_finish_omp_flush (location_t);
1247extern void c_finish_omp_taskwait (location_t);
2169f33b 1248extern void c_finish_omp_taskyield (location_t);
bc7bff74 1249extern tree c_finish_omp_for (location_t, enum tree_code, tree, tree, tree,
1250 tree, tree, tree);
ca4c3545 1251extern tree c_finish_oacc_wait (location_t, tree, tree);
bc7bff74 1252extern void c_omp_split_clauses (location_t, enum tree_code, omp_clause_mask,
1253 tree, tree *);
1254extern tree c_omp_declare_simd_clauses_to_numbers (tree, tree);
1255extern void c_omp_declare_simd_clauses_to_decls (tree, tree);
1e8e9920 1256extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree);
1257
a68f7a8d 1258/* Return next tree in the chain for chain_next walking of tree nodes. */
1259static inline tree
1260c_tree_chain_next (tree t)
1261{
1262 /* TREE_CHAIN of a type is TYPE_STUB_DECL, which is different
1263 kind of object, never a long chain of nodes. Prefer
1264 TYPE_NEXT_VARIANT for types. */
1265 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPE_COMMON))
1266 return TYPE_NEXT_VARIANT (t);
1267 /* Otherwise, if there is TREE_CHAIN, return it. */
1268 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_COMMON))
1269 return TREE_CHAIN (t);
1270 return NULL;
1271}
1272
4c0315d0 1273/* Mask used by tm_stmt_attr. */
1274#define TM_STMT_ATTR_OUTER 2
1275#define TM_STMT_ATTR_ATOMIC 4
1276#define TM_STMT_ATTR_RELAXED 8
1277
1278extern int parse_tm_stmt_attr (tree, int);
1279
1280/* Mask used by tm_attr_to_mask and tm_mask_to_attr. Note that these
1281 are ordered specifically such that more restrictive attributes are
1282 at lower bit positions. This fact is known by the C++ tm attribute
1283 inheritance code such that least bit extraction (mask & -mask) results
1284 in the most restrictive attribute. */
1285#define TM_ATTR_SAFE 1
1286#define TM_ATTR_CALLABLE 2
1287#define TM_ATTR_PURE 4
1288#define TM_ATTR_IRREVOCABLE 8
1289#define TM_ATTR_MAY_CANCEL_OUTER 16
1290
1291extern int tm_attr_to_mask (tree);
1292extern tree tm_mask_to_attr (int);
1293extern tree find_tm_attribute (tree);
1294
244db24d 1295/* A suffix-identifier value doublet that represents user-defined literals
1296 for C++-0x. */
324ca377 1297enum overflow_type {
1298 OT_UNDERFLOW = -1,
1299 OT_NONE,
1300 OT_OVERFLOW
1301};
1302
244db24d 1303struct GTY(()) tree_userdef_literal {
1304 struct tree_base base;
1305 tree suffix_id;
1306 tree value;
1307 tree num_string;
324ca377 1308 enum overflow_type overflow;
244db24d 1309};
1310
1311#define USERDEF_LITERAL_SUFFIX_ID(NODE) \
1312 (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->suffix_id)
1313
1314#define USERDEF_LITERAL_VALUE(NODE) \
1315 (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->value)
1316
324ca377 1317#define USERDEF_LITERAL_OVERFLOW(NODE) \
1318 (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->overflow)
1319
244db24d 1320#define USERDEF_LITERAL_NUM_STRING(NODE) \
1321 (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->num_string)
1322
1323#define USERDEF_LITERAL_TYPE(NODE) \
1324 (TREE_TYPE (USERDEF_LITERAL_VALUE (NODE)))
1325
324ca377 1326extern tree build_userdef_literal (tree suffix_id, tree value,
1327 enum overflow_type overflow,
1328 tree num_string);
244db24d 1329
c61ef207 1330extern bool convert_vector_to_pointer_for_subscript (location_t, tree *, tree);
7059d45d 1331
41ed701a 1332/* Possibe cases of scalar_to_vector conversion. */
1333enum stv_conv {
a04e8d62 1334 stv_error, /* Error occurred. */
41ed701a 1335 stv_nothing, /* Nothing happened. */
1336 stv_firstarg, /* First argument must be expanded. */
1337 stv_secondarg /* Second argument must be expanded. */
1338};
1339
1340extern enum stv_conv scalar_to_vector (location_t loc, enum tree_code code,
1341 tree op0, tree op1, bool);
1342
f2697631 1343/* In c-cilkplus.c */
1344extern tree c_finish_cilk_clauses (tree);
1345extern tree c_validate_cilk_plus_loop (tree *, int *, void *);
1346extern bool c_check_cilk_loop (location_t, tree);
1347
3c6d4197 1348/* These #defines allow users to access different operands of the
1349 array notation tree. */
1350
1351#define ARRAY_NOTATION_CHECK(NODE) TREE_CHECK (NODE, ARRAY_NOTATION_REF)
1352#define ARRAY_NOTATION_ARRAY(NODE) \
1353 TREE_OPERAND (ARRAY_NOTATION_CHECK (NODE), 0)
1354#define ARRAY_NOTATION_START(NODE) \
1355 TREE_OPERAND (ARRAY_NOTATION_CHECK (NODE), 1)
1356#define ARRAY_NOTATION_LENGTH(NODE) \
1357 TREE_OPERAND (ARRAY_NOTATION_CHECK (NODE), 2)
1358#define ARRAY_NOTATION_STRIDE(NODE) \
1359 TREE_OPERAND (ARRAY_NOTATION_CHECK (NODE), 3)
1360
09970d67 1361/* This structure holds all the scalar values and its appropriate variable
1362 replacment. It is mainly used by the function that pulls all the invariant
1363 parts that should be executed only once, which comes with array notation
1364 expressions. */
1365struct inv_list
1366{
1367 vec<tree, va_gc> *list_values;
1368 vec<tree, va_gc> *replacement;
a9c99fc4 1369 vec<enum tree_code, va_gc> *additional_tcodes;
09970d67 1370};
1371
e9331eab 1372/* This structure holds all the important components that can be extracted
1373 from an ARRAY_NOTATION_REF expression. It is used to pass array notation
1374 information between the functions that are responsible for expansion. */
1375typedef struct cilkplus_an_parts
1376{
1377 tree value;
1378 tree start;
1379 tree length;
1380 tree stride;
1381 bool is_vector;
1382} an_parts;
1383
1384/* This structure holds the components necessary to create the loop around
1385 the ARRAY_REF that is created using the ARRAY_NOTATION information. */
1386
1387typedef struct cilkplus_an_loop_parts
1388{
1389 tree var; /* Loop induction variable. */
1390 tree incr; /* Loop increment/decrement expression. */
1391 tree cmp; /* Loop condition. */
1392 tree ind_init; /* Initialization of the loop induction variable. */
1393} an_loop_parts;
1394
09970d67 1395/* In array-notation-common.c. */
1396extern HOST_WIDE_INT extract_sec_implicit_index_arg (location_t, tree);
3c6d4197 1397extern bool is_sec_implicit_index_fn (tree);
1398extern void array_notation_init_builtins (void);
1399extern struct c_expr fix_array_notation_expr (location_t, enum tree_code,
1400 struct c_expr);
1401extern bool contains_array_notation_expr (tree);
1402extern tree expand_array_notation_exprs (tree);
1403extern tree fix_conditional_array_notations (tree);
1404extern tree find_correct_array_notation_type (tree);
50acebe0 1405extern bool length_mismatch_in_expr_p (location_t, vec<vec<an_parts> >);
09970d67 1406extern enum built_in_function is_cilkplus_reduce_builtin (tree);
1407extern bool find_rank (location_t, tree, tree, bool, size_t *);
1408extern void extract_array_notation_exprs (tree, bool, vec<tree, va_gc> **);
1409extern void replace_array_notations (tree *, bool, vec<tree, va_gc> *,
1410 vec<tree, va_gc> *);
1411extern tree find_inv_trees (tree *, int *, void *);
1412extern tree replace_inv_trees (tree *, int *, void *);
1413extern tree find_correct_array_notation_type (tree op);
e9331eab 1414extern void cilkplus_extract_an_triplets (vec<tree, va_gc> *, size_t, size_t,
1415 vec<vec<an_parts> > *);
1416extern vec <tree, va_gc> *fix_sec_implicit_args
1417 (location_t, vec <tree, va_gc> *, vec<an_loop_parts>, size_t, tree);
d037099f 1418
1419/* In cilk.c. */
1420extern tree insert_cilk_frame (tree);
1421extern void cilk_init_builtins (void);
433e804e 1422extern int gimplify_cilk_spawn (tree *);
1423extern void cilk_install_body_with_frame_cleanup (tree, tree, void *);
d037099f 1424extern bool cilk_detect_spawn_and_unwrap (tree *);
1425extern bool cilk_set_spawn_marker (location_t, tree);
1426extern tree build_cilk_sync (void);
1427extern tree build_cilk_spawn (location_t, tree);
1428extern tree make_cilk_frame (tree);
1429extern tree create_cilk_function_exit (tree, bool, bool);
1430extern tree cilk_install_body_pedigree_operations (tree);
433e804e 1431extern void cilk_outline (tree, tree *, void *);
3bfdc94f 1432extern bool contains_cilk_spawn_stmt (tree);
40750995 1433extern tree cilk_for_number_of_iterations (tree);
fdd735a7 1434extern bool check_no_cilk (tree, const char *, const char *,
1435 location_t loc = UNKNOWN_LOCATION);
e5f01cba 1436/* In c-indentation.c. */
1437extern void
1438warn_for_misleading_indentation (location_t guard_loc,
1439 location_t body_loc,
1440 location_t next_stmt_loc,
1441 enum cpp_ttype next_tok_type,
1442 const char *guard_kind);
1443
2a281353 1444#endif /* ! GCC_C_COMMON_H */