]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
init.c (read_original_filename): Don't call read_original_directory if _cpp_handle_di...
[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 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
709d7160 4 2009, 2010 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 30static void init_library (void);
3d8b2a98 31static void mark_named_operators (cpp_reader *, int);
6cf87ca4 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
17e7cb85
KT
219 /* Initialize table for push_macro/pop_macro. */
220 pfile->pushed_macros = 0;
221
87ed109f
NB
222 /* The expression parser stack. */
223 _cpp_expand_op_stack (pfile);
224
4912a07c 225 /* Initialize the buffer obstack. */
43839642
ZW
226 _obstack_begin (&pfile->buffer_ob, 0, 0,
227 (void *(*) (long)) xmalloc,
228 (void (*) (void *)) free);
2a967f3d 229
8f9b4009 230 _cpp_init_files (pfile);
cf44ea52 231
b4e46cea
PB
232 _cpp_init_hashtable (pfile, table);
233
cf44ea52 234 return pfile;
f2d5f0cc
ZW
235}
236
5ffeb913
TT
237/* Set the line_table entry in PFILE. This is called after reading a
238 PCH file, as the old line_table will be incorrect. */
239void
240cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
241{
242 pfile->line_table = line_table;
243}
244
400023a3 245/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 246 returns leads to undefined behavior. Returns the error count. */
76c3e73e 247void
6cf87ca4 248cpp_destroy (cpp_reader *pfile)
6de1e2a9 249{
93c80368 250 cpp_context *context, *contextn;
17e7cb85 251 struct def_pragma_macro *pmacro;
50410426 252 tokenrun *run, *runn;
631d0d36 253 int i;
709e9e50 254
87ed109f 255 free (pfile->op_stack);
af0d16cd 256
38b24ee2 257 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 258 _cpp_pop_buffer (pfile);
6de1e2a9 259
1a76916c
NB
260 if (pfile->out.base)
261 free (pfile->out.base);
004cb263 262
93c80368 263 if (pfile->macro_buffer)
4b49c365 264 {
fad205ff 265 free (pfile->macro_buffer);
4b49c365
AO
266 pfile->macro_buffer = NULL;
267 pfile->macro_buffer_len = 0;
268 }
93c80368 269
f4ff5a69
NB
270 if (pfile->deps)
271 deps_free (pfile->deps);
2a967f3d 272 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 273
2a967f3d 274 _cpp_destroy_hashtable (pfile);
8f9b4009 275 _cpp_cleanup_files (pfile);
e6cc3a24 276 _cpp_destroy_iconv (pfile);
709e9e50 277
8c3b2693 278 _cpp_free_buff (pfile->a_buff);
ece54d54 279 _cpp_free_buff (pfile->u_buff);
b8af0ca5 280 _cpp_free_buff (pfile->free_buffs);
93c80368 281
50410426
NB
282 for (run = &pfile->base_run; run; run = runn)
283 {
284 runn = run->next;
285 free (run->base);
286 if (run != &pfile->base_run)
287 free (run);
288 }
289
93c80368
NB
290 for (context = pfile->base_context.next; context; context = contextn)
291 {
292 contextn = context->next;
293 free (context);
294 }
400023a3 295
631d0d36
MG
296 if (pfile->comments.entries)
297 {
298 for (i = 0; i < pfile->comments.count; i++)
299 free (pfile->comments.entries[i].comment);
300
301 free (pfile->comments.entries);
302 }
17e7cb85
KT
303 if (pfile->pushed_macros)
304 {
305 do
306 {
307 pmacro = pfile->pushed_macros;
308 pfile->pushed_macros = pmacro->next;
309 free (pmacro->name);
310 free (pmacro);
311 }
312 while (pfile->pushed_macros);
313 }
631d0d36 314
400023a3 315 free (pfile);
6de1e2a9
ZW
316}
317
93c80368 318/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
319 entered in the hash table under the name NAME, with value VALUE.
320
321 There are two tables of these. builtin_array holds all the
322 "builtin" macros: these are handled by builtin_macro() in
a2566ae9 323 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a
ZW
324 interest is that these macros require special code to compute their
325 expansions. The value is a "builtin_type" enumerator.
326
327 operator_array holds the C++ named operators. These are keywords
328 which act as aliases for punctuators. In C++, they cannot be
329 altered through #define, and #if recognizes them as operators. In
330 C, these are not entered into the hash table at all (but see
331 <iso646.h>). The value is a token-type enumerator. */
c047ce93 332struct builtin_macro
a9ae4483 333{
c047ce93
SB
334 const uchar *const name;
335 const unsigned short len;
336 const unsigned short value;
337 const bool always_warn_if_redefined;
a9ae4483 338};
93c80368 339
c047ce93
SB
340#define B(n, t, f) { DSC(n), t, f }
341static const struct builtin_macro builtin_array[] =
6de1e2a9 342{
c047ce93
SB
343 B("__TIMESTAMP__", BT_TIMESTAMP, false),
344 B("__TIME__", BT_TIME, false),
345 B("__DATE__", BT_DATE, false),
346 B("__FILE__", BT_FILE, false),
347 B("__BASE_FILE__", BT_BASE_FILE, false),
348 B("__LINE__", BT_SPECLINE, true),
349 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
350 B("__COUNTER__", BT_COUNTER, true),
278c4662
NB
351 /* Keep builtins not used for -traditional-cpp at the end, and
352 update init_builtins() if any more are added. */
c047ce93
SB
353 B("_Pragma", BT_PRAGMA, true),
354 B("__STDC__", BT_STDC, true),
355};
356#undef B
357
358struct builtin_operator
359{
360 const uchar *const name;
361 const unsigned short len;
362 const unsigned short value;
f24a153a 363};
92936ecf 364
c047ce93
SB
365#define B(n, t) { DSC(n), t }
366static const struct builtin_operator operator_array[] =
f24a153a
ZW
367{
368 B("and", CPP_AND_AND),
369 B("and_eq", CPP_AND_EQ),
370 B("bitand", CPP_AND),
371 B("bitor", CPP_OR),
372 B("compl", CPP_COMPL),
373 B("not", CPP_NOT),
374 B("not_eq", CPP_NOT_EQ),
375 B("or", CPP_OR_OR),
376 B("or_eq", CPP_OR_EQ),
377 B("xor", CPP_XOR),
378 B("xor_eq", CPP_XOR_EQ)
a9ae4483 379};
12cf91fe 380#undef B
a9ae4483 381
17645b15
NB
382/* Mark the C++ named operators in the hash table. */
383static void
3d8b2a98 384mark_named_operators (cpp_reader *pfile, int flags)
17645b15 385{
c047ce93 386 const struct builtin_operator *b;
17645b15
NB
387
388 for (b = operator_array;
389 b < (operator_array + ARRAY_SIZE (operator_array));
390 b++)
391 {
392 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
3d8b2a98 393 hp->flags |= flags;
4977bab6
ZW
394 hp->is_directive = 0;
395 hp->directive_index = b->value;
17645b15
NB
396 }
397}
398
cfc93532
MLI
399/* Helper function of cpp_type2name. Return the string associated with
400 named operator TYPE. */
401const char *
402cpp_named_operator2name (enum cpp_ttype type)
403{
404 const struct builtin_operator *b;
405
406 for (b = operator_array;
407 b < (operator_array + ARRAY_SIZE (operator_array));
408 b++)
409 {
410 if (type == b->value)
411 return (const char *) b->name;
412 }
413
414 return NULL;
415}
416
c1bad961 417void
ccfc4c91 418cpp_init_special_builtins (cpp_reader *pfile)
a9ae4483 419{
c047ce93 420 const struct builtin_macro *b;
278c4662 421 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 422
278c4662
NB
423 if (CPP_OPTION (pfile, traditional))
424 n -= 2;
83900997
JJ
425 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
426 || CPP_OPTION (pfile, std))
ccfc4c91 427 n--;
278c4662 428
83900997 429 for (b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 430 {
f24a153a
ZW
431 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
432 hp->type = NT_MACRO;
c047ce93
SB
433 hp->flags |= NODE_BUILTIN;
434 if (b->always_warn_if_redefined
435 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
436 hp->flags |= NODE_WARN;
7e5487a2 437 hp->value.builtin = (enum cpp_builtin_type) b->value;
6de1e2a9 438 }
ccfc4c91
OW
439}
440
441/* Read the builtins table above and enter them, and language-specific
442 macros, into the hash table. HOSTED is true if this is a hosted
443 environment. */
444void
445cpp_init_builtins (cpp_reader *pfile, int hosted)
446{
447 cpp_init_special_builtins (pfile);
448
449 if (!CPP_OPTION (pfile, traditional)
450 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
451 || CPP_OPTION (pfile, std)))
452 _cpp_define_builtin (pfile, "__STDC__ 1");
c740cee2
NB
453
454 if (CPP_OPTION (pfile, cplusplus))
3d90d290 455 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
456 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
457 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 458 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
459 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
460 else if (CPP_OPTION (pfile, c99))
461 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
462
6e270179 463 if (hosted)
58b5b894 464 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 465 else
58b5b894 466 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 467
0f7866e7
ZL
468 if (CPP_OPTION (pfile, objc))
469 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
470}
471
2443d4e1
NB
472/* Sanity-checks are dependent on command-line options, so it is
473 called as a subroutine of cpp_read_main_file (). */
474#if ENABLE_CHECKING
6cf87ca4
ZW
475static void sanity_checks (cpp_reader *);
476static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
477{
478 cppchar_t test = 0;
c9220e3a 479 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
480
481 /* Sanity checks for assumptions about CPP arithmetic and target
482 type precisions made by cpplib. */
483 test--;
484 if (test < 1)
0527bc4e 485 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 486
c9220e3a 487 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 488 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
489 "preprocessor arithmetic has maximum precision of %lu bits;"
490 " target requires %lu bits",
c9220e3a
NB
491 (unsigned long) max_precision,
492 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
493
494 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 495 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
496 "CPP arithmetic must be at least as precise as a target int");
497
498 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 499 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
500
501 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 502 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
503 "target wchar_t is narrower than target char");
504
505 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 506 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
507 "target int is narrower than target char");
508
c9220e3a
NB
509 /* This is assumed in eval_token() and could be fixed if necessary. */
510 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
511 cpp_error (pfile, CPP_DL_ICE,
512 "CPP half-integer narrower than CPP character");
c9220e3a 513
2443d4e1 514 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 515 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
516 "CPP on this host cannot handle wide character constants over"
517 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
518 (unsigned long) BITS_PER_CPPCHAR_T,
519 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
520}
521#else
522# define sanity_checks(PFILE)
523#endif
524
f5e99456 525/* This is called after options have been parsed, and partially
59e4e217 526 processed. */
4169c321
PB
527void
528cpp_post_options (cpp_reader *pfile)
6de1e2a9 529{
3d8b2a98
ILT
530 int flags;
531
2443d4e1
NB
532 sanity_checks (pfile);
533
f4ff5a69
NB
534 post_options (pfile);
535
c19b12cb 536 /* Mark named operators before handling command line macros. */
3d8b2a98 537 flags = 0;
c19b12cb 538 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
3d8b2a98
ILT
539 flags |= NODE_OPERATOR;
540 if (CPP_OPTION (pfile, warn_cxx_operator_names))
541 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
542 if (flags != 0)
543 mark_named_operators (pfile, flags);
4169c321 544}
c19b12cb 545
4dc299fb 546/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
547 it is the empty string. Return the original filename
548 on success (e.g. foo.i->foo.c), or NULL on failure. */
549const char *
550cpp_read_main_file (cpp_reader *pfile, const char *fname)
4169c321 551{
f4ff5a69
NB
552 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
553 {
554 if (!pfile->deps)
555 pfile->deps = deps_init ();
556
557 /* Set the default target (if there is none already). */
558 deps_add_default_target (pfile->deps, fname);
559 }
96302433 560
4dc299fb 561 pfile->main_file
6568f34b 562 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
4dc299fb 563 if (_cpp_find_failed (pfile->main_file))
3092d0fc 564 return NULL;
f5e99456 565
4dc299fb
PB
566 _cpp_stack_file (pfile, pfile->main_file, false);
567
568 /* For foo.i, read the original filename foo.c now, for the benefit
569 of the front ends. */
570 if (CPP_OPTION (pfile, preprocessed))
8e9ea4d7
PB
571 {
572 read_original_filename (pfile);
12f9df4e 573 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
8e9ea4d7
PB
574 }
575 return fname;
f5e99456
NB
576}
577
578/* For preprocessed files, if the first tokens are of the form # NUM.
579 handle the directive so we know the original file name. This will
580 generate file_change callbacks, which the front ends must handle
581 appropriately given their state of initialization. */
582static void
6cf87ca4 583read_original_filename (cpp_reader *pfile)
f5e99456
NB
584{
585 const cpp_token *token, *token1;
586
587 /* Lex ahead; if the first tokens are of the form # NUM, then
588 process the directive, otherwise back up. */
589 token = _cpp_lex_direct (pfile);
590 if (token->type == CPP_HASH)
591 {
456b8ce5 592 pfile->state.in_directive = 1;
f5e99456
NB
593 token1 = _cpp_lex_direct (pfile);
594 _cpp_backup_tokens (pfile, 1);
456b8ce5 595 pfile->state.in_directive = 0;
f5e99456
NB
596
597 /* If it's a #line directive, handle it. */
709d7160
JJ
598 if (token1->type == CPP_NUMBER
599 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
f5e99456 600 {
b20d9f0c 601 read_original_directory (pfile);
f5e99456
NB
602 return;
603 }
604 }
605
606 /* Backup as if nothing happened. */
607 _cpp_backup_tokens (pfile, 1);
608}
609
b20d9f0c
AO
610/* For preprocessed files, if the tokens following the first filename
611 line is of the form # <line> "/path/name//", handle the
612 directive so we know the original current directory. */
613static void
614read_original_directory (cpp_reader *pfile)
615{
616 const cpp_token *hash, *token;
617
618 /* Lex ahead; if the first tokens are of the form # NUM, then
619 process the directive, otherwise back up. */
620 hash = _cpp_lex_direct (pfile);
621 if (hash->type != CPP_HASH)
622 {
623 _cpp_backup_tokens (pfile, 1);
624 return;
625 }
626
627 token = _cpp_lex_direct (pfile);
628
629 if (token->type != CPP_NUMBER)
630 {
631 _cpp_backup_tokens (pfile, 2);
632 return;
633 }
634
635 token = _cpp_lex_direct (pfile);
636
637 if (token->type != CPP_STRING
638 || ! (token->val.str.len >= 5
639 && token->val.str.text[token->val.str.len-2] == '/'
640 && token->val.str.text[token->val.str.len-3] == '/'))
641 {
642 _cpp_backup_tokens (pfile, 3);
643 return;
644 }
645
646 if (pfile->cb.dir_change)
647 {
c3f829c1 648 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
649
650 memcpy (debugdir, (const char *) token->val.str.text + 1,
651 token->val.str.len - 4);
652 debugdir[token->val.str.len - 4] = '\0';
653
654 pfile->cb.dir_change (pfile, debugdir);
8e9ea4d7 655 }
b20d9f0c
AO
656}
657
76c3e73e 658/* This is called at the end of preprocessing. It pops the last
148e4216 659 buffer and writes dependency output.
16dd5cfe 660
76c3e73e
NB
661 Maybe it should also reset state, such that you could call
662 cpp_start_read with a new filename to restart processing. */
148e4216 663void
6cf87ca4 664cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 665{
a69cbaac
NB
666 /* Warn about unused macros before popping the final buffer. */
667 if (CPP_OPTION (pfile, warn_unused_macros))
668 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
669
a2566ae9 670 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 671 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 672 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
673 segfault. It's nice to allow the client to do worry-free excess
674 cpp_get_token calls. */
675 while (pfile->buffer)
676 _cpp_pop_buffer (pfile);
c1212d2f 677
f4ff5a69 678 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
148e4216 679 && deps_stream)
76c3e73e
NB
680 {
681 deps_write (pfile->deps, deps_stream, 72);
682
f4ff5a69 683 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
684 deps_phony_targets (pfile->deps, deps_stream);
685 }
3caee4a8 686
d4506961
ZW
687 /* Report on headers that could use multiple include guards. */
688 if (CPP_OPTION (pfile, print_include_names))
c71f835b 689 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
690}
691
f4ff5a69 692static void
6cf87ca4 693post_options (cpp_reader *pfile)
96302433
NB
694{
695 /* -Wtraditional is not useful in C++ mode. */
696 if (CPP_OPTION (pfile, cplusplus))
697 CPP_OPTION (pfile, warn_traditional) = 0;
698
6d4587f7 699 /* Permanently disable macro expansion if we are rescanning
43612ffb 700 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 701 if (CPP_OPTION (pfile, preprocessed))
43612ffb 702 {
ccfc4c91
OW
703 if (!CPP_OPTION (pfile, directives_only))
704 pfile->state.prevent_expansion = 1;
43612ffb
NB
705 CPP_OPTION (pfile, traditional) = 0;
706 }
707
a8eb6044
NB
708 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
709 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
710
43612ffb 711 if (CPP_OPTION (pfile, traditional))
26aea073 712 {
a09d4744
NB
713 CPP_OPTION (pfile, cplusplus_comments) = 0;
714
26aea073
NB
715 /* Traditional CPP does not accurately track column information. */
716 CPP_OPTION (pfile, show_column) = 0;
717 CPP_OPTION (pfile, trigraphs) = 0;
718 CPP_OPTION (pfile, warn_trigraphs) = 0;
719 }
7ca3d2b1 720}