]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
rs6000: New iterator CCEITHER
[thirdparty/gcc.git] / libcpp / init.c
CommitLineData
a852e3b1 1/* CPP Library.
fbd26352 2 Copyright (C) 1986-2019 Free Software Foundation, Inc.
a852e3b1 3 Contributed by Per Bothner, 1994-95.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
6
7This program is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by the
6bc9506f 9Free Software Foundation; either version 3, or (at your option) any
a852e3b1 10later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
6bc9506f 18along with this program; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
a852e3b1 20
a852e3b1 21#include "config.h"
22#include "system.h"
6d71dc85 23#include "cpplib.h"
d856c8a6 24#include "internal.h"
62adb1fe 25#include "mkdeps.h"
21164c01 26#include "localedir.h"
bb7824b5 27#include "filenames.h"
1e8b9746 28
52bc861d 29#ifndef ENABLE_CANONICAL_SYSTEM_HEADERS
1c9b820a 30#ifdef HAVE_DOS_BASED_FILE_SYSTEM
31#define ENABLE_CANONICAL_SYSTEM_HEADERS 1
32#else
52bc861d 33#define ENABLE_CANONICAL_SYSTEM_HEADERS 0
34#endif
1c9b820a 35#endif
52bc861d 36
f7fdd7a1 37static void init_library (void);
2a6a6991 38static void mark_named_operators (cpp_reader *, int);
f7fdd7a1 39static void read_original_filename (cpp_reader *);
e7aa92b2 40static void read_original_directory (cpp_reader *);
f7fdd7a1 41static void post_options (cpp_reader *);
6d71dc85 42
b3954366 43/* If we have designated initializers (GCC >2.7) these tables can be
44 initialized, constant data. Otherwise, they have to be filled in at
e057cf7c 45 runtime. */
b3954366 46#if HAVE_DESIGNATED_INITIALIZERS
5ba37007 47
8d1752de 48#define init_trigraph_map() /* Nothing. */
b3954366 49#define TRIGRAPH_MAP \
b6d18b0a 50__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
b3954366 51
5ba37007 52#define END };
4f98874d 53#define s(p, v) [p] = v,
b3954366 54
5ba37007 55#else
b3954366 56
b6d18b0a 57#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
f7fdd7a1 58 static void init_trigraph_map (void) { \
b3954366 59 unsigned char *x = _cpp_trigraph_map;
60
2ff3ad1d 61#define END }
4f98874d 62#define s(p, v) x[p] = v;
b3954366 63
5ba37007 64#endif
6d71dc85 65
b3954366 66TRIGRAPH_MAP
67 s('=', '#') s(')', ']') s('!', '|')
68 s('(', '[') s('\'', '^') s('>', '}')
69 s('/', '\\') s('<', '{') s('-', '~')
70END
71
5ba37007 72#undef s
4f98874d 73#undef END
b3954366 74#undef TRIGRAPH_MAP
6d71dc85 75
e484a1cc 76/* A set of booleans indicating what CPP features each source language
77 requires. */
f48efcc3 78struct lang_flags
79{
80 char c99;
f48efcc3 81 char cplusplus;
82 char extended_numbers;
865c4e44 83 char extended_identifiers;
460f52aa 84 char c11_identifiers;
ed909a09 85 char std;
f48efcc3 86 char digraphs;
924bbf02 87 char uliterals;
6f6f3dd7 88 char rliterals;
244db24d 89 char user_literals;
d8c8614f 90 char binary_constants;
4d6f7dd4 91 char digit_separators;
4e454776 92 char trigraphs;
30b1ba42 93 char utf8_char_literals;
86136db8 94 char va_opt;
f48efcc3 95};
96
f48efcc3 97static const struct lang_flags lang_defaults[] =
86136db8 98{ /* c99 c++ xnum xid c11 std digr ulit rlit udlit bincst digsep trig u8chlit vaopt */
99 /* GNUC89 */ { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 },
100 /* GNUC99 */ { 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
101 /* GNUC11 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
102 /* GNUC17 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
fcbe1d64 103 /* GNUC2X */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
86136db8 104 /* STDC89 */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
105 /* STDC94 */ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
106 /* STDC99 */ { 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
107 /* STDC11 */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0 },
108 /* STDC17 */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0 },
fcbe1d64 109 /* STDC2X */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0 },
86136db8 110 /* GNUCXX */ { 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 },
111 /* CXX98 */ { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
112 /* GNUCXX11 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
113 /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0 },
114 /* GNUCXX14 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1 },
115 /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
116 /* GNUCXX17 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
117 /* CXX17 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0 },
118 /* GNUCXX2A */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
119 /* CXX2A */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
120 /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
f48efcc3 121};
122
e484a1cc 123/* Sets internal flags correctly for a given language. */
3ae4c9f3 124void
f7fdd7a1 125cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
fad0ffbb 126{
f48efcc3 127 const struct lang_flags *l = &lang_defaults[(int) lang];
b1a9ff83 128
5db5d057 129 CPP_OPTION (pfile, lang) = lang;
fad0ffbb 130
865c4e44 131 CPP_OPTION (pfile, c99) = l->c99;
132 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
133 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
134 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
460f52aa 135 CPP_OPTION (pfile, c11_identifiers) = l->c11_identifiers;
865c4e44 136 CPP_OPTION (pfile, std) = l->std;
865c4e44 137 CPP_OPTION (pfile, digraphs) = l->digraphs;
924bbf02 138 CPP_OPTION (pfile, uliterals) = l->uliterals;
6f6f3dd7 139 CPP_OPTION (pfile, rliterals) = l->rliterals;
244db24d 140 CPP_OPTION (pfile, user_literals) = l->user_literals;
d8c8614f 141 CPP_OPTION (pfile, binary_constants) = l->binary_constants;
4d6f7dd4 142 CPP_OPTION (pfile, digit_separators) = l->digit_separators;
4e454776 143 CPP_OPTION (pfile, trigraphs) = l->trigraphs;
30b1ba42 144 CPP_OPTION (pfile, utf8_char_literals) = l->utf8_char_literals;
86136db8 145 CPP_OPTION (pfile, va_opt) = l->va_opt;
fad0ffbb 146}
147
fc3c7720 148/* Initialize library global state. */
9751c00e 149static void
f7fdd7a1 150init_library (void)
9751c00e 151{
b3a8144e 152 static int initialized = 0;
153
154 if (! initialized)
155 {
156 initialized = 1;
157
b735cc56 158 _cpp_init_lexer ();
159
b3a8144e 160 /* Set up the trigraph map. This doesn't need to do anything if
161 we were compiled with a compiler that supports C99 designated
162 initializers. */
163 init_trigraph_map ();
d856c8a6 164
165#ifdef ENABLE_NLS
1ed7d058 166 (void) bindtextdomain (PACKAGE, LOCALEDIR);
d856c8a6 167#endif
b3a8144e 168 }
9751c00e 169}
170
2c0e001b 171/* Initialize a cpp_reader structure. */
9751c00e 172cpp_reader *
2b15d2ba 173cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
ceec9c13 174 struct line_maps *line_table)
6d71dc85 175{
b3a8144e 176 cpp_reader *pfile;
79bd622b 177
457275b6 178 /* Initialize this instance of the library if it hasn't been already. */
c77d825d 179 init_library ();
b3a8144e 180
720aca92 181 pfile = XCNEW (cpp_reader);
ce70f433 182 memset (&pfile->base_context, 0, sizeof (pfile->base_context));
79bd622b 183
3ae4c9f3 184 cpp_set_lang (pfile, lang);
318fdd81 185 CPP_OPTION (pfile, warn_multichar) = 1;
2ff3ad1d 186 CPP_OPTION (pfile, discard_comments) = 1;
d3f7919d 187 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
3b304865 188 CPP_OPTION (pfile, tabstop) = 8;
624a7570 189 CPP_OPTION (pfile, operator_names) = 1;
3078f2b2 190 CPP_OPTION (pfile, warn_trigraphs) = 2;
923acdd5 191 CPP_OPTION (pfile, warn_endif_labels) = 1;
04afd878 192 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
1b03cc89 193 CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
5ae82d58 194 CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
195 CPP_OPTION (pfile, cpp_warn_long_long) = 0;
14e33bb6 196 CPP_OPTION (pfile, dollars_in_ident) = 1;
f0c2775b 197 CPP_OPTION (pfile, warn_dollars) = 1;
05d51900 198 CPP_OPTION (pfile, warn_variadic_macros) = 1;
2ad0b097 199 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
12663602 200 CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
611f1003 201 /* By default, track locations of tokens resulting from macro
202 expansion. The '2' means, track the locations with the highest
203 accuracy. Read the comments for struct
204 cpp_options::track_macro_expansion to learn about the other
205 values. */
206 CPP_OPTION (pfile, track_macro_expansion) = 2;
bce47149 207 CPP_OPTION (pfile, warn_normalize) = normalized_C;
76d340ac 208 CPP_OPTION (pfile, warn_literal_suffix) = 1;
52bc861d 209 CPP_OPTION (pfile, canonical_system_headers)
210 = ENABLE_CANONICAL_SYSTEM_HEADERS;
2dd00636 211 CPP_OPTION (pfile, ext_numeric_literals) = 1;
9148bda3 212 CPP_OPTION (pfile, warn_date_time) = 0;
2ff3ad1d 213
1893c11a 214 /* Default CPP arithmetic to something sensible for the host for the
215 benefit of dumb users like fix-header. */
dc0b244f 216 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
1893c11a 217 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
218 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
219 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
965e9876 220 CPP_OPTION (pfile, unsigned_char) = 0;
d932f956 221 CPP_OPTION (pfile, unsigned_wchar) = 1;
ebc03810 222 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
223
224 /* Default to no charset conversion. */
57ba96e9 225 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
ebc03810 226 CPP_OPTION (pfile, wide_charset) = 0;
13c457e1 227
57ba96e9 228 /* Default the input character set to UTF-8. */
229 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
787c3d1a 230
1824e2bd 231 /* A fake empty "directory" used as the starting point for files
232 looked up without a search path. Name cannot be '/' because we
233 don't want to prepend anything at all to filenames using it. All
234 other entries are correct zero-initialized. */
235 pfile->no_search_path.name = (char *) "";
236
dbddc569 237 /* Initialize the line map. */
ceec9c13 238 pfile->line_table = line_table;
38692459 239
8d1752de 240 /* Initialize lexer state. */
79bd622b 241 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
242
f9b5f742 243 /* Set up static tokens. */
f9b5f742 244 pfile->avoid_paste.type = CPP_PADDING;
245 pfile->avoid_paste.val.source = NULL;
246 pfile->eof.type = CPP_EOF;
247 pfile->eof.flags = 0;
79bd622b 248
83dcbb5c 249 /* Create a token buffer for the lexer. */
250 _cpp_init_tokenrun (&pfile->base_run, 250);
251 pfile->cur_run = &pfile->base_run;
252 pfile->cur_token = pfile->base_run.base;
83dcbb5c 253
457275b6 254 /* Initialize the base context. */
79bd622b 255 pfile->context = &pfile->base_context;
ce70f433 256 pfile->base_context.c.macro = 0;
79bd622b 257 pfile->base_context.prev = pfile->base_context.next = 0;
258
e6a5f963 259 /* Aligned and unaligned storage. */
260 pfile->a_buff = _cpp_get_buff (pfile, 0);
1fdf6039 261 pfile->u_buff = _cpp_get_buff (pfile, 0);
79bd622b 262
038c21f1 263 /* Initialize table for push_macro/pop_macro. */
264 pfile->pushed_macros = 0;
265
6ea2c7a3 266 /* Do not force token locations by default. */
048062ed 267 pfile->forced_token_location = 0;
6ea2c7a3 268
dfa5c0d3 269 /* Initialize source_date_epoch to -2 (not yet set). */
270 pfile->source_date_epoch = (time_t) -2;
271
5bbf045f 272 /* The expression parser stack. */
273 _cpp_expand_op_stack (pfile);
274
457275b6 275 /* Initialize the buffer obstack. */
cc0a8c77 276 obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
0d086e18 277
1824e2bd 278 _cpp_init_files (pfile);
9751c00e 279
568139e4 280 _cpp_init_hashtable (pfile, table);
281
9751c00e 282 return pfile;
e2f9a79f 283}
284
931b0a0f 285/* Set the line_table entry in PFILE. This is called after reading a
286 PCH file, as the old line_table will be incorrect. */
287void
288cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
289{
290 pfile->line_table = line_table;
291}
292
9bd97637 293/* Free resources used by PFILE. Accessing PFILE after this function
974e2c0c 294 returns leads to undefined behavior. Returns the error count. */
6019c708 295void
f7fdd7a1 296cpp_destroy (cpp_reader *pfile)
6d71dc85 297{
79bd622b 298 cpp_context *context, *contextn;
038c21f1 299 struct def_pragma_macro *pmacro;
729d2022 300 tokenrun *run, *runn;
956c6108 301 int i;
11d10d3f 302
5bbf045f 303 free (pfile->op_stack);
02516fb9 304
5b201908 305 while (CPP_BUFFER (pfile) != NULL)
4dfe8b74 306 _cpp_pop_buffer (pfile);
6d71dc85 307
dd045aee 308 free (pfile->out.base);
0bb65704 309
79bd622b 310 if (pfile->macro_buffer)
8744fb7e 311 {
b9a7cc69 312 free (pfile->macro_buffer);
8744fb7e 313 pfile->macro_buffer = NULL;
314 pfile->macro_buffer_len = 0;
315 }
79bd622b 316
61191376 317 if (pfile->deps)
318 deps_free (pfile->deps);
0d086e18 319 obstack_free (&pfile->buffer_ob, 0);
62adb1fe 320
0d086e18 321 _cpp_destroy_hashtable (pfile);
1824e2bd 322 _cpp_cleanup_files (pfile);
ebc03810 323 _cpp_destroy_iconv (pfile);
11d10d3f 324
e6a5f963 325 _cpp_free_buff (pfile->a_buff);
1fdf6039 326 _cpp_free_buff (pfile->u_buff);
06c92cbc 327 _cpp_free_buff (pfile->free_buffs);
79bd622b 328
729d2022 329 for (run = &pfile->base_run; run; run = runn)
330 {
331 runn = run->next;
332 free (run->base);
333 if (run != &pfile->base_run)
334 free (run);
335 }
336
79bd622b 337 for (context = pfile->base_context.next; context; context = contextn)
338 {
339 contextn = context->next;
340 free (context);
341 }
9bd97637 342
956c6108 343 if (pfile->comments.entries)
344 {
345 for (i = 0; i < pfile->comments.count; i++)
346 free (pfile->comments.entries[i].comment);
347
348 free (pfile->comments.entries);
349 }
038c21f1 350 if (pfile->pushed_macros)
351 {
352 do
353 {
354 pmacro = pfile->pushed_macros;
355 pfile->pushed_macros = pmacro->next;
356 free (pmacro->name);
357 free (pmacro);
358 }
359 while (pfile->pushed_macros);
360 }
956c6108 361
9bd97637 362 free (pfile);
6d71dc85 363}
364
79bd622b 365/* This structure defines one built-in identifier. A node will be
06579c95 366 entered in the hash table under the name NAME, with value VALUE.
367
368 There are two tables of these. builtin_array holds all the
369 "builtin" macros: these are handled by builtin_macro() in
f03668bd 370 macro.c. Builtin is somewhat of a misnomer -- the property of
06579c95 371 interest is that these macros require special code to compute their
ced52ffd 372 expansions. The value is a "cpp_builtin_type" enumerator.
06579c95 373
374 operator_array holds the C++ named operators. These are keywords
375 which act as aliases for punctuators. In C++, they cannot be
376 altered through #define, and #if recognizes them as operators. In
377 C, these are not entered into the hash table at all (but see
378 <iso646.h>). The value is a token-type enumerator. */
2ad0b097 379struct builtin_macro
5ba37007 380{
2ad0b097 381 const uchar *const name;
382 const unsigned short len;
383 const unsigned short value;
384 const bool always_warn_if_redefined;
5ba37007 385};
79bd622b 386
2ad0b097 387#define B(n, t, f) { DSC(n), t, f }
388static const struct builtin_macro builtin_array[] =
6d71dc85 389{
2ad0b097 390 B("__TIMESTAMP__", BT_TIMESTAMP, false),
391 B("__TIME__", BT_TIME, false),
392 B("__DATE__", BT_DATE, false),
393 B("__FILE__", BT_FILE, false),
394 B("__BASE_FILE__", BT_BASE_FILE, false),
395 B("__LINE__", BT_SPECLINE, true),
396 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
397 B("__COUNTER__", BT_COUNTER, true),
33058239 398 B("__has_attribute", BT_HAS_ATTRIBUTE, true),
399 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
9c343313 400 /* Keep builtins not used for -traditional-cpp at the end, and
401 update init_builtins() if any more are added. */
2ad0b097 402 B("_Pragma", BT_PRAGMA, true),
403 B("__STDC__", BT_STDC, true),
404};
405#undef B
406
407struct builtin_operator
408{
409 const uchar *const name;
410 const unsigned short len;
411 const unsigned short value;
06579c95 412};
31674461 413
2ad0b097 414#define B(n, t) { DSC(n), t }
415static const struct builtin_operator operator_array[] =
06579c95 416{
417 B("and", CPP_AND_AND),
418 B("and_eq", CPP_AND_EQ),
419 B("bitand", CPP_AND),
420 B("bitor", CPP_OR),
421 B("compl", CPP_COMPL),
422 B("not", CPP_NOT),
423 B("not_eq", CPP_NOT_EQ),
424 B("or", CPP_OR_OR),
425 B("or_eq", CPP_OR_EQ),
426 B("xor", CPP_XOR),
427 B("xor_eq", CPP_XOR_EQ)
5ba37007 428};
e057cf7c 429#undef B
5ba37007 430
df64d85e 431/* Mark the C++ named operators in the hash table. */
432static void
2a6a6991 433mark_named_operators (cpp_reader *pfile, int flags)
df64d85e 434{
2ad0b097 435 const struct builtin_operator *b;
df64d85e 436
437 for (b = operator_array;
438 b < (operator_array + ARRAY_SIZE (operator_array));
439 b++)
440 {
441 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
2a6a6991 442 hp->flags |= flags;
805e22b2 443 hp->is_directive = 0;
444 hp->directive_index = b->value;
df64d85e 445 }
446}
447
ba99525e 448/* Helper function of cpp_type2name. Return the string associated with
449 named operator TYPE. */
450const char *
451cpp_named_operator2name (enum cpp_ttype type)
452{
453 const struct builtin_operator *b;
454
455 for (b = operator_array;
456 b < (operator_array + ARRAY_SIZE (operator_array));
457 b++)
458 {
459 if (type == b->value)
460 return (const char *) b->name;
461 }
462
463 return NULL;
464}
465
fc3c7720 466void
fcde64dc 467cpp_init_special_builtins (cpp_reader *pfile)
5ba37007 468{
2ad0b097 469 const struct builtin_macro *b;
9c343313 470 size_t n = ARRAY_SIZE (builtin_array);
4e464091 471
9c343313 472 if (CPP_OPTION (pfile, traditional))
473 n -= 2;
31614f7c 474 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
475 || CPP_OPTION (pfile, std))
fcde64dc 476 n--;
9c343313 477
31614f7c 478 for (b = builtin_array; b < builtin_array + n; b++)
6d71dc85 479 {
33058239 480 if (b->value == BT_HAS_ATTRIBUTE
481 && (CPP_OPTION (pfile, lang) == CLK_ASM
482 || pfile->cb.has_attribute == NULL))
483 continue;
06579c95 484 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
33bb12b1 485 hp->type = NT_BUILTIN_MACRO;
a7d2e480 486 if (b->always_warn_if_redefined)
2ad0b097 487 hp->flags |= NODE_WARN;
26dbec0a 488 hp->value.builtin = (enum cpp_builtin_type) b->value;
6d71dc85 489 }
fcde64dc 490}
491
492/* Read the builtins table above and enter them, and language-specific
493 macros, into the hash table. HOSTED is true if this is a hosted
494 environment. */
495void
496cpp_init_builtins (cpp_reader *pfile, int hosted)
497{
498 cpp_init_special_builtins (pfile);
499
500 if (!CPP_OPTION (pfile, traditional)
501 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
502 || CPP_OPTION (pfile, std)))
503 _cpp_define_builtin (pfile, "__STDC__ 1");
eef6c20f 504
505 if (CPP_OPTION (pfile, cplusplus))
de803ff2 506 {
96bf2948 507 if (CPP_OPTION (pfile, lang) == CLK_CXX2A
508 || CPP_OPTION (pfile, lang) == CLK_GNUCXX2A)
509 _cpp_define_builtin (pfile, "__cplusplus 201709L");
510 else if (CPP_OPTION (pfile, lang) == CLK_CXX17
40e2decb 511 || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
67234c37 512 _cpp_define_builtin (pfile, "__cplusplus 201703L");
4e454776 513 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
514 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
515 _cpp_define_builtin (pfile, "__cplusplus 201402L");
1638c736 516 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
517 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
de803ff2 518 _cpp_define_builtin (pfile, "__cplusplus 201103L");
519 else
520 _cpp_define_builtin (pfile, "__cplusplus 199711L");
521 }
965e9876 522 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
523 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
952e555e 524 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
eef6c20f 525 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
fcbe1d64 526 else if (CPP_OPTION (pfile, lang) == CLK_STDC2X
527 || CPP_OPTION (pfile, lang) == CLK_GNUC2X)
528 _cpp_define_builtin (pfile, "__STDC_VERSION__ 202000L");
a0f44249 529 else if (CPP_OPTION (pfile, lang) == CLK_STDC17
530 || CPP_OPTION (pfile, lang) == CLK_GNUC17)
531 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201710L");
32074525 532 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
533 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
534 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
eef6c20f 535 else if (CPP_OPTION (pfile, c99))
536 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
537
6f6f3dd7 538 if (CPP_OPTION (pfile, uliterals)
4e454776 539 && !(CPP_OPTION (pfile, cplusplus)
540 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
541 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
6f6f3dd7 542 {
543 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
544 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
545 }
546
4a3ce7db 547 if (hosted)
b47f91ec 548 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
4a3ce7db 549 else
b47f91ec 550 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
4a3ce7db 551
952e555e 552 if (CPP_OPTION (pfile, objc))
553 _cpp_define_builtin (pfile, "__OBJC__ 1");
8d1752de 554}
555
1893c11a 556/* Sanity-checks are dependent on command-line options, so it is
e3e8c48c 557 called as a subroutine of cpp_read_main_file. */
cfec10de 558#if CHECKING_P
f7fdd7a1 559static void sanity_checks (cpp_reader *);
560static void sanity_checks (cpp_reader *pfile)
1893c11a 561{
562 cppchar_t test = 0;
dc0b244f 563 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
1893c11a 564
565 /* Sanity checks for assumptions about CPP arithmetic and target
566 type precisions made by cpplib. */
567 test--;
568 if (test < 1)
d80d2074 569 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
1893c11a 570
dc0b244f 571 if (CPP_OPTION (pfile, precision) > max_precision)
d80d2074 572 cpp_error (pfile, CPP_DL_ICE,
f7fdd7a1 573 "preprocessor arithmetic has maximum precision of %lu bits;"
574 " target requires %lu bits",
dc0b244f 575 (unsigned long) max_precision,
576 (unsigned long) CPP_OPTION (pfile, precision));
1893c11a 577
578 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
d80d2074 579 cpp_error (pfile, CPP_DL_ICE,
1893c11a 580 "CPP arithmetic must be at least as precise as a target int");
581
582 if (CPP_OPTION (pfile, char_precision) < 8)
d80d2074 583 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
1893c11a 584
585 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
d80d2074 586 cpp_error (pfile, CPP_DL_ICE,
1893c11a 587 "target wchar_t is narrower than target char");
588
589 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
d80d2074 590 cpp_error (pfile, CPP_DL_ICE,
1893c11a 591 "target int is narrower than target char");
592
dc0b244f 593 /* This is assumed in eval_token() and could be fixed if necessary. */
594 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
d80d2074 595 cpp_error (pfile, CPP_DL_ICE,
596 "CPP half-integer narrower than CPP character");
dc0b244f 597
1893c11a 598 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
d80d2074 599 cpp_error (pfile, CPP_DL_ICE,
f7fdd7a1 600 "CPP on this host cannot handle wide character constants over"
601 " %lu bits, but the target requires %lu bits",
dc0b244f 602 (unsigned long) BITS_PER_CPPCHAR_T,
603 (unsigned long) CPP_OPTION (pfile, wchar_precision));
1893c11a 604}
605#else
606# define sanity_checks(PFILE)
607#endif
608
9ceb1c29 609/* This is called after options have been parsed, and partially
7981458e 610 processed. */
c7f96907 611void
612cpp_post_options (cpp_reader *pfile)
6d71dc85 613{
2a6a6991 614 int flags;
615
1893c11a 616 sanity_checks (pfile);
617
61191376 618 post_options (pfile);
619
9e36e267 620 /* Mark named operators before handling command line macros. */
2a6a6991 621 flags = 0;
9e36e267 622 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
2a6a6991 623 flags |= NODE_OPERATOR;
624 if (CPP_OPTION (pfile, warn_cxx_operator_names))
625 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
626 if (flags != 0)
627 mark_named_operators (pfile, flags);
c7f96907 628}
9e36e267 629
64386834 630/* Setup for processing input from the file named FNAME, or stdin if
d732fcf0 631 it is the empty string. Return the original filename
632 on success (e.g. foo.i->foo.c), or NULL on failure. */
633const char *
634cpp_read_main_file (cpp_reader *pfile, const char *fname)
c7f96907 635{
be1e7283 636 const location_t loc = 0;
e557fc7f 637
61191376 638 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
639 {
640 if (!pfile->deps)
641 pfile->deps = deps_init ();
642
643 /* Set the default target (if there is none already). */
644 deps_add_default_target (pfile->deps, fname);
645 }
af808d7d 646
64386834 647 pfile->main_file
e557fc7f 648 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
649 loc);
64386834 650 if (_cpp_find_failed (pfile->main_file))
30696602 651 return NULL;
9ceb1c29 652
e557fc7f 653 _cpp_stack_file (pfile, pfile->main_file, false, loc);
64386834 654
655 /* For foo.i, read the original filename foo.c now, for the benefit
656 of the front ends. */
657 if (CPP_OPTION (pfile, preprocessed))
d732fcf0 658 {
659 read_original_filename (pfile);
97bfb9ef 660 fname =
661 ORDINARY_MAP_FILE_NAME
662 ((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
d732fcf0 663 }
664 return fname;
9ceb1c29 665}
666
667/* For preprocessed files, if the first tokens are of the form # NUM.
668 handle the directive so we know the original file name. This will
669 generate file_change callbacks, which the front ends must handle
670 appropriately given their state of initialization. */
671static void
f7fdd7a1 672read_original_filename (cpp_reader *pfile)
9ceb1c29 673{
674 const cpp_token *token, *token1;
675
676 /* Lex ahead; if the first tokens are of the form # NUM, then
677 process the directive, otherwise back up. */
678 token = _cpp_lex_direct (pfile);
679 if (token->type == CPP_HASH)
680 {
0c5e3a3d 681 pfile->state.in_directive = 1;
9ceb1c29 682 token1 = _cpp_lex_direct (pfile);
683 _cpp_backup_tokens (pfile, 1);
0c5e3a3d 684 pfile->state.in_directive = 0;
9ceb1c29 685
686 /* If it's a #line directive, handle it. */
65f40615 687 if (token1->type == CPP_NUMBER
688 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
9ceb1c29 689 {
e7aa92b2 690 read_original_directory (pfile);
9ceb1c29 691 return;
692 }
693 }
694
695 /* Backup as if nothing happened. */
696 _cpp_backup_tokens (pfile, 1);
697}
698
e7aa92b2 699/* For preprocessed files, if the tokens following the first filename
700 line is of the form # <line> "/path/name//", handle the
701 directive so we know the original current directory. */
702static void
703read_original_directory (cpp_reader *pfile)
704{
705 const cpp_token *hash, *token;
706
707 /* Lex ahead; if the first tokens are of the form # NUM, then
708 process the directive, otherwise back up. */
709 hash = _cpp_lex_direct (pfile);
710 if (hash->type != CPP_HASH)
711 {
712 _cpp_backup_tokens (pfile, 1);
713 return;
714 }
715
716 token = _cpp_lex_direct (pfile);
717
718 if (token->type != CPP_NUMBER)
719 {
720 _cpp_backup_tokens (pfile, 2);
721 return;
722 }
723
724 token = _cpp_lex_direct (pfile);
725
726 if (token->type != CPP_STRING
727 || ! (token->val.str.len >= 5
bb7824b5 728 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
729 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
e7aa92b2 730 {
731 _cpp_backup_tokens (pfile, 3);
732 return;
733 }
734
735 if (pfile->cb.dir_change)
736 {
720aca92 737 char *debugdir = (char *) alloca (token->val.str.len - 3);
e7aa92b2 738
739 memcpy (debugdir, (const char *) token->val.str.text + 1,
740 token->val.str.len - 4);
741 debugdir[token->val.str.len - 4] = '\0';
742
743 pfile->cb.dir_change (pfile, debugdir);
d732fcf0 744 }
e7aa92b2 745}
746
6019c708 747/* This is called at the end of preprocessing. It pops the last
7f5f3953 748 buffer and writes dependency output.
57ba96e9 749
6019c708 750 Maybe it should also reset state, such that you could call
751 cpp_start_read with a new filename to restart processing. */
7f5f3953 752void
f7fdd7a1 753cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6d71dc85 754{
71a7c282 755 /* Warn about unused macros before popping the final buffer. */
756 if (CPP_OPTION (pfile, warn_unused_macros))
757 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
758
f03668bd 759 /* lex.c leaves the final buffer on the stack. This it so that
5475a165 760 it returns an unending stream of CPP_EOFs to the client. If we
3fb1e43b 761 popped the buffer, we'd dereference a NULL buffer pointer and
5475a165 762 segfault. It's nice to allow the client to do worry-free excess
763 cpp_get_token calls. */
764 while (pfile->buffer)
765 _cpp_pop_buffer (pfile);
9e87fa80 766
285b544a 767 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE && deps_stream)
768 deps_write (pfile->deps, deps_stream,
769 CPP_OPTION (pfile, deps.phony_targets), 72);
d453a374 770
34627970 771 /* Report on headers that could use multiple include guards. */
772 if (CPP_OPTION (pfile, print_include_names))
f51c2148 773 _cpp_report_missing_guards (pfile);
6d71dc85 774}
775
61191376 776static void
f7fdd7a1 777post_options (cpp_reader *pfile)
af808d7d 778{
779 /* -Wtraditional is not useful in C++ mode. */
780 if (CPP_OPTION (pfile, cplusplus))
5ae82d58 781 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
af808d7d 782
946ce1b7 783 /* Permanently disable macro expansion if we are rescanning
ca52ef60 784 preprocessed text. Read preprocesed source in ISO mode. */
946ce1b7 785 if (CPP_OPTION (pfile, preprocessed))
ca52ef60 786 {
fcde64dc 787 if (!CPP_OPTION (pfile, directives_only))
788 pfile->state.prevent_expansion = 1;
ca52ef60 789 CPP_OPTION (pfile, traditional) = 0;
790 }
791
3078f2b2 792 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
793 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
794
ca52ef60 795 if (CPP_OPTION (pfile, traditional))
a54e0bf8 796 {
a54e0bf8 797 CPP_OPTION (pfile, trigraphs) = 0;
798 CPP_OPTION (pfile, warn_trigraphs) = 0;
799 }
b3a8144e 800}