]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
re PR tree-optimization/38865 (missing FRE with VIEW_CONVERT_EXPR)
[thirdparty/gcc.git] / libcpp / init.c
CommitLineData
5538ada6 1/* CPP Library.
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
148e4216
JM
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
4 2009 Free Software Foundation, Inc.
5538ada6
ZW
5 Contributed by Per Bothner, 1994-95.
6 Based on CCCP program by Paul Rubin, June 1986
7 Adapted to ANSI C, Richard Stallman, Jan 1987
8
9This program is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
748086b7 11Free Software Foundation; either version 3, or (at your option) any
5538ada6
ZW
12later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
748086b7
JJ
20along with this program; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
5538ada6 22
5538ada6
ZW
23#include "config.h"
24#include "system.h"
6de1e2a9 25#include "cpplib.h"
4f4e53dd 26#include "internal.h"
49e6c08e 27#include "mkdeps.h"
018a4785 28#include "localedir.h"
88ae23e7 29
6cf87ca4
ZW
30static void init_library (void);
31static void mark_named_operators (cpp_reader *);
32static void read_original_filename (cpp_reader *);
b20d9f0c 33static void read_original_directory (cpp_reader *);
6cf87ca4 34static void post_options (cpp_reader *);
6de1e2a9 35
61d0346d
NB
36/* If we have designated initializers (GCC >2.7) these tables can be
37 initialized, constant data. Otherwise, they have to be filled in at
12cf91fe 38 runtime. */
61d0346d 39#if HAVE_DESIGNATED_INITIALIZERS
a9ae4483 40
4a58aab6 41#define init_trigraph_map() /* Nothing. */
61d0346d 42#define TRIGRAPH_MAP \
562a5c27 43__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
61d0346d 44
a9ae4483 45#define END };
455d2586 46#define s(p, v) [p] = v,
61d0346d 47
a9ae4483 48#else
61d0346d 49
562a5c27 50#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
6cf87ca4 51 static void init_trigraph_map (void) { \
61d0346d
NB
52 unsigned char *x = _cpp_trigraph_map;
53
ae79697b 54#define END }
455d2586 55#define s(p, v) x[p] = v;
61d0346d 56
a9ae4483 57#endif
6de1e2a9 58
61d0346d
NB
59TRIGRAPH_MAP
60 s('=', '#') s(')', ']') s('!', '|')
61 s('(', '[') s('\'', '^') s('>', '}')
62 s('/', '\\') s('<', '{') s('-', '~')
63END
64
a9ae4483 65#undef s
455d2586 66#undef END
61d0346d 67#undef TRIGRAPH_MAP
6de1e2a9 68
5d8ebbd8
NB
69/* A set of booleans indicating what CPP features each source language
70 requires. */
a01eb545
ZW
71struct lang_flags
72{
73 char c99;
a01eb545
ZW
74 char cplusplus;
75 char extended_numbers;
af15a2fe 76 char extended_identifiers;
58551c23 77 char std;
a01eb545
ZW
78 char cplusplus_comments;
79 char digraphs;
b6baa67d 80 char uliterals;
a01eb545
ZW
81};
82
a01eb545 83static const struct lang_flags lang_defaults[] =
b6baa67d
KVH
84{ /* c99 c++ xnum xid std // digr ulit */
85 /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1, 0 },
86 /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1, 1 },
87 /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
88 /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1, 0 },
89 /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1, 0 },
90 /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1, 0 },
91 /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1, 0 },
92 /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1, 1 },
93 /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1, 1 },
94 /* ASM */ { 0, 0, 1, 0, 0, 1, 0, 0 }
dfafdaa6
DG
95 /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
96 CXX0X when no longer experimental (when all uses of identifiers
97 in the compiler have been audited for correct handling of
98 extended identifiers). */
a01eb545
ZW
99};
100
5d8ebbd8 101/* Sets internal flags correctly for a given language. */
f749a36b 102void
6cf87ca4 103cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
dd07b884 104{
a01eb545 105 const struct lang_flags *l = &lang_defaults[(int) lang];
df383483 106
bdb05a7b 107 CPP_OPTION (pfile, lang) = lang;
dd07b884 108
af15a2fe
JM
109 CPP_OPTION (pfile, c99) = l->c99;
110 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
111 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
112 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
113 CPP_OPTION (pfile, std) = l->std;
114 CPP_OPTION (pfile, trigraphs) = l->std;
115 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
116 CPP_OPTION (pfile, digraphs) = l->digraphs;
b6baa67d 117 CPP_OPTION (pfile, uliterals) = l->uliterals;
dd07b884
NB
118}
119
c1bad961 120/* Initialize library global state. */
cf44ea52 121static void
6cf87ca4 122init_library (void)
cf44ea52 123{
7ca3d2b1
NB
124 static int initialized = 0;
125
126 if (! initialized)
127 {
128 initialized = 1;
129
7ca3d2b1
NB
130 /* Set up the trigraph map. This doesn't need to do anything if
131 we were compiled with a compiler that supports C99 designated
132 initializers. */
133 init_trigraph_map ();
4f4e53dd
PB
134
135#ifdef ENABLE_NLS
85eac2a0 136 (void) bindtextdomain (PACKAGE, LOCALEDIR);
4f4e53dd 137#endif
7ca3d2b1 138 }
cf44ea52
NB
139}
140
ec5c56db 141/* Initialize a cpp_reader structure. */
cf44ea52 142cpp_reader *
50f59cd7
PB
143cpp_create_reader (enum c_lang lang, hash_table *table,
144 struct line_maps *line_table)
6de1e2a9 145{
7ca3d2b1 146 cpp_reader *pfile;
93c80368 147
4912a07c 148 /* Initialize this instance of the library if it hasn't been already. */
674c3b40 149 init_library ();
7ca3d2b1 150
c3f829c1 151 pfile = XCNEW (cpp_reader);
93c80368 152
f749a36b 153 cpp_set_lang (pfile, lang);
a5a49440 154 CPP_OPTION (pfile, warn_multichar) = 1;
ae79697b 155 CPP_OPTION (pfile, discard_comments) = 1;
477cdac7 156 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
ae79697b 157 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 158 CPP_OPTION (pfile, tabstop) = 8;
be768055 159 CPP_OPTION (pfile, operator_names) = 1;
a8eb6044 160 CPP_OPTION (pfile, warn_trigraphs) = 2;
909de5da 161 CPP_OPTION (pfile, warn_endif_labels) = 1;
9fbd3e41 162 CPP_OPTION (pfile, warn_deprecated) = 1;
9c650d90 163 CPP_OPTION (pfile, warn_long_long) = 0;
b1822ccc 164 CPP_OPTION (pfile, dollars_in_ident) = 1;
78b8811a 165 CPP_OPTION (pfile, warn_dollars) = 1;
e5b79219 166 CPP_OPTION (pfile, warn_variadic_macros) = 1;
c047ce93 167 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
50668cf6 168 CPP_OPTION (pfile, warn_normalize) = normalized_C;
ae79697b 169
2443d4e1
NB
170 /* Default CPP arithmetic to something sensible for the host for the
171 benefit of dumb users like fix-header. */
c9220e3a 172 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
2443d4e1
NB
173 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
174 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
175 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
2a1dc0d8 176 CPP_OPTION (pfile, unsigned_char) = 0;
44a147ad 177 CPP_OPTION (pfile, unsigned_wchar) = 1;
e6cc3a24
ZW
178 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
179
180 /* Default to no charset conversion. */
16dd5cfe 181 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
e6cc3a24 182 CPP_OPTION (pfile, wide_charset) = 0;
4268e8bb 183
16dd5cfe
EC
184 /* Default the input character set to UTF-8. */
185 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
cf551fba 186
8f9b4009
NB
187 /* A fake empty "directory" used as the starting point for files
188 looked up without a search path. Name cannot be '/' because we
189 don't want to prepend anything at all to filenames using it. All
190 other entries are correct zero-initialized. */
191 pfile->no_search_path.name = (char *) "";
192
500bee0a 193 /* Initialize the line map. */
50f59cd7 194 pfile->line_table = line_table;
d82fc108 195
4a58aab6 196 /* Initialize lexer state. */
93c80368
NB
197 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
198
4ed5bcfb 199 /* Set up static tokens. */
4ed5bcfb
NB
200 pfile->avoid_paste.type = CPP_PADDING;
201 pfile->avoid_paste.val.source = NULL;
202 pfile->eof.type = CPP_EOF;
203 pfile->eof.flags = 0;
93c80368 204
5fddcffc
NB
205 /* Create a token buffer for the lexer. */
206 _cpp_init_tokenrun (&pfile->base_run, 250);
207 pfile->cur_run = &pfile->base_run;
208 pfile->cur_token = pfile->base_run.base;
5fddcffc 209
4912a07c 210 /* Initialize the base context. */
93c80368
NB
211 pfile->context = &pfile->base_context;
212 pfile->base_context.macro = 0;
213 pfile->base_context.prev = pfile->base_context.next = 0;
214
8c3b2693
NB
215 /* Aligned and unaligned storage. */
216 pfile->a_buff = _cpp_get_buff (pfile, 0);
ece54d54 217 pfile->u_buff = _cpp_get_buff (pfile, 0);
93c80368 218
87ed109f
NB
219 /* The expression parser stack. */
220 _cpp_expand_op_stack (pfile);
221
4912a07c 222 /* Initialize the buffer obstack. */
43839642
ZW
223 _obstack_begin (&pfile->buffer_ob, 0, 0,
224 (void *(*) (long)) xmalloc,
225 (void (*) (void *)) free);
2a967f3d 226
8f9b4009 227 _cpp_init_files (pfile);
cf44ea52 228
b4e46cea
PB
229 _cpp_init_hashtable (pfile, table);
230
cf44ea52 231 return pfile;
f2d5f0cc
ZW
232}
233
5ffeb913
TT
234/* Set the line_table entry in PFILE. This is called after reading a
235 PCH file, as the old line_table will be incorrect. */
236void
237cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
238{
239 pfile->line_table = line_table;
240}
241
400023a3 242/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 243 returns leads to undefined behavior. Returns the error count. */
76c3e73e 244void
6cf87ca4 245cpp_destroy (cpp_reader *pfile)
6de1e2a9 246{
93c80368 247 cpp_context *context, *contextn;
50410426 248 tokenrun *run, *runn;
631d0d36 249 int i;
709e9e50 250
87ed109f 251 free (pfile->op_stack);
af0d16cd 252
38b24ee2 253 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 254 _cpp_pop_buffer (pfile);
6de1e2a9 255
1a76916c
NB
256 if (pfile->out.base)
257 free (pfile->out.base);
004cb263 258
93c80368 259 if (pfile->macro_buffer)
4b49c365 260 {
fad205ff 261 free (pfile->macro_buffer);
4b49c365
AO
262 pfile->macro_buffer = NULL;
263 pfile->macro_buffer_len = 0;
264 }
93c80368 265
f4ff5a69
NB
266 if (pfile->deps)
267 deps_free (pfile->deps);
2a967f3d 268 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 269
2a967f3d 270 _cpp_destroy_hashtable (pfile);
8f9b4009 271 _cpp_cleanup_files (pfile);
e6cc3a24 272 _cpp_destroy_iconv (pfile);
709e9e50 273
8c3b2693 274 _cpp_free_buff (pfile->a_buff);
ece54d54 275 _cpp_free_buff (pfile->u_buff);
b8af0ca5 276 _cpp_free_buff (pfile->free_buffs);
93c80368 277
50410426
NB
278 for (run = &pfile->base_run; run; run = runn)
279 {
280 runn = run->next;
281 free (run->base);
282 if (run != &pfile->base_run)
283 free (run);
284 }
285
93c80368
NB
286 for (context = pfile->base_context.next; context; context = contextn)
287 {
288 contextn = context->next;
289 free (context);
290 }
400023a3 291
631d0d36
MG
292 if (pfile->comments.entries)
293 {
294 for (i = 0; i < pfile->comments.count; i++)
295 free (pfile->comments.entries[i].comment);
296
297 free (pfile->comments.entries);
298 }
299
400023a3 300 free (pfile);
6de1e2a9
ZW
301}
302
93c80368 303/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
304 entered in the hash table under the name NAME, with value VALUE.
305
306 There are two tables of these. builtin_array holds all the
307 "builtin" macros: these are handled by builtin_macro() in
a2566ae9 308 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a
ZW
309 interest is that these macros require special code to compute their
310 expansions. The value is a "builtin_type" enumerator.
311
312 operator_array holds the C++ named operators. These are keywords
313 which act as aliases for punctuators. In C++, they cannot be
314 altered through #define, and #if recognizes them as operators. In
315 C, these are not entered into the hash table at all (but see
316 <iso646.h>). The value is a token-type enumerator. */
c047ce93 317struct builtin_macro
a9ae4483 318{
c047ce93
SB
319 const uchar *const name;
320 const unsigned short len;
321 const unsigned short value;
322 const bool always_warn_if_redefined;
a9ae4483 323};
93c80368 324
c047ce93
SB
325#define B(n, t, f) { DSC(n), t, f }
326static const struct builtin_macro builtin_array[] =
6de1e2a9 327{
c047ce93
SB
328 B("__TIMESTAMP__", BT_TIMESTAMP, false),
329 B("__TIME__", BT_TIME, false),
330 B("__DATE__", BT_DATE, false),
331 B("__FILE__", BT_FILE, false),
332 B("__BASE_FILE__", BT_BASE_FILE, false),
333 B("__LINE__", BT_SPECLINE, true),
334 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
335 B("__COUNTER__", BT_COUNTER, true),
278c4662
NB
336 /* Keep builtins not used for -traditional-cpp at the end, and
337 update init_builtins() if any more are added. */
c047ce93
SB
338 B("_Pragma", BT_PRAGMA, true),
339 B("__STDC__", BT_STDC, true),
340};
341#undef B
342
343struct builtin_operator
344{
345 const uchar *const name;
346 const unsigned short len;
347 const unsigned short value;
f24a153a 348};
92936ecf 349
c047ce93
SB
350#define B(n, t) { DSC(n), t }
351static const struct builtin_operator operator_array[] =
f24a153a
ZW
352{
353 B("and", CPP_AND_AND),
354 B("and_eq", CPP_AND_EQ),
355 B("bitand", CPP_AND),
356 B("bitor", CPP_OR),
357 B("compl", CPP_COMPL),
358 B("not", CPP_NOT),
359 B("not_eq", CPP_NOT_EQ),
360 B("or", CPP_OR_OR),
361 B("or_eq", CPP_OR_EQ),
362 B("xor", CPP_XOR),
363 B("xor_eq", CPP_XOR_EQ)
a9ae4483 364};
12cf91fe 365#undef B
a9ae4483 366
17645b15
NB
367/* Mark the C++ named operators in the hash table. */
368static void
6cf87ca4 369mark_named_operators (cpp_reader *pfile)
17645b15 370{
c047ce93 371 const struct builtin_operator *b;
17645b15
NB
372
373 for (b = operator_array;
374 b < (operator_array + ARRAY_SIZE (operator_array));
375 b++)
376 {
377 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
378 hp->flags |= NODE_OPERATOR;
4977bab6
ZW
379 hp->is_directive = 0;
380 hp->directive_index = b->value;
17645b15
NB
381 }
382}
383
cfc93532
MLI
384/* Helper function of cpp_type2name. Return the string associated with
385 named operator TYPE. */
386const char *
387cpp_named_operator2name (enum cpp_ttype type)
388{
389 const struct builtin_operator *b;
390
391 for (b = operator_array;
392 b < (operator_array + ARRAY_SIZE (operator_array));
393 b++)
394 {
395 if (type == b->value)
396 return (const char *) b->name;
397 }
398
399 return NULL;
400}
401
c1bad961 402void
ccfc4c91 403cpp_init_special_builtins (cpp_reader *pfile)
a9ae4483 404{
c047ce93 405 const struct builtin_macro *b;
278c4662 406 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 407
278c4662
NB
408 if (CPP_OPTION (pfile, traditional))
409 n -= 2;
83900997
JJ
410 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
411 || CPP_OPTION (pfile, std))
ccfc4c91 412 n--;
278c4662 413
83900997 414 for (b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 415 {
f24a153a
ZW
416 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
417 hp->type = NT_MACRO;
c047ce93
SB
418 hp->flags |= NODE_BUILTIN;
419 if (b->always_warn_if_redefined
420 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
421 hp->flags |= NODE_WARN;
7e5487a2 422 hp->value.builtin = (enum cpp_builtin_type) b->value;
6de1e2a9 423 }
ccfc4c91
OW
424}
425
426/* Read the builtins table above and enter them, and language-specific
427 macros, into the hash table. HOSTED is true if this is a hosted
428 environment. */
429void
430cpp_init_builtins (cpp_reader *pfile, int hosted)
431{
432 cpp_init_special_builtins (pfile);
433
434 if (!CPP_OPTION (pfile, traditional)
435 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
436 || CPP_OPTION (pfile, std)))
437 _cpp_define_builtin (pfile, "__STDC__ 1");
c740cee2
NB
438
439 if (CPP_OPTION (pfile, cplusplus))
3d90d290 440 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
441 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
442 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 443 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
444 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
445 else if (CPP_OPTION (pfile, c99))
446 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
447
6e270179 448 if (hosted)
58b5b894 449 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 450 else
58b5b894 451 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 452
0f7866e7
ZL
453 if (CPP_OPTION (pfile, objc))
454 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
455}
456
2443d4e1
NB
457/* Sanity-checks are dependent on command-line options, so it is
458 called as a subroutine of cpp_read_main_file (). */
459#if ENABLE_CHECKING
6cf87ca4
ZW
460static void sanity_checks (cpp_reader *);
461static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
462{
463 cppchar_t test = 0;
c9220e3a 464 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
465
466 /* Sanity checks for assumptions about CPP arithmetic and target
467 type precisions made by cpplib. */
468 test--;
469 if (test < 1)
0527bc4e 470 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 471
c9220e3a 472 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 473 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
474 "preprocessor arithmetic has maximum precision of %lu bits;"
475 " target requires %lu bits",
c9220e3a
NB
476 (unsigned long) max_precision,
477 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
478
479 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 480 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
481 "CPP arithmetic must be at least as precise as a target int");
482
483 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 484 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
485
486 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 487 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
488 "target wchar_t is narrower than target char");
489
490 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 491 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
492 "target int is narrower than target char");
493
c9220e3a
NB
494 /* This is assumed in eval_token() and could be fixed if necessary. */
495 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
496 cpp_error (pfile, CPP_DL_ICE,
497 "CPP half-integer narrower than CPP character");
c9220e3a 498
2443d4e1 499 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 500 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
501 "CPP on this host cannot handle wide character constants over"
502 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
503 (unsigned long) BITS_PER_CPPCHAR_T,
504 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
505}
506#else
507# define sanity_checks(PFILE)
508#endif
509
f5e99456 510/* This is called after options have been parsed, and partially
59e4e217 511 processed. */
4169c321
PB
512void
513cpp_post_options (cpp_reader *pfile)
6de1e2a9 514{
2443d4e1
NB
515 sanity_checks (pfile);
516
f4ff5a69
NB
517 post_options (pfile);
518
c19b12cb
NB
519 /* Mark named operators before handling command line macros. */
520 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
521 mark_named_operators (pfile);
4169c321 522}
c19b12cb 523
4dc299fb 524/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
525 it is the empty string. Return the original filename
526 on success (e.g. foo.i->foo.c), or NULL on failure. */
527const char *
528cpp_read_main_file (cpp_reader *pfile, const char *fname)
4169c321 529{
f4ff5a69
NB
530 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
531 {
532 if (!pfile->deps)
533 pfile->deps = deps_init ();
534
535 /* Set the default target (if there is none already). */
536 deps_add_default_target (pfile->deps, fname);
537 }
96302433 538
4dc299fb 539 pfile->main_file
6568f34b 540 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
4dc299fb 541 if (_cpp_find_failed (pfile->main_file))
3092d0fc 542 return NULL;
f5e99456 543
4dc299fb
PB
544 _cpp_stack_file (pfile, pfile->main_file, false);
545
546 /* For foo.i, read the original filename foo.c now, for the benefit
547 of the front ends. */
548 if (CPP_OPTION (pfile, preprocessed))
8e9ea4d7
PB
549 {
550 read_original_filename (pfile);
12f9df4e 551 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
8e9ea4d7
PB
552 }
553 return fname;
f5e99456
NB
554}
555
556/* For preprocessed files, if the first tokens are of the form # NUM.
557 handle the directive so we know the original file name. This will
558 generate file_change callbacks, which the front ends must handle
559 appropriately given their state of initialization. */
560static void
6cf87ca4 561read_original_filename (cpp_reader *pfile)
f5e99456
NB
562{
563 const cpp_token *token, *token1;
564
565 /* Lex ahead; if the first tokens are of the form # NUM, then
566 process the directive, otherwise back up. */
567 token = _cpp_lex_direct (pfile);
568 if (token->type == CPP_HASH)
569 {
456b8ce5 570 pfile->state.in_directive = 1;
f5e99456
NB
571 token1 = _cpp_lex_direct (pfile);
572 _cpp_backup_tokens (pfile, 1);
456b8ce5 573 pfile->state.in_directive = 0;
f5e99456
NB
574
575 /* If it's a #line directive, handle it. */
576 if (token1->type == CPP_NUMBER)
577 {
578 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
b20d9f0c 579 read_original_directory (pfile);
f5e99456
NB
580 return;
581 }
582 }
583
584 /* Backup as if nothing happened. */
585 _cpp_backup_tokens (pfile, 1);
586}
587
b20d9f0c
AO
588/* For preprocessed files, if the tokens following the first filename
589 line is of the form # <line> "/path/name//", handle the
590 directive so we know the original current directory. */
591static void
592read_original_directory (cpp_reader *pfile)
593{
594 const cpp_token *hash, *token;
595
596 /* Lex ahead; if the first tokens are of the form # NUM, then
597 process the directive, otherwise back up. */
598 hash = _cpp_lex_direct (pfile);
599 if (hash->type != CPP_HASH)
600 {
601 _cpp_backup_tokens (pfile, 1);
602 return;
603 }
604
605 token = _cpp_lex_direct (pfile);
606
607 if (token->type != CPP_NUMBER)
608 {
609 _cpp_backup_tokens (pfile, 2);
610 return;
611 }
612
613 token = _cpp_lex_direct (pfile);
614
615 if (token->type != CPP_STRING
616 || ! (token->val.str.len >= 5
617 && token->val.str.text[token->val.str.len-2] == '/'
618 && token->val.str.text[token->val.str.len-3] == '/'))
619 {
620 _cpp_backup_tokens (pfile, 3);
621 return;
622 }
623
624 if (pfile->cb.dir_change)
625 {
c3f829c1 626 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
627
628 memcpy (debugdir, (const char *) token->val.str.text + 1,
629 token->val.str.len - 4);
630 debugdir[token->val.str.len - 4] = '\0';
631
632 pfile->cb.dir_change (pfile, debugdir);
8e9ea4d7 633 }
b20d9f0c
AO
634}
635
76c3e73e 636/* This is called at the end of preprocessing. It pops the last
148e4216 637 buffer and writes dependency output.
16dd5cfe 638
76c3e73e
NB
639 Maybe it should also reset state, such that you could call
640 cpp_start_read with a new filename to restart processing. */
148e4216 641void
6cf87ca4 642cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 643{
a69cbaac
NB
644 /* Warn about unused macros before popping the final buffer. */
645 if (CPP_OPTION (pfile, warn_unused_macros))
646 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
647
a2566ae9 648 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 649 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 650 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
651 segfault. It's nice to allow the client to do worry-free excess
652 cpp_get_token calls. */
653 while (pfile->buffer)
654 _cpp_pop_buffer (pfile);
c1212d2f 655
f4ff5a69 656 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
148e4216 657 && deps_stream)
76c3e73e
NB
658 {
659 deps_write (pfile->deps, deps_stream, 72);
660
f4ff5a69 661 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
662 deps_phony_targets (pfile->deps, deps_stream);
663 }
3caee4a8 664
d4506961
ZW
665 /* Report on headers that could use multiple include guards. */
666 if (CPP_OPTION (pfile, print_include_names))
c71f835b 667 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
668}
669
f4ff5a69 670static void
6cf87ca4 671post_options (cpp_reader *pfile)
96302433
NB
672{
673 /* -Wtraditional is not useful in C++ mode. */
674 if (CPP_OPTION (pfile, cplusplus))
675 CPP_OPTION (pfile, warn_traditional) = 0;
676
6d4587f7 677 /* Permanently disable macro expansion if we are rescanning
43612ffb 678 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 679 if (CPP_OPTION (pfile, preprocessed))
43612ffb 680 {
ccfc4c91
OW
681 if (!CPP_OPTION (pfile, directives_only))
682 pfile->state.prevent_expansion = 1;
43612ffb
NB
683 CPP_OPTION (pfile, traditional) = 0;
684 }
685
a8eb6044
NB
686 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
687 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
688
43612ffb 689 if (CPP_OPTION (pfile, traditional))
26aea073 690 {
a09d4744
NB
691 CPP_OPTION (pfile, cplusplus_comments) = 0;
692
26aea073
NB
693 /* Traditional CPP does not accurately track column information. */
694 CPP_OPTION (pfile, show_column) = 0;
695 CPP_OPTION (pfile, trigraphs) = 0;
696 CPP_OPTION (pfile, warn_trigraphs) = 0;
697 }
7ca3d2b1 698}