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