]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/include/cpplib.h
[CPP PATCH] Fix warning & other cleanups.
[thirdparty/gcc.git] / libcpp / include / cpplib.h
CommitLineData
1d6fa33f 1/* Definitions for CPP library.
8e8f6434 2 Copyright (C) 1995-2018 Free Software Foundation, Inc.
1d6fa33f 3 Written by Per Bothner, 1994-95.
4
5This program is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
6bc9506f 7Free Software Foundation; either version 3, or (at your option) any
1d6fa33f 8later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
6bc9506f 16along with this program; see the file COPYING3. If not see
17<http://www.gnu.org/licenses/>.
1d6fa33f 18
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
d856c8a6 22#ifndef LIBCPP_CPPLIB_H
23#define LIBCPP_CPPLIB_H
1d6fa33f 24
25#include <sys/types.h>
d856c8a6 26#include "symtab.h"
38692459 27#include "line-map.h"
1d6fa33f 28
1d6fa33f 29typedef struct cpp_reader cpp_reader;
30typedef struct cpp_buffer cpp_buffer;
31typedef struct cpp_options cpp_options;
50fd6b48 32typedef struct cpp_token cpp_token;
76faa4c0 33typedef struct cpp_string cpp_string;
614e0ab7 34typedef struct cpp_hashnode cpp_hashnode;
79bd622b 35typedef struct cpp_macro cpp_macro;
72b04ca4 36typedef struct cpp_callbacks cpp_callbacks;
1824e2bd 37typedef struct cpp_dir cpp_dir;
79bd622b 38
065e625b 39struct _cpp_file;
6060326b 40
87215b90 41/* The first three groups, apart from '=', can appear in preprocessor
42 expressions (+= and -= are used to indicate unary + and - resp.).
43 This allows a lookup table to be implemented in _cpp_parse_expr.
6060326b 44
45 The first group, to CPP_LAST_EQ, can be immediately followed by an
46 '='. The lexer needs operators ending in '=', like ">>=", to be in
e58c07f7 47 the same order as their counterparts without the '=', like ">>".
48
49 See the cpp_operator table optab in expr.c if you change the order or
50 add or remove anything in the first group. */
6060326b 51
d6d3c909 52#define TTYPE_TABLE \
53 OP(EQ, "=") \
54 OP(NOT, "!") \
55 OP(GREATER, ">") /* compare */ \
56 OP(LESS, "<") \
57 OP(PLUS, "+") /* math */ \
58 OP(MINUS, "-") \
59 OP(MULT, "*") \
60 OP(DIV, "/") \
61 OP(MOD, "%") \
62 OP(AND, "&") /* bit ops */ \
63 OP(OR, "|") \
64 OP(XOR, "^") \
65 OP(RSHIFT, ">>") \
66 OP(LSHIFT, "<<") \
d6d3c909 67 \
68 OP(COMPL, "~") \
69 OP(AND_AND, "&&") /* logical */ \
70 OP(OR_OR, "||") \
71 OP(QUERY, "?") \
72 OP(COLON, ":") \
73 OP(COMMA, ",") /* grouping */ \
74 OP(OPEN_PAREN, "(") \
75 OP(CLOSE_PAREN, ")") \
76 TK(EOF, NONE) \
77 OP(EQ_EQ, "==") /* compare */ \
78 OP(NOT_EQ, "!=") \
79 OP(GREATER_EQ, ">=") \
80 OP(LESS_EQ, "<=") \
81 \
82 /* These two are unary + / - in preprocessor expressions. */ \
83 OP(PLUS_EQ, "+=") /* math */ \
84 OP(MINUS_EQ, "-=") \
85 \
86 OP(MULT_EQ, "*=") \
87 OP(DIV_EQ, "/=") \
88 OP(MOD_EQ, "%=") \
89 OP(AND_EQ, "&=") /* bit ops */ \
90 OP(OR_EQ, "|=") \
91 OP(XOR_EQ, "^=") \
92 OP(RSHIFT_EQ, ">>=") \
93 OP(LSHIFT_EQ, "<<=") \
d6d3c909 94 /* Digraphs together, beginning with CPP_FIRST_DIGRAPH. */ \
95 OP(HASH, "#") /* digraphs */ \
96 OP(PASTE, "##") \
97 OP(OPEN_SQUARE, "[") \
98 OP(CLOSE_SQUARE, "]") \
99 OP(OPEN_BRACE, "{") \
100 OP(CLOSE_BRACE, "}") \
101 /* The remainder of the punctuation. Order is not significant. */ \
102 OP(SEMICOLON, ";") /* structure */ \
103 OP(ELLIPSIS, "...") \
104 OP(PLUS_PLUS, "++") /* increment */ \
105 OP(MINUS_MINUS, "--") \
106 OP(DEREF, "->") /* accessors */ \
107 OP(DOT, ".") \
108 OP(SCOPE, "::") \
109 OP(DEREF_STAR, "->*") \
110 OP(DOT_STAR, ".*") \
111 OP(ATSIGN, "@") /* used in Objective-C */ \
112 \
113 TK(NAME, IDENT) /* word */ \
114 TK(AT_NAME, IDENT) /* @word - Objective-C */ \
115 TK(NUMBER, LITERAL) /* 34_be+ta */ \
116 \
117 TK(CHAR, LITERAL) /* 'char' */ \
118 TK(WCHAR, LITERAL) /* L'char' */ \
924bbf02 119 TK(CHAR16, LITERAL) /* u'char' */ \
120 TK(CHAR32, LITERAL) /* U'char' */ \
30b1ba42 121 TK(UTF8CHAR, LITERAL) /* u8'char' */ \
d6d3c909 122 TK(OTHER, LITERAL) /* stray punctuation */ \
123 \
124 TK(STRING, LITERAL) /* "string" */ \
125 TK(WSTRING, LITERAL) /* L"string" */ \
924bbf02 126 TK(STRING16, LITERAL) /* u"string" */ \
127 TK(STRING32, LITERAL) /* U"string" */ \
538ba11a 128 TK(UTF8STRING, LITERAL) /* u8"string" */ \
d6d3c909 129 TK(OBJC_STRING, LITERAL) /* @"string" - Objective-C */ \
130 TK(HEADER_NAME, LITERAL) /* <stdio.h> in #include */ \
131 \
244db24d 132 TK(CHAR_USERDEF, LITERAL) /* 'char'_suffix - C++-0x */ \
133 TK(WCHAR_USERDEF, LITERAL) /* L'char'_suffix - C++-0x */ \
134 TK(CHAR16_USERDEF, LITERAL) /* u'char'_suffix - C++-0x */ \
135 TK(CHAR32_USERDEF, LITERAL) /* U'char'_suffix - C++-0x */ \
30b1ba42 136 TK(UTF8CHAR_USERDEF, LITERAL) /* u8'char'_suffix - C++-0x */ \
244db24d 137 TK(STRING_USERDEF, LITERAL) /* "string"_suffix - C++-0x */ \
138 TK(WSTRING_USERDEF, LITERAL) /* L"string"_suffix - C++-0x */ \
139 TK(STRING16_USERDEF, LITERAL) /* u"string"_suffix - C++-0x */ \
140 TK(STRING32_USERDEF, LITERAL) /* U"string"_suffix - C++-0x */ \
141 TK(UTF8STRING_USERDEF,LITERAL) /* u8"string"_suffix - C++-0x */ \
142 \
d6d3c909 143 TK(COMMENT, LITERAL) /* Only if output comments. */ \
144 /* SPELL_LITERAL happens to DTRT. */ \
145 TK(MACRO_ARG, NONE) /* Macro argument. */ \
b75b98aa 146 TK(PRAGMA, NONE) /* Only for deferred pragmas. */ \
147 TK(PRAGMA_EOL, NONE) /* End-of-line for deferred pragmas. */ \
d6d3c909 148 TK(PADDING, NONE) /* Whitespace for -E. */
149
150#define OP(e, s) CPP_ ## e,
151#define TK(e, s) CPP_ ## e,
82831e19 152enum cpp_ttype
d2e850c1 153{
50fd6b48 154 TTYPE_TABLE
d6d3c909 155 N_TTYPES,
156
5213d6c9 157 /* A token type for keywords, as opposed to ordinary identifiers. */
158 CPP_KEYWORD,
159
d6d3c909 160 /* Positions in the table. */
e58c07f7 161 CPP_LAST_EQ = CPP_LSHIFT,
d6d3c909 162 CPP_FIRST_DIGRAPH = CPP_HASH,
e58c07f7 163 CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
d6d3c909 164 CPP_LAST_CPP_OP = CPP_LESS_EQ
50fd6b48 165};
7e842f95 166#undef OP
167#undef TK
50fd6b48 168
d862067c 169/* C language kind, used when calling cpp_create_reader. */
a0f44249 170enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11, CLK_GNUC17,
171 CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC11, CLK_STDC17,
1638c736 172 CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
96bf2948 173 CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17,
174 CLK_GNUCXX2A, CLK_CXX2A, CLK_ASM};
fad0ffbb 175
e484a1cc 176/* Payload of a NUMBER, STRING, CHAR or COMMENT token. */
fb1e4f4a 177struct GTY(()) cpp_string {
50fd6b48 178 unsigned int len;
e916a356 179 const unsigned char *text;
50fd6b48 180};
181
6060326b 182/* Flags for the cpp_token structure. */
f80e83a9 183#define PREV_WHITE (1 << 0) /* If whitespace before this token. */
79bd622b 184#define DIGRAPH (1 << 1) /* If it was a digraph. */
185#define STRINGIFY_ARG (1 << 2) /* If macro argument to be stringified. */
186#define PASTE_LEFT (1 << 3) /* If on LHS of a ## operator. */
fad0ffbb 187#define NAMED_OP (1 << 4) /* C++ named operators. */
3c77f69c 188#define PREV_FALLTHROUGH (1 << 5) /* On a token preceeded by FALLTHROUGH
189 comment. */
f9b5f742 190#define BOL (1 << 6) /* Token at beginning of line. */
8dba02f7 191#define PURE_ZERO (1 << 7) /* Single 0 digit, used by the C++ frontend,
192 set in c-lex.c. */
941f2388 193#define SP_DIGRAPH (1 << 8) /* # or ## token was a digraph. */
194#define SP_PREV_WHITE (1 << 9) /* If whitespace before a ##
195 operator, or before this token
196 after a # operator. */
3c77f69c 197#define NO_EXPAND (1 << 10) /* Do not macro-expand this token. */
2c63d6c8 198
c39ed964 199/* Specify which field, if any, of the cpp_token union is used. */
200
201enum cpp_token_fld_kind {
202 CPP_TOKEN_FLD_NODE,
203 CPP_TOKEN_FLD_SOURCE,
204 CPP_TOKEN_FLD_STR,
205 CPP_TOKEN_FLD_ARG_NO,
2ee04baa 206 CPP_TOKEN_FLD_TOKEN_NO,
b75b98aa 207 CPP_TOKEN_FLD_PRAGMA,
c39ed964 208 CPP_TOKEN_FLD_NONE
209};
210
2ee04baa 211/* A macro argument in the cpp_token union. */
212struct GTY(()) cpp_macro_arg {
213 /* Argument number. */
214 unsigned int arg_no;
109ca87a 215 /* The original spelling of the macro argument token. */
216 cpp_hashnode *
217 GTY ((nested_ptr (union tree_node,
218 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
219 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
220 spelling;
2ee04baa 221};
222
223/* An identifier in the cpp_token union. */
224struct GTY(()) cpp_identifier {
225 /* The canonical (UTF-8) spelling of the identifier. */
226 cpp_hashnode *
227 GTY ((nested_ptr (union tree_node,
228 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
229 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
230 node;
109ca87a 231 /* The original spelling of the identifier. */
232 cpp_hashnode *
233 GTY ((nested_ptr (union tree_node,
234 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
235 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
236 spelling;
2ee04baa 237};
238
58dd1ce6 239/* A preprocessing token. This has been carefully packed and should
c7e5d924 240 occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts. */
fb1e4f4a 241struct GTY(()) cpp_token {
a96cefb2 242 source_location src_loc; /* Location of first char of token,
243 together with range of full token. */
f80e83a9 244 ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */
941f2388 245 unsigned short flags; /* flags - see above */
f80e83a9 246
c39ed964 247 union cpp_token_u
50fd6b48 248 {
c39ed964 249 /* An identifier. */
2ee04baa 250 struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
c39ed964 251
252 /* Inherit padding from this token. */
253 cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
254
255 /* A string, or number. */
256 struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
257
109ca87a 258 /* Argument no. (and original spelling) for a CPP_MACRO_ARG. */
2ee04baa 259 struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
260
261 /* Original token no. for a CPP_PASTE (from a sequence of
262 consecutive paste tokens in a macro expansion). */
263 unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
b75b98aa 264
265 /* Caller-supplied identifier for a CPP_PRAGMA. */
266 unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
c39ed964 267 } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
1d6fa33f 268};
269
c39ed964 270/* Say which field is in use. */
da31536d 271extern enum cpp_token_fld_kind cpp_token_val_index (const cpp_token *tok);
c39ed964 272
13c457e1 273/* A type wide enough to hold any multibyte source character.
40855b30 274 cpplib's character constant interpreter requires an unsigned type.
69edc0b3 275 Also, a typedef for the signed equivalent.
276 The width of this type is capped at 32 bits; there do exist targets
277 where wchar_t is 64 bits, but only in a non-default mode, and there
278 would be no meaningful interpretation for a wchar_t value greater
279 than 2^32 anyway -- the widest wide-character encoding around is
280 ISO 10646, which stops at 2^31. */
281#if CHAR_BIT * SIZEOF_INT >= 32
40855b30 282# define CPPCHAR_SIGNED_T int
69edc0b3 283#elif CHAR_BIT * SIZEOF_LONG >= 32
284# define CPPCHAR_SIGNED_T long
40855b30 285#else
69edc0b3 286# error "Cannot find a least-32-bit signed integer type"
40855b30 287#endif
288typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
289typedef CPPCHAR_SIGNED_T cppchar_signed_t;
338fa5f7 290
3b298764 291/* Style of header dependencies to generate. */
292enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
293
bce47149 294/* The possible normalization levels, from most restrictive to least. */
295enum cpp_normalize_level {
296 /* In NFKC. */
297 normalized_KC = 0,
298 /* In NFC. */
299 normalized_C,
300 /* In NFC, except for subsequences where being in NFC would make
301 the identifier invalid. */
302 normalized_identifier_C,
303 /* Not normalized at all. */
304 normalized_none
305};
306
2ff3ad1d 307/* This structure is nested inside struct cpp_reader, and
308 carries all the options visible to the command line. */
309struct cpp_options
e2fba115 310{
3b304865 311 /* Characters between tab stops. */
312 unsigned int tabstop;
313
5db5d057 314 /* The language we're preprocessing. */
315 enum c_lang lang;
316
1d6fa33f 317 /* Nonzero means use extra default include directories for C++. */
2ff3ad1d 318 unsigned char cplusplus;
1d6fa33f 319
8b332087 320 /* Nonzero means handle cplusplus style comments. */
2ff3ad1d 321 unsigned char cplusplus_comments;
1d6fa33f 322
fb9753dc 323 /* Nonzero means define __OBJC__, treat @ as a special token, use
324 the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
325 "#import". */
2ff3ad1d 326 unsigned char objc;
1d6fa33f 327
0f0b3789 328 /* Nonzero means don't copy comments into the output file. */
2ff3ad1d 329 unsigned char discard_comments;
1d6fa33f 330
d3f7919d 331 /* Nonzero means don't copy comments into the output file during
332 macro expansion. */
333 unsigned char discard_comments_in_macro_exp;
334
f80e83a9 335 /* Nonzero means process the ISO trigraph sequences. */
2ff3ad1d 336 unsigned char trigraphs;
1d6fa33f 337
27fdc0b6 338 /* Nonzero means process the ISO digraph sequences. */
339 unsigned char digraphs;
340
5db5d057 341 /* Nonzero means to allow hexadecimal floats and LL suffixes. */
342 unsigned char extended_numbers;
343
924bbf02 344 /* Nonzero means process u/U prefix literals (UTF-16/32). */
345 unsigned char uliterals;
346
30b1ba42 347 /* Nonzero means process u8 prefixed character literals (UTF-8). */
348 unsigned char utf8_char_literals;
349
094a55ba 350 /* Nonzero means process r/R raw strings. If this is set, uliterals
6f6f3dd7 351 must be set as well. */
352 unsigned char rliterals;
353
1d6fa33f 354 /* Nonzero means print names of header files (-H). */
2ff3ad1d 355 unsigned char print_include_names;
1d6fa33f 356
922df727 357 /* Nonzero means complain about deprecated features. */
5ae82d58 358 unsigned char cpp_warn_deprecated;
922df727 359
1d6fa33f 360 /* Nonzero means warn if slash-star appears in a comment. */
2ff3ad1d 361 unsigned char warn_comments;
1d6fa33f 362
9148bda3 363 /* Nonzero means to warn about __DATA__, __TIME__ and __TIMESTAMP__ usage. */
364 unsigned char warn_date_time;
365
06fd18c9 366 /* Nonzero means warn if a user-supplied include directory does not
367 exist. */
368 unsigned char warn_missing_include_dirs;
369
1d6fa33f 370 /* Nonzero means warn if there are any trigraphs. */
2ff3ad1d 371 unsigned char warn_trigraphs;
1d6fa33f 372
318fdd81 373 /* Nonzero means warn about multicharacter charconsts. */
374 unsigned char warn_multichar;
375
241e762e 376 /* Nonzero means warn about various incompatibilities with
377 traditional C. */
5ae82d58 378 unsigned char cpp_warn_traditional;
1d6fa33f 379
4baf0479 380 /* Nonzero means warn about long long numeric constants. */
5ae82d58 381 unsigned char cpp_warn_long_long;
4baf0479 382
923acdd5 383 /* Nonzero means warn about text after an #endif (or #else). */
384 unsigned char warn_endif_labels;
385
21d6e4ae 386 /* Nonzero means warn about implicit sign changes owing to integer
387 promotions. */
388 unsigned char warn_num_sign_change;
389
05d51900 390 /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
391 Presumably the usage is protected by the appropriate #ifdef. */
392 unsigned char warn_variadic_macros;
393
2ad0b097 394 /* Nonzero means warn about builtin macros that are redefined or
395 explicitly undefined. */
396 unsigned char warn_builtin_macro_redefined;
397
12663602 398 /* Different -Wimplicit-fallthrough= levels. */
399 unsigned char cpp_warn_implicit_fallthrough;
400
68215e49 401 /* Nonzero means we should look for header.gcc files that remap file
402 names. */
2ff3ad1d 403 unsigned char remap;
68215e49 404
a7dce381 405 /* Zero means dollar signs are punctuation. */
2ff3ad1d 406 unsigned char dollars_in_ident;
1d6fa33f 407
865c4e44 408 /* Nonzero means UCNs are accepted in identifiers. */
409 unsigned char extended_identifiers;
410
f0c2775b 411 /* True if we should warn about dollars in identifiers or numbers
412 for this translation unit. */
413 unsigned char warn_dollars;
414
d6f5f355 415 /* Nonzero means warn if undefined identifiers are evaluated in an #if. */
2ff3ad1d 416 unsigned char warn_undef;
d6f5f355 417
6e47b422 418 /* Nonzero means warn if "defined" is encountered in a place other than
419 an #if. */
420 unsigned char warn_expansion_to_defined;
421
71a7c282 422 /* Nonzero means warn of unused macros from the main file. */
423 unsigned char warn_unused_macros;
424
85fc7e91 425 /* Nonzero for the 1999 C Standard, including corrigenda and amendments. */
2ff3ad1d 426 unsigned char c99;
85fc7e91 427
ed909a09 428 /* Nonzero if we are conforming to a specific C or C++ standard. */
429 unsigned char std;
430
1d6fa33f 431 /* Nonzero means give all the error messages the ANSI standard requires. */
5ae82d58 432 unsigned char cpp_pedantic;
1d6fa33f 433
4070d785 434 /* Nonzero means we're looking at already preprocessed code, so don't
435 bother trying to do macro expansion and whatnot. */
2ff3ad1d 436 unsigned char preprocessed;
62db153a 437
438 /* Nonzero means we are going to emit debugging logs during
439 preprocessing. */
440 unsigned char debug;
4070d785 441
ce70f433 442 /* Nonzero means we are tracking locations of tokens involved in
443 macro expansion. 1 Means we track the location in degraded mode
444 where we do not track locations of tokens resulting from the
445 expansion of arguments of function-like macro. 2 Means we do
446 track all macro expansions. This last option is the one that
447 consumes the highest amount of memory. */
448 unsigned char track_macro_expansion;
449
c7e5d924 450 /* Nonzero means handle C++ alternate operator names. */
624a7570 451 unsigned char operator_names;
72b04ca4 452
2a6a6991 453 /* Nonzero means warn about use of C++ alternate operator names. */
454 unsigned char warn_cxx_operator_names;
455
0bb65704 456 /* True for traditional preprocessing. */
457 unsigned char traditional;
458
d8c8614f 459 /* Nonzero for C++ 2011 Standard user-defined literals. */
244db24d 460 unsigned char user_literals;
461
76d340ac 462 /* Nonzero means warn when a string or character literal is followed by a
463 ud-suffix which does not beging with an underscore. */
464 unsigned char warn_literal_suffix;
465
2dd00636 466 /* Nonzero means interpret imaginary, fixed-point, or other gnu extension
467 literal number suffixes as user-defined literal number suffixes. */
468 unsigned char ext_numeric_literals;
469
460f52aa 470 /* Nonzero means extended identifiers allow the characters specified
471 in C11 and C++11. */
472 unsigned char c11_identifiers;
473
d8c8614f 474 /* Nonzero for C++ 2014 Standard binary constants. */
475 unsigned char binary_constants;
476
4d6f7dd4 477 /* Nonzero for C++ 2014 Standard digit separators. */
478 unsigned char digit_separators;
479
86136db8 480 /* Nonzero for C++2a __VA_OPT__ feature. */
481 unsigned char va_opt;
482
ebc03810 483 /* Holds the name of the target (execution) character set. */
484 const char *narrow_charset;
485
486 /* Holds the name of the target wide character set. */
487 const char *wide_charset;
488
787c3d1a 489 /* Holds the name of the input character set. */
490 const char *input_charset;
491
bce47149 492 /* The minimum permitted level of normalization before a warning
bcc1f37e 493 is generated. See enum cpp_normalize_level. */
494 int warn_normalize;
bce47149 495
65a6d98c 496 /* True to warn about precompiled header files we couldn't use. */
497 bool warn_invalid_pch;
498
499 /* True if dependencies should be restored from a precompiled header. */
500 bool restore_pch_deps;
501
890c2e2f 502 /* True if warn about differences between C90 and C99. */
4c860a45 503 signed char cpp_warn_c90_c99_compat;
890c2e2f 504
1b03cc89 505 /* True if warn about differences between C++98 and C++11. */
506 bool cpp_warn_cxx11_compat;
507
61191376 508 /* Dependency generation. */
509 struct
510 {
511 /* Style of header dependencies to generate. */
3b298764 512 enum cpp_deps_style style;
61191376 513
514 /* Assume missing files are generated files. */
515 bool missing_files;
516
517 /* Generate phony targets for each dependency apart from the first
518 one. */
519 bool phony_targets;
3c556f04 520
521 /* If true, no dependency is generated on the main file. */
522 bool ignore_main_file;
c25f2689 523
524 /* If true, intend to use the preprocessor output (e.g., for compilation)
525 in addition to the dependency info. */
526 bool need_preprocessor_output;
61191376 527 } deps;
528
d932f956 529 /* Target-specific features set by the front end or client. */
530
531 /* Precision for target CPP arithmetic, target characters, target
532 ints and target wide characters, respectively. */
533 size_t precision, char_precision, int_precision, wchar_precision;
534
1ae6ed16 535 /* True means chars (wide chars) are unsigned. */
536 bool unsigned_char, unsigned_wchar;
63994318 537
ebc03810 538 /* True if the most significant byte in a word has the lowest
539 address in memory. */
540 bool bytes_big_endian;
65a6d98c 541
63994318 542 /* Nonzero means __STDC__ should have the value 0 in system headers. */
543 unsigned char stdc_0_in_system_headers;
d6d3c909 544
fcde64dc 545 /* True disables tokenization outside of preprocessing directives. */
546 bool directives_only;
52bc861d 547
548 /* True enables canonicalization of system header file paths. */
549 bool canonical_system_headers;
2ff3ad1d 550};
1d6fa33f 551
065e625b 552/* Callback for header lookup for HEADER, which is the name of a
553 source file. It is used as a method of last resort to find headers
554 that are not otherwise found during the normal include processing.
555 The return value is the malloced name of a header to try and open,
556 if any, or NULL otherwise. This callback is called only if the
557 header is otherwise unfound. */
d6c39c7a 558typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
065e625b 559
5c120a72 560/* Call backs to cpplib client. */
72b04ca4 561struct cpp_callbacks
562{
5621a364 563 /* Called when a new line of preprocessed output is started. */
f7fdd7a1 564 void (*line_change) (cpp_reader *, const cpp_token *, int);
64386834 565
566 /* Called when switching to/from a new file.
567 The line_map is for the new file. It is NULL if there is no new file.
568 (In C this happens when done with <built-in>+<command line> and also
569 when done with a main file.) This can be used for resource cleanup. */
551e34da 570 void (*file_change) (cpp_reader *, const line_map_ordinary *);
64386834 571
e7aa92b2 572 void (*dir_change) (cpp_reader *, const char *);
c219ee5c 573 void (*include) (cpp_reader *, source_location, const unsigned char *,
f789fe3e 574 const char *, int, const cpp_token **);
c219ee5c 575 void (*define) (cpp_reader *, source_location, cpp_hashnode *);
576 void (*undef) (cpp_reader *, source_location, cpp_hashnode *);
577 void (*ident) (cpp_reader *, source_location, const cpp_string *);
578 void (*def_pragma) (cpp_reader *, source_location);
f7fdd7a1 579 int (*valid_pch) (cpp_reader *, const char *, int);
580 void (*read_pch) (cpp_reader *, const char *, int, const char *);
065e625b 581 missing_header_cb missing_header;
eb0d20b7 582
89768577 583 /* Context-sensitive macro support. Returns macro (if any) that should
584 be expanded. */
585 cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
586
7f5f3953 587 /* Called to emit a diagnostic. This callback receives the
588 translated message. */
f0479000 589 bool (*error) (cpp_reader *, int, int, rich_location *,
7f5f3953 590 const char *, va_list *)
f0479000 591 ATTRIBUTE_FPTR_PRINTF(5,0);
34c3de48 592
593 /* Callbacks for when a macro is expanded, or tested (whether
594 defined or not at the time) in #ifdef, #ifndef or "defined". */
c219ee5c 595 void (*used_define) (cpp_reader *, source_location, cpp_hashnode *);
596 void (*used_undef) (cpp_reader *, source_location, cpp_hashnode *);
34c3de48 597 /* Called before #define and #undef or other macro definition
598 changes are processed. */
599 void (*before_define) (cpp_reader *);
116f0a5f 600 /* Called whenever a macro is expanded or tested.
601 Second argument is the location of the start of the current expansion. */
602 void (*used) (cpp_reader *, source_location, cpp_hashnode *);
25692381 603
3aa2fa44 604 /* Callback to identify whether an attribute exists. */
605 int (*has_attribute) (cpp_reader *);
606
6d6279f8 607 /* Callback that can change a user lazy into normal macro. */
608 void (*user_lazy_macro) (cpp_reader *, cpp_macro *, unsigned);
dfa5c0d3 609
610 /* Callback to parse SOURCE_DATE_EPOCH from environment. */
611 time_t (*get_source_date_epoch) (cpp_reader *);
5c8151fa 612
613 /* Callback for providing suggestions for misspelled directives. */
614 const char *(*get_suggestion) (cpp_reader *, const char *, const char *const *);
7b921e0b 615
616 /* Callback for when a comment is encountered, giving the location
617 of the opening slash, a pointer to the content (which is not
618 necessarily 0-terminated), and the length of the content.
619 The content contains the opening slash-star (or slash-slash),
620 and for C-style comments contains the closing star-slash. For
621 C++-style comments it does not include the terminating newline. */
622 void (*comment) (cpp_reader *, source_location, const unsigned char *,
623 size_t);
859b51f8 624
625 /* Callback for filename remapping in __FILE__ and __BASE_FILE__ macro
626 expansions. */
627 const char *(*remap_filename) (const char*);
72b04ca4 628};
629
7ad75c55 630#ifdef VMS
631#define INO_T_CPP ino_t ino[3]
632#else
633#define INO_T_CPP ino_t ino
634#endif
635
e69f4d0e 636/* Chain of directories to look for include files in. */
1824e2bd 637struct cpp_dir
e69f4d0e 638{
639 /* NULL-terminated singly-linked list. */
1824e2bd 640 struct cpp_dir *next;
e69f4d0e 641
1824e2bd 642 /* NAME of the directory, NUL-terminated. */
e69f4d0e 643 char *name;
644 unsigned int len;
645
646 /* One if a system header, two if a system header that has extern
647 "C" guards for C++. */
648 unsigned char sysp;
649
0ac758f7 650 /* Is this a user-supplied directory? */
651 bool user_supplied_p;
652
653 /* The canonicalized NAME as determined by lrealpath. This field
654 is only used by hosts that lack reliable inode numbers. */
655 char *canonical_name;
656
1824e2bd 657 /* Mapping of file names for this directory for MS-DOS and related
658 platforms. A NULL-terminated array of (from, to) pairs. */
659 const char **name_map;
787c3d1a 660
065e625b 661 /* Routine to construct pathname, given the search path name and the
662 HEADER we are trying to find, return a constructed pathname to
663 try and open. If this is NULL, the constructed pathname is as
664 constructed by append_file_to_dir. */
665 char *(*construct) (const char *header, cpp_dir *dir);
666
e69f4d0e 667 /* The C front end uses these to recognize duplicated
668 directories in the search path. */
7ad75c55 669 INO_T_CPP;
e69f4d0e 670 dev_t dev;
671};
672
7496b881 673/* The kind of the cpp_macro. */
674enum cpp_macro_kind {
675 cmk_macro, /* An ISO macro (token expansion). */
8a0afc11 676 cmk_assert, /* An assertion. */
faf7b1b0 677 cmk_traditional /* A traditional macro (text expansion). */
7496b881 678};
679
373b37e4 680/* Each macro definition is recorded in a cpp_macro structure.
681 Variadic macros cannot occur with traditional cpp. */
682struct GTY(()) cpp_macro {
8a0afc11 683 union cpp_parm_u
684 {
685 /* Parameters, if any. If parameter names use extended identifiers,
686 the original spelling of those identifiers, not the canonical
687 UTF-8 spelling, goes here. */
688 cpp_hashnode ** GTY ((tag ("false"),
689 nested_ptr (union tree_node,
690 "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
691 "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
692 length ("%1.paramc"))) params;
693
694 /* If this is an assertion, the next one in the chain. */
695 cpp_macro *GTY ((tag ("true"))) next;
696 } GTY ((desc ("%1.kind == cmk_assert"))) parm;
373b37e4 697
373b37e4 698 /* Definition line number. */
699 source_location line;
700
8a0afc11 701 /* Number of tokens in body, or bytes for traditional macros. */
702 /* Do we really need 2^32-1 range here? */
373b37e4 703 unsigned int count;
704
705 /* Number of parameters. */
706 unsigned short paramc;
707
6d6279f8 708 /* Non-zero if this is a user-lazy macro, value provided by user. */
709 unsigned char lazy;
710
7496b881 711 /* The kind of this macro (ISO, trad or assert) */
712 unsigned kind : 2;
713
373b37e4 714 /* If a function-like macro. */
715 unsigned int fun_like : 1;
716
717 /* If a variadic macro. */
718 unsigned int variadic : 1;
719
720 /* If macro defined in system header. */
721 unsigned int syshdr : 1;
722
723 /* Nonzero if it has been expanded or had its existence tested. */
724 unsigned int used : 1;
725
373b37e4 726 /* Indicate whether the tokens include extra CPP_PASTE tokens at the
727 end to track invalid redefinitions with consecutive CPP_PASTE
728 tokens. */
729 unsigned int extra_tokens : 1;
7496b881 730
731 /* 1 bits spare (32-bit). 33 on 64-bit target. */
732
733 union cpp_exp_u
734 {
735 /* Trailing array of replacement tokens (ISO), or assertion body value. */
736 cpp_token GTY ((tag ("false"), length ("%1.count"))) tokens[1];
737
738 /* Pointer to replacement text (traditional). See comment at top
739 of cpptrad.c for how traditional function-like macros are
740 encoded. */
741 const unsigned char *GTY ((tag ("true"))) text;
742 } GTY ((desc ("%1.kind == cmk_traditional"))) exp;
373b37e4 743};
744
79bd622b 745/* The structure of a node in the hash table. The hash table has
746 entries for all identifiers: either macros defined by #define
747 commands (type NT_MACRO), assertions created with #assert
748 (NT_ASSERTION), or neither of the above (NT_VOID). Builtin macros
d716ce75 749 like __LINE__ are flagged NODE_BUILTIN. Poisoned identifiers are
79bd622b 750 flagged NODE_POISONED. NODE_OPERATOR (C++ only) indicates an
751 identifier that behaves like an operator such as "xor".
752 NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
753 diagnostic may be required for this node. Currently this only
2a6a6991 754 applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
755 warnings about NODE_OPERATOR. */
79bd622b 756
757/* Hash node flags. */
758#define NODE_OPERATOR (1 << 0) /* C++ named operator. */
759#define NODE_POISONED (1 << 1) /* Poisoned identifier. */
760#define NODE_BUILTIN (1 << 2) /* Builtin macro. */
761#define NODE_DIAGNOSTIC (1 << 3) /* Possible diagnostic when lexed. */
31ca26b1 762#define NODE_WARN (1 << 4) /* Warn if redefined or undefined. */
c7e5d924 763#define NODE_DISABLED (1 << 5) /* A disabled macro. */
6473f3f4 764#define NODE_MACRO_ARG (1 << 6) /* Used during #define processing. */
34c3de48 765#define NODE_USED (1 << 7) /* Dumped with -dU. */
89768577 766#define NODE_CONDITIONAL (1 << 8) /* Conditional macro */
2a6a6991 767#define NODE_WARN_OPERATOR (1 << 9) /* Warn about C++ named operator. */
79bd622b 768
769/* Different flavors of hash node. */
c4abf88d 770enum node_type
771{
79bd622b 772 NT_VOID = 0, /* No definition yet. */
773 NT_MACRO, /* A macro of some form. */
774 NT_ASSERTION /* Predicate for #assert. */
775};
776
c7e5d924 777/* Different flavors of builtin macro. _Pragma is an operator, but we
778 handle it with the builtin code for efficiency reasons. */
26dbec0a 779enum cpp_builtin_type
79bd622b 780{
781 BT_SPECLINE = 0, /* `__LINE__' */
782 BT_DATE, /* `__DATE__' */
783 BT_FILE, /* `__FILE__' */
784 BT_BASE_FILE, /* `__BASE_FILE__' */
785 BT_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
786 BT_TIME, /* `__TIME__' */
c7e5d924 787 BT_STDC, /* `__STDC__' */
cca5dddc 788 BT_PRAGMA, /* `_Pragma' operator */
ce079f70 789 BT_TIMESTAMP, /* `__TIMESTAMP__' */
25692381 790 BT_COUNTER, /* `__COUNTER__' */
6d6279f8 791 BT_HAS_ATTRIBUTE /* `__has_attribute__(x)' */
c4abf88d 792};
793
0d086e18 794#define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
795#define HT_NODE(NODE) ((ht_identifier *) (NODE))
796#define NODE_LEN(NODE) HT_LEN (&(NODE)->ident)
797#define NODE_NAME(NODE) HT_STR (&(NODE)->ident)
c4abf88d 798
c39ed964 799/* Specify which field, if any, of the union is used. */
800
801enum {
802 NTV_MACRO,
803 NTV_ANSWER,
804 NTV_BUILTIN,
805 NTV_ARGUMENT,
806 NTV_NONE
807};
808
809#define CPP_HASHNODE_VALUE_IDX(HNODE) \
810 ((HNODE.flags & NODE_MACRO_ARG) ? NTV_ARGUMENT \
811 : HNODE.type == NT_MACRO ? ((HNODE.flags & NODE_BUILTIN) \
812 ? NTV_BUILTIN : NTV_MACRO) \
813 : HNODE.type == NT_ASSERTION ? NTV_ANSWER \
814 : NTV_NONE)
815
0d086e18 816/* The common part of an identifier node shared amongst all 3 C front
817 ends. Also used to store CPP identifiers, which are a superset of
818 identifiers in the grammatical sense. */
720aca92 819
fb1e4f4a 820union GTY(()) _cpp_hashnode_value {
720aca92 821 /* If a macro. */
822 cpp_macro * GTY((tag ("NTV_MACRO"))) macro;
823 /* Answers to an assertion. */
8a0afc11 824 cpp_macro * GTY ((tag ("NTV_ANSWER"))) answers;
720aca92 825 /* Code for a builtin macro. */
26dbec0a 826 enum cpp_builtin_type GTY ((tag ("NTV_BUILTIN"))) builtin;
720aca92 827 /* Macro argument index. */
828 unsigned short GTY ((tag ("NTV_ARGUMENT"))) arg_index;
829};
830
fb1e4f4a 831struct GTY(()) cpp_hashnode {
0d086e18 832 struct ht_identifier ident;
805e22b2 833 unsigned int is_directive : 1;
787c3d1a 834 unsigned int directive_index : 7; /* If is_directive,
805e22b2 835 then index into directive table.
6473f3f4 836 Otherwise, a NODE_OPERATOR. */
0d086e18 837 unsigned char rid_code; /* Rid code - for front ends. */
2a6a6991 838 ENUM_BITFIELD(node_type) type : 6; /* CPP node type. */
839 unsigned int flags : 10; /* CPP flags. */
c4abf88d 840
720aca92 841 union _cpp_hashnode_value GTY ((desc ("CPP_HASHNODE_VALUE_IDX (%1)"))) value;
c4abf88d 842};
843
d4166bdc 844/* A class for iterating through the source locations within a
845 string token (before escapes are interpreted, and before
846 concatenation). */
847
848class cpp_string_location_reader {
849 public:
850 cpp_string_location_reader (source_location src_loc,
851 line_maps *line_table);
852
853 source_range get_next ();
854
855 private:
856 source_location m_loc;
857 int m_offset_per_column;
858 line_maps *m_line_table;
859};
860
861/* A class for storing the source ranges of all of the characters within
862 a string literal, after escapes are interpreted, and after
863 concatenation.
864
865 This is not GTY-marked, as instances are intended to be temporary. */
866
867class cpp_substring_ranges
868{
869 public:
870 cpp_substring_ranges ();
871 ~cpp_substring_ranges ();
872
873 int get_num_ranges () const { return m_num_ranges; }
874 source_range get_range (int idx) const
875 {
876 linemap_assert (idx < m_num_ranges);
877 return m_ranges[idx];
878 }
879
880 void add_range (source_range range);
881 void add_n_ranges (int num, cpp_string_location_reader &loc_reader);
882
883 private:
884 source_range *m_ranges;
885 int m_num_ranges;
886 int m_alloc_ranges;
887};
888
568139e4 889/* Call this first to get a handle to pass to other functions.
890
891 If you want cpplib to manage its own hashtable, pass in a NULL
892 pointer. Otherwise you should pass in an initialized hash table
893 that cpplib will share; this technique is used by the C front
894 ends. */
ceec9c13 895extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
896 struct line_maps *);
9bd97637 897
931b0a0f 898/* Reset the cpp_reader's line_map. This is only used after reading a
899 PCH file. */
900extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
901
3ae4c9f3 902/* Call this to change the selected language standard (e.g. because of
903 command line options). */
f7fdd7a1 904extern void cpp_set_lang (cpp_reader *, enum c_lang);
3ae4c9f3 905
e69f4d0e 906/* Set the include paths. */
1824e2bd 907extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
e69f4d0e 908
3eb3f293 909/* Call these to get pointers to the options, callback, and deps
910 structures for a given reader. These pointers are good until you
911 call cpp_finish on that reader. You can either edit the callbacks
72b04ca4 912 through the pointer returned from cpp_get_callbacks, or set them
913 with cpp_set_callbacks. */
f7fdd7a1 914extern cpp_options *cpp_get_options (cpp_reader *);
f7fdd7a1 915extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
916extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
3eb3f293 917extern struct deps *cpp_get_deps (cpp_reader *);
72b04ca4 918
d732fcf0 919/* This function reads the file, but does not start preprocessing. It
920 returns the name of the original file; this is the same as the
921 input file, except for preprocessed input. This will generate at
922 least one file change callback, and possibly a line change callback
7c2df241 923 too. If there was an error opening the file, it returns NULL. */
d732fcf0 924extern const char *cpp_read_main_file (cpp_reader *, const char *);
9ceb1c29 925
fcde64dc 926/* Set up built-ins with special behavior. Use cpp_init_builtins()
927 instead unless your know what you are doing. */
928extern void cpp_init_special_builtins (cpp_reader *);
929
fc3c7720 930/* Set up built-ins like __FILE__. */
f7fdd7a1 931extern void cpp_init_builtins (cpp_reader *, int);
9ceb1c29 932
c7f96907 933/* This is called after options have been parsed, and partially
7981458e 934 processed. */
c7f96907 935extern void cpp_post_options (cpp_reader *);
936
ebc03810 937/* Set up translation to the target character set. */
938extern void cpp_init_iconv (cpp_reader *);
939
61191376 940/* Call this to finish preprocessing. If you requested dependency
941 generation, pass an open stream to write the information to,
7f5f3953 942 otherwise NULL. It is your responsibility to close the stream. */
943extern void cpp_finish (cpp_reader *, FILE *deps_stream);
61191376 944
9ceb1c29 945/* Call this to release the handle at the end of preprocessing. Any
7f5f3953 946 use of the handle after this function returns is invalid. */
f7fdd7a1 947extern void cpp_destroy (cpp_reader *);
9ceb1c29 948
f7fdd7a1 949extern unsigned int cpp_token_len (const cpp_token *);
950extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
951extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
bb1fa6bb 952 unsigned char *, bool);
f7fdd7a1 953extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
68bf2ad9 954 void (*) (cpp_reader *), bool);
b75b98aa 955extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
956 const char *, unsigned, bool, bool);
f7fdd7a1 957extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
958 const cpp_token *);
959extern const cpp_token *cpp_get_token (cpp_reader *);
931b0a0f 960extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
961 source_location *);
793b38da 962inline bool cpp_user_macro_p (const cpp_hashnode *node)
963{
964 return node->type == NT_MACRO && !(node->flags & NODE_BUILTIN);
965}
966inline bool cpp_builtin_macro_p (const cpp_hashnode *node)
967{
968 return node->flags & NODE_BUILTIN;
969}
970inline bool cpp_macro_p (const cpp_hashnode *node)
971{
972 return node->type == NT_MACRO;
973}
974/* Returns true if NODE is a function-like user macro. */
faf7b1b0 975inline bool cpp_fun_like_macro_p (cpp_hashnode *node)
976{
977 return cpp_user_macro_p (node) && node->value.macro->fun_like;
978}
793b38da 979
f7fdd7a1 980extern const unsigned char *cpp_macro_definition (cpp_reader *,
25692381 981 cpp_hashnode *);
dbfb2c43 982extern source_location cpp_macro_definition_location (cpp_hashnode *);
f7fdd7a1 983extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
89768577 984extern const cpp_token *cpp_peek_token (cpp_reader *, int);
f80e83a9 985
538ba11a 986/* Evaluate a CPP_*CHAR* token. */
f7fdd7a1 987extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
988 unsigned int *, int *);
538ba11a 989/* Evaluate a vector of CPP_*STRING* tokens. */
ebc03810 990extern bool cpp_interpret_string (cpp_reader *,
991 const cpp_string *, size_t,
924bbf02 992 cpp_string *, enum cpp_ttype);
d4166bdc 993extern const char *cpp_interpret_string_ranges (cpp_reader *pfile,
994 const cpp_string *from,
995 cpp_string_location_reader *,
996 size_t count,
997 cpp_substring_ranges *out,
998 enum cpp_ttype type);
7bc95b56 999extern bool cpp_interpret_string_notranslate (cpp_reader *,
1000 const cpp_string *, size_t,
924bbf02 1001 cpp_string *, enum cpp_ttype);
8330799c 1002
624d37a6 1003/* Convert a host character constant to the execution character set. */
1004extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
1005
fc3c7720 1006/* Used to register macros and assertions, perhaps from the command line.
9a85d74b 1007 The text is the same as the command line argument. */
f7fdd7a1 1008extern void cpp_define (cpp_reader *, const char *);
85e51d59 1009extern void cpp_define_formatted (cpp_reader *pfile,
1010 const char *fmt, ...) ATTRIBUTE_PRINTF_2;
f7fdd7a1 1011extern void cpp_assert (cpp_reader *, const char *);
1012extern void cpp_undef (cpp_reader *, const char *);
1013extern void cpp_unassert (cpp_reader *, const char *);
1d6fa33f 1014
6d6279f8 1015/* Mark a node as a lazily defined macro. */
1016extern void cpp_define_lazily (cpp_reader *, cpp_hashnode *node, unsigned N);
1017
40109983 1018/* Undefine all macros and assertions. */
1019extern void cpp_undef_all (cpp_reader *);
1020
f7fdd7a1 1021extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
64386834 1022 size_t, int);
f7fdd7a1 1023extern int cpp_defined (cpp_reader *, const unsigned char *, int);
6060326b 1024
4baf0479 1025/* A preprocessing number. Code assumes that any unused high bits of
1026 the double integer are set to zero. */
a3034794 1027
1c8ad86a 1028/* This type has to be equal to unsigned HOST_WIDE_INT, see
a3034794 1029 gcc/c-family/c-lex.c. */
1c8ad86a 1030typedef uint64_t cpp_num_part;
4baf0479 1031typedef struct cpp_num cpp_num;
1032struct cpp_num
1033{
1034 cpp_num_part high;
1035 cpp_num_part low;
1036 bool unsignedp; /* True if value should be treated as unsigned. */
1037 bool overflow; /* True if the most recent calculation overflowed. */
1038};
1039
1040/* cpplib provides two interfaces for interpretation of preprocessing
1041 numbers.
1042
1043 cpp_classify_number categorizes numeric constants according to
1044 their field (integer, floating point, or invalid), radix (decimal,
1045 octal, hexadecimal), and type suffixes. */
1046
1047#define CPP_N_CATEGORY 0x000F
1048#define CPP_N_INVALID 0x0000
1049#define CPP_N_INTEGER 0x0001
1050#define CPP_N_FLOATING 0x0002
1051
1052#define CPP_N_WIDTH 0x00F0
5a29175d 1053#define CPP_N_SMALL 0x0010 /* int, float, short _Fract/Accum */
84373723 1054#define CPP_N_MEDIUM 0x0020 /* long, double, long _Fract/_Accum. */
1055#define CPP_N_LARGE 0x0040 /* long long, long double,
1056 long long _Fract/Accum. */
4baf0479 1057
430be8e2 1058#define CPP_N_WIDTH_MD 0xF0000 /* machine defined. */
1059#define CPP_N_MD_W 0x10000
1060#define CPP_N_MD_Q 0x20000
1061
4baf0479 1062#define CPP_N_RADIX 0x0F00
1063#define CPP_N_DECIMAL 0x0100
1064#define CPP_N_HEX 0x0200
1065#define CPP_N_OCTAL 0x0400
d7282a2b 1066#define CPP_N_BINARY 0x0800
4baf0479 1067
1068#define CPP_N_UNSIGNED 0x1000 /* Properties. */
1069#define CPP_N_IMAGINARY 0x2000
6db045b0 1070#define CPP_N_DFLOAT 0x4000
f8ed6d41 1071#define CPP_N_DEFAULT 0x8000
4baf0479 1072
84373723 1073#define CPP_N_FRACT 0x100000 /* Fract types. */
1074#define CPP_N_ACCUM 0x200000 /* Accum types. */
82c85aba 1075#define CPP_N_FLOATN 0x400000 /* _FloatN types. */
1076#define CPP_N_FLOATNX 0x800000 /* _FloatNx types. */
84373723 1077
244db24d 1078#define CPP_N_USERDEF 0x1000000 /* C++0x user-defined literal. */
1079
82c85aba 1080#define CPP_N_WIDTH_FLOATN_NX 0xF0000000 /* _FloatN / _FloatNx value
1081 of N, divided by 16. */
1082#define CPP_FLOATN_SHIFT 24
1083#define CPP_FLOATN_MAX 0xF0
1084
4baf0479 1085/* Classify a CPP_NUMBER token. The return value is a combination of
1086 the flags from the above sets. */
244db24d 1087extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *,
a60f3e81 1088 const char **, source_location);
244db24d 1089
1090/* Return the classification flags for a float suffix. */
2dd00636 1091extern unsigned int cpp_interpret_float_suffix (cpp_reader *, const char *,
1092 size_t);
244db24d 1093
1094/* Return the classification flags for an int suffix. */
2dd00636 1095extern unsigned int cpp_interpret_int_suffix (cpp_reader *, const char *,
1096 size_t);
4baf0479 1097
1098/* Evaluate a token classified as category CPP_N_INTEGER. */
f7fdd7a1 1099extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
244db24d 1100 unsigned int);
4baf0479 1101
f5ec8cb5 1102/* Sign extend a number, with PRECISION significant bits and all
1103 others assumed clear, to fill out a cpp_num structure. */
f7fdd7a1 1104cpp_num cpp_num_sign_extend (cpp_num, size_t);
f5ec8cb5 1105
d716ce75 1106/* Diagnostic levels. To get a diagnostic without associating a
73328dce 1107 position in the translation unit with it, use cpp_error_with_line
1108 with a line number of zero. */
1109
3a79f5da 1110enum {
1111 /* Warning, an error with -Werror. */
1112 CPP_DL_WARNING = 0,
1113 /* Same as CPP_DL_WARNING, except it is not suppressed in system headers. */
1114 CPP_DL_WARNING_SYSHDR,
1115 /* Warning, an error with -pedantic-errors or -Werror. */
1116 CPP_DL_PEDWARN,
1117 /* An error. */
1118 CPP_DL_ERROR,
1119 /* An internal consistency check failed. Prints "internal error: ",
1120 otherwise the same as CPP_DL_ERROR. */
1121 CPP_DL_ICE,
1122 /* An informative note following a warning. */
1123 CPP_DL_NOTE,
1124 /* A fatal error. */
1125 CPP_DL_FATAL
1126};
1127
1128/* Warning reason codes. Use a reason code of zero for unclassified warnings
1129 and errors that are not warnings. */
1130enum {
1131 CPP_W_NONE = 0,
1132 CPP_W_DEPRECATED,
1133 CPP_W_COMMENTS,
1134 CPP_W_MISSING_INCLUDE_DIRS,
1135 CPP_W_TRIGRAPHS,
1136 CPP_W_MULTICHAR,
1137 CPP_W_TRADITIONAL,
1138 CPP_W_LONG_LONG,
1139 CPP_W_ENDIF_LABELS,
1140 CPP_W_NUM_SIGN_CHANGE,
1141 CPP_W_VARIADIC_MACROS,
1142 CPP_W_BUILTIN_MACRO_REDEFINED,
1143 CPP_W_DOLLARS,
1144 CPP_W_UNDEF,
1145 CPP_W_UNUSED_MACROS,
1146 CPP_W_CXX_OPERATOR_NAMES,
1147 CPP_W_NORMALIZE,
1148 CPP_W_INVALID_PCH,
76d340ac 1149 CPP_W_WARNING_DIRECTIVE,
9148bda3 1150 CPP_W_LITERAL_SUFFIX,
04afd878 1151 CPP_W_DATE_TIME,
1152 CPP_W_PEDANTIC,
1b03cc89 1153 CPP_W_C90_C99_COMPAT,
6e47b422 1154 CPP_W_CXX11_COMPAT,
1155 CPP_W_EXPANSION_TO_DEFINED
3a79f5da 1156};
73328dce 1157
73328dce 1158/* Output a diagnostic of some kind. */
7f5f3953 1159extern bool cpp_error (cpp_reader *, int, const char *msgid, ...)
73328dce 1160 ATTRIBUTE_PRINTF_3;
3a79f5da 1161extern bool cpp_warning (cpp_reader *, int, const char *msgid, ...)
1162 ATTRIBUTE_PRINTF_3;
1163extern bool cpp_pedwarning (cpp_reader *, int, const char *msgid, ...)
1164 ATTRIBUTE_PRINTF_3;
1165extern bool cpp_warning_syshdr (cpp_reader *, int, const char *msgid, ...)
1166 ATTRIBUTE_PRINTF_3;
73328dce 1167
f7fdd7a1 1168/* Output a diagnostic with "MSGID: " preceding the
73328dce 1169 error string of errno. No location is printed. */
7f5f3953 1170extern bool cpp_errno (cpp_reader *, int, const char *msgid);
55d11fae 1171/* Similarly, but with "FILENAME: " instead of "MSGID: ", where
1172 the filename is not localized. */
e557fc7f 1173extern bool cpp_errno_filename (cpp_reader *, int, const char *filename,
1174 source_location loc);
73328dce 1175
1176/* Same as cpp_error, except additionally specifies a position as a
1177 (translation unit) physical line and physical column. If the line is
1178 zero, then no location is printed. */
3a79f5da 1179extern bool cpp_error_with_line (cpp_reader *, int, source_location,
1180 unsigned, const char *msgid, ...)
1181 ATTRIBUTE_PRINTF_5;
1182extern bool cpp_warning_with_line (cpp_reader *, int, source_location,
1183 unsigned, const char *msgid, ...)
1184 ATTRIBUTE_PRINTF_5;
1185extern bool cpp_pedwarning_with_line (cpp_reader *, int, source_location,
1186 unsigned, const char *msgid, ...)
1187 ATTRIBUTE_PRINTF_5;
1188extern bool cpp_warning_with_line_syshdr (cpp_reader *, int, source_location,
1189 unsigned, const char *msgid, ...)
1190 ATTRIBUTE_PRINTF_5;
e2f9a79f 1191
e557fc7f 1192extern bool cpp_error_at (cpp_reader * pfile, int level,
1193 source_location src_loc, const char *msgid, ...)
1194 ATTRIBUTE_PRINTF_4;
1195
3b6578b3 1196extern bool cpp_error_at (cpp_reader * pfile, int level,
1197 rich_location *richloc, const char *msgid,
1198 ...)
5c8151fa 1199 ATTRIBUTE_PRINTF_4;
1200
85e51d59 1201/* In lex.c */
f7fdd7a1 1202extern int cpp_ideq (const cpp_token *, const char *);
1203extern void cpp_output_line (cpp_reader *, FILE *);
c0770282 1204extern unsigned char *cpp_output_line_to_string (cpp_reader *,
1205 const unsigned char *);
f7fdd7a1 1206extern void cpp_output_token (const cpp_token *, FILE *);
ba99525e 1207extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
13c457e1 1208/* Returns the value of an escape sequence, truncated to the correct
1209 target precision. PSTR points to the input pointer, which is just
1210 after the backslash. LIMIT is how much text we have. WIDE is true
1211 if the escape sequence is part of a wide character constant or
1212 string literal. Handles all relevant diagnostics. */
f7fdd7a1 1213extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
1214 const unsigned char *limit, int wide);
50fd6b48 1215
956c6108 1216/* Structure used to hold a comment block at a given location in the
1217 source code. */
1218
1219typedef struct
1220{
1221 /* Text of the comment including the terminators. */
1222 char *comment;
1223
1224 /* source location for the given comment. */
1225 source_location sloc;
1226} cpp_comment;
1227
1228/* Structure holding all comments for a given cpp_reader. */
1229
1230typedef struct
1231{
1232 /* table of comment entries. */
1233 cpp_comment *entries;
1234
1235 /* number of actual entries entered in the table. */
1236 int count;
1237
1238 /* number of entries allocated currently. */
1239 int allocated;
1240} cpp_comment_table;
1241
1242/* Returns the table of comments encountered by the preprocessor. This
1243 table is only populated when pfile->state.save_comments is true. */
1244extern cpp_comment_table *cpp_get_comments (cpp_reader *);
1245
85e51d59 1246/* In hash.c */
0d086e18 1247
1248/* Lookup an identifier in the hashtable. Puts the identifier in the
1249 table if it is not already there. */
f7fdd7a1 1250extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
1251 unsigned int);
0d086e18 1252
f7fdd7a1 1253typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
1254extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
7034a61d 1255
85e51d59 1256/* In macro.c */
f7fdd7a1 1257extern void cpp_scan_nooutput (cpp_reader *);
1258extern int cpp_sys_macro_p (cpp_reader *);
1259extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
1260 unsigned int);
6d71dc85 1261
85e51d59 1262/* In files.c */
1824e2bd 1263extern bool cpp_included (cpp_reader *, const char *);
67015c73 1264extern bool cpp_included_before (cpp_reader *, const char *, source_location);
f7fdd7a1 1265extern void cpp_make_system_header (cpp_reader *, int, int);
f7fdd7a1 1266extern bool cpp_push_include (cpp_reader *, const char *);
6adc88f8 1267extern bool cpp_push_default_include (cpp_reader *, const char *);
f7fdd7a1 1268extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
065e625b 1269extern const char *cpp_get_path (struct _cpp_file *);
d6c39c7a 1270extern cpp_dir *cpp_get_dir (struct _cpp_file *);
065e625b 1271extern cpp_buffer *cpp_get_buffer (cpp_reader *);
1272extern struct _cpp_file *cpp_get_file (cpp_buffer *);
1273extern cpp_buffer *cpp_get_prev (cpp_buffer *);
64cb8c90 1274extern void cpp_clear_file_cache (cpp_reader *);
94221a92 1275
85e51d59 1276/* In pch.c */
573aba85 1277struct save_macro_data;
f7fdd7a1 1278extern int cpp_save_state (cpp_reader *, FILE *);
1279extern int cpp_write_pch_deps (cpp_reader *, FILE *);
1280extern int cpp_write_pch_state (cpp_reader *, FILE *);
1281extern int cpp_valid_state (cpp_reader *, const char *, int);
1282extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
1283extern int cpp_read_state (cpp_reader *, const char *, FILE *,
1284 struct save_macro_data *);
573aba85 1285
6ea2c7a3 1286/* In lex.c */
1287extern void cpp_force_token_locations (cpp_reader *, source_location *);
1288extern void cpp_stop_forcing_token_locations (cpp_reader *);
1289
244db24d 1290/* In expr.c */
1291extern enum cpp_ttype cpp_userdef_string_remove_type
1292 (enum cpp_ttype type);
1293extern enum cpp_ttype cpp_userdef_string_add_type
1294 (enum cpp_ttype type);
1295extern enum cpp_ttype cpp_userdef_char_remove_type
1296 (enum cpp_ttype type);
1297extern enum cpp_ttype cpp_userdef_char_add_type
1298 (enum cpp_ttype type);
1299extern bool cpp_userdef_string_p
1300 (enum cpp_ttype type);
1301extern bool cpp_userdef_char_p
1302 (enum cpp_ttype type);
1303extern const char * cpp_get_userdef_suffix
1304 (const cpp_token *);
1305
d856c8a6 1306#endif /* ! LIBCPP_CPPLIB_H */