]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cppinit.c
* Makefile.in (LIBGCOV): Add _gcov_merge_add.
[thirdparty/gcc.git] / gcc / cppinit.c
CommitLineData
a852e3b1 1/* CPP Library.
00059bc7 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
e69f4d0e 3 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
a852e3b1 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
a852e3b1 22#include "config.h"
23#include "system.h"
805e22b2 24#include "coretypes.h"
25#include "tm.h"
6d71dc85 26#include "cpplib.h"
27#include "cpphash.h"
62adb1fe 28#include "mkdeps.h"
1e8b9746 29
c77d825d 30static void init_library PARAMS ((void));
df64d85e 31static void mark_named_operators PARAMS ((cpp_reader *));
9ceb1c29 32static void read_original_filename PARAMS ((cpp_reader *));
61191376 33static void post_options PARAMS ((cpp_reader *));
6d71dc85 34
b3954366 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
e057cf7c 37 runtime. */
b3954366 38#if HAVE_DESIGNATED_INITIALIZERS
5ba37007 39
8d1752de 40#define init_trigraph_map() /* Nothing. */
b3954366 41#define TRIGRAPH_MAP \
b6d18b0a 42__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
b3954366 43
5ba37007 44#define END };
4f98874d 45#define s(p, v) [p] = v,
b3954366 46
5ba37007 47#else
b3954366 48
b6d18b0a 49#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
b3954366 50 static void init_trigraph_map PARAMS ((void)) { \
51 unsigned char *x = _cpp_trigraph_map;
52
2ff3ad1d 53#define END }
4f98874d 54#define s(p, v) x[p] = v;
b3954366 55
5ba37007 56#endif
6d71dc85 57
b3954366 58TRIGRAPH_MAP
59 s('=', '#') s(')', ']') s('!', '|')
60 s('(', '[') s('\'', '^') s('>', '}')
61 s('/', '\\') s('<', '{') s('-', '~')
62END
63
5ba37007 64#undef s
4f98874d 65#undef END
b3954366 66#undef TRIGRAPH_MAP
6d71dc85 67
e484a1cc 68/* A set of booleans indicating what CPP features each source language
69 requires. */
f48efcc3 70struct lang_flags
71{
72 char c99;
f48efcc3 73 char cplusplus;
74 char extended_numbers;
ed909a09 75 char std;
f48efcc3 76 char dollars_in_ident;
77 char cplusplus_comments;
78 char digraphs;
79};
80
81/* ??? Enable $ in identifiers in assembly? */
82static const struct lang_flags lang_defaults[] =
ed909a09 83{ /* c99 c++ xnum std dollar c++comm digr */
9f3643d1 84 /* GNUC89 */ { 0, 0, 1, 0, 1, 1, 1 },
85 /* GNUC99 */ { 1, 0, 1, 0, 1, 1, 1 },
86 /* STDC89 */ { 0, 0, 0, 1, 0, 0, 0 },
87 /* STDC94 */ { 0, 0, 0, 1, 0, 0, 1 },
88 /* STDC99 */ { 1, 0, 1, 1, 0, 1, 1 },
89 /* GNUCXX */ { 0, 1, 1, 0, 1, 1, 1 },
90 /* CXX98 */ { 0, 1, 1, 1, 0, 1, 1 },
91 /* ASM */ { 0, 0, 1, 0, 0, 1, 0 }
f48efcc3 92};
93
e484a1cc 94/* Sets internal flags correctly for a given language. */
3ae4c9f3 95void
96cpp_set_lang (pfile, lang)
fad0ffbb 97 cpp_reader *pfile;
98 enum c_lang lang;
99{
f48efcc3 100 const struct lang_flags *l = &lang_defaults[(int) lang];
b1a9ff83 101
5db5d057 102 CPP_OPTION (pfile, lang) = lang;
fad0ffbb 103
f48efcc3 104 CPP_OPTION (pfile, c99) = l->c99;
f48efcc3 105 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
106 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
ed909a09 107 CPP_OPTION (pfile, std) = l->std;
108 CPP_OPTION (pfile, trigraphs) = l->std;
f48efcc3 109 CPP_OPTION (pfile, dollars_in_ident) = l->dollars_in_ident;
110 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
111 CPP_OPTION (pfile, digraphs) = l->digraphs;
fad0ffbb 112}
113
fc3c7720 114/* Initialize library global state. */
9751c00e 115static void
c77d825d 116init_library ()
9751c00e 117{
b3a8144e 118 static int initialized = 0;
119
120 if (! initialized)
121 {
122 initialized = 1;
123
b3a8144e 124 /* Set up the trigraph map. This doesn't need to do anything if
125 we were compiled with a compiler that supports C99 designated
126 initializers. */
127 init_trigraph_map ();
128 }
9751c00e 129}
130
2c0e001b 131/* Initialize a cpp_reader structure. */
9751c00e 132cpp_reader *
568139e4 133cpp_create_reader (lang, table)
fad0ffbb 134 enum c_lang lang;
568139e4 135 hash_table *table;
6d71dc85 136{
b3a8144e 137 cpp_reader *pfile;
79bd622b 138
457275b6 139 /* Initialize this instance of the library if it hasn't been already. */
c77d825d 140 init_library ();
b3a8144e 141
142 pfile = (cpp_reader *) xcalloc (1, sizeof (cpp_reader));
79bd622b 143
3ae4c9f3 144 cpp_set_lang (pfile, lang);
2ff3ad1d 145 CPP_OPTION (pfile, warn_import) = 1;
318fdd81 146 CPP_OPTION (pfile, warn_multichar) = 1;
2ff3ad1d 147 CPP_OPTION (pfile, discard_comments) = 1;
d3f7919d 148 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
2ff3ad1d 149 CPP_OPTION (pfile, show_column) = 1;
3b304865 150 CPP_OPTION (pfile, tabstop) = 8;
624a7570 151 CPP_OPTION (pfile, operator_names) = 1;
923acdd5 152 CPP_OPTION (pfile, warn_endif_labels) = 1;
922df727 153 CPP_OPTION (pfile, warn_deprecated) = 1;
61191376 154 CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
2ff3ad1d 155
1893c11a 156 /* Default CPP arithmetic to something sensible for the host for the
157 benefit of dumb users like fix-header. */
dc0b244f 158 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
1893c11a 159 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
160 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
161 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
965e9876 162 CPP_OPTION (pfile, unsigned_char) = 0;
d932f956 163 CPP_OPTION (pfile, unsigned_wchar) = 1;
13c457e1 164
457275b6 165 /* Initialize the line map. Start at logical line 1, so we can use
729d2022 166 a line number of zero for special states. */
38692459 167 init_line_maps (&pfile->line_maps);
168
8d1752de 169 /* Initialize lexer state. */
79bd622b 170 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
171
f9b5f742 172 /* Set up static tokens. */
f9b5f742 173 pfile->avoid_paste.type = CPP_PADDING;
174 pfile->avoid_paste.val.source = NULL;
175 pfile->eof.type = CPP_EOF;
176 pfile->eof.flags = 0;
79bd622b 177
83dcbb5c 178 /* Create a token buffer for the lexer. */
179 _cpp_init_tokenrun (&pfile->base_run, 250);
180 pfile->cur_run = &pfile->base_run;
181 pfile->cur_token = pfile->base_run.base;
83dcbb5c 182
457275b6 183 /* Initialize the base context. */
79bd622b 184 pfile->context = &pfile->base_context;
185 pfile->base_context.macro = 0;
186 pfile->base_context.prev = pfile->base_context.next = 0;
187
e6a5f963 188 /* Aligned and unaligned storage. */
189 pfile->a_buff = _cpp_get_buff (pfile, 0);
1fdf6039 190 pfile->u_buff = _cpp_get_buff (pfile, 0);
79bd622b 191
5bbf045f 192 /* The expression parser stack. */
193 _cpp_expand_op_stack (pfile);
194
457275b6 195 /* Initialize the buffer obstack. */
0d086e18 196 gcc_obstack_init (&pfile->buffer_ob);
197
f51c2148 198 _cpp_init_includes (pfile);
9751c00e 199
568139e4 200 _cpp_init_hashtable (pfile, table);
201
9751c00e 202 return pfile;
e2f9a79f 203}
204
9bd97637 205/* Free resources used by PFILE. Accessing PFILE after this function
974e2c0c 206 returns leads to undefined behavior. Returns the error count. */
6019c708 207void
9bd97637 208cpp_destroy (pfile)
6d71dc85 209 cpp_reader *pfile;
210{
79bd622b 211 cpp_context *context, *contextn;
729d2022 212 tokenrun *run, *runn;
11d10d3f 213
5bbf045f 214 free (pfile->op_stack);
02516fb9 215
5b201908 216 while (CPP_BUFFER (pfile) != NULL)
4dfe8b74 217 _cpp_pop_buffer (pfile);
6d71dc85 218
fb83e0d6 219 if (pfile->out.base)
220 free (pfile->out.base);
0bb65704 221
79bd622b 222 if (pfile->macro_buffer)
8744fb7e 223 {
224 free ((PTR) pfile->macro_buffer);
225 pfile->macro_buffer = NULL;
226 pfile->macro_buffer_len = 0;
227 }
79bd622b 228
61191376 229 if (pfile->deps)
230 deps_free (pfile->deps);
0d086e18 231 obstack_free (&pfile->buffer_ob, 0);
62adb1fe 232
0d086e18 233 _cpp_destroy_hashtable (pfile);
76faa4c0 234 _cpp_cleanup_includes (pfile);
11d10d3f 235
e6a5f963 236 _cpp_free_buff (pfile->a_buff);
1fdf6039 237 _cpp_free_buff (pfile->u_buff);
06c92cbc 238 _cpp_free_buff (pfile->free_buffs);
79bd622b 239
729d2022 240 for (run = &pfile->base_run; run; run = runn)
241 {
242 runn = run->next;
243 free (run->base);
244 if (run != &pfile->base_run)
245 free (run);
246 }
247
79bd622b 248 for (context = pfile->base_context.next; context; context = contextn)
249 {
250 contextn = context->next;
251 free (context);
252 }
9bd97637 253
38692459 254 free_line_maps (&pfile->line_maps);
9bd97637 255 free (pfile);
6d71dc85 256}
257
79bd622b 258/* This structure defines one built-in identifier. A node will be
06579c95 259 entered in the hash table under the name NAME, with value VALUE.
260
261 There are two tables of these. builtin_array holds all the
262 "builtin" macros: these are handled by builtin_macro() in
263 cppmacro.c. Builtin is somewhat of a misnomer -- the property of
264 interest is that these macros require special code to compute their
265 expansions. The value is a "builtin_type" enumerator.
266
267 operator_array holds the C++ named operators. These are keywords
268 which act as aliases for punctuators. In C++, they cannot be
269 altered through #define, and #if recognizes them as operators. In
270 C, these are not entered into the hash table at all (but see
271 <iso646.h>). The value is a token-type enumerator. */
5ba37007 272struct builtin
273{
b6d18b0a 274 const uchar *name;
79bd622b 275 unsigned short len;
06579c95 276 unsigned short value;
5ba37007 277};
79bd622b 278
06579c95 279#define B(n, t) { DSC(n), t }
5ba37007 280static const struct builtin builtin_array[] =
6d71dc85 281{
79bd622b 282 B("__TIME__", BT_TIME),
283 B("__DATE__", BT_DATE),
284 B("__FILE__", BT_FILE),
285 B("__BASE_FILE__", BT_BASE_FILE),
286 B("__LINE__", BT_SPECLINE),
287 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
9c343313 288 /* Keep builtins not used for -traditional-cpp at the end, and
289 update init_builtins() if any more are added. */
c7e5d924 290 B("_Pragma", BT_PRAGMA),
31ca26b1 291 B("__STDC__", BT_STDC),
06579c95 292};
31674461 293
06579c95 294static const struct builtin operator_array[] =
295{
296 B("and", CPP_AND_AND),
297 B("and_eq", CPP_AND_EQ),
298 B("bitand", CPP_AND),
299 B("bitor", CPP_OR),
300 B("compl", CPP_COMPL),
301 B("not", CPP_NOT),
302 B("not_eq", CPP_NOT_EQ),
303 B("or", CPP_OR_OR),
304 B("or_eq", CPP_OR_EQ),
305 B("xor", CPP_XOR),
306 B("xor_eq", CPP_XOR_EQ)
5ba37007 307};
e057cf7c 308#undef B
5ba37007 309
df64d85e 310/* Mark the C++ named operators in the hash table. */
311static void
312mark_named_operators (pfile)
313 cpp_reader *pfile;
314{
315 const struct builtin *b;
316
317 for (b = operator_array;
318 b < (operator_array + ARRAY_SIZE (operator_array));
319 b++)
320 {
321 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
322 hp->flags |= NODE_OPERATOR;
805e22b2 323 hp->is_directive = 0;
324 hp->directive_index = b->value;
df64d85e 325 }
326}
327
fc3c7720 328/* Read the builtins table above and enter them, and language-specific
329 macros, into the hash table. */
330void
331cpp_init_builtins (pfile)
5ba37007 332 cpp_reader *pfile;
333{
5ba37007 334 const struct builtin *b;
9c343313 335 size_t n = ARRAY_SIZE (builtin_array);
4e464091 336
9c343313 337 if (CPP_OPTION (pfile, traditional))
338 n -= 2;
339
340 for(b = builtin_array; b < builtin_array + n; b++)
6d71dc85 341 {
06579c95 342 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
343 hp->type = NT_MACRO;
344 hp->flags |= NODE_BUILTIN | NODE_WARN;
345 hp->value.builtin = b->value;
6d71dc85 346 }
eef6c20f 347
348 if (CPP_OPTION (pfile, cplusplus))
9a85d74b 349 _cpp_define_builtin (pfile, "__cplusplus 1");
965e9876 350 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
351 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
952e555e 352 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
eef6c20f 353 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
354 else if (CPP_OPTION (pfile, c99))
355 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
356
952e555e 357 if (CPP_OPTION (pfile, objc))
358 _cpp_define_builtin (pfile, "__OBJC__ 1");
8d1752de 359}
360
1893c11a 361/* Sanity-checks are dependent on command-line options, so it is
362 called as a subroutine of cpp_read_main_file (). */
363#if ENABLE_CHECKING
364static void sanity_checks PARAMS ((cpp_reader *));
365static void sanity_checks (pfile)
366 cpp_reader *pfile;
367{
368 cppchar_t test = 0;
dc0b244f 369 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
1893c11a 370
371 /* Sanity checks for assumptions about CPP arithmetic and target
372 type precisions made by cpplib. */
373 test--;
374 if (test < 1)
b9093358 375 cpp_error (pfile, DL_ICE, "cppchar_t must be an unsigned type");
1893c11a 376
dc0b244f 377 if (CPP_OPTION (pfile, precision) > max_precision)
b9093358 378 cpp_error (pfile, DL_ICE,
e4ab85e6 379 "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits",
dc0b244f 380 (unsigned long) max_precision,
381 (unsigned long) CPP_OPTION (pfile, precision));
1893c11a 382
383 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
b9093358 384 cpp_error (pfile, DL_ICE,
1893c11a 385 "CPP arithmetic must be at least as precise as a target int");
386
387 if (CPP_OPTION (pfile, char_precision) < 8)
b9093358 388 cpp_error (pfile, DL_ICE, "target char is less than 8 bits wide");
1893c11a 389
390 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
b9093358 391 cpp_error (pfile, DL_ICE,
1893c11a 392 "target wchar_t is narrower than target char");
393
394 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
b9093358 395 cpp_error (pfile, DL_ICE,
1893c11a 396 "target int is narrower than target char");
397
dc0b244f 398 /* This is assumed in eval_token() and could be fixed if necessary. */
399 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
400 cpp_error (pfile, DL_ICE, "CPP half-integer narrower than CPP character");
401
1893c11a 402 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
b9093358 403 cpp_error (pfile, DL_ICE,
e4ab85e6 404 "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits",
dc0b244f 405 (unsigned long) BITS_PER_CPPCHAR_T,
406 (unsigned long) CPP_OPTION (pfile, wchar_precision));
1893c11a 407}
408#else
409# define sanity_checks(PFILE)
410#endif
411
6019c708 412/* Add a dependency target. Can be called any number of times before
413 cpp_read_main_file(). If no targets have been added before
414 cpp_read_main_file(), then the default target is used. */
415void
416cpp_add_dependency_target (pfile, target, quote)
417 cpp_reader *pfile;
418 const char *target;
419 int quote;
420{
421 if (!pfile->deps)
422 pfile->deps = deps_init ();
423
424 deps_add_target (pfile->deps, target, quote);
425}
426
9ceb1c29 427/* This is called after options have been parsed, and partially
428 processed. Setup for processing input from the file named FNAME,
429 or stdin if it is the empty string. Return the original filename
430 on success (e.g. foo.i->foo.c), or NULL on failure. */
431const char *
568139e4 432cpp_read_main_file (pfile, fname)
6d71dc85 433 cpp_reader *pfile;
8d7a2585 434 const char *fname;
6d71dc85 435{
1893c11a 436 sanity_checks (pfile);
437
61191376 438 post_options (pfile);
439
9e36e267 440 /* Mark named operators before handling command line macros. */
441 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
442 mark_named_operators (pfile);
443
61191376 444 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
445 {
446 if (!pfile->deps)
447 pfile->deps = deps_init ();
448
449 /* Set the default target (if there is none already). */
450 deps_add_default_target (pfile->deps, fname);
451 }
af808d7d 452
9ceb1c29 453 /* Open the main input file. */
a54e0bf8 454 pfile->line = 1;
fd944c82 455 if (!_cpp_read_file (pfile, fname))
9ceb1c29 456 return NULL;
d2e850c1 457
61191376 458 /* Set this here so the client can change the option if it wishes,
459 and after stacking the main file so we don't trace the main
460 file. */
438ac94c 461 pfile->line_maps.trace_includes = CPP_OPTION (pfile, print_include_names);
462
9ceb1c29 463 /* For foo.i, read the original filename foo.c now, for the benefit
464 of the front ends. */
465 if (CPP_OPTION (pfile, preprocessed))
466 read_original_filename (pfile);
467
468 return pfile->map->to_file;
469}
470
471/* For preprocessed files, if the first tokens are of the form # NUM.
472 handle the directive so we know the original file name. This will
473 generate file_change callbacks, which the front ends must handle
474 appropriately given their state of initialization. */
475static void
476read_original_filename (pfile)
477 cpp_reader *pfile;
478{
479 const cpp_token *token, *token1;
480
481 /* Lex ahead; if the first tokens are of the form # NUM, then
482 process the directive, otherwise back up. */
483 token = _cpp_lex_direct (pfile);
484 if (token->type == CPP_HASH)
485 {
486 token1 = _cpp_lex_direct (pfile);
487 _cpp_backup_tokens (pfile, 1);
488
489 /* If it's a #line directive, handle it. */
490 if (token1->type == CPP_NUMBER)
491 {
492 _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
493 return;
494 }
495 }
496
497 /* Backup as if nothing happened. */
498 _cpp_backup_tokens (pfile, 1);
499}
500
6019c708 501/* This is called at the end of preprocessing. It pops the last
502 buffer and writes dependency output, and returns the number of
503 errors.
504
505 Maybe it should also reset state, such that you could call
506 cpp_start_read with a new filename to restart processing. */
507int
508cpp_finish (pfile, deps_stream)
6d71dc85 509 cpp_reader *pfile;
6019c708 510 FILE *deps_stream;
6d71dc85 511{
71a7c282 512 /* Warn about unused macros before popping the final buffer. */
513 if (CPP_OPTION (pfile, warn_unused_macros))
514 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
515
5475a165 516 /* cpplex.c leaves the final buffer on the stack. This it so that
517 it returns an unending stream of CPP_EOFs to the client. If we
3fb1e43b 518 popped the buffer, we'd dereference a NULL buffer pointer and
5475a165 519 segfault. It's nice to allow the client to do worry-free excess
520 cpp_get_token calls. */
521 while (pfile->buffer)
522 _cpp_pop_buffer (pfile);
9e87fa80 523
6019c708 524 /* Don't write the deps file if there are errors. */
61191376 525 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
526 && deps_stream && pfile->errors == 0)
6019c708 527 {
528 deps_write (pfile->deps, deps_stream, 72);
529
61191376 530 if (CPP_OPTION (pfile, deps.phony_targets))
6019c708 531 deps_phony_targets (pfile->deps, deps_stream);
532 }
d453a374 533
34627970 534 /* Report on headers that could use multiple include guards. */
535 if (CPP_OPTION (pfile, print_include_names))
f51c2148 536 _cpp_report_missing_guards (pfile);
6019c708 537
538 return pfile->errors;
6d71dc85 539}
540
61191376 541static void
542post_options (pfile)
af808d7d 543 cpp_reader *pfile;
544{
545 /* -Wtraditional is not useful in C++ mode. */
546 if (CPP_OPTION (pfile, cplusplus))
547 CPP_OPTION (pfile, warn_traditional) = 0;
548
946ce1b7 549 /* Permanently disable macro expansion if we are rescanning
ca52ef60 550 preprocessed text. Read preprocesed source in ISO mode. */
946ce1b7 551 if (CPP_OPTION (pfile, preprocessed))
ca52ef60 552 {
553 pfile->state.prevent_expansion = 1;
554 CPP_OPTION (pfile, traditional) = 0;
555 }
556
ca52ef60 557 if (CPP_OPTION (pfile, traditional))
a54e0bf8 558 {
559 /* Traditional CPP does not accurately track column information. */
560 CPP_OPTION (pfile, show_column) = 0;
561 CPP_OPTION (pfile, trigraphs) = 0;
562 CPP_OPTION (pfile, warn_trigraphs) = 0;
563 }
b3a8144e 564}