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