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