]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppinit.c
* ChangeLog: Add missing closing parentheses.
[thirdparty/gcc.git] / gcc / cppinit.c
CommitLineData
5538ada6 1/* CPP Library.
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5793b276 3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5538ada6
ZW
4 Contributed by Per Bothner, 1994-95.
5 Based on CCCP program by Paul Rubin, June 1986
6 Adapted to ANSI C, Richard Stallman, Jan 1987
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2, or (at your option) any
11later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
5538ada6
ZW
22#include "config.h"
23#include "system.h"
4977bab6
ZW
24#include "coretypes.h"
25#include "tm.h"
6de1e2a9
ZW
26#include "cpplib.h"
27#include "cpphash.h"
49e6c08e 28#include "mkdeps.h"
88ae23e7 29
674c3b40 30static void init_library PARAMS ((void));
17645b15 31static void mark_named_operators PARAMS ((cpp_reader *));
f5e99456 32static void read_original_filename PARAMS ((cpp_reader *));
f4ff5a69 33static void post_options PARAMS ((cpp_reader *));
6de1e2a9 34
61d0346d
NB
35/* If we have designated initializers (GCC >2.7) these tables can be
36 initialized, constant data. Otherwise, they have to be filled in at
12cf91fe 37 runtime. */
61d0346d 38#if HAVE_DESIGNATED_INITIALIZERS
a9ae4483 39
4a58aab6 40#define init_trigraph_map() /* Nothing. */
61d0346d 41#define TRIGRAPH_MAP \
562a5c27 42__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
61d0346d 43
a9ae4483 44#define END };
455d2586 45#define s(p, v) [p] = v,
61d0346d 46
a9ae4483 47#else
61d0346d 48
562a5c27 49#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
61d0346d
NB
50 static void init_trigraph_map PARAMS ((void)) { \
51 unsigned char *x = _cpp_trigraph_map;
52
ae79697b 53#define END }
455d2586 54#define s(p, v) x[p] = v;
61d0346d 55
a9ae4483 56#endif
6de1e2a9 57
61d0346d
NB
58TRIGRAPH_MAP
59 s('=', '#') s(')', ']') s('!', '|')
60 s('(', '[') s('\'', '^') s('>', '}')
61 s('/', '\\') s('<', '{') s('-', '~')
62END
63
a9ae4483 64#undef s
455d2586 65#undef END
61d0346d 66#undef TRIGRAPH_MAP
6de1e2a9 67
5d8ebbd8
NB
68/* A set of booleans indicating what CPP features each source language
69 requires. */
a01eb545
ZW
70struct lang_flags
71{
72 char c99;
a01eb545
ZW
73 char cplusplus;
74 char extended_numbers;
58551c23 75 char std;
a01eb545
ZW
76 char cplusplus_comments;
77 char digraphs;
78};
79
a01eb545 80static const struct lang_flags lang_defaults[] =
b1822ccc
NB
81{ /* c99 c++ xnum std // digr */
82 /* GNUC89 */ { 0, 0, 1, 0, 1, 1 },
83 /* GNUC99 */ { 1, 0, 1, 0, 1, 1 },
84 /* STDC89 */ { 0, 0, 0, 1, 0, 0 },
85 /* STDC94 */ { 0, 0, 0, 1, 0, 1 },
86 /* STDC99 */ { 1, 0, 1, 1, 1, 1 },
87 /* GNUCXX */ { 0, 1, 1, 0, 1, 1 },
88 /* CXX98 */ { 0, 1, 1, 1, 1, 1 },
89 /* ASM */ { 0, 0, 1, 0, 1, 0 }
a01eb545
ZW
90};
91
5d8ebbd8 92/* Sets internal flags correctly for a given language. */
f749a36b
NB
93void
94cpp_set_lang (pfile, lang)
dd07b884
NB
95 cpp_reader *pfile;
96 enum c_lang lang;
97{
a01eb545 98 const struct lang_flags *l = &lang_defaults[(int) lang];
df383483 99
bdb05a7b 100 CPP_OPTION (pfile, lang) = lang;
dd07b884 101
a01eb545 102 CPP_OPTION (pfile, c99) = l->c99;
a01eb545
ZW
103 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
104 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
58551c23
NB
105 CPP_OPTION (pfile, std) = l->std;
106 CPP_OPTION (pfile, trigraphs) = l->std;
a01eb545
ZW
107 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
108 CPP_OPTION (pfile, digraphs) = l->digraphs;
dd07b884
NB
109}
110
c1bad961 111/* Initialize library global state. */
cf44ea52 112static void
674c3b40 113init_library ()
cf44ea52 114{
7ca3d2b1
NB
115 static int initialized = 0;
116
117 if (! initialized)
118 {
119 initialized = 1;
120
7ca3d2b1
NB
121 /* Set up the trigraph map. This doesn't need to do anything if
122 we were compiled with a compiler that supports C99 designated
123 initializers. */
124 init_trigraph_map ();
125 }
cf44ea52
NB
126}
127
ec5c56db 128/* Initialize a cpp_reader structure. */
cf44ea52 129cpp_reader *
b4e46cea 130cpp_create_reader (lang, table)
dd07b884 131 enum c_lang lang;
b4e46cea 132 hash_table *table;
6de1e2a9 133{
7ca3d2b1 134 cpp_reader *pfile;
93c80368 135
4912a07c 136 /* Initialize this instance of the library if it hasn't been already. */
674c3b40 137 init_library ();
7ca3d2b1
NB
138
139 pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader));
93c80368 140
f749a36b 141 cpp_set_lang (pfile, lang);
ae79697b 142 CPP_OPTION (pfile, warn_import) = 1;
a5a49440 143 CPP_OPTION (pfile, warn_multichar) = 1;
ae79697b 144 CPP_OPTION (pfile, discard_comments) = 1;
477cdac7 145 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
ae79697b 146 CPP_OPTION (pfile, show_column) = 1;
6ab3e7dd 147 CPP_OPTION (pfile, tabstop) = 8;
be768055 148 CPP_OPTION (pfile, operator_names) = 1;
a8eb6044 149 CPP_OPTION (pfile, warn_trigraphs) = 2;
909de5da 150 CPP_OPTION (pfile, warn_endif_labels) = 1;
9fbd3e41 151 CPP_OPTION (pfile, warn_deprecated) = 1;
f4ff5a69 152 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
b1822ccc 153 CPP_OPTION (pfile, dollars_in_ident) = 1;
ae79697b 154
2443d4e1
NB
155 /* Default CPP arithmetic to something sensible for the host for the
156 benefit of dumb users like fix-header. */
c9220e3a 157 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
2443d4e1
NB
158 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
159 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
160 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
2a1dc0d8 161 CPP_OPTION (pfile, unsigned_char) = 0;
44a147ad 162 CPP_OPTION (pfile, unsigned_wchar) = 1;
4268e8bb 163
4912a07c 164 /* Initialize the line map. Start at logical line 1, so we can use
50410426 165 a line number of zero for special states. */
d82fc108
NB
166 init_line_maps (&pfile->line_maps);
167
4a58aab6 168 /* Initialize lexer state. */
93c80368
NB
169 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
170
4ed5bcfb 171 /* Set up static tokens. */
4ed5bcfb
NB
172 pfile->avoid_paste.type = CPP_PADDING;
173 pfile->avoid_paste.val.source = NULL;
174 pfile->eof.type = CPP_EOF;
175 pfile->eof.flags = 0;
93c80368 176
5fddcffc
NB
177 /* Create a token buffer for the lexer. */
178 _cpp_init_tokenrun (&pfile->base_run, 250);
179 pfile->cur_run = &pfile->base_run;
180 pfile->cur_token = pfile->base_run.base;
5fddcffc 181
4912a07c 182 /* Initialize the base context. */
93c80368
NB
183 pfile->context = &pfile->base_context;
184 pfile->base_context.macro = 0;
185 pfile->base_context.prev = pfile->base_context.next = 0;
186
8c3b2693
NB
187 /* Aligned and unaligned storage. */
188 pfile->a_buff = _cpp_get_buff (pfile, 0);
ece54d54 189 pfile->u_buff = _cpp_get_buff (pfile, 0);
93c80368 190
87ed109f
NB
191 /* The expression parser stack. */
192 _cpp_expand_op_stack (pfile);
193
4912a07c 194 /* Initialize the buffer obstack. */
2a967f3d
NB
195 gcc_obstack_init (&pfile->buffer_ob);
196
c71f835b 197 _cpp_init_includes (pfile);
cf44ea52 198
b4e46cea
PB
199 _cpp_init_hashtable (pfile, table);
200
cf44ea52 201 return pfile;
f2d5f0cc
ZW
202}
203
400023a3 204/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 205 returns leads to undefined behavior. Returns the error count. */
76c3e73e 206void
400023a3 207cpp_destroy (pfile)
6de1e2a9
ZW
208 cpp_reader *pfile;
209{
93c80368 210 cpp_context *context, *contextn;
50410426 211 tokenrun *run, *runn;
709e9e50 212
87ed109f 213 free (pfile->op_stack);
af0d16cd 214
38b24ee2 215 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 216 _cpp_pop_buffer (pfile);
6de1e2a9 217
1a76916c
NB
218 if (pfile->out.base)
219 free (pfile->out.base);
004cb263 220
93c80368 221 if (pfile->macro_buffer)
4b49c365
AO
222 {
223 free ((PTR) pfile->macro_buffer);
224 pfile->macro_buffer = NULL;
225 pfile->macro_buffer_len = 0;
226 }
93c80368 227
f4ff5a69
NB
228 if (pfile->deps)
229 deps_free (pfile->deps);
2a967f3d 230 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 231
2a967f3d 232 _cpp_destroy_hashtable (pfile);
bfb9dc7f 233 _cpp_cleanup_includes (pfile);
709e9e50 234
8c3b2693 235 _cpp_free_buff (pfile->a_buff);
ece54d54 236 _cpp_free_buff (pfile->u_buff);
b8af0ca5 237 _cpp_free_buff (pfile->free_buffs);
93c80368 238
50410426
NB
239 for (run = &pfile->base_run; run; run = runn)
240 {
241 runn = run->next;
242 free (run->base);
243 if (run != &pfile->base_run)
244 free (run);
245 }
246
93c80368
NB
247 for (context = pfile->base_context.next; context; context = contextn)
248 {
249 contextn = context->next;
250 free (context);
251 }
400023a3 252
d82fc108 253 free_line_maps (&pfile->line_maps);
400023a3 254 free (pfile);
6de1e2a9
ZW
255}
256
93c80368 257/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
258 entered in the hash table under the name NAME, with value VALUE.
259
260 There are two tables of these. builtin_array holds all the
261 "builtin" macros: these are handled by builtin_macro() in
262 cppmacro.c. Builtin is somewhat of a misnomer -- the property of
263 interest is that these macros require special code to compute their
264 expansions. The value is a "builtin_type" enumerator.
265
266 operator_array holds the C++ named operators. These are keywords
267 which act as aliases for punctuators. In C++, they cannot be
268 altered through #define, and #if recognizes them as operators. In
269 C, these are not entered into the hash table at all (but see
270 <iso646.h>). The value is a token-type enumerator. */
a9ae4483
ZW
271struct builtin
272{
562a5c27 273 const uchar *name;
93c80368 274 unsigned short len;
f24a153a 275 unsigned short value;
a9ae4483 276};
93c80368 277
f24a153a 278#define B(n, t) { DSC(n), t }
a9ae4483 279static const struct builtin builtin_array[] =
6de1e2a9 280{
93c80368
NB
281 B("__TIME__", BT_TIME),
282 B("__DATE__", BT_DATE),
283 B("__FILE__", BT_FILE),
284 B("__BASE_FILE__", BT_BASE_FILE),
285 B("__LINE__", BT_SPECLINE),
286 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
278c4662
NB
287 /* Keep builtins not used for -traditional-cpp at the end, and
288 update init_builtins() if any more are added. */
644eddaa 289 B("_Pragma", BT_PRAGMA),
618cdda7 290 B("__STDC__", BT_STDC),
f24a153a 291};
92936ecf 292
f24a153a
ZW
293static const struct builtin operator_array[] =
294{
295 B("and", CPP_AND_AND),
296 B("and_eq", CPP_AND_EQ),
297 B("bitand", CPP_AND),
298 B("bitor", CPP_OR),
299 B("compl", CPP_COMPL),
300 B("not", CPP_NOT),
301 B("not_eq", CPP_NOT_EQ),
302 B("or", CPP_OR_OR),
303 B("or_eq", CPP_OR_EQ),
304 B("xor", CPP_XOR),
305 B("xor_eq", CPP_XOR_EQ)
a9ae4483 306};
12cf91fe 307#undef B
a9ae4483 308
17645b15
NB
309/* Mark the C++ named operators in the hash table. */
310static void
311mark_named_operators (pfile)
312 cpp_reader *pfile;
313{
314 const struct builtin *b;
315
316 for (b = operator_array;
317 b < (operator_array + ARRAY_SIZE (operator_array));
318 b++)
319 {
320 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
321 hp->flags |= NODE_OPERATOR;
4977bab6
ZW
322 hp->is_directive = 0;
323 hp->directive_index = b->value;
17645b15
NB
324 }
325}
326
c1bad961 327/* Read the builtins table above and enter them, and language-specific
6e270179
NB
328 macros, into the hash table. HOSTED is true if this is a hosted
329 environment. */
c1bad961 330void
6e270179 331cpp_init_builtins (pfile, hosted)
a9ae4483 332 cpp_reader *pfile;
6e270179 333 int hosted;
a9ae4483 334{
a9ae4483 335 const struct builtin *b;
278c4662 336 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 337
278c4662
NB
338 if (CPP_OPTION (pfile, traditional))
339 n -= 2;
340
341 for(b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 342 {
f24a153a
ZW
343 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
344 hp->type = NT_MACRO;
345 hp->flags |= NODE_BUILTIN | NODE_WARN;
346 hp->value.builtin = b->value;
6de1e2a9 347 }
c740cee2
NB
348
349 if (CPP_OPTION (pfile, cplusplus))
3d90d290 350 _cpp_define_builtin (pfile, "__cplusplus 1");
2a1dc0d8
ZW
351 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
352 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 353 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2
NB
354 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
355 else if (CPP_OPTION (pfile, c99))
356 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
357
6e270179 358 if (hosted)
58b5b894 359 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 360 else
58b5b894 361 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 362
0f7866e7
ZL
363 if (CPP_OPTION (pfile, objc))
364 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
365}
366
2443d4e1
NB
367/* Sanity-checks are dependent on command-line options, so it is
368 called as a subroutine of cpp_read_main_file (). */
369#if ENABLE_CHECKING
370static void sanity_checks PARAMS ((cpp_reader *));
371static void sanity_checks (pfile)
372 cpp_reader *pfile;
373{
374 cppchar_t test = 0;
c9220e3a 375 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
376
377 /* Sanity checks for assumptions about CPP arithmetic and target
378 type precisions made by cpplib. */
379 test--;
380 if (test < 1)
bdee42b1 381 cpp_error (pfile, DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 382
c9220e3a 383 if (CPP_OPTION (pfile, precision) > max_precision)
bdee42b1 384 cpp_error (pfile, DL_ICE,
68bd6dd6 385 "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits",
c9220e3a
NB
386 (unsigned long) max_precision,
387 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
388
389 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
bdee42b1 390 cpp_error (pfile, DL_ICE,
2443d4e1
NB
391 "CPP arithmetic must be at least as precise as a target int");
392
393 if (CPP_OPTION (pfile, char_precision) < 8)
bdee42b1 394 cpp_error (pfile, DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
395
396 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
bdee42b1 397 cpp_error (pfile, DL_ICE,
2443d4e1
NB
398 "target wchar_t is narrower than target char");
399
400 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
bdee42b1 401 cpp_error (pfile, DL_ICE,
2443d4e1
NB
402 "target int is narrower than target char");
403
c9220e3a
NB
404 /* This is assumed in eval_token() and could be fixed if necessary. */
405 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
406 cpp_error (pfile, DL_ICE, "CPP half-integer narrower than CPP character");
407
2443d4e1 408 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
bdee42b1 409 cpp_error (pfile, DL_ICE,
68bd6dd6 410 "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits",
c9220e3a
NB
411 (unsigned long) BITS_PER_CPPCHAR_T,
412 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
413}
414#else
415# define sanity_checks(PFILE)
416#endif
417
76c3e73e
NB
418/* Add a dependency target. Can be called any number of times before
419 cpp_read_main_file(). If no targets have been added before
420 cpp_read_main_file(), then the default target is used. */
421void
422cpp_add_dependency_target (pfile, target, quote)
423 cpp_reader *pfile;
424 const char *target;
425 int quote;
426{
427 if (!pfile->deps)
428 pfile->deps = deps_init ();
429
430 deps_add_target (pfile->deps, target, quote);
431}
432
f5e99456
NB
433/* This is called after options have been parsed, and partially
434 processed. Setup for processing input from the file named FNAME,
435 or stdin if it is the empty string. Return the original filename
436 on success (e.g. foo.i->foo.c), or NULL on failure. */
437const char *
b4e46cea 438cpp_read_main_file (pfile, fname)
6de1e2a9 439 cpp_reader *pfile;
7ceb3598 440 const char *fname;
6de1e2a9 441{
2443d4e1
NB
442 sanity_checks (pfile);
443
f4ff5a69
NB
444 post_options (pfile);
445
c19b12cb
NB
446 /* Mark named operators before handling command line macros. */
447 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
448 mark_named_operators (pfile);
449
f4ff5a69
NB
450 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
451 {
452 if (!pfile->deps)
453 pfile->deps = deps_init ();
454
455 /* Set the default target (if there is none already). */
456 deps_add_default_target (pfile->deps, fname);
457 }
96302433 458
f5e99456 459 /* Open the main input file. */
26aea073 460 pfile->line = 1;
614c7d37 461 if (!_cpp_read_file (pfile, fname))
f5e99456 462 return NULL;
c45da1ca 463
f4ff5a69
NB
464 /* Set this here so the client can change the option if it wishes,
465 and after stacking the main file so we don't trace the main
466 file. */
5993019d
NB
467 pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
468
f5e99456
NB
469 /* For foo.i, read the original filename foo.c now, for the benefit
470 of the front ends. */
471 if (CPP_OPTION (pfile, preprocessed))
472 read_original_filename (pfile);
473
474 return pfile->map->to_file;
475}
476
477/* For preprocessed files, if the first tokens are of the form # NUM.
478 handle the directive so we know the original file name. This will
479 generate file_change callbacks, which the front ends must handle
480 appropriately given their state of initialization. */
481static void
482read_original_filename (pfile)
483 cpp_reader *pfile;
484{
485 const cpp_token *token, *token1;
486
487 /* Lex ahead; if the first tokens are of the form # NUM, then
488 process the directive, otherwise back up. */
489 token = _cpp_lex_direct (pfile);
490 if (token->type == CPP_HASH)
491 {
492 token1 = _cpp_lex_direct (pfile);
493 _cpp_backup_tokens (pfile, 1);
494
495 /* If it's a #line directive, handle it. */
496 if (token1->type == CPP_NUMBER)
497 {
498 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
499 return;
500 }
501 }
502
503 /* Backup as if nothing happened. */
504 _cpp_backup_tokens (pfile, 1);
505}
506
76c3e73e
NB
507/* This is called at the end of preprocessing. It pops the last
508 buffer and writes dependency output, and returns the number of
509 errors.
510
511 Maybe it should also reset state, such that you could call
512 cpp_start_read with a new filename to restart processing. */
513int
514cpp_finish (pfile, deps_stream)
6de1e2a9 515 cpp_reader *pfile;
76c3e73e 516 FILE *deps_stream;
6de1e2a9 517{
a69cbaac
NB
518 /* Warn about unused macros before popping the final buffer. */
519 if (CPP_OPTION (pfile, warn_unused_macros))
520 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
521
7364fdd8
NB
522 /* cpplex.c leaves the final buffer on the stack. This it so that
523 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 524 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
525 segfault. It's nice to allow the client to do worry-free excess
526 cpp_get_token calls. */
527 while (pfile->buffer)
528 _cpp_pop_buffer (pfile);
c1212d2f 529
76c3e73e 530 /* Don't write the deps file if there are errors. */
f4ff5a69
NB
531 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
532 && deps_stream && pfile->errors == 0)
76c3e73e
NB
533 {
534 deps_write (pfile->deps, deps_stream, 72);
535
f4ff5a69 536 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
537 deps_phony_targets (pfile->deps, deps_stream);
538 }
3caee4a8 539
d4506961
ZW
540 /* Report on headers that could use multiple include guards. */
541 if (CPP_OPTION (pfile, print_include_names))
c71f835b 542 _cpp_report_missing_guards (pfile);
76c3e73e
NB
543
544 return pfile->errors;
6de1e2a9
ZW
545}
546
f4ff5a69
NB
547static void
548post_options (pfile)
96302433
NB
549 cpp_reader *pfile;
550{
551 /* -Wtraditional is not useful in C++ mode. */
552 if (CPP_OPTION (pfile, cplusplus))
553 CPP_OPTION (pfile, warn_traditional) = 0;
554
6d4587f7 555 /* Permanently disable macro expansion if we are rescanning
43612ffb 556 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 557 if (CPP_OPTION (pfile, preprocessed))
43612ffb
NB
558 {
559 pfile->state.prevent_expansion = 1;
560 CPP_OPTION (pfile, traditional) = 0;
561 }
562
a8eb6044
NB
563 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
564 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
565
43612ffb 566 if (CPP_OPTION (pfile, traditional))
26aea073
NB
567 {
568 /* Traditional CPP does not accurately track column information. */
569 CPP_OPTION (pfile, show_column) = 0;
570 CPP_OPTION (pfile, trigraphs) = 0;
571 CPP_OPTION (pfile, warn_trigraphs) = 0;
572 }
b1822ccc
NB
573
574 /* C99 permits implementation-defined characters in identifiers.
575 The documented meaning of -std= is to turn off extensions that
576 conflict with the specified standard, and since a strictly
577 conforming program cannot contain a '$', we do not condition
578 their acceptance on the -std= setting. */
579 pfile->warn_dollars = CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99);
7ca3d2b1 580}