1 /* CPP Library.
2    Copyright (C) 1986-2016 Free Software Foundation, Inc.
3    Contributed by Per Bothner, 1994-95.
4    Based on CCCP program by Paul Rubin, June 1986
5    Adapted to ANSI C, Richard Stallman, Jan 1987
6 
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
11 
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 #include "config.h"
22 #include "system.h"
23 #include "cpplib.h"
24 #include "internal.h"
25 #include "mkdeps.h"
26 #include "localedir.h"
27 #include "filenames.h"
28 
29 #ifndef ENABLE_CANONICAL_SYSTEM_HEADERS
30 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
31 #define ENABLE_CANONICAL_SYSTEM_HEADERS 1
32 #else
33 #define ENABLE_CANONICAL_SYSTEM_HEADERS 0
34 #endif
35 #endif
36 
37 static void init_library (void);
38 static void mark_named_operators (cpp_reader *, int);
39 static void read_original_filename (cpp_reader *);
40 static void read_original_directory (cpp_reader *);
41 static void post_options (cpp_reader *);
42 
43 /* If we have designated initializers (GCC >2.7) these tables can be
44    initialized, constant data.  Otherwise, they have to be filled in at
45    runtime.  */
46 #if HAVE_DESIGNATED_INITIALIZERS
47 
48 #define init_trigraph_map()  /* Nothing.  */
49 #define TRIGRAPH_MAP \
50 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
51 
52 #define END };
53 #define s(p, v) [p] = v,
54 
55 #else
56 
57 #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
58  static void init_trigraph_map (void) { \
59  unsigned char *x = _cpp_trigraph_map;
60 
61 #define END }
62 #define s(p, v) x[p] = v;
63 
64 #endif
65 
66 TRIGRAPH_MAP
67   s('=', '#')	s(')', ']')	s('!', '|')
68   s('(', '[')	s('\'', '^')	s('>', '}')
69   s('/', '\\')	s('<', '{')	s('-', '~')
70 END
71 
72 #undef s
73 #undef END
74 #undef TRIGRAPH_MAP
75 
76 /* A set of booleans indicating what CPP features each source language
77    requires.  */
78 struct lang_flags
79 {
80   char c99;
81   char cplusplus;
82   char extended_numbers;
83   char extended_identifiers;
84   char c11_identifiers;
85   char std;
86   char digraphs;
87   char uliterals;
88   char rliterals;
89   char user_literals;
90   char binary_constants;
91   char digit_separators;
92   char trigraphs;
93   char utf8_char_literals;
94 };
95 
96 static const struct lang_flags lang_defaults[] =
97 { /*              c99 c++ xnum xid c11 std digr ulit rlit udlit bincst digsep trig u8chlit */
98   /* GNUC89   */  { 0,  0,  1,  0,  0,  0,  1,   0,   0,   0,    0,     0,     0,   0 },
99   /* GNUC99   */  { 1,  0,  1,  1,  0,  0,  1,   1,   1,   0,    0,     0,     0,   0 },
100   /* GNUC11   */  { 1,  0,  1,  1,  1,  0,  1,   1,   1,   0,    0,     0,     0,   0 },
101   /* STDC89   */  { 0,  0,  0,  0,  0,  1,  0,   0,   0,   0,    0,     0,     1,   0 },
102   /* STDC94   */  { 0,  0,  0,  0,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0 },
103   /* STDC99   */  { 1,  0,  1,  1,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0 },
104   /* STDC11   */  { 1,  0,  1,  1,  1,  1,  1,   1,   0,   0,    0,     0,     1,   0 },
105   /* GNUCXX   */  { 0,  1,  1,  1,  0,  0,  1,   0,   0,   0,    0,     0,     0,   0 },
106   /* CXX98    */  { 0,  1,  0,  1,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0 },
107   /* GNUCXX11 */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    0,     0,     0,   0 },
108   /* CXX11    */  { 1,  1,  0,  1,  1,  1,  1,   1,   1,   1,    0,     0,     1,   0 },
109   /* GNUCXX14 */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    1,     1,     0,   0 },
110   /* CXX14    */  { 1,  1,  0,  1,  1,  1,  1,   1,   1,   1,    1,     1,     1,   0 },
111   /* GNUCXX1Z */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    1,     1,     0,   1 },
112   /* CXX1Z    */  { 1,  1,  1,  1,  1,  1,  1,   1,   1,   1,    1,     1,     0,   1 },
113   /* ASM      */  { 0,  0,  1,  0,  0,  0,  0,   0,   0,   0,    0,     0,     0,   0 }
114 };
115 
116 /* Sets internal flags correctly for a given language.  */
117 void
cpp_set_lang(cpp_reader * pfile,enum c_lang lang)118 cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
119 {
120   const struct lang_flags *l = &lang_defaults[(int) lang];
121 
122   CPP_OPTION (pfile, lang) = lang;
123 
124   CPP_OPTION (pfile, c99)			 = l->c99;
125   CPP_OPTION (pfile, cplusplus)			 = l->cplusplus;
126   CPP_OPTION (pfile, extended_numbers)		 = l->extended_numbers;
127   CPP_OPTION (pfile, extended_identifiers)	 = l->extended_identifiers;
128   CPP_OPTION (pfile, c11_identifiers)		 = l->c11_identifiers;
129   CPP_OPTION (pfile, std)			 = l->std;
130   CPP_OPTION (pfile, digraphs)			 = l->digraphs;
131   CPP_OPTION (pfile, uliterals)			 = l->uliterals;
132   CPP_OPTION (pfile, rliterals)			 = l->rliterals;
133   CPP_OPTION (pfile, user_literals)		 = l->user_literals;
134   CPP_OPTION (pfile, binary_constants)		 = l->binary_constants;
135   CPP_OPTION (pfile, digit_separators)		 = l->digit_separators;
136   CPP_OPTION (pfile, trigraphs)			 = l->trigraphs;
137   CPP_OPTION (pfile, utf8_char_literals)	 = l->utf8_char_literals;
138 }
139 
140 /* Initialize library global state.  */
141 static void
init_library(void)142 init_library (void)
143 {
144   static int initialized = 0;
145 
146   if (! initialized)
147     {
148       initialized = 1;
149 
150       _cpp_init_lexer ();
151 
152       /* Set up the trigraph map.  This doesn't need to do anything if
153 	 we were compiled with a compiler that supports C99 designated
154 	 initializers.  */
155       init_trigraph_map ();
156 
157 #ifdef ENABLE_NLS
158        (void) bindtextdomain (PACKAGE, LOCALEDIR);
159 #endif
160     }
161 }
162 
163 /* Initialize a cpp_reader structure.  */
164 cpp_reader *
cpp_create_reader(enum c_lang lang,cpp_hash_table * table,struct line_maps * line_table)165 cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
166 		   struct line_maps *line_table)
167 {
168   cpp_reader *pfile;
169 
170   /* Initialize this instance of the library if it hasn't been already.  */
171   init_library ();
172 
173   pfile = XCNEW (cpp_reader);
174   memset (&pfile->base_context, 0, sizeof (pfile->base_context));
175 
176   cpp_set_lang (pfile, lang);
177   CPP_OPTION (pfile, warn_multichar) = 1;
178   CPP_OPTION (pfile, discard_comments) = 1;
179   CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
180   CPP_OPTION (pfile, tabstop) = 8;
181   CPP_OPTION (pfile, operator_names) = 1;
182   CPP_OPTION (pfile, warn_trigraphs) = 2;
183   CPP_OPTION (pfile, warn_endif_labels) = 1;
184   CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
185   CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
186   CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
187   CPP_OPTION (pfile, cpp_warn_long_long) = 0;
188   CPP_OPTION (pfile, dollars_in_ident) = 1;
189   CPP_OPTION (pfile, warn_dollars) = 1;
190   CPP_OPTION (pfile, warn_variadic_macros) = 1;
191   CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
192   /* By default, track locations of tokens resulting from macro
193      expansion.  The '2' means, track the locations with the highest
194      accuracy.  Read the comments for struct
195      cpp_options::track_macro_expansion to learn about the other
196      values.  */
197   CPP_OPTION (pfile, track_macro_expansion) = 2;
198   CPP_OPTION (pfile, warn_normalize) = normalized_C;
199   CPP_OPTION (pfile, warn_literal_suffix) = 1;
200   CPP_OPTION (pfile, canonical_system_headers)
201       = ENABLE_CANONICAL_SYSTEM_HEADERS;
202   CPP_OPTION (pfile, ext_numeric_literals) = 1;
203   CPP_OPTION (pfile, warn_date_time) = 0;
204 
205   /* Default CPP arithmetic to something sensible for the host for the
206      benefit of dumb users like fix-header.  */
207   CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
208   CPP_OPTION (pfile, char_precision) = CHAR_BIT;
209   CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
210   CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
211   CPP_OPTION (pfile, unsigned_char) = 0;
212   CPP_OPTION (pfile, unsigned_wchar) = 1;
213   CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
214 
215   /* Default to no charset conversion.  */
216   CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
217   CPP_OPTION (pfile, wide_charset) = 0;
218 
219   /* Default the input character set to UTF-8.  */
220   CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
221 
222   /* A fake empty "directory" used as the starting point for files
223      looked up without a search path.  Name cannot be '/' because we
224      don't want to prepend anything at all to filenames using it.  All
225      other entries are correct zero-initialized.  */
226   pfile->no_search_path.name = (char *) "";
227 
228   /* Initialize the line map.  */
229   pfile->line_table = line_table;
230 
231   /* Initialize lexer state.  */
232   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
233 
234   /* Set up static tokens.  */
235   pfile->avoid_paste.type = CPP_PADDING;
236   pfile->avoid_paste.val.source = NULL;
237   pfile->eof.type = CPP_EOF;
238   pfile->eof.flags = 0;
239 
240   /* Create a token buffer for the lexer.  */
241   _cpp_init_tokenrun (&pfile->base_run, 250);
242   pfile->cur_run = &pfile->base_run;
243   pfile->cur_token = pfile->base_run.base;
244 
245   /* Initialize the base context.  */
246   pfile->context = &pfile->base_context;
247   pfile->base_context.c.macro = 0;
248   pfile->base_context.prev = pfile->base_context.next = 0;
249 
250   /* Aligned and unaligned storage.  */
251   pfile->a_buff = _cpp_get_buff (pfile, 0);
252   pfile->u_buff = _cpp_get_buff (pfile, 0);
253 
254   /* Initialize table for push_macro/pop_macro.  */
255   pfile->pushed_macros = 0;
256 
257   /* Do not force token locations by default.  */
258   pfile->forced_token_location_p = NULL;
259 
260   /* The expression parser stack.  */
261   _cpp_expand_op_stack (pfile);
262 
263   /* Initialize the buffer obstack.  */
264   obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
265 
266   _cpp_init_files (pfile);
267 
268   _cpp_init_hashtable (pfile, table);
269 
270   return pfile;
271 }
272 
273 /* Set the line_table entry in PFILE.  This is called after reading a
274    PCH file, as the old line_table will be incorrect.  */
275 void
cpp_set_line_map(cpp_reader * pfile,struct line_maps * line_table)276 cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
277 {
278   pfile->line_table = line_table;
279 }
280 
281 /* Free resources used by PFILE.  Accessing PFILE after this function
282    returns leads to undefined behavior.  Returns the error count.  */
283 void
cpp_destroy(cpp_reader * pfile)284 cpp_destroy (cpp_reader *pfile)
285 {
286   cpp_context *context, *contextn;
287   struct def_pragma_macro *pmacro;
288   tokenrun *run, *runn;
289   int i;
290 
291   free (pfile->op_stack);
292 
293   while (CPP_BUFFER (pfile) != NULL)
294     _cpp_pop_buffer (pfile);
295 
296   free (pfile->out.base);
297 
298   if (pfile->macro_buffer)
299     {
300       free (pfile->macro_buffer);
301       pfile->macro_buffer = NULL;
302       pfile->macro_buffer_len = 0;
303     }
304 
305   if (pfile->deps)
306     deps_free (pfile->deps);
307   obstack_free (&pfile->buffer_ob, 0);
308 
309   _cpp_destroy_hashtable (pfile);
310   _cpp_cleanup_files (pfile);
311   _cpp_destroy_iconv (pfile);
312 
313   _cpp_free_buff (pfile->a_buff);
314   _cpp_free_buff (pfile->u_buff);
315   _cpp_free_buff (pfile->free_buffs);
316 
317   for (run = &pfile->base_run; run; run = runn)
318     {
319       runn = run->next;
320       free (run->base);
321       if (run != &pfile->base_run)
322 	free (run);
323     }
324 
325   for (context = pfile->base_context.next; context; context = contextn)
326     {
327       contextn = context->next;
328       free (context);
329     }
330 
331   if (pfile->comments.entries)
332     {
333       for (i = 0; i < pfile->comments.count; i++)
334 	free (pfile->comments.entries[i].comment);
335 
336       free (pfile->comments.entries);
337     }
338   if (pfile->pushed_macros)
339     {
340       do
341 	{
342 	  pmacro = pfile->pushed_macros;
343 	  pfile->pushed_macros = pmacro->next;
344 	  free (pmacro->name);
345 	  free (pmacro);
346 	}
347       while (pfile->pushed_macros);
348     }
349 
350   free (pfile);
351 }
352 
353 /* This structure defines one built-in identifier.  A node will be
354    entered in the hash table under the name NAME, with value VALUE.
355 
356    There are two tables of these.  builtin_array holds all the
357    "builtin" macros: these are handled by builtin_macro() in
358    macro.c.  Builtin is somewhat of a misnomer -- the property of
359    interest is that these macros require special code to compute their
360    expansions.  The value is a "cpp_builtin_type" enumerator.
361 
362    operator_array holds the C++ named operators.  These are keywords
363    which act as aliases for punctuators.  In C++, they cannot be
364    altered through #define, and #if recognizes them as operators.  In
365    C, these are not entered into the hash table at all (but see
366    <iso646.h>).  The value is a token-type enumerator.  */
367 struct builtin_macro
368 {
369   const uchar *const name;
370   const unsigned short len;
371   const unsigned short value;
372   const bool always_warn_if_redefined;
373 };
374 
375 #define B(n, t, f)    { DSC(n), t, f }
376 static const struct builtin_macro builtin_array[] =
377 {
378   B("__TIMESTAMP__",	 BT_TIMESTAMP,     false),
379   B("__TIME__",		 BT_TIME,          false),
380   B("__DATE__",		 BT_DATE,          false),
381   B("__FILE__",		 BT_FILE,          false),
382   B("__BASE_FILE__",	 BT_BASE_FILE,     false),
383   B("__LINE__",		 BT_SPECLINE,      true),
384   B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
385   B("__COUNTER__",	 BT_COUNTER,       true),
386   B("__has_attribute",	 BT_HAS_ATTRIBUTE, true),
387   B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
388   /* Keep builtins not used for -traditional-cpp at the end, and
389      update init_builtins() if any more are added.  */
390   B("_Pragma",		 BT_PRAGMA,        true),
391   B("__STDC__",		 BT_STDC,          true),
392 };
393 #undef B
394 
395 struct builtin_operator
396 {
397   const uchar *const name;
398   const unsigned short len;
399   const unsigned short value;
400 };
401 
402 #define B(n, t)    { DSC(n), t }
403 static const struct builtin_operator operator_array[] =
404 {
405   B("and",	CPP_AND_AND),
406   B("and_eq",	CPP_AND_EQ),
407   B("bitand",	CPP_AND),
408   B("bitor",	CPP_OR),
409   B("compl",	CPP_COMPL),
410   B("not",	CPP_NOT),
411   B("not_eq",	CPP_NOT_EQ),
412   B("or",	CPP_OR_OR),
413   B("or_eq",	CPP_OR_EQ),
414   B("xor",	CPP_XOR),
415   B("xor_eq",	CPP_XOR_EQ)
416 };
417 #undef B
418 
419 /* Mark the C++ named operators in the hash table.  */
420 static void
mark_named_operators(cpp_reader * pfile,int flags)421 mark_named_operators (cpp_reader *pfile, int flags)
422 {
423   const struct builtin_operator *b;
424 
425   for (b = operator_array;
426        b < (operator_array + ARRAY_SIZE (operator_array));
427        b++)
428     {
429       cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
430       hp->flags |= flags;
431       hp->is_directive = 0;
432       hp->directive_index = b->value;
433     }
434 }
435 
436 /* Helper function of cpp_type2name. Return the string associated with
437    named operator TYPE.  */
438 const char *
cpp_named_operator2name(enum cpp_ttype type)439 cpp_named_operator2name (enum cpp_ttype type)
440 {
441   const struct builtin_operator *b;
442 
443   for (b = operator_array;
444        b < (operator_array + ARRAY_SIZE (operator_array));
445        b++)
446     {
447       if (type == b->value)
448 	return (const char *) b->name;
449     }
450 
451   return NULL;
452 }
453 
454 void
cpp_init_special_builtins(cpp_reader * pfile)455 cpp_init_special_builtins (cpp_reader *pfile)
456 {
457   const struct builtin_macro *b;
458   size_t n = ARRAY_SIZE (builtin_array);
459 
460   if (CPP_OPTION (pfile, traditional))
461     n -= 2;
462   else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
463 	   || CPP_OPTION (pfile, std))
464     n--;
465 
466   for (b = builtin_array; b < builtin_array + n; b++)
467     {
468       if (b->value == BT_HAS_ATTRIBUTE
469 	  && (CPP_OPTION (pfile, lang) == CLK_ASM
470 	      || pfile->cb.has_attribute == NULL))
471 	continue;
472       cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
473       hp->type = NT_MACRO;
474       hp->flags |= NODE_BUILTIN;
475       if (b->always_warn_if_redefined)
476 	hp->flags |= NODE_WARN;
477       hp->value.builtin = (enum cpp_builtin_type) b->value;
478     }
479 }
480 
481 /* Read the builtins table above and enter them, and language-specific
482    macros, into the hash table.  HOSTED is true if this is a hosted
483    environment.  */
484 void
cpp_init_builtins(cpp_reader * pfile,int hosted)485 cpp_init_builtins (cpp_reader *pfile, int hosted)
486 {
487   cpp_init_special_builtins (pfile);
488 
489   if (!CPP_OPTION (pfile, traditional)
490       && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
491 	  || CPP_OPTION (pfile, std)))
492     _cpp_define_builtin (pfile, "__STDC__ 1");
493 
494   if (CPP_OPTION (pfile, cplusplus))
495     {
496       if (CPP_OPTION (pfile, lang) == CLK_CXX1Z
497 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX1Z)
498 	_cpp_define_builtin (pfile, "__cplusplus 201500L");
499       else if (CPP_OPTION (pfile, lang) == CLK_CXX14
500 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
501 	_cpp_define_builtin (pfile, "__cplusplus 201402L");
502       else if (CPP_OPTION (pfile, lang) == CLK_CXX11
503 	       || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
504 	_cpp_define_builtin (pfile, "__cplusplus 201103L");
505       else
506 	_cpp_define_builtin (pfile, "__cplusplus 199711L");
507     }
508   else if (CPP_OPTION (pfile, lang) == CLK_ASM)
509     _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
510   else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
511     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
512   else if (CPP_OPTION (pfile, lang) == CLK_STDC11
513 	   || CPP_OPTION (pfile, lang) == CLK_GNUC11)
514     _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
515   else if (CPP_OPTION (pfile, c99))
516     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
517 
518   if (CPP_OPTION (pfile, uliterals)
519       && !(CPP_OPTION (pfile, cplusplus)
520 	   && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
521 	    || CPP_OPTION (pfile, lang) == CLK_CXX98)))
522     {
523       _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
524       _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
525     }
526 
527   if (hosted)
528     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
529   else
530     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
531 
532   if (CPP_OPTION (pfile, objc))
533     _cpp_define_builtin (pfile, "__OBJC__ 1");
534 }
535 
536 /* Sanity-checks are dependent on command-line options, so it is
537    called as a subroutine of cpp_read_main_file ().  */
538 #if CHECKING_P
539 static void sanity_checks (cpp_reader *);
sanity_checks(cpp_reader * pfile)540 static void sanity_checks (cpp_reader *pfile)
541 {
542   cppchar_t test = 0;
543   size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
544 
545   /* Sanity checks for assumptions about CPP arithmetic and target
546      type precisions made by cpplib.  */
547   test--;
548   if (test < 1)
549     cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
550 
551   if (CPP_OPTION (pfile, precision) > max_precision)
552     cpp_error (pfile, CPP_DL_ICE,
553 	       "preprocessor arithmetic has maximum precision of %lu bits;"
554 	       " target requires %lu bits",
555 	       (unsigned long) max_precision,
556 	       (unsigned long) CPP_OPTION (pfile, precision));
557 
558   if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
559     cpp_error (pfile, CPP_DL_ICE,
560 	       "CPP arithmetic must be at least as precise as a target int");
561 
562   if (CPP_OPTION (pfile, char_precision) < 8)
563     cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
564 
565   if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
566     cpp_error (pfile, CPP_DL_ICE,
567 	       "target wchar_t is narrower than target char");
568 
569   if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
570     cpp_error (pfile, CPP_DL_ICE,
571 	       "target int is narrower than target char");
572 
573   /* This is assumed in eval_token() and could be fixed if necessary.  */
574   if (sizeof (cppchar_t) > sizeof (cpp_num_part))
575     cpp_error (pfile, CPP_DL_ICE,
576 	       "CPP half-integer narrower than CPP character");
577 
578   if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
579     cpp_error (pfile, CPP_DL_ICE,
580 	       "CPP on this host cannot handle wide character constants over"
581 	       " %lu bits, but the target requires %lu bits",
582 	       (unsigned long) BITS_PER_CPPCHAR_T,
583 	       (unsigned long) CPP_OPTION (pfile, wchar_precision));
584 }
585 #else
586 # define sanity_checks(PFILE)
587 #endif
588 
589 /* This is called after options have been parsed, and partially
590    processed.  */
591 void
cpp_post_options(cpp_reader * pfile)592 cpp_post_options (cpp_reader *pfile)
593 {
594   int flags;
595 
596   sanity_checks (pfile);
597 
598   post_options (pfile);
599 
600   /* Mark named operators before handling command line macros.  */
601   flags = 0;
602   if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
603     flags |= NODE_OPERATOR;
604   if (CPP_OPTION (pfile, warn_cxx_operator_names))
605     flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
606   if (flags != 0)
607     mark_named_operators (pfile, flags);
608 }
609 
610 /* Setup for processing input from the file named FNAME, or stdin if
611    it is the empty string.  Return the original filename
612    on success (e.g. foo.i->foo.c), or NULL on failure.  */
613 const char *
cpp_read_main_file(cpp_reader * pfile,const char * fname)614 cpp_read_main_file (cpp_reader *pfile, const char *fname)
615 {
616   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
617     {
618       if (!pfile->deps)
619 	pfile->deps = deps_init ();
620 
621       /* Set the default target (if there is none already).  */
622       deps_add_default_target (pfile->deps, fname);
623     }
624 
625   pfile->main_file
626     = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false);
627   if (_cpp_find_failed (pfile->main_file))
628     return NULL;
629 
630   _cpp_stack_file (pfile, pfile->main_file, false);
631 
632   /* For foo.i, read the original filename foo.c now, for the benefit
633      of the front ends.  */
634   if (CPP_OPTION (pfile, preprocessed))
635     {
636       read_original_filename (pfile);
637       fname =
638 	ORDINARY_MAP_FILE_NAME
639 	((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
640     }
641   return fname;
642 }
643 
644 /* For preprocessed files, if the first tokens are of the form # NUM.
645    handle the directive so we know the original file name.  This will
646    generate file_change callbacks, which the front ends must handle
647    appropriately given their state of initialization.  */
648 static void
read_original_filename(cpp_reader * pfile)649 read_original_filename (cpp_reader *pfile)
650 {
651   const cpp_token *token, *token1;
652 
653   /* Lex ahead; if the first tokens are of the form # NUM, then
654      process the directive, otherwise back up.  */
655   token = _cpp_lex_direct (pfile);
656   if (token->type == CPP_HASH)
657     {
658       pfile->state.in_directive = 1;
659       token1 = _cpp_lex_direct (pfile);
660       _cpp_backup_tokens (pfile, 1);
661       pfile->state.in_directive = 0;
662 
663       /* If it's a #line directive, handle it.  */
664       if (token1->type == CPP_NUMBER
665 	  && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
666 	{
667 	  read_original_directory (pfile);
668 	  return;
669 	}
670     }
671 
672   /* Backup as if nothing happened.  */
673   _cpp_backup_tokens (pfile, 1);
674 }
675 
676 /* For preprocessed files, if the tokens following the first filename
677    line is of the form # <line> "/path/name//", handle the
678    directive so we know the original current directory.  */
679 static void
read_original_directory(cpp_reader * pfile)680 read_original_directory (cpp_reader *pfile)
681 {
682   const cpp_token *hash, *token;
683 
684   /* Lex ahead; if the first tokens are of the form # NUM, then
685      process the directive, otherwise back up.  */
686   hash = _cpp_lex_direct (pfile);
687   if (hash->type != CPP_HASH)
688     {
689       _cpp_backup_tokens (pfile, 1);
690       return;
691     }
692 
693   token = _cpp_lex_direct (pfile);
694 
695   if (token->type != CPP_NUMBER)
696     {
697       _cpp_backup_tokens (pfile, 2);
698       return;
699     }
700 
701   token = _cpp_lex_direct (pfile);
702 
703   if (token->type != CPP_STRING
704       || ! (token->val.str.len >= 5
705 	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
706 	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
707     {
708       _cpp_backup_tokens (pfile, 3);
709       return;
710     }
711 
712   if (pfile->cb.dir_change)
713     {
714       char *debugdir = (char *) alloca (token->val.str.len - 3);
715 
716       memcpy (debugdir, (const char *) token->val.str.text + 1,
717 	      token->val.str.len - 4);
718       debugdir[token->val.str.len - 4] = '\0';
719 
720       pfile->cb.dir_change (pfile, debugdir);
721     }
722 }
723 
724 /* This is called at the end of preprocessing.  It pops the last
725    buffer and writes dependency output.
726 
727    Maybe it should also reset state, such that you could call
728    cpp_start_read with a new filename to restart processing.  */
729 void
cpp_finish(cpp_reader * pfile,FILE * deps_stream)730 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
731 {
732   /* Warn about unused macros before popping the final buffer.  */
733   if (CPP_OPTION (pfile, warn_unused_macros))
734     cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
735 
736   /* lex.c leaves the final buffer on the stack.  This it so that
737      it returns an unending stream of CPP_EOFs to the client.  If we
738      popped the buffer, we'd dereference a NULL buffer pointer and
739      segfault.  It's nice to allow the client to do worry-free excess
740      cpp_get_token calls.  */
741   while (pfile->buffer)
742     _cpp_pop_buffer (pfile);
743 
744   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
745       && deps_stream)
746     {
747       deps_write (pfile->deps, deps_stream, 72);
748 
749       if (CPP_OPTION (pfile, deps.phony_targets))
750 	deps_phony_targets (pfile->deps, deps_stream);
751     }
752 
753   /* Report on headers that could use multiple include guards.  */
754   if (CPP_OPTION (pfile, print_include_names))
755     _cpp_report_missing_guards (pfile);
756 }
757 
758 static void
post_options(cpp_reader * pfile)759 post_options (cpp_reader *pfile)
760 {
761   /* -Wtraditional is not useful in C++ mode.  */
762   if (CPP_OPTION (pfile, cplusplus))
763     CPP_OPTION (pfile, cpp_warn_traditional) = 0;
764 
765   /* Permanently disable macro expansion if we are rescanning
766      preprocessed text.  Read preprocesed source in ISO mode.  */
767   if (CPP_OPTION (pfile, preprocessed))
768     {
769       if (!CPP_OPTION (pfile, directives_only))
770 	pfile->state.prevent_expansion = 1;
771       CPP_OPTION (pfile, traditional) = 0;
772     }
773 
774   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
775     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
776 
777   if (CPP_OPTION (pfile, traditional))
778     {
779       CPP_OPTION (pfile, trigraphs) = 0;
780       CPP_OPTION (pfile, warn_trigraphs) = 0;
781     }
782 }
783