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