xref: /netbsd-src/external/gpl3/gcc.old/dist/libcpp/init.c (revision 404ee5b9334f618040b6cdef96a0ff35a6fc4636)
1 /* CPP Library.
2    Copyright (C) 1986-2017 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
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
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 *
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   CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
193   /* By default, track locations of tokens resulting from macro
194      expansion.  The '2' means, track the locations with the highest
195      accuracy.  Read the comments for struct
196      cpp_options::track_macro_expansion to learn about the other
197      values.  */
198   CPP_OPTION (pfile, track_macro_expansion) = 2;
199   CPP_OPTION (pfile, warn_normalize) = normalized_C;
200   CPP_OPTION (pfile, warn_literal_suffix) = 1;
201   CPP_OPTION (pfile, canonical_system_headers)
202       = ENABLE_CANONICAL_SYSTEM_HEADERS;
203   CPP_OPTION (pfile, ext_numeric_literals) = 1;
204   CPP_OPTION (pfile, warn_date_time) = 0;
205 
206   /* Default CPP arithmetic to something sensible for the host for the
207      benefit of dumb users like fix-header.  */
208   CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
209   CPP_OPTION (pfile, char_precision) = CHAR_BIT;
210   CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
211   CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
212   CPP_OPTION (pfile, unsigned_char) = 0;
213   CPP_OPTION (pfile, unsigned_wchar) = 1;
214   CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
215 
216   /* Default to no charset conversion.  */
217   CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
218   CPP_OPTION (pfile, wide_charset) = 0;
219 
220   /* Default the input character set to UTF-8.  */
221   CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
222 
223   /* A fake empty "directory" used as the starting point for files
224      looked up without a search path.  Name cannot be '/' because we
225      don't want to prepend anything at all to filenames using it.  All
226      other entries are correct zero-initialized.  */
227   pfile->no_search_path.name = (char *) "";
228 
229   /* Initialize the line map.  */
230   pfile->line_table = line_table;
231 
232   /* Initialize lexer state.  */
233   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
234 
235   /* Set up static tokens.  */
236   pfile->avoid_paste.type = CPP_PADDING;
237   pfile->avoid_paste.val.source = NULL;
238   pfile->eof.type = CPP_EOF;
239   pfile->eof.flags = 0;
240 
241   /* Create a token buffer for the lexer.  */
242   _cpp_init_tokenrun (&pfile->base_run, 250);
243   pfile->cur_run = &pfile->base_run;
244   pfile->cur_token = pfile->base_run.base;
245 
246   /* Initialize the base context.  */
247   pfile->context = &pfile->base_context;
248   pfile->base_context.c.macro = 0;
249   pfile->base_context.prev = pfile->base_context.next = 0;
250 
251   /* Aligned and unaligned storage.  */
252   pfile->a_buff = _cpp_get_buff (pfile, 0);
253   pfile->u_buff = _cpp_get_buff (pfile, 0);
254 
255   /* Initialize table for push_macro/pop_macro.  */
256   pfile->pushed_macros = 0;
257 
258   /* Do not force token locations by default.  */
259   pfile->forced_token_location_p = NULL;
260 
261   /* Initialize source_date_epoch to -2 (not yet set).  */
262   pfile->source_date_epoch = (time_t) -2;
263 
264   /* The expression parser stack.  */
265   _cpp_expand_op_stack (pfile);
266 
267   /* Initialize the buffer obstack.  */
268   obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
269 
270   _cpp_init_files (pfile);
271 
272   _cpp_init_hashtable (pfile, table);
273 
274   return pfile;
275 }
276 
277 /* Set the line_table entry in PFILE.  This is called after reading a
278    PCH file, as the old line_table will be incorrect.  */
279 void
280 cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
281 {
282   pfile->line_table = line_table;
283 }
284 
285 /* Free resources used by PFILE.  Accessing PFILE after this function
286    returns leads to undefined behavior.  Returns the error count.  */
287 void
288 cpp_destroy (cpp_reader *pfile)
289 {
290   cpp_context *context, *contextn;
291   struct def_pragma_macro *pmacro;
292   tokenrun *run, *runn;
293   int i;
294 
295   free (pfile->op_stack);
296 
297   while (CPP_BUFFER (pfile) != NULL)
298     _cpp_pop_buffer (pfile);
299 
300   free (pfile->out.base);
301 
302   if (pfile->macro_buffer)
303     {
304       free (pfile->macro_buffer);
305       pfile->macro_buffer = NULL;
306       pfile->macro_buffer_len = 0;
307     }
308 
309   if (pfile->deps)
310     deps_free (pfile->deps);
311   obstack_free (&pfile->buffer_ob, 0);
312 
313   _cpp_destroy_hashtable (pfile);
314   _cpp_cleanup_files (pfile);
315   _cpp_destroy_iconv (pfile);
316 
317   _cpp_free_buff (pfile->a_buff);
318   _cpp_free_buff (pfile->u_buff);
319   _cpp_free_buff (pfile->free_buffs);
320 
321   for (run = &pfile->base_run; run; run = runn)
322     {
323       runn = run->next;
324       free (run->base);
325       if (run != &pfile->base_run)
326 	free (run);
327     }
328 
329   for (context = pfile->base_context.next; context; context = contextn)
330     {
331       contextn = context->next;
332       free (context);
333     }
334 
335   if (pfile->comments.entries)
336     {
337       for (i = 0; i < pfile->comments.count; i++)
338 	free (pfile->comments.entries[i].comment);
339 
340       free (pfile->comments.entries);
341     }
342   if (pfile->pushed_macros)
343     {
344       do
345 	{
346 	  pmacro = pfile->pushed_macros;
347 	  pfile->pushed_macros = pmacro->next;
348 	  free (pmacro->name);
349 	  free (pmacro);
350 	}
351       while (pfile->pushed_macros);
352     }
353 
354   free (pfile);
355 }
356 
357 /* This structure defines one built-in identifier.  A node will be
358    entered in the hash table under the name NAME, with value VALUE.
359 
360    There are two tables of these.  builtin_array holds all the
361    "builtin" macros: these are handled by builtin_macro() in
362    macro.c.  Builtin is somewhat of a misnomer -- the property of
363    interest is that these macros require special code to compute their
364    expansions.  The value is a "cpp_builtin_type" enumerator.
365 
366    operator_array holds the C++ named operators.  These are keywords
367    which act as aliases for punctuators.  In C++, they cannot be
368    altered through #define, and #if recognizes them as operators.  In
369    C, these are not entered into the hash table at all (but see
370    <iso646.h>).  The value is a token-type enumerator.  */
371 struct builtin_macro
372 {
373   const uchar *const name;
374   const unsigned short len;
375   const unsigned short value;
376   const bool always_warn_if_redefined;
377 };
378 
379 #define B(n, t, f)    { DSC(n), t, f }
380 static const struct builtin_macro builtin_array[] =
381 {
382   B("__TIMESTAMP__",	 BT_TIMESTAMP,     false),
383   B("__TIME__",		 BT_TIME,          false),
384   B("__DATE__",		 BT_DATE,          false),
385   B("__FILE__",		 BT_FILE,          false),
386   B("__BASE_FILE__",	 BT_BASE_FILE,     false),
387   B("__LINE__",		 BT_SPECLINE,      true),
388   B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
389   B("__COUNTER__",	 BT_COUNTER,       true),
390   B("__has_attribute",	 BT_HAS_ATTRIBUTE, true),
391   B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
392   /* Keep builtins not used for -traditional-cpp at the end, and
393      update init_builtins() if any more are added.  */
394   B("_Pragma",		 BT_PRAGMA,        true),
395   B("__STDC__",		 BT_STDC,          true),
396 };
397 #undef B
398 
399 struct builtin_operator
400 {
401   const uchar *const name;
402   const unsigned short len;
403   const unsigned short value;
404 };
405 
406 #define B(n, t)    { DSC(n), t }
407 static const struct builtin_operator operator_array[] =
408 {
409   B("and",	CPP_AND_AND),
410   B("and_eq",	CPP_AND_EQ),
411   B("bitand",	CPP_AND),
412   B("bitor",	CPP_OR),
413   B("compl",	CPP_COMPL),
414   B("not",	CPP_NOT),
415   B("not_eq",	CPP_NOT_EQ),
416   B("or",	CPP_OR_OR),
417   B("or_eq",	CPP_OR_EQ),
418   B("xor",	CPP_XOR),
419   B("xor_eq",	CPP_XOR_EQ)
420 };
421 #undef B
422 
423 /* Mark the C++ named operators in the hash table.  */
424 static void
425 mark_named_operators (cpp_reader *pfile, int flags)
426 {
427   const struct builtin_operator *b;
428 
429   for (b = operator_array;
430        b < (operator_array + ARRAY_SIZE (operator_array));
431        b++)
432     {
433       cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
434       hp->flags |= flags;
435       hp->is_directive = 0;
436       hp->directive_index = b->value;
437     }
438 }
439 
440 /* Helper function of cpp_type2name. Return the string associated with
441    named operator TYPE.  */
442 const char *
443 cpp_named_operator2name (enum cpp_ttype type)
444 {
445   const struct builtin_operator *b;
446 
447   for (b = operator_array;
448        b < (operator_array + ARRAY_SIZE (operator_array));
449        b++)
450     {
451       if (type == b->value)
452 	return (const char *) b->name;
453     }
454 
455   return NULL;
456 }
457 
458 void
459 cpp_init_special_builtins (cpp_reader *pfile)
460 {
461   const struct builtin_macro *b;
462   size_t n = ARRAY_SIZE (builtin_array);
463 
464   if (CPP_OPTION (pfile, traditional))
465     n -= 2;
466   else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
467 	   || CPP_OPTION (pfile, std))
468     n--;
469 
470   for (b = builtin_array; b < builtin_array + n; b++)
471     {
472       if (b->value == BT_HAS_ATTRIBUTE
473 	  && (CPP_OPTION (pfile, lang) == CLK_ASM
474 	      || pfile->cb.has_attribute == NULL))
475 	continue;
476       cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
477       hp->type = NT_MACRO;
478       hp->flags |= NODE_BUILTIN;
479       if (b->always_warn_if_redefined)
480 	hp->flags |= NODE_WARN;
481       hp->value.builtin = (enum cpp_builtin_type) b->value;
482     }
483 }
484 
485 /* Read the builtins table above and enter them, and language-specific
486    macros, into the hash table.  HOSTED is true if this is a hosted
487    environment.  */
488 void
489 cpp_init_builtins (cpp_reader *pfile, int hosted)
490 {
491   cpp_init_special_builtins (pfile);
492 
493   if (!CPP_OPTION (pfile, traditional)
494       && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
495 	  || CPP_OPTION (pfile, std)))
496     _cpp_define_builtin (pfile, "__STDC__ 1");
497 
498   if (CPP_OPTION (pfile, cplusplus))
499     {
500       if (CPP_OPTION (pfile, lang) == CLK_CXX1Z
501 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX1Z)
502 	_cpp_define_builtin (pfile, "__cplusplus 201703L");
503       else if (CPP_OPTION (pfile, lang) == CLK_CXX14
504 	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
505 	_cpp_define_builtin (pfile, "__cplusplus 201402L");
506       else if (CPP_OPTION (pfile, lang) == CLK_CXX11
507 	       || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
508 	_cpp_define_builtin (pfile, "__cplusplus 201103L");
509       else
510 	_cpp_define_builtin (pfile, "__cplusplus 199711L");
511     }
512   else if (CPP_OPTION (pfile, lang) == CLK_ASM)
513     _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
514   else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
515     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
516   else if (CPP_OPTION (pfile, lang) == CLK_STDC11
517 	   || CPP_OPTION (pfile, lang) == CLK_GNUC11)
518     _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
519   else if (CPP_OPTION (pfile, c99))
520     _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
521 
522   if (CPP_OPTION (pfile, uliterals)
523       && !(CPP_OPTION (pfile, cplusplus)
524 	   && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
525 	    || CPP_OPTION (pfile, lang) == CLK_CXX98)))
526     {
527       _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
528       _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
529     }
530 
531   if (hosted)
532     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
533   else
534     _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
535 
536   if (CPP_OPTION (pfile, objc))
537     _cpp_define_builtin (pfile, "__OBJC__ 1");
538 }
539 
540 /* Sanity-checks are dependent on command-line options, so it is
541    called as a subroutine of cpp_read_main_file.  */
542 #if CHECKING_P
543 static void sanity_checks (cpp_reader *);
544 static void sanity_checks (cpp_reader *pfile)
545 {
546   cppchar_t test = 0;
547   size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
548 
549   /* Sanity checks for assumptions about CPP arithmetic and target
550      type precisions made by cpplib.  */
551   test--;
552   if (test < 1)
553     cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
554 
555   if (CPP_OPTION (pfile, precision) > max_precision)
556     cpp_error (pfile, CPP_DL_ICE,
557 	       "preprocessor arithmetic has maximum precision of %lu bits;"
558 	       " target requires %lu bits",
559 	       (unsigned long) max_precision,
560 	       (unsigned long) CPP_OPTION (pfile, precision));
561 
562   if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
563     cpp_error (pfile, CPP_DL_ICE,
564 	       "CPP arithmetic must be at least as precise as a target int");
565 
566   if (CPP_OPTION (pfile, char_precision) < 8)
567     cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
568 
569   if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
570     cpp_error (pfile, CPP_DL_ICE,
571 	       "target wchar_t is narrower than target char");
572 
573   if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
574     cpp_error (pfile, CPP_DL_ICE,
575 	       "target int is narrower than target char");
576 
577   /* This is assumed in eval_token() and could be fixed if necessary.  */
578   if (sizeof (cppchar_t) > sizeof (cpp_num_part))
579     cpp_error (pfile, CPP_DL_ICE,
580 	       "CPP half-integer narrower than CPP character");
581 
582   if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
583     cpp_error (pfile, CPP_DL_ICE,
584 	       "CPP on this host cannot handle wide character constants over"
585 	       " %lu bits, but the target requires %lu bits",
586 	       (unsigned long) BITS_PER_CPPCHAR_T,
587 	       (unsigned long) CPP_OPTION (pfile, wchar_precision));
588 }
589 #else
590 # define sanity_checks(PFILE)
591 #endif
592 
593 /* This is called after options have been parsed, and partially
594    processed.  */
595 void
596 cpp_post_options (cpp_reader *pfile)
597 {
598   int flags;
599 
600   sanity_checks (pfile);
601 
602   post_options (pfile);
603 
604   /* Mark named operators before handling command line macros.  */
605   flags = 0;
606   if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
607     flags |= NODE_OPERATOR;
608   if (CPP_OPTION (pfile, warn_cxx_operator_names))
609     flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
610   if (flags != 0)
611     mark_named_operators (pfile, flags);
612 }
613 
614 /* Setup for processing input from the file named FNAME, or stdin if
615    it is the empty string.  Return the original filename
616    on success (e.g. foo.i->foo.c), or NULL on failure.  */
617 const char *
618 cpp_read_main_file (cpp_reader *pfile, const char *fname)
619 {
620   const source_location loc = 0;
621 
622   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
623     {
624       if (!pfile->deps)
625 	pfile->deps = deps_init ();
626 
627       /* Set the default target (if there is none already).  */
628       deps_add_default_target (pfile->deps, fname);
629     }
630 
631   pfile->main_file
632     = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
633 		      loc);
634   if (_cpp_find_failed (pfile->main_file))
635     return NULL;
636 
637   _cpp_stack_file (pfile, pfile->main_file, false, loc);
638 
639   /* For foo.i, read the original filename foo.c now, for the benefit
640      of the front ends.  */
641   if (CPP_OPTION (pfile, preprocessed))
642     {
643       read_original_filename (pfile);
644       fname =
645 	ORDINARY_MAP_FILE_NAME
646 	((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
647     }
648   return fname;
649 }
650 
651 /* For preprocessed files, if the first tokens are of the form # NUM.
652    handle the directive so we know the original file name.  This will
653    generate file_change callbacks, which the front ends must handle
654    appropriately given their state of initialization.  */
655 static void
656 read_original_filename (cpp_reader *pfile)
657 {
658   const cpp_token *token, *token1;
659 
660   /* Lex ahead; if the first tokens are of the form # NUM, then
661      process the directive, otherwise back up.  */
662   token = _cpp_lex_direct (pfile);
663   if (token->type == CPP_HASH)
664     {
665       pfile->state.in_directive = 1;
666       token1 = _cpp_lex_direct (pfile);
667       _cpp_backup_tokens (pfile, 1);
668       pfile->state.in_directive = 0;
669 
670       /* If it's a #line directive, handle it.  */
671       if (token1->type == CPP_NUMBER
672 	  && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
673 	{
674 	  read_original_directory (pfile);
675 	  return;
676 	}
677     }
678 
679   /* Backup as if nothing happened.  */
680   _cpp_backup_tokens (pfile, 1);
681 }
682 
683 /* For preprocessed files, if the tokens following the first filename
684    line is of the form # <line> "/path/name//", handle the
685    directive so we know the original current directory.  */
686 static void
687 read_original_directory (cpp_reader *pfile)
688 {
689   const cpp_token *hash, *token;
690 
691   /* Lex ahead; if the first tokens are of the form # NUM, then
692      process the directive, otherwise back up.  */
693   hash = _cpp_lex_direct (pfile);
694   if (hash->type != CPP_HASH)
695     {
696       _cpp_backup_tokens (pfile, 1);
697       return;
698     }
699 
700   token = _cpp_lex_direct (pfile);
701 
702   if (token->type != CPP_NUMBER)
703     {
704       _cpp_backup_tokens (pfile, 2);
705       return;
706     }
707 
708   token = _cpp_lex_direct (pfile);
709 
710   if (token->type != CPP_STRING
711       || ! (token->val.str.len >= 5
712 	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
713 	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
714     {
715       _cpp_backup_tokens (pfile, 3);
716       return;
717     }
718 
719   if (pfile->cb.dir_change)
720     {
721       char *debugdir = (char *) alloca (token->val.str.len - 3);
722 
723       memcpy (debugdir, (const char *) token->val.str.text + 1,
724 	      token->val.str.len - 4);
725       debugdir[token->val.str.len - 4] = '\0';
726 
727       pfile->cb.dir_change (pfile, debugdir);
728     }
729 }
730 
731 /* This is called at the end of preprocessing.  It pops the last
732    buffer and writes dependency output.
733 
734    Maybe it should also reset state, such that you could call
735    cpp_start_read with a new filename to restart processing.  */
736 void
737 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
738 {
739   /* Warn about unused macros before popping the final buffer.  */
740   if (CPP_OPTION (pfile, warn_unused_macros))
741     cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
742 
743   /* lex.c leaves the final buffer on the stack.  This it so that
744      it returns an unending stream of CPP_EOFs to the client.  If we
745      popped the buffer, we'd dereference a NULL buffer pointer and
746      segfault.  It's nice to allow the client to do worry-free excess
747      cpp_get_token calls.  */
748   while (pfile->buffer)
749     _cpp_pop_buffer (pfile);
750 
751   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
752       && deps_stream)
753     {
754       deps_write (pfile->deps, deps_stream, 72);
755 
756       if (CPP_OPTION (pfile, deps.phony_targets))
757 	deps_phony_targets (pfile->deps, deps_stream);
758     }
759 
760   /* Report on headers that could use multiple include guards.  */
761   if (CPP_OPTION (pfile, print_include_names))
762     _cpp_report_missing_guards (pfile);
763 }
764 
765 static void
766 post_options (cpp_reader *pfile)
767 {
768   /* -Wtraditional is not useful in C++ mode.  */
769   if (CPP_OPTION (pfile, cplusplus))
770     CPP_OPTION (pfile, cpp_warn_traditional) = 0;
771 
772   /* Permanently disable macro expansion if we are rescanning
773      preprocessed text.  Read preprocesed source in ISO mode.  */
774   if (CPP_OPTION (pfile, preprocessed))
775     {
776       if (!CPP_OPTION (pfile, directives_only))
777 	pfile->state.prevent_expansion = 1;
778       CPP_OPTION (pfile, traditional) = 0;
779     }
780 
781   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
782     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
783 
784   if (CPP_OPTION (pfile, traditional))
785     {
786       CPP_OPTION (pfile, trigraphs) = 0;
787       CPP_OPTION (pfile, warn_trigraphs) = 0;
788     }
789 }
790