blob: 5ba666650e8e465508e9853f552f06050601336f [file] [log] [blame]
Zack Weinberg5538ada1999-02-04 06:36:54 -05001/* CPP Library.
Jeff Law5e7b4e22000-02-25 22:59:31 -07002 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
Joseph Myers148e4212009-03-29 23:56:07 +01003 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
Jakub Jelinek709d7162010-02-11 20:49:17 +01004 2009, 2010 Free Software Foundation, Inc.
Zack Weinberg5538ada1999-02-04 06:36:54 -05005 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
Jakub Jelinek748086b2009-04-09 17:00:19 +020011Free Software Foundation; either version 3, or (at your option) any
Zack Weinberg5538ada1999-02-04 06:36:54 -050012later 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
Jakub Jelinek748086b2009-04-09 17:00:19 +020020along with this program; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
Zack Weinberg5538ada1999-02-04 06:36:54 -050022
Zack Weinberg5538ada1999-02-04 06:36:54 -050023#include "config.h"
24#include "system.h"
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000025#include "cpplib.h"
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +000026#include "internal.h"
Zack Weinberg49e6c082000-03-04 19:42:04 +000027#include "mkdeps.h"
Zack Weinberg018a4782004-09-24 21:39:06 +000028#include "localedir.h"
Kai Tietz44898002011-03-25 20:11:26 +010029#include "filenames.h"
Zack Weinberg88ae23e2000-03-08 23:35:19 +000030
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000031static void init_library (void);
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +000032static void mark_named_operators (cpp_reader *, int);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000033static void read_original_filename (cpp_reader *);
Alexandre Olivab20d9f02003-08-05 21:15:57 +000034static void read_original_directory (cpp_reader *);
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000035static void post_options (cpp_reader *);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000036
Neil Booth61d03462000-08-18 17:35:58 +000037/* If we have designated initializers (GCC >2.7) these tables can be
38 initialized, constant data. Otherwise, they have to be filled in at
Zack Weinberg12cf91f2000-05-04 04:38:01 +000039 runtime. */
Neil Booth61d03462000-08-18 17:35:58 +000040#if HAVE_DESIGNATED_INITIALIZERS
Zack Weinberga9ae4481999-10-29 04:31:14 +000041
Neil Booth4a58aab2000-11-18 12:18:09 +000042#define init_trigraph_map() /* Nothing. */
Neil Booth61d03462000-08-18 17:35:58 +000043#define TRIGRAPH_MAP \
Neil Booth562a5c22002-04-21 18:46:42 +000044__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
Neil Booth61d03462000-08-18 17:35:58 +000045
Zack Weinberga9ae4481999-10-29 04:31:14 +000046#define END };
Zack Weinberg455d2582000-03-04 01:42:56 +000047#define s(p, v) [p] = v,
Neil Booth61d03462000-08-18 17:35:58 +000048
Zack Weinberga9ae4481999-10-29 04:31:14 +000049#else
Neil Booth61d03462000-08-18 17:35:58 +000050
Neil Booth562a5c22002-04-21 18:46:42 +000051#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
Zack Weinberg6cf87ca2003-06-17 06:17:44 +000052 static void init_trigraph_map (void) { \
Neil Booth61d03462000-08-18 17:35:58 +000053 unsigned char *x = _cpp_trigraph_map;
54
Zack Weinbergae796972000-03-31 23:16:11 +000055#define END }
Zack Weinberg455d2582000-03-04 01:42:56 +000056#define s(p, v) x[p] = v;
Neil Booth61d03462000-08-18 17:35:58 +000057
Zack Weinberga9ae4481999-10-29 04:31:14 +000058#endif
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000059
Neil Booth61d03462000-08-18 17:35:58 +000060TRIGRAPH_MAP
61 s('=', '#') s(')', ']') s('!', '|')
62 s('(', '[') s('\'', '^') s('>', '}')
63 s('/', '\\') s('<', '{') s('-', '~')
64END
65
Zack Weinberga9ae4481999-10-29 04:31:14 +000066#undef s
Zack Weinberg455d2582000-03-04 01:42:56 +000067#undef END
Neil Booth61d03462000-08-18 17:35:58 +000068#undef TRIGRAPH_MAP
Zack Weinberg6de1e2a1999-02-18 15:35:49 +000069
Neil Booth5d8ebbd2002-01-03 21:43:09 +000070/* A set of booleans indicating what CPP features each source language
71 requires. */
Zack Weinberga01eb542001-07-02 18:55:35 +000072struct lang_flags
73{
74 char c99;
Zack Weinberga01eb542001-07-02 18:55:35 +000075 char cplusplus;
76 char extended_numbers;
Joseph Myersaf15a2f2005-09-20 21:31:37 +010077 char extended_identifiers;
Neil Booth58551c22002-08-06 20:35:46 +000078 char std;
Zack Weinberga01eb542001-07-02 18:55:35 +000079 char cplusplus_comments;
80 char digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +000081 char uliterals;
Zack Weinberga01eb542001-07-02 18:55:35 +000082};
83
Zack Weinberga01eb542001-07-02 18:55:35 +000084static const struct lang_flags lang_defaults[] =
Kris Van Heesb6baa672008-04-18 13:58:08 +000085{ /* c99 c++ xnum xid std // digr ulit */
86 /* GNUC89 */ { 0, 0, 1, 0, 0, 1, 1, 0 },
87 /* GNUC99 */ { 1, 0, 1, 0, 0, 1, 1, 1 },
Joseph Myers2778d762010-04-25 22:54:22 +010088 /* GNUC1X */ { 1, 0, 1, 0, 0, 1, 1, 1 },
Kris Van Heesb6baa672008-04-18 13:58:08 +000089 /* STDC89 */ { 0, 0, 0, 0, 1, 0, 0, 0 },
90 /* STDC94 */ { 0, 0, 0, 0, 1, 0, 1, 0 },
91 /* STDC99 */ { 1, 0, 1, 0, 1, 1, 1, 0 },
Joseph Myers2778d762010-04-25 22:54:22 +010092 /* STDC1X */ { 1, 0, 1, 0, 1, 1, 1, 0 },
Kris Van Heesb6baa672008-04-18 13:58:08 +000093 /* GNUCXX */ { 0, 1, 1, 0, 0, 1, 1, 0 },
94 /* CXX98 */ { 0, 1, 1, 0, 1, 1, 1, 0 },
95 /* GNUCXX0X */ { 1, 1, 1, 0, 0, 1, 1, 1 },
96 /* CXX0X */ { 1, 1, 1, 0, 1, 1, 1, 1 },
97 /* ASM */ { 0, 0, 1, 0, 0, 1, 0, 0 }
Douglas Gregordfafdaa2006-11-01 16:27:23 +000098 /* xid should be 1 for GNUC99, STDC99, GNUCXX, CXX98, GNUCXX0X, and
99 CXX0X when no longer experimental (when all uses of identifiers
100 in the compiler have been audited for correct handling of
101 extended identifiers). */
Zack Weinberga01eb542001-07-02 18:55:35 +0000102};
103
Neil Booth5d8ebbd2002-01-03 21:43:09 +0000104/* Sets internal flags correctly for a given language. */
Neil Boothf749a362002-08-10 20:58:45 +0000105void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000106cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
Neil Boothdd07b882000-11-20 18:27:32 +0000107{
Zack Weinberga01eb542001-07-02 18:55:35 +0000108 const struct lang_flags *l = &lang_defaults[(int) lang];
Kazu Hiratadf383482002-05-22 22:02:16 +0000109
Neil Boothbdb05a72000-11-26 17:31:13 +0000110 CPP_OPTION (pfile, lang) = lang;
Neil Boothdd07b882000-11-20 18:27:32 +0000111
Joseph Myersaf15a2f2005-09-20 21:31:37 +0100112 CPP_OPTION (pfile, c99) = l->c99;
113 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
114 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
115 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
116 CPP_OPTION (pfile, std) = l->std;
117 CPP_OPTION (pfile, trigraphs) = l->std;
118 CPP_OPTION (pfile, cplusplus_comments) = l->cplusplus_comments;
119 CPP_OPTION (pfile, digraphs) = l->digraphs;
Kris Van Heesb6baa672008-04-18 13:58:08 +0000120 CPP_OPTION (pfile, uliterals) = l->uliterals;
Neil Boothdd07b882000-11-20 18:27:32 +0000121}
122
Neil Boothc1bad962003-03-15 12:18:47 +0000123/* Initialize library global state. */
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000124static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000125init_library (void)
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000126{
127 static int initialized = 0;
128
129 if (! initialized)
130 {
131 initialized = 1;
132
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000133 /* Set up the trigraph map. This doesn't need to do anything if
134 we were compiled with a compiler that supports C99 designated
135 initializers. */
136 init_trigraph_map ();
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000137
138#ifdef ENABLE_NLS
Matthias Klose85eac2a2004-07-23 07:00:57 +0000139 (void) bindtextdomain (PACKAGE, LOCALEDIR);
Paolo Bonzini4f4e53dd2004-05-24 10:50:45 +0000140#endif
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000141 }
Neil Boothcf44ea52000-11-28 21:13:35 +0000142}
143
Kazu Hirataec5c56d2001-08-01 17:57:27 +0000144/* Initialize a cpp_reader structure. */
Neil Boothcf44ea52000-11-28 21:13:35 +0000145cpp_reader *
Per Bothner50f59cd2004-01-19 21:30:18 -0800146cpp_create_reader (enum c_lang lang, hash_table *table,
147 struct line_maps *line_table)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000148{
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000149 cpp_reader *pfile;
Neil Booth93c803682000-10-28 17:59:06 +0000150
Kazu Hirata4912a072002-09-14 15:51:45 +0000151 /* Initialize this instance of the library if it hasn't been already. */
Neil Booth674c3b42001-01-08 18:52:09 +0000152 init_library ();
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000153
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000154 pfile = XCNEW (cpp_reader);
Neil Booth93c803682000-10-28 17:59:06 +0000155
Neil Boothf749a362002-08-10 20:58:45 +0000156 cpp_set_lang (pfile, lang);
Neil Bootha5a49442002-05-06 22:53:10 +0000157 CPP_OPTION (pfile, warn_multichar) = 1;
Zack Weinbergae796972000-03-31 23:16:11 +0000158 CPP_OPTION (pfile, discard_comments) = 1;
Jason Thorpe477cdac2002-04-07 03:12:23 +0000159 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
Neil Booth6ab3e7d2000-05-18 11:09:27 +0000160 CPP_OPTION (pfile, tabstop) = 8;
Jakub Jelinekbe768052000-12-15 16:49:28 +0100161 CPP_OPTION (pfile, operator_names) = 1;
Neil Bootha8eb6042003-05-04 20:03:55 +0000162 CPP_OPTION (pfile, warn_trigraphs) = 2;
Phil Edwards909de5d2002-03-22 21:59:04 +0000163 CPP_OPTION (pfile, warn_endif_labels) = 1;
Joseph Myerse3339d02010-09-29 15:49:14 +0100164 CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
165 CPP_OPTION (pfile, cpp_warn_long_long) = 0;
Neil Boothb1822cc2003-05-17 20:29:34 +0000166 CPP_OPTION (pfile, dollars_in_ident) = 1;
Hans-Peter Nilsson78b88112003-06-12 06:09:15 +0000167 CPP_OPTION (pfile, warn_dollars) = 1;
Richard Hendersone5b79212004-02-19 14:18:50 -0800168 CPP_OPTION (pfile, warn_variadic_macros) = 1;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000169 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
Geoffrey Keating50668cf2005-03-15 00:36:33 +0000170 CPP_OPTION (pfile, warn_normalize) = normalized_C;
Zack Weinbergae796972000-03-31 23:16:11 +0000171
Neil Booth2443d4e2002-05-05 17:05:09 +0000172 /* Default CPP arithmetic to something sensible for the host for the
173 benefit of dumb users like fix-header. */
Neil Boothc9220e32002-05-27 05:51:14 +0000174 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
Neil Booth2443d4e2002-05-05 17:05:09 +0000175 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);
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000178 CPP_OPTION (pfile, unsigned_char) = 0;
Neil Booth44a147a2002-05-07 21:07:24 +0000179 CPP_OPTION (pfile, unsigned_wchar) = 1;
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000180 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
181
182 /* Default to no charset conversion. */
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000183 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000184 CPP_OPTION (pfile, wide_charset) = 0;
Neil Booth4268e8b2002-05-04 07:30:32 +0000185
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000186 /* Default the input character set to UTF-8. */
187 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
Eric Christophercf551fb2004-01-16 22:37:49 +0000188
Neil Booth8f9b4002003-07-29 22:26:13 +0000189 /* 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
Per Bothner500bee02004-04-22 19:22:27 -0700195 /* Initialize the line map. */
Per Bothner50f59cd2004-01-19 21:30:18 -0800196 pfile->line_table = line_table;
Neil Boothd82fc102001-08-02 23:03:31 +0000197
Neil Booth4a58aab2000-11-18 12:18:09 +0000198 /* Initialize lexer state. */
Neil Booth93c803682000-10-28 17:59:06 +0000199 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
Zack Weinberg3cb553b2000-08-20 21:36:18 +0000200
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000201 /* Set up static tokens. */
Neil Booth4ed5bcf2001-09-24 22:53:12 +0000202 pfile->avoid_paste.type = CPP_PADDING;
203 pfile->avoid_paste.val.source = NULL;
204 pfile->eof.type = CPP_EOF;
205 pfile->eof.flags = 0;
Neil Booth93c803682000-10-28 17:59:06 +0000206
Neil Booth5fddcff2001-09-11 07:00:12 +0000207 /* 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;
Neil Booth5fddcff2001-09-11 07:00:12 +0000211
Kazu Hirata4912a072002-09-14 15:51:45 +0000212 /* Initialize the base context. */
Neil Booth93c803682000-10-28 17:59:06 +0000213 pfile->context = &pfile->base_context;
214 pfile->base_context.macro = 0;
215 pfile->base_context.prev = pfile->base_context.next = 0;
216
Neil Booth8c3b2692001-09-30 10:03:11 +0000217 /* Aligned and unaligned storage. */
218 pfile->a_buff = _cpp_get_buff (pfile, 0);
Neil Boothece54d52001-09-28 09:40:22 +0000219 pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth93c803682000-10-28 17:59:06 +0000220
Kai Tietz17e7cb82009-11-11 18:37:19 +0000221 /* Initialize table for push_macro/pop_macro. */
222 pfile->pushed_macros = 0;
223
Neil Booth87ed1092002-04-28 19:42:54 +0000224 /* The expression parser stack. */
225 _cpp_expand_op_stack (pfile);
226
Kazu Hirata4912a072002-09-14 15:51:45 +0000227 /* Initialize the buffer obstack. */
Zack Weinberg43839642003-07-13 17:34:18 +0000228 _obstack_begin (&pfile->buffer_ob, 0, 0,
229 (void *(*) (long)) xmalloc,
230 (void (*) (void *)) free);
Neil Booth2a967f32001-05-20 06:26:45 +0000231
Neil Booth8f9b4002003-07-29 22:26:13 +0000232 _cpp_init_files (pfile);
Neil Boothcf44ea52000-11-28 21:13:35 +0000233
Per Bothnerb4e46ce2003-03-20 16:46:18 +0000234 _cpp_init_hashtable (pfile, table);
235
Neil Boothcf44ea52000-11-28 21:13:35 +0000236 return pfile;
Zack Weinbergf2d5f0c2000-04-14 23:29:45 +0000237}
238
Tom Tromey5ffeb9132007-09-06 16:24:05 +0000239/* 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
Neil Booth400023a2001-01-14 22:00:20 +0000247/* Free resources used by PFILE. Accessing PFILE after this function
Kazu Hirata8d9afc4e2002-09-16 11:42:00 +0000248 returns leads to undefined behavior. Returns the error count. */
Neil Booth76c3e732002-08-11 22:22:28 +0000249void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000250cpp_destroy (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000251{
Neil Booth93c803682000-10-28 17:59:06 +0000252 cpp_context *context, *contextn;
Kai Tietz17e7cb82009-11-11 18:37:19 +0000253 struct def_pragma_macro *pmacro;
Neil Booth50410422001-09-15 10:18:03 +0000254 tokenrun *run, *runn;
Matthew Gingell631d0d32008-10-05 12:35:36 +0000255 int i;
Neil Booth709e9e52000-08-17 18:01:43 +0000256
Neil Booth87ed1092002-04-28 19:42:54 +0000257 free (pfile->op_stack);
Neil Boothaf0d16c2002-04-22 17:48:02 +0000258
Zack Weinberg38b24ee2000-03-08 20:37:23 +0000259 while (CPP_BUFFER (pfile) != NULL)
Neil Boothef6e9582001-08-04 12:01:59 +0000260 _cpp_pop_buffer (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000261
Jim Meyering04695782011-04-20 18:19:03 +0000262 free (pfile->out.base);
Neil Booth004cb262002-05-17 20:16:48 +0000263
Neil Booth93c803682000-10-28 17:59:06 +0000264 if (pfile->macro_buffer)
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000265 {
Kaveh R. Ghazifad205f2003-06-16 21:41:10 +0000266 free (pfile->macro_buffer);
Alexandre Oliva4b49c362001-01-09 09:30:43 +0000267 pfile->macro_buffer = NULL;
268 pfile->macro_buffer_len = 0;
269 }
Neil Booth93c803682000-10-28 17:59:06 +0000270
Neil Boothf4ff5a62002-08-12 22:44:30 +0000271 if (pfile->deps)
272 deps_free (pfile->deps);
Neil Booth2a967f32001-05-20 06:26:45 +0000273 obstack_free (&pfile->buffer_ob, 0);
Zack Weinberg49e6c082000-03-04 19:42:04 +0000274
Neil Booth2a967f32001-05-20 06:26:45 +0000275 _cpp_destroy_hashtable (pfile);
Neil Booth8f9b4002003-07-29 22:26:13 +0000276 _cpp_cleanup_files (pfile);
Zack Weinberge6cc3a22003-07-05 00:24:00 +0000277 _cpp_destroy_iconv (pfile);
Neil Booth93c803682000-10-28 17:59:06 +0000278
Neil Booth8c3b2692001-09-30 10:03:11 +0000279 _cpp_free_buff (pfile->a_buff);
Neil Boothece54d52001-09-28 09:40:22 +0000280 _cpp_free_buff (pfile->u_buff);
Neil Boothb8af0ca2001-09-26 17:52:50 +0000281 _cpp_free_buff (pfile->free_buffs);
Neil Booth93c803682000-10-28 17:59:06 +0000282
Neil Booth50410422001-09-15 10:18:03 +0000283 for (run = &pfile->base_run; run; run = runn)
284 {
285 runn = run->next;
286 free (run->base);
287 if (run != &pfile->base_run)
288 free (run);
289 }
290
Neil Booth93c803682000-10-28 17:59:06 +0000291 for (context = pfile->base_context.next; context; context = contextn)
292 {
293 contextn = context->next;
294 free (context);
295 }
Neil Booth400023a2001-01-14 22:00:20 +0000296
Matthew Gingell631d0d32008-10-05 12:35:36 +0000297 if (pfile->comments.entries)
298 {
299 for (i = 0; i < pfile->comments.count; i++)
300 free (pfile->comments.entries[i].comment);
301
302 free (pfile->comments.entries);
303 }
Kai Tietz17e7cb82009-11-11 18:37:19 +0000304 if (pfile->pushed_macros)
305 {
306 do
307 {
308 pmacro = pfile->pushed_macros;
309 pfile->pushed_macros = pmacro->next;
310 free (pmacro->name);
311 free (pmacro);
312 }
313 while (pfile->pushed_macros);
314 }
Matthew Gingell631d0d32008-10-05 12:35:36 +0000315
Neil Booth400023a2001-01-14 22:00:20 +0000316 free (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000317}
318
Neil Booth93c803682000-10-28 17:59:06 +0000319/* This structure defines one built-in identifier. A node will be
Zack Weinbergf24a1532002-05-18 00:43:13 +0000320 entered in the hash table under the name NAME, with value VALUE.
Zack Weinberg92936ec2000-07-19 20:18:08 +0000321
Zack Weinbergf24a1532002-05-18 00:43:13 +0000322 There are two tables of these. builtin_array holds all the
323 "builtin" macros: these are handled by builtin_macro() in
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000324 macro.c. Builtin is somewhat of a misnomer -- the property of
Zack Weinbergf24a1532002-05-18 00:43:13 +0000325 interest is that these macros require special code to compute their
Ian Lance Taylor128465e2010-09-15 14:41:31 +0000326 expansions. The value is a "cpp_builtin_type" enumerator.
Zack Weinbergf24a1532002-05-18 00:43:13 +0000327
328 operator_array holds the C++ named operators. These are keywords
329 which act as aliases for punctuators. In C++, they cannot be
330 altered through #define, and #if recognizes them as operators. In
331 C, these are not entered into the hash table at all (but see
332 <iso646.h>). The value is a token-type enumerator. */
Simon Baldwinc047ce92008-09-18 15:39:08 +0000333struct builtin_macro
Zack Weinberga9ae4481999-10-29 04:31:14 +0000334{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000335 const uchar *const name;
336 const unsigned short len;
337 const unsigned short value;
338 const bool always_warn_if_redefined;
339};
340
341#define B(n, t, f) { DSC(n), t, f }
342static const struct builtin_macro builtin_array[] =
343{
344 B("__TIMESTAMP__", BT_TIMESTAMP, false),
345 B("__TIME__", BT_TIME, false),
346 B("__DATE__", BT_DATE, false),
347 B("__FILE__", BT_FILE, false),
348 B("__BASE_FILE__", BT_BASE_FILE, false),
349 B("__LINE__", BT_SPECLINE, true),
350 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
351 B("__COUNTER__", BT_COUNTER, true),
352 /* Keep builtins not used for -traditional-cpp at the end, and
353 update init_builtins() if any more are added. */
354 B("_Pragma", BT_PRAGMA, true),
355 B("__STDC__", BT_STDC, true),
356};
357#undef B
358
359struct builtin_operator
360{
361 const uchar *const name;
362 const unsigned short len;
363 const unsigned short value;
Zack Weinberga9ae4481999-10-29 04:31:14 +0000364};
Zack Weinberga9ae4481999-10-29 04:31:14 +0000365
Zack Weinbergf24a1532002-05-18 00:43:13 +0000366#define B(n, t) { DSC(n), t }
Simon Baldwinc047ce92008-09-18 15:39:08 +0000367static const struct builtin_operator operator_array[] =
Zack Weinbergf24a1532002-05-18 00:43:13 +0000368{
369 B("and", CPP_AND_AND),
370 B("and_eq", CPP_AND_EQ),
371 B("bitand", CPP_AND),
372 B("bitor", CPP_OR),
373 B("compl", CPP_COMPL),
374 B("not", CPP_NOT),
375 B("not_eq", CPP_NOT_EQ),
376 B("or", CPP_OR_OR),
377 B("or_eq", CPP_OR_EQ),
378 B("xor", CPP_XOR),
379 B("xor_eq", CPP_XOR_EQ)
Zack Weinberga9ae4481999-10-29 04:31:14 +0000380};
Zack Weinberg12cf91f2000-05-04 04:38:01 +0000381#undef B
Zack Weinberga9ae4481999-10-29 04:31:14 +0000382
Neil Booth17645b12002-05-23 18:55:27 +0000383/* Mark the C++ named operators in the hash table. */
384static void
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +0000385mark_named_operators (cpp_reader *pfile, int flags)
Neil Booth17645b12002-05-23 18:55:27 +0000386{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000387 const struct builtin_operator *b;
Neil Booth17645b12002-05-23 18:55:27 +0000388
389 for (b = operator_array;
390 b < (operator_array + ARRAY_SIZE (operator_array));
391 b++)
392 {
393 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +0000394 hp->flags |= flags;
Zack Weinberg4977bab2002-12-16 18:23:00 +0000395 hp->is_directive = 0;
396 hp->directive_index = b->value;
Neil Booth17645b12002-05-23 18:55:27 +0000397 }
398}
399
Manuel López-Ibáñezcfc93532009-04-22 15:32:18 +0000400/* Helper function of cpp_type2name. Return the string associated with
401 named operator TYPE. */
402const char *
403cpp_named_operator2name (enum cpp_ttype type)
404{
405 const struct builtin_operator *b;
406
407 for (b = operator_array;
408 b < (operator_array + ARRAY_SIZE (operator_array));
409 b++)
410 {
411 if (type == b->value)
412 return (const char *) b->name;
413 }
414
415 return NULL;
416}
417
Neil Boothc1bad962003-03-15 12:18:47 +0000418void
Ollie Wildccfc4c92007-07-30 18:29:20 +0000419cpp_init_special_builtins (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000420{
Simon Baldwinc047ce92008-09-18 15:39:08 +0000421 const struct builtin_macro *b;
Neil Booth278c4662002-06-19 05:40:08 +0000422 size_t n = ARRAY_SIZE (builtin_array);
Neil Booth771c4df2000-09-07 20:31:06 +0000423
Neil Booth278c4662002-06-19 05:40:08 +0000424 if (CPP_OPTION (pfile, traditional))
425 n -= 2;
Jakub Jelinek83900992006-01-23 22:50:15 +0100426 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
427 || CPP_OPTION (pfile, std))
Ollie Wildccfc4c92007-07-30 18:29:20 +0000428 n--;
Neil Booth278c4662002-06-19 05:40:08 +0000429
Jakub Jelinek83900992006-01-23 22:50:15 +0100430 for (b = builtin_array; b < builtin_array + n; b++)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000431 {
Zack Weinbergf24a1532002-05-18 00:43:13 +0000432 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
433 hp->type = NT_MACRO;
Simon Baldwinc047ce92008-09-18 15:39:08 +0000434 hp->flags |= NODE_BUILTIN;
435 if (b->always_warn_if_redefined
436 || CPP_OPTION (pfile, warn_builtin_macro_redefined))
437 hp->flags |= NODE_WARN;
Ian Lance Taylor7e5487a2009-05-16 06:54:11 +0000438 hp->value.builtin = (enum cpp_builtin_type) b->value;
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000439 }
Ollie Wildccfc4c92007-07-30 18:29:20 +0000440}
441
442/* Read the builtins table above and enter them, and language-specific
443 macros, into the hash table. HOSTED is true if this is a hosted
444 environment. */
445void
446cpp_init_builtins (cpp_reader *pfile, int hosted)
447{
448 cpp_init_special_builtins (pfile);
449
450 if (!CPP_OPTION (pfile, traditional)
451 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
452 || CPP_OPTION (pfile, std)))
453 _cpp_define_builtin (pfile, "__STDC__ 1");
Neil Boothc740cee2001-02-20 22:52:11 +0000454
455 if (CPP_OPTION (pfile, cplusplus))
Neil Booth3d90d292002-05-04 20:15:00 +0000456 _cpp_define_builtin (pfile, "__cplusplus 1");
Zack Weinberg2a1dc0d2002-05-21 21:55:37 +0000457 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
458 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000459 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
Neil Boothc740cee2001-02-20 22:52:11 +0000460 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
Joseph Myers2778d762010-04-25 22:54:22 +0100461 else if (CPP_OPTION (pfile, lang) == CLK_STDC1X
462 || CPP_OPTION (pfile, lang) == CLK_GNUC1X)
463 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201000L");
Neil Boothc740cee2001-02-20 22:52:11 +0000464 else if (CPP_OPTION (pfile, c99))
465 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
466
Neil Booth6e270172003-05-11 13:43:36 +0000467 if (hosted)
Neil Booth58b5b892003-05-11 15:15:35 +0000468 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
Neil Booth6e270172003-05-11 13:43:36 +0000469 else
Neil Booth58b5b892003-05-11 15:15:35 +0000470 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
Neil Booth6e270172003-05-11 13:43:36 +0000471
Ziemowit Laski0f7866e2002-08-10 02:18:28 +0000472 if (CPP_OPTION (pfile, objc))
473 _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth4a58aab2000-11-18 12:18:09 +0000474}
475
Neil Booth2443d4e2002-05-05 17:05:09 +0000476/* Sanity-checks are dependent on command-line options, so it is
477 called as a subroutine of cpp_read_main_file (). */
478#if ENABLE_CHECKING
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000479static void sanity_checks (cpp_reader *);
480static void sanity_checks (cpp_reader *pfile)
Neil Booth2443d4e2002-05-05 17:05:09 +0000481{
482 cppchar_t test = 0;
Neil Boothc9220e32002-05-27 05:51:14 +0000483 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
Neil Booth2443d4e2002-05-05 17:05:09 +0000484
485 /* Sanity checks for assumptions about CPP arithmetic and target
486 type precisions made by cpplib. */
487 test--;
488 if (test < 1)
John David Anglin0527bc42003-11-01 22:56:54 +0000489 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
Neil Booth2443d4e2002-05-05 17:05:09 +0000490
Neil Boothc9220e32002-05-27 05:51:14 +0000491 if (CPP_OPTION (pfile, precision) > max_precision)
John David Anglin0527bc42003-11-01 22:56:54 +0000492 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000493 "preprocessor arithmetic has maximum precision of %lu bits;"
494 " target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000495 (unsigned long) max_precision,
496 (unsigned long) CPP_OPTION (pfile, precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000497
498 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000499 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000500 "CPP arithmetic must be at least as precise as a target int");
501
502 if (CPP_OPTION (pfile, char_precision) < 8)
John David Anglin0527bc42003-11-01 22:56:54 +0000503 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
Neil Booth2443d4e2002-05-05 17:05:09 +0000504
505 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000506 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000507 "target wchar_t is narrower than target char");
508
509 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
John David Anglin0527bc42003-11-01 22:56:54 +0000510 cpp_error (pfile, CPP_DL_ICE,
Neil Booth2443d4e2002-05-05 17:05:09 +0000511 "target int is narrower than target char");
512
Neil Boothc9220e32002-05-27 05:51:14 +0000513 /* This is assumed in eval_token() and could be fixed if necessary. */
514 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
John David Anglin0527bc42003-11-01 22:56:54 +0000515 cpp_error (pfile, CPP_DL_ICE,
516 "CPP half-integer narrower than CPP character");
Neil Boothc9220e32002-05-27 05:51:14 +0000517
Neil Booth2443d4e2002-05-05 17:05:09 +0000518 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
John David Anglin0527bc42003-11-01 22:56:54 +0000519 cpp_error (pfile, CPP_DL_ICE,
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000520 "CPP on this host cannot handle wide character constants over"
521 " %lu bits, but the target requires %lu bits",
Neil Boothc9220e32002-05-27 05:51:14 +0000522 (unsigned long) BITS_PER_CPPCHAR_T,
523 (unsigned long) CPP_OPTION (pfile, wchar_precision));
Neil Booth2443d4e2002-05-05 17:05:09 +0000524}
525#else
526# define sanity_checks(PFILE)
527#endif
528
Neil Boothf5e99452001-11-15 10:01:10 +0000529/* This is called after options have been parsed, and partially
Kazu Hirata59e4e212003-08-19 21:04:38 +0000530 processed. */
Per Bothner4169c322003-08-09 22:14:07 +0000531void
532cpp_post_options (cpp_reader *pfile)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000533{
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +0000534 int flags;
535
Neil Booth2443d4e2002-05-05 17:05:09 +0000536 sanity_checks (pfile);
537
Neil Boothf4ff5a62002-08-12 22:44:30 +0000538 post_options (pfile);
539
Neil Boothc19b12c2003-03-12 21:31:51 +0000540 /* Mark named operators before handling command line macros. */
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +0000541 flags = 0;
Neil Boothc19b12c2003-03-12 21:31:51 +0000542 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
Ian Lance Taylor3d8b2a92009-06-12 19:43:25 +0000543 flags |= NODE_OPERATOR;
544 if (CPP_OPTION (pfile, warn_cxx_operator_names))
545 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
546 if (flags != 0)
547 mark_named_operators (pfile, flags);
Per Bothner4169c322003-08-09 22:14:07 +0000548}
Neil Boothc19b12c2003-03-12 21:31:51 +0000549
Per Bothner4dc299f2003-10-02 07:23:27 +0000550/* Setup for processing input from the file named FNAME, or stdin if
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800551 it is the empty string. Return the original filename
552 on success (e.g. foo.i->foo.c), or NULL on failure. */
553const char *
554cpp_read_main_file (cpp_reader *pfile, const char *fname)
Per Bothner4169c322003-08-09 22:14:07 +0000555{
Neil Boothf4ff5a62002-08-12 22:44:30 +0000556 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
557 {
558 if (!pfile->deps)
559 pfile->deps = deps_init ();
560
561 /* Set the default target (if there is none already). */
562 deps_add_default_target (pfile->deps, fname);
563 }
Neil Booth96302432001-01-07 15:17:07 +0000564
Per Bothner4dc299f2003-10-02 07:23:27 +0000565 pfile->main_file
James E Wilson6568f342005-10-21 10:54:20 -0700566 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
Per Bothner4dc299f2003-10-02 07:23:27 +0000567 if (_cpp_find_failed (pfile->main_file))
Per Bothner3092d0f2004-04-22 18:41:04 -0700568 return NULL;
Neil Boothf5e99452001-11-15 10:01:10 +0000569
Per Bothner4dc299f2003-10-02 07:23:27 +0000570 _cpp_stack_file (pfile, pfile->main_file, false);
571
572 /* For foo.i, read the original filename foo.c now, for the benefit
573 of the front ends. */
574 if (CPP_OPTION (pfile, preprocessed))
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800575 {
576 read_original_filename (pfile);
Per Bothner12f9df42004-02-11 07:29:30 -0800577 fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800578 }
579 return fname;
Neil Boothf5e99452001-11-15 10:01:10 +0000580}
581
582/* For preprocessed files, if the first tokens are of the form # NUM.
583 handle the directive so we know the original file name. This will
584 generate file_change callbacks, which the front ends must handle
585 appropriately given their state of initialization. */
586static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000587read_original_filename (cpp_reader *pfile)
Neil Boothf5e99452001-11-15 10:01:10 +0000588{
589 const cpp_token *token, *token1;
590
591 /* Lex ahead; if the first tokens are of the form # NUM, then
592 process the directive, otherwise back up. */
593 token = _cpp_lex_direct (pfile);
594 if (token->type == CPP_HASH)
595 {
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100596 pfile->state.in_directive = 1;
Neil Boothf5e99452001-11-15 10:01:10 +0000597 token1 = _cpp_lex_direct (pfile);
598 _cpp_backup_tokens (pfile, 1);
Uros Bizjak456b8ce2005-11-09 07:30:03 +0100599 pfile->state.in_directive = 0;
Neil Boothf5e99452001-11-15 10:01:10 +0000600
601 /* If it's a #line directive, handle it. */
Jakub Jelinek709d7162010-02-11 20:49:17 +0100602 if (token1->type == CPP_NUMBER
603 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
Neil Boothf5e99452001-11-15 10:01:10 +0000604 {
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000605 read_original_directory (pfile);
Neil Boothf5e99452001-11-15 10:01:10 +0000606 return;
607 }
608 }
609
610 /* Backup as if nothing happened. */
611 _cpp_backup_tokens (pfile, 1);
612}
613
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000614/* For preprocessed files, if the tokens following the first filename
615 line is of the form # <line> "/path/name//", handle the
616 directive so we know the original current directory. */
617static void
618read_original_directory (cpp_reader *pfile)
619{
620 const cpp_token *hash, *token;
621
622 /* Lex ahead; if the first tokens are of the form # NUM, then
623 process the directive, otherwise back up. */
624 hash = _cpp_lex_direct (pfile);
625 if (hash->type != CPP_HASH)
626 {
627 _cpp_backup_tokens (pfile, 1);
628 return;
629 }
630
631 token = _cpp_lex_direct (pfile);
632
633 if (token->type != CPP_NUMBER)
634 {
635 _cpp_backup_tokens (pfile, 2);
636 return;
637 }
638
639 token = _cpp_lex_direct (pfile);
640
641 if (token->type != CPP_STRING
642 || ! (token->val.str.len >= 5
Kai Tietz44898002011-03-25 20:11:26 +0100643 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
644 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000645 {
646 _cpp_backup_tokens (pfile, 3);
647 return;
648 }
649
650 if (pfile->cb.dir_change)
651 {
Gabriel Dos Reisc3f829c2005-05-28 15:52:48 +0000652 char *debugdir = (char *) alloca (token->val.str.len - 3);
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000653
654 memcpy (debugdir, (const char *) token->val.str.text + 1,
655 token->val.str.len - 4);
656 debugdir[token->val.str.len - 4] = '\0';
657
658 pfile->cb.dir_change (pfile, debugdir);
Per Bothner8e9ea4d2004-02-04 22:52:26 -0800659 }
Alexandre Olivab20d9f02003-08-05 21:15:57 +0000660}
661
Neil Booth76c3e732002-08-11 22:22:28 +0000662/* This is called at the end of preprocessing. It pops the last
Joseph Myers148e4212009-03-29 23:56:07 +0100663 buffer and writes dependency output.
Eric Christopher16dd5cf2004-02-02 20:20:58 +0000664
Neil Booth76c3e732002-08-11 22:22:28 +0000665 Maybe it should also reset state, such that you could call
666 cpp_start_read with a new filename to restart processing. */
Joseph Myers148e4212009-03-29 23:56:07 +0100667void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000668cpp_finish (cpp_reader *pfile, FILE *deps_stream)
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000669{
Neil Bootha69cbaa2002-07-23 22:57:49 +0000670 /* Warn about unused macros before popping the final buffer. */
671 if (CPP_OPTION (pfile, warn_unused_macros))
672 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
673
Gabriel Dos Reisa2566ae2005-01-02 01:32:21 +0000674 /* lex.c leaves the final buffer on the stack. This it so that
Neil Booth7364fdd2001-08-07 20:37:26 +0000675 it returns an unending stream of CPP_EOFs to the client. If we
Joseph Myersa1f300c2001-11-23 02:05:19 +0000676 popped the buffer, we'd dereference a NULL buffer pointer and
Neil Booth7364fdd2001-08-07 20:37:26 +0000677 segfault. It's nice to allow the client to do worry-free excess
678 cpp_get_token calls. */
679 while (pfile->buffer)
680 _cpp_pop_buffer (pfile);
Zack Weinbergc1212d22000-02-06 23:46:18 +0000681
Neil Boothf4ff5a62002-08-12 22:44:30 +0000682 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
Joseph Myers148e4212009-03-29 23:56:07 +0100683 && deps_stream)
Neil Booth76c3e732002-08-11 22:22:28 +0000684 {
685 deps_write (pfile->deps, deps_stream, 72);
686
Neil Boothf4ff5a62002-08-12 22:44:30 +0000687 if (CPP_OPTION (pfile, deps.phony_targets))
Neil Booth76c3e732002-08-11 22:22:28 +0000688 deps_phony_targets (pfile->deps, deps_stream);
689 }
Zack Weinberg3caee4a1999-04-26 16:41:02 +0000690
Zack Weinbergd4506962000-06-28 19:03:08 +0000691 /* Report on headers that could use multiple include guards. */
692 if (CPP_OPTION (pfile, print_include_names))
Zack Weinbergc71f8352000-07-05 05:33:57 +0000693 _cpp_report_missing_guards (pfile);
Zack Weinberg6de1e2a1999-02-18 15:35:49 +0000694}
695
Neil Boothf4ff5a62002-08-12 22:44:30 +0000696static void
Zack Weinberg6cf87ca2003-06-17 06:17:44 +0000697post_options (cpp_reader *pfile)
Neil Booth96302432001-01-07 15:17:07 +0000698{
699 /* -Wtraditional is not useful in C++ mode. */
700 if (CPP_OPTION (pfile, cplusplus))
Joseph Myerse3339d02010-09-29 15:49:14 +0100701 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
Neil Booth96302432001-01-07 15:17:07 +0000702
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000703 /* Permanently disable macro expansion if we are rescanning
Neil Booth43612ff2002-05-18 08:23:20 +0000704 preprocessed text. Read preprocesed source in ISO mode. */
Zack Weinberg6d4587f2001-05-10 00:07:23 +0000705 if (CPP_OPTION (pfile, preprocessed))
Neil Booth43612ff2002-05-18 08:23:20 +0000706 {
Ollie Wildccfc4c92007-07-30 18:29:20 +0000707 if (!CPP_OPTION (pfile, directives_only))
708 pfile->state.prevent_expansion = 1;
Neil Booth43612ff2002-05-18 08:23:20 +0000709 CPP_OPTION (pfile, traditional) = 0;
710 }
711
Neil Bootha8eb6042003-05-04 20:03:55 +0000712 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
713 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
714
Neil Booth43612ff2002-05-18 08:23:20 +0000715 if (CPP_OPTION (pfile, traditional))
Neil Booth26aea072003-04-19 00:22:51 +0000716 {
Neil Bootha09d4742004-07-04 12:57:50 +0000717 CPP_OPTION (pfile, cplusplus_comments) = 0;
718
Neil Booth26aea072003-04-19 00:22:51 +0000719 CPP_OPTION (pfile, trigraphs) = 0;
720 CPP_OPTION (pfile, warn_trigraphs) = 0;
721 }
Neil Booth7ca3d2b2001-01-07 11:15:13 +0000722}