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