]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
re PR testsuite/39696 (gcc.dg/tree-ssa/ssa-ccp-25.c scan-tree-dump doesn't work on...
[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
11Free Software Foundation; either version 2, or (at your option) any
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
20along with this program; if not, write to the Free Software
200031d1 21Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
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;
f4ff5a69 163 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
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
c1bad961 384void
ccfc4c91 385cpp_init_special_builtins (cpp_reader *pfile)
a9ae4483 386{
c047ce93 387 const struct builtin_macro *b;
278c4662 388 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 389
278c4662
NB
390 if (CPP_OPTION (pfile, traditional))
391 n -= 2;
83900997
JJ
392 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
393 || CPP_OPTION (pfile, std))
ccfc4c91 394 n--;
278c4662 395
83900997 396 for (b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 397 {
f24a153a
ZW
398 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
399 hp->type = NT_MACRO;
c047ce93
SB
400 hp->flags |= NODE_BUILTIN;
401 if (b->always_warn_if_redefined
402 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
403 hp->flags |= NODE_WARN;
c3f829c1 404 hp->value.builtin = (enum builtin_type) b->value;
6de1e2a9 405 }
ccfc4c91
OW
406}
407
408/* Read the builtins table above and enter them, and language-specific
409 macros, into the hash table. HOSTED is true if this is a hosted
410 environment. */
411void
412cpp_init_builtins (cpp_reader *pfile, int hosted)
413{
414 cpp_init_special_builtins (pfile);
415
416 if (!CPP_OPTION (pfile, traditional)
417 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
418 || CPP_OPTION (pfile, std)))
419 _cpp_define_builtin (pfile, "__STDC__ 1");
c740cee2
NB
420
421 if (CPP_OPTION (pfile, cplusplus))
3d90d290 422 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
423 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
424 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 425 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
426 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
427 else if (CPP_OPTION (pfile, c99))
428 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
429
6e270179 430 if (hosted)
58b5b894 431 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 432 else
58b5b894 433 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 434
0f7866e7
ZL
435 if (CPP_OPTION (pfile, objc))
436 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
437}
438
2443d4e1
NB
439/* Sanity-checks are dependent on command-line options, so it is
440 called as a subroutine of cpp_read_main_file (). */
441#if ENABLE_CHECKING
6cf87ca4
ZW
442static void sanity_checks (cpp_reader *);
443static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
444{
445 cppchar_t test = 0;
c9220e3a 446 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
447
448 /* Sanity checks for assumptions about CPP arithmetic and target
449 type precisions made by cpplib. */
450 test--;
451 if (test < 1)
0527bc4e 452 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 453
c9220e3a 454 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 455 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
456 "preprocessor arithmetic has maximum precision of %lu bits;"
457 " target requires %lu bits",
c9220e3a
NB
458 (unsigned long) max_precision,
459 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
460
461 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 462 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
463 "CPP arithmetic must be at least as precise as a target int");
464
465 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 466 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
467
468 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 469 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
470 "target wchar_t is narrower than target char");
471
472 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 473 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
474 "target int is narrower than target char");
475
c9220e3a
NB
476 /* This is assumed in eval_token() and could be fixed if necessary. */
477 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
478 cpp_error (pfile, CPP_DL_ICE,
479 "CPP half-integer narrower than CPP character");
c9220e3a 480
2443d4e1 481 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 482 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
483 "CPP on this host cannot handle wide character constants over"
484 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
485 (unsigned long) BITS_PER_CPPCHAR_T,
486 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
487}
488#else
489# define sanity_checks(PFILE)
490#endif
491
f5e99456 492/* This is called after options have been parsed, and partially
59e4e217 493 processed. */
4169c321
PB
494void
495cpp_post_options (cpp_reader *pfile)
6de1e2a9 496{
2443d4e1
NB
497 sanity_checks (pfile);
498
f4ff5a69
NB
499 post_options (pfile);
500
c19b12cb
NB
501 /* Mark named operators before handling command line macros. */
502 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
503 mark_named_operators (pfile);
4169c321 504}
c19b12cb 505
4dc299fb 506/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
507 it is the empty string. Return the original filename
508 on success (e.g. foo.i->foo.c), or NULL on failure. */
509const char *
510cpp_read_main_file (cpp_reader *pfile, const char *fname)
4169c321 511{
f4ff5a69
NB
512 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
513 {
514 if (!pfile->deps)
515 pfile->deps = deps_init ();
516
517 /* Set the default target (if there is none already). */
518 deps_add_default_target (pfile->deps, fname);
519 }
96302433 520
4dc299fb 521 pfile->main_file
6568f34b 522 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
4dc299fb 523 if (_cpp_find_failed (pfile->main_file))
3092d0fc 524 return NULL;
f5e99456 525
4dc299fb
PB
526 _cpp_stack_file (pfile, pfile->main_file, false);
527
528 /* For foo.i, read the original filename foo.c now, for the benefit
529 of the front ends. */
530 if (CPP_OPTION (pfile, preprocessed))
8e9ea4d7
PB
531 {
532 read_original_filename (pfile);
12f9df4e 533 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
8e9ea4d7
PB
534 }
535 return fname;
f5e99456
NB
536}
537
538/* For preprocessed files, if the first tokens are of the form # NUM.
539 handle the directive so we know the original file name. This will
540 generate file_change callbacks, which the front ends must handle
541 appropriately given their state of initialization. */
542static void
6cf87ca4 543read_original_filename (cpp_reader *pfile)
f5e99456
NB
544{
545 const cpp_token *token, *token1;
546
547 /* Lex ahead; if the first tokens are of the form # NUM, then
548 process the directive, otherwise back up. */
549 token = _cpp_lex_direct (pfile);
550 if (token->type == CPP_HASH)
551 {
456b8ce5 552 pfile->state.in_directive = 1;
f5e99456
NB
553 token1 = _cpp_lex_direct (pfile);
554 _cpp_backup_tokens (pfile, 1);
456b8ce5 555 pfile->state.in_directive = 0;
f5e99456
NB
556
557 /* If it's a #line directive, handle it. */
558 if (token1->type == CPP_NUMBER)
559 {
560 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
b20d9f0c 561 read_original_directory (pfile);
f5e99456
NB
562 return;
563 }
564 }
565
566 /* Backup as if nothing happened. */
567 _cpp_backup_tokens (pfile, 1);
568}
569
b20d9f0c
AO
570/* For preprocessed files, if the tokens following the first filename
571 line is of the form # <line> "/path/name//", handle the
572 directive so we know the original current directory. */
573static void
574read_original_directory (cpp_reader *pfile)
575{
576 const cpp_token *hash, *token;
577
578 /* Lex ahead; if the first tokens are of the form # NUM, then
579 process the directive, otherwise back up. */
580 hash = _cpp_lex_direct (pfile);
581 if (hash->type != CPP_HASH)
582 {
583 _cpp_backup_tokens (pfile, 1);
584 return;
585 }
586
587 token = _cpp_lex_direct (pfile);
588
589 if (token->type != CPP_NUMBER)
590 {
591 _cpp_backup_tokens (pfile, 2);
592 return;
593 }
594
595 token = _cpp_lex_direct (pfile);
596
597 if (token->type != CPP_STRING
598 || ! (token->val.str.len >= 5
599 && token->val.str.text[token->val.str.len-2] == '/'
600 && token->val.str.text[token->val.str.len-3] == '/'))
601 {
602 _cpp_backup_tokens (pfile, 3);
603 return;
604 }
605
606 if (pfile->cb.dir_change)
607 {
c3f829c1 608 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
609
610 memcpy (debugdir, (const char *) token->val.str.text + 1,
611 token->val.str.len - 4);
612 debugdir[token->val.str.len - 4] = '\0';
613
614 pfile->cb.dir_change (pfile, debugdir);
8e9ea4d7 615 }
b20d9f0c
AO
616}
617
76c3e73e 618/* This is called at the end of preprocessing. It pops the last
148e4216 619 buffer and writes dependency output.
16dd5cfe 620
76c3e73e
NB
621 Maybe it should also reset state, such that you could call
622 cpp_start_read with a new filename to restart processing. */
148e4216 623void
6cf87ca4 624cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 625{
a69cbaac
NB
626 /* Warn about unused macros before popping the final buffer. */
627 if (CPP_OPTION (pfile, warn_unused_macros))
628 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
629
a2566ae9 630 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 631 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 632 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
633 segfault. It's nice to allow the client to do worry-free excess
634 cpp_get_token calls. */
635 while (pfile->buffer)
636 _cpp_pop_buffer (pfile);
c1212d2f 637
f4ff5a69 638 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
148e4216 639 && deps_stream)
76c3e73e
NB
640 {
641 deps_write (pfile->deps, deps_stream, 72);
642
f4ff5a69 643 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
644 deps_phony_targets (pfile->deps, deps_stream);
645 }
3caee4a8 646
d4506961
ZW
647 /* Report on headers that could use multiple include guards. */
648 if (CPP_OPTION (pfile, print_include_names))
c71f835b 649 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
650}
651
f4ff5a69 652static void
6cf87ca4 653post_options (cpp_reader *pfile)
96302433
NB
654{
655 /* -Wtraditional is not useful in C++ mode. */
656 if (CPP_OPTION (pfile, cplusplus))
657 CPP_OPTION (pfile, warn_traditional) = 0;
658
6d4587f7 659 /* Permanently disable macro expansion if we are rescanning
43612ffb 660 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 661 if (CPP_OPTION (pfile, preprocessed))
43612ffb 662 {
ccfc4c91
OW
663 if (!CPP_OPTION (pfile, directives_only))
664 pfile->state.prevent_expansion = 1;
43612ffb
NB
665 CPP_OPTION (pfile, traditional) = 0;
666 }
667
a8eb6044
NB
668 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
669 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
670
43612ffb 671 if (CPP_OPTION (pfile, traditional))
26aea073 672 {
a09d4744
NB
673 CPP_OPTION (pfile, cplusplus_comments) = 0;
674
26aea073
NB
675 /* Traditional CPP does not accurately track column information. */
676 CPP_OPTION (pfile, show_column) = 0;
677 CPP_OPTION (pfile, trigraphs) = 0;
678 CPP_OPTION (pfile, warn_trigraphs) = 0;
679 }
7ca3d2b1 680}