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