* libgnarl/a-intnam__rtems.ads: Update copyright date.
[official-gcc.git] / libcpp / init.c
blob16ff202c8cf11729268c08f810bddaa9cb2fdc54
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
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.
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.
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/>. */
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"
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
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 *);
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
48 #define init_trigraph_map() /* Nothing. */
49 #define TRIGRAPH_MAP \
50 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
52 #define END };
53 #define s(p, v) [p] = v,
55 #else
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;
61 #define END }
62 #define s(p, v) x[p] = v;
64 #endif
66 TRIGRAPH_MAP
67 s('=', '#') s(')', ']') s('!', '|')
68 s('(', '[') s('\'', '^') s('>', '}')
69 s('/', '\\') s('<', '{') s('-', '~')
70 END
72 #undef s
73 #undef END
74 #undef TRIGRAPH_MAP
76 /* A set of booleans indicating what CPP features each source language
77 requires. */
78 struct lang_flags
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;
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 /* GNUCXX17 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1 },
112 /* CXX17 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
113 /* GNUCXX2A */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1 },
114 /* CXX2A */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
115 /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
118 /* Sets internal flags correctly for a given language. */
119 void
120 cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
122 const struct lang_flags *l = &lang_defaults[(int) lang];
124 CPP_OPTION (pfile, lang) = lang;
126 CPP_OPTION (pfile, c99) = l->c99;
127 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
128 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
129 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
130 CPP_OPTION (pfile, c11_identifiers) = l->c11_identifiers;
131 CPP_OPTION (pfile, std) = l->std;
132 CPP_OPTION (pfile, digraphs) = l->digraphs;
133 CPP_OPTION (pfile, uliterals) = l->uliterals;
134 CPP_OPTION (pfile, rliterals) = l->rliterals;
135 CPP_OPTION (pfile, user_literals) = l->user_literals;
136 CPP_OPTION (pfile, binary_constants) = l->binary_constants;
137 CPP_OPTION (pfile, digit_separators) = l->digit_separators;
138 CPP_OPTION (pfile, trigraphs) = l->trigraphs;
139 CPP_OPTION (pfile, utf8_char_literals) = l->utf8_char_literals;
142 /* Initialize library global state. */
143 static void
144 init_library (void)
146 static int initialized = 0;
148 if (! initialized)
150 initialized = 1;
152 _cpp_init_lexer ();
154 /* Set up the trigraph map. This doesn't need to do anything if
155 we were compiled with a compiler that supports C99 designated
156 initializers. */
157 init_trigraph_map ();
159 #ifdef ENABLE_NLS
160 (void) bindtextdomain (PACKAGE, LOCALEDIR);
161 #endif
165 /* Initialize a cpp_reader structure. */
166 cpp_reader *
167 cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
168 struct line_maps *line_table)
170 cpp_reader *pfile;
172 /* Initialize this instance of the library if it hasn't been already. */
173 init_library ();
175 pfile = XCNEW (cpp_reader);
176 memset (&pfile->base_context, 0, sizeof (pfile->base_context));
178 cpp_set_lang (pfile, lang);
179 CPP_OPTION (pfile, warn_multichar) = 1;
180 CPP_OPTION (pfile, discard_comments) = 1;
181 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
182 CPP_OPTION (pfile, tabstop) = 8;
183 CPP_OPTION (pfile, operator_names) = 1;
184 CPP_OPTION (pfile, warn_trigraphs) = 2;
185 CPP_OPTION (pfile, warn_endif_labels) = 1;
186 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
187 CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
188 CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
189 CPP_OPTION (pfile, cpp_warn_long_long) = 0;
190 CPP_OPTION (pfile, dollars_in_ident) = 1;
191 CPP_OPTION (pfile, warn_dollars) = 1;
192 CPP_OPTION (pfile, warn_variadic_macros) = 1;
193 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
194 CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
195 /* By default, track locations of tokens resulting from macro
196 expansion. The '2' means, track the locations with the highest
197 accuracy. Read the comments for struct
198 cpp_options::track_macro_expansion to learn about the other
199 values. */
200 CPP_OPTION (pfile, track_macro_expansion) = 2;
201 CPP_OPTION (pfile, warn_normalize) = normalized_C;
202 CPP_OPTION (pfile, warn_literal_suffix) = 1;
203 CPP_OPTION (pfile, canonical_system_headers)
204 = ENABLE_CANONICAL_SYSTEM_HEADERS;
205 CPP_OPTION (pfile, ext_numeric_literals) = 1;
206 CPP_OPTION (pfile, warn_date_time) = 0;
208 /* Default CPP arithmetic to something sensible for the host for the
209 benefit of dumb users like fix-header. */
210 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
211 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
212 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
213 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
214 CPP_OPTION (pfile, unsigned_char) = 0;
215 CPP_OPTION (pfile, unsigned_wchar) = 1;
216 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
218 /* Default to no charset conversion. */
219 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
220 CPP_OPTION (pfile, wide_charset) = 0;
222 /* Default the input character set to UTF-8. */
223 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
225 /* A fake empty "directory" used as the starting point for files
226 looked up without a search path. Name cannot be '/' because we
227 don't want to prepend anything at all to filenames using it. All
228 other entries are correct zero-initialized. */
229 pfile->no_search_path.name = (char *) "";
231 /* Initialize the line map. */
232 pfile->line_table = line_table;
234 /* Initialize lexer state. */
235 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
237 /* Set up static tokens. */
238 pfile->avoid_paste.type = CPP_PADDING;
239 pfile->avoid_paste.val.source = NULL;
240 pfile->eof.type = CPP_EOF;
241 pfile->eof.flags = 0;
243 /* Create a token buffer for the lexer. */
244 _cpp_init_tokenrun (&pfile->base_run, 250);
245 pfile->cur_run = &pfile->base_run;
246 pfile->cur_token = pfile->base_run.base;
248 /* Initialize the base context. */
249 pfile->context = &pfile->base_context;
250 pfile->base_context.c.macro = 0;
251 pfile->base_context.prev = pfile->base_context.next = 0;
253 /* Aligned and unaligned storage. */
254 pfile->a_buff = _cpp_get_buff (pfile, 0);
255 pfile->u_buff = _cpp_get_buff (pfile, 0);
257 /* Initialize table for push_macro/pop_macro. */
258 pfile->pushed_macros = 0;
260 /* Do not force token locations by default. */
261 pfile->forced_token_location_p = NULL;
263 /* Initialize source_date_epoch to -2 (not yet set). */
264 pfile->source_date_epoch = (time_t) -2;
266 /* The expression parser stack. */
267 _cpp_expand_op_stack (pfile);
269 /* Initialize the buffer obstack. */
270 obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
272 _cpp_init_files (pfile);
274 _cpp_init_hashtable (pfile, table);
276 return pfile;
279 /* Set the line_table entry in PFILE. This is called after reading a
280 PCH file, as the old line_table will be incorrect. */
281 void
282 cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
284 pfile->line_table = line_table;
287 /* Free resources used by PFILE. Accessing PFILE after this function
288 returns leads to undefined behavior. Returns the error count. */
289 void
290 cpp_destroy (cpp_reader *pfile)
292 cpp_context *context, *contextn;
293 struct def_pragma_macro *pmacro;
294 tokenrun *run, *runn;
295 int i;
297 free (pfile->op_stack);
299 while (CPP_BUFFER (pfile) != NULL)
300 _cpp_pop_buffer (pfile);
302 free (pfile->out.base);
304 if (pfile->macro_buffer)
306 free (pfile->macro_buffer);
307 pfile->macro_buffer = NULL;
308 pfile->macro_buffer_len = 0;
311 if (pfile->deps)
312 deps_free (pfile->deps);
313 obstack_free (&pfile->buffer_ob, 0);
315 _cpp_destroy_hashtable (pfile);
316 _cpp_cleanup_files (pfile);
317 _cpp_destroy_iconv (pfile);
319 _cpp_free_buff (pfile->a_buff);
320 _cpp_free_buff (pfile->u_buff);
321 _cpp_free_buff (pfile->free_buffs);
323 for (run = &pfile->base_run; run; run = runn)
325 runn = run->next;
326 free (run->base);
327 if (run != &pfile->base_run)
328 free (run);
331 for (context = pfile->base_context.next; context; context = contextn)
333 contextn = context->next;
334 free (context);
337 if (pfile->comments.entries)
339 for (i = 0; i < pfile->comments.count; i++)
340 free (pfile->comments.entries[i].comment);
342 free (pfile->comments.entries);
344 if (pfile->pushed_macros)
348 pmacro = pfile->pushed_macros;
349 pfile->pushed_macros = pmacro->next;
350 free (pmacro->name);
351 free (pmacro);
353 while (pfile->pushed_macros);
356 free (pfile);
359 /* This structure defines one built-in identifier. A node will be
360 entered in the hash table under the name NAME, with value VALUE.
362 There are two tables of these. builtin_array holds all the
363 "builtin" macros: these are handled by builtin_macro() in
364 macro.c. Builtin is somewhat of a misnomer -- the property of
365 interest is that these macros require special code to compute their
366 expansions. The value is a "cpp_builtin_type" enumerator.
368 operator_array holds the C++ named operators. These are keywords
369 which act as aliases for punctuators. In C++, they cannot be
370 altered through #define, and #if recognizes them as operators. In
371 C, these are not entered into the hash table at all (but see
372 <iso646.h>). The value is a token-type enumerator. */
373 struct builtin_macro
375 const uchar *const name;
376 const unsigned short len;
377 const unsigned short value;
378 const bool always_warn_if_redefined;
381 #define B(n, t, f) { DSC(n), t, f }
382 static const struct builtin_macro builtin_array[] =
384 B("__TIMESTAMP__", BT_TIMESTAMP, false),
385 B("__TIME__", BT_TIME, false),
386 B("__DATE__", BT_DATE, false),
387 B("__FILE__", BT_FILE, false),
388 B("__BASE_FILE__", BT_BASE_FILE, false),
389 B("__LINE__", BT_SPECLINE, true),
390 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
391 B("__COUNTER__", BT_COUNTER, true),
392 B("__has_attribute", BT_HAS_ATTRIBUTE, true),
393 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
394 /* Keep builtins not used for -traditional-cpp at the end, and
395 update init_builtins() if any more are added. */
396 B("_Pragma", BT_PRAGMA, true),
397 B("__STDC__", BT_STDC, true),
399 #undef B
401 struct builtin_operator
403 const uchar *const name;
404 const unsigned short len;
405 const unsigned short value;
408 #define B(n, t) { DSC(n), t }
409 static const struct builtin_operator operator_array[] =
411 B("and", CPP_AND_AND),
412 B("and_eq", CPP_AND_EQ),
413 B("bitand", CPP_AND),
414 B("bitor", CPP_OR),
415 B("compl", CPP_COMPL),
416 B("not", CPP_NOT),
417 B("not_eq", CPP_NOT_EQ),
418 B("or", CPP_OR_OR),
419 B("or_eq", CPP_OR_EQ),
420 B("xor", CPP_XOR),
421 B("xor_eq", CPP_XOR_EQ)
423 #undef B
425 /* Mark the C++ named operators in the hash table. */
426 static void
427 mark_named_operators (cpp_reader *pfile, int flags)
429 const struct builtin_operator *b;
431 for (b = operator_array;
432 b < (operator_array + ARRAY_SIZE (operator_array));
433 b++)
435 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
436 hp->flags |= flags;
437 hp->is_directive = 0;
438 hp->directive_index = b->value;
442 /* Helper function of cpp_type2name. Return the string associated with
443 named operator TYPE. */
444 const char *
445 cpp_named_operator2name (enum cpp_ttype type)
447 const struct builtin_operator *b;
449 for (b = operator_array;
450 b < (operator_array + ARRAY_SIZE (operator_array));
451 b++)
453 if (type == b->value)
454 return (const char *) b->name;
457 return NULL;
460 void
461 cpp_init_special_builtins (cpp_reader *pfile)
463 const struct builtin_macro *b;
464 size_t n = ARRAY_SIZE (builtin_array);
466 if (CPP_OPTION (pfile, traditional))
467 n -= 2;
468 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
469 || CPP_OPTION (pfile, std))
470 n--;
472 for (b = builtin_array; b < builtin_array + n; b++)
474 if (b->value == BT_HAS_ATTRIBUTE
475 && (CPP_OPTION (pfile, lang) == CLK_ASM
476 || pfile->cb.has_attribute == NULL))
477 continue;
478 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
479 hp->type = NT_MACRO;
480 hp->flags |= NODE_BUILTIN;
481 if (b->always_warn_if_redefined)
482 hp->flags |= NODE_WARN;
483 hp->value.builtin = (enum cpp_builtin_type) b->value;
487 /* Read the builtins table above and enter them, and language-specific
488 macros, into the hash table. HOSTED is true if this is a hosted
489 environment. */
490 void
491 cpp_init_builtins (cpp_reader *pfile, int hosted)
493 cpp_init_special_builtins (pfile);
495 if (!CPP_OPTION (pfile, traditional)
496 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
497 || CPP_OPTION (pfile, std)))
498 _cpp_define_builtin (pfile, "__STDC__ 1");
500 if (CPP_OPTION (pfile, cplusplus))
502 if (CPP_OPTION (pfile, lang) == CLK_CXX2A
503 || CPP_OPTION (pfile, lang) == CLK_GNUCXX2A)
504 _cpp_define_builtin (pfile, "__cplusplus 201709L");
505 else if (CPP_OPTION (pfile, lang) == CLK_CXX17
506 || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
507 _cpp_define_builtin (pfile, "__cplusplus 201703L");
508 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
509 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
510 _cpp_define_builtin (pfile, "__cplusplus 201402L");
511 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
512 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
513 _cpp_define_builtin (pfile, "__cplusplus 201103L");
514 else
515 _cpp_define_builtin (pfile, "__cplusplus 199711L");
517 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
518 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
519 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
520 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
521 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
522 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
523 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
524 else if (CPP_OPTION (pfile, c99))
525 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
527 if (CPP_OPTION (pfile, uliterals)
528 && !(CPP_OPTION (pfile, cplusplus)
529 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
530 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
532 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
533 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
536 if (hosted)
537 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
538 else
539 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
541 if (CPP_OPTION (pfile, objc))
542 _cpp_define_builtin (pfile, "__OBJC__ 1");
545 /* Sanity-checks are dependent on command-line options, so it is
546 called as a subroutine of cpp_read_main_file. */
547 #if CHECKING_P
548 static void sanity_checks (cpp_reader *);
549 static void sanity_checks (cpp_reader *pfile)
551 cppchar_t test = 0;
552 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
554 /* Sanity checks for assumptions about CPP arithmetic and target
555 type precisions made by cpplib. */
556 test--;
557 if (test < 1)
558 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
560 if (CPP_OPTION (pfile, precision) > max_precision)
561 cpp_error (pfile, CPP_DL_ICE,
562 "preprocessor arithmetic has maximum precision of %lu bits;"
563 " target requires %lu bits",
564 (unsigned long) max_precision,
565 (unsigned long) CPP_OPTION (pfile, precision));
567 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
568 cpp_error (pfile, CPP_DL_ICE,
569 "CPP arithmetic must be at least as precise as a target int");
571 if (CPP_OPTION (pfile, char_precision) < 8)
572 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
574 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
575 cpp_error (pfile, CPP_DL_ICE,
576 "target wchar_t is narrower than target char");
578 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
579 cpp_error (pfile, CPP_DL_ICE,
580 "target int is narrower than target char");
582 /* This is assumed in eval_token() and could be fixed if necessary. */
583 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
584 cpp_error (pfile, CPP_DL_ICE,
585 "CPP half-integer narrower than CPP character");
587 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
588 cpp_error (pfile, CPP_DL_ICE,
589 "CPP on this host cannot handle wide character constants over"
590 " %lu bits, but the target requires %lu bits",
591 (unsigned long) BITS_PER_CPPCHAR_T,
592 (unsigned long) CPP_OPTION (pfile, wchar_precision));
594 #else
595 # define sanity_checks(PFILE)
596 #endif
598 /* This is called after options have been parsed, and partially
599 processed. */
600 void
601 cpp_post_options (cpp_reader *pfile)
603 int flags;
605 sanity_checks (pfile);
607 post_options (pfile);
609 /* Mark named operators before handling command line macros. */
610 flags = 0;
611 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
612 flags |= NODE_OPERATOR;
613 if (CPP_OPTION (pfile, warn_cxx_operator_names))
614 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
615 if (flags != 0)
616 mark_named_operators (pfile, flags);
619 /* Setup for processing input from the file named FNAME, or stdin if
620 it is the empty string. Return the original filename
621 on success (e.g. foo.i->foo.c), or NULL on failure. */
622 const char *
623 cpp_read_main_file (cpp_reader *pfile, const char *fname)
625 const source_location loc = 0;
627 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
629 if (!pfile->deps)
630 pfile->deps = deps_init ();
632 /* Set the default target (if there is none already). */
633 deps_add_default_target (pfile->deps, fname);
636 pfile->main_file
637 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
638 loc);
639 if (_cpp_find_failed (pfile->main_file))
640 return NULL;
642 _cpp_stack_file (pfile, pfile->main_file, false, loc);
644 /* For foo.i, read the original filename foo.c now, for the benefit
645 of the front ends. */
646 if (CPP_OPTION (pfile, preprocessed))
648 read_original_filename (pfile);
649 fname =
650 ORDINARY_MAP_FILE_NAME
651 ((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
653 return fname;
656 /* For preprocessed files, if the first tokens are of the form # NUM.
657 handle the directive so we know the original file name. This will
658 generate file_change callbacks, which the front ends must handle
659 appropriately given their state of initialization. */
660 static void
661 read_original_filename (cpp_reader *pfile)
663 const cpp_token *token, *token1;
665 /* Lex ahead; if the first tokens are of the form # NUM, then
666 process the directive, otherwise back up. */
667 token = _cpp_lex_direct (pfile);
668 if (token->type == CPP_HASH)
670 pfile->state.in_directive = 1;
671 token1 = _cpp_lex_direct (pfile);
672 _cpp_backup_tokens (pfile, 1);
673 pfile->state.in_directive = 0;
675 /* If it's a #line directive, handle it. */
676 if (token1->type == CPP_NUMBER
677 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
679 read_original_directory (pfile);
680 return;
684 /* Backup as if nothing happened. */
685 _cpp_backup_tokens (pfile, 1);
688 /* For preprocessed files, if the tokens following the first filename
689 line is of the form # <line> "/path/name//", handle the
690 directive so we know the original current directory. */
691 static void
692 read_original_directory (cpp_reader *pfile)
694 const cpp_token *hash, *token;
696 /* Lex ahead; if the first tokens are of the form # NUM, then
697 process the directive, otherwise back up. */
698 hash = _cpp_lex_direct (pfile);
699 if (hash->type != CPP_HASH)
701 _cpp_backup_tokens (pfile, 1);
702 return;
705 token = _cpp_lex_direct (pfile);
707 if (token->type != CPP_NUMBER)
709 _cpp_backup_tokens (pfile, 2);
710 return;
713 token = _cpp_lex_direct (pfile);
715 if (token->type != CPP_STRING
716 || ! (token->val.str.len >= 5
717 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
718 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
720 _cpp_backup_tokens (pfile, 3);
721 return;
724 if (pfile->cb.dir_change)
726 char *debugdir = (char *) alloca (token->val.str.len - 3);
728 memcpy (debugdir, (const char *) token->val.str.text + 1,
729 token->val.str.len - 4);
730 debugdir[token->val.str.len - 4] = '\0';
732 pfile->cb.dir_change (pfile, debugdir);
736 /* This is called at the end of preprocessing. It pops the last
737 buffer and writes dependency output.
739 Maybe it should also reset state, such that you could call
740 cpp_start_read with a new filename to restart processing. */
741 void
742 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
744 /* Warn about unused macros before popping the final buffer. */
745 if (CPP_OPTION (pfile, warn_unused_macros))
746 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
748 /* lex.c leaves the final buffer on the stack. This it so that
749 it returns an unending stream of CPP_EOFs to the client. If we
750 popped the buffer, we'd dereference a NULL buffer pointer and
751 segfault. It's nice to allow the client to do worry-free excess
752 cpp_get_token calls. */
753 while (pfile->buffer)
754 _cpp_pop_buffer (pfile);
756 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
757 && deps_stream)
759 deps_write (pfile->deps, deps_stream, 72);
761 if (CPP_OPTION (pfile, deps.phony_targets))
762 deps_phony_targets (pfile->deps, deps_stream);
765 /* Report on headers that could use multiple include guards. */
766 if (CPP_OPTION (pfile, print_include_names))
767 _cpp_report_missing_guards (pfile);
770 static void
771 post_options (cpp_reader *pfile)
773 /* -Wtraditional is not useful in C++ mode. */
774 if (CPP_OPTION (pfile, cplusplus))
775 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
777 /* Permanently disable macro expansion if we are rescanning
778 preprocessed text. Read preprocesed source in ISO mode. */
779 if (CPP_OPTION (pfile, preprocessed))
781 if (!CPP_OPTION (pfile, directives_only))
782 pfile->state.prevent_expansion = 1;
783 CPP_OPTION (pfile, traditional) = 0;
786 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
787 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
789 if (CPP_OPTION (pfile, traditional))
791 CPP_OPTION (pfile, trigraphs) = 0;
792 CPP_OPTION (pfile, warn_trigraphs) = 0;