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