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