]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
[6/6] Preprocessor forced macro location
[thirdparty/gcc.git] / libcpp / init.c
CommitLineData
5538ada6 1/* CPP Library.
85ec4feb 2 Copyright (C) 1986-2018 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,
50f59cd7 174 struct 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;
6ab3e7dd 188 CPP_OPTION (pfile, tabstop) = 8;
be768055 189 CPP_OPTION (pfile, operator_names) = 1;
a8eb6044 190 CPP_OPTION (pfile, warn_trigraphs) = 2;
909de5da 191 CPP_OPTION (pfile, warn_endif_labels) = 1;
2b71f4a4 192 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
fe191308 193 CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
e3339d0f
JM
194 CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
195 CPP_OPTION (pfile, cpp_warn_long_long) = 0;
b1822ccc 196 CPP_OPTION (pfile, dollars_in_ident) = 1;
78b8811a 197 CPP_OPTION (pfile, warn_dollars) = 1;
e5b79219 198 CPP_OPTION (pfile, warn_variadic_macros) = 1;
c047ce93 199 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
70f6d5e1 200 CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
51fce2d3
DS
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;
50668cf6 207 CPP_OPTION (pfile, warn_normalize) = normalized_C;
7f5f5f98 208 CPP_OPTION (pfile, warn_literal_suffix) = 1;
5dc99c46
SB
209 CPP_OPTION (pfile, canonical_system_headers)
210 = ENABLE_CANONICAL_SYSTEM_HEADERS;
a4a0016d 211 CPP_OPTION (pfile, ext_numeric_literals) = 1;
e8ff5196 212 CPP_OPTION (pfile, warn_date_time) = 0;
ae79697b 213
2443d4e1
NB
214 /* Default CPP arithmetic to something sensible for the host for the
215 benefit of dumb users like fix-header. */
c9220e3a 216 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
2443d4e1
NB
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);
2a1dc0d8 220 CPP_OPTION (pfile, unsigned_char) = 0;
44a147ad 221 CPP_OPTION (pfile, unsigned_wchar) = 1;
e6cc3a24
ZW
222 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
223
224 /* Default to no charset conversion. */
16dd5cfe 225 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
e6cc3a24 226 CPP_OPTION (pfile, wide_charset) = 0;
4268e8bb 227
16dd5cfe
EC
228 /* Default the input character set to UTF-8. */
229 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
cf551fba 230
8f9b4009
NB
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
500bee0a 237 /* Initialize the line map. */
50f59cd7 238 pfile->line_table = line_table;
d82fc108 239
4a58aab6 240 /* Initialize lexer state. */
93c80368
NB
241 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
242
4ed5bcfb 243 /* Set up static tokens. */
4ed5bcfb
NB
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;
93c80368 248
5fddcffc
NB
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;
5fddcffc 253
4912a07c 254 /* Initialize the base context. */
93c80368 255 pfile->context = &pfile->base_context;
92582b75 256 pfile->base_context.c.macro = 0;
93c80368
NB
257 pfile->base_context.prev = pfile->base_context.next = 0;
258
8c3b2693
NB
259 /* Aligned and unaligned storage. */
260 pfile->a_buff = _cpp_get_buff (pfile, 0);
ece54d54 261 pfile->u_buff = _cpp_get_buff (pfile, 0);
93c80368 262
17e7cb85
KT
263 /* Initialize table for push_macro/pop_macro. */
264 pfile->pushed_macros = 0;
265
e3dfef44 266 /* Do not force token locations by default. */
f3f6029d 267 pfile->forced_token_location = 0;
e3dfef44 268
15c98b2e
ES
269 /* Initialize source_date_epoch to -2 (not yet set). */
270 pfile->source_date_epoch = (time_t) -2;
271
87ed109f
NB
272 /* The expression parser stack. */
273 _cpp_expand_op_stack (pfile);
274
4912a07c 275 /* Initialize the buffer obstack. */
19a9ba64 276 obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
2a967f3d 277
8f9b4009 278 _cpp_init_files (pfile);
cf44ea52 279
b4e46cea
PB
280 _cpp_init_hashtable (pfile, table);
281
cf44ea52 282 return pfile;
f2d5f0cc
ZW
283}
284
5ffeb913
TT
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
400023a3 293/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 294 returns leads to undefined behavior. Returns the error count. */
76c3e73e 295void
6cf87ca4 296cpp_destroy (cpp_reader *pfile)
6de1e2a9 297{
93c80368 298 cpp_context *context, *contextn;
17e7cb85 299 struct def_pragma_macro *pmacro;
50410426 300 tokenrun *run, *runn;
631d0d36 301 int i;
709e9e50 302
87ed109f 303 free (pfile->op_stack);
af0d16cd 304
38b24ee2 305 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 306 _cpp_pop_buffer (pfile);
6de1e2a9 307
04695783 308 free (pfile->out.base);
004cb263 309
93c80368 310 if (pfile->macro_buffer)
4b49c365 311 {
fad205ff 312 free (pfile->macro_buffer);
4b49c365
AO
313 pfile->macro_buffer = NULL;
314 pfile->macro_buffer_len = 0;
315 }
93c80368 316
f4ff5a69
NB
317 if (pfile->deps)
318 deps_free (pfile->deps);
2a967f3d 319 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 320
2a967f3d 321 _cpp_destroy_hashtable (pfile);
8f9b4009 322 _cpp_cleanup_files (pfile);
e6cc3a24 323 _cpp_destroy_iconv (pfile);
709e9e50 324
8c3b2693 325 _cpp_free_buff (pfile->a_buff);
ece54d54 326 _cpp_free_buff (pfile->u_buff);
b8af0ca5 327 _cpp_free_buff (pfile->free_buffs);
93c80368 328
50410426
NB
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
93c80368
NB
337 for (context = pfile->base_context.next; context; context = contextn)
338 {
339 contextn = context->next;
340 free (context);
341 }
400023a3 342
631d0d36
MG
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 }
17e7cb85
KT
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 }
631d0d36 361
400023a3 362 free (pfile);
6de1e2a9
ZW
363}
364
93c80368 365/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
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
a2566ae9 370 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a 371 interest is that these macros require special code to compute their
128465e6 372 expansions. The value is a "cpp_builtin_type" enumerator.
f24a153a
ZW
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. */
c047ce93 379struct builtin_macro
a9ae4483 380{
c047ce93
SB
381 const uchar *const name;
382 const unsigned short len;
383 const unsigned short value;
384 const bool always_warn_if_redefined;
a9ae4483 385};
93c80368 386
c047ce93
SB
387#define B(n, t, f) { DSC(n), t, f }
388static const struct builtin_macro builtin_array[] =
6de1e2a9 389{
c047ce93
SB
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),
1f8d3e84
JJ
398 B("__has_attribute", BT_HAS_ATTRIBUTE, true),
399 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
278c4662
NB
400 /* Keep builtins not used for -traditional-cpp at the end, and
401 update init_builtins() if any more are added. */
c047ce93
SB
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;
f24a153a 412};
92936ecf 413
c047ce93
SB
414#define B(n, t) { DSC(n), t }
415static const struct builtin_operator operator_array[] =
f24a153a
ZW
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)
a9ae4483 428};
12cf91fe 429#undef B
a9ae4483 430
17645b15
NB
431/* Mark the C++ named operators in the hash table. */
432static void
3d8b2a98 433mark_named_operators (cpp_reader *pfile, int flags)
17645b15 434{
c047ce93 435 const struct builtin_operator *b;
17645b15
NB
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);
3d8b2a98 442 hp->flags |= flags;
4977bab6
ZW
443 hp->is_directive = 0;
444 hp->directive_index = b->value;
17645b15
NB
445 }
446}
447
cfc93532
MLI
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
c1bad961 466void
ccfc4c91 467cpp_init_special_builtins (cpp_reader *pfile)
a9ae4483 468{
c047ce93 469 const struct builtin_macro *b;
278c4662 470 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 471
278c4662
NB
472 if (CPP_OPTION (pfile, traditional))
473 n -= 2;
83900997
JJ
474 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
475 || CPP_OPTION (pfile, std))
ccfc4c91 476 n--;
278c4662 477
83900997 478 for (b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 479 {
1f8d3e84
JJ
480 if (b->value == BT_HAS_ATTRIBUTE
481 && (CPP_OPTION (pfile, lang) == CLK_ASM
482 || pfile->cb.has_attribute == NULL))
483 continue;
f24a153a 484 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
a570d97f 485 hp->type = NT_BUILTIN_MACRO;
b753b37b 486 if (b->always_warn_if_redefined)
c047ce93 487 hp->flags |= NODE_WARN;
7e5487a2 488 hp->value.builtin = (enum cpp_builtin_type) b->value;
6de1e2a9 489 }
ccfc4c91
OW
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");
c740cee2
NB
504
505 if (CPP_OPTION (pfile, cplusplus))
1fb80b0c 506 {
026a79f7
AS
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
7b936140 511 || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
85e653c9 512 _cpp_define_builtin (pfile, "__cplusplus 201703L");
e4276ba5
ESR
513 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
514 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
515 _cpp_define_builtin (pfile, "__cplusplus 201402L");
61949153
PC
516 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
517 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
1fb80b0c
JM
518 _cpp_define_builtin (pfile, "__cplusplus 201103L");
519 else
520 _cpp_define_builtin (pfile, "__cplusplus 199711L");
521 }
2a1dc0d8
ZW
522 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
523 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 524 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2 525 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
9f936c86
JM
526 else if (CPP_OPTION (pfile, lang) == CLK_STDC2X
527 || CPP_OPTION (pfile, lang) == CLK_GNUC2X)
528 _cpp_define_builtin (pfile, "__STDC_VERSION__ 202000L");
c76dc9c3
JM
529 else if (CPP_OPTION (pfile, lang) == CLK_STDC17
530 || CPP_OPTION (pfile, lang) == CLK_GNUC17)
531 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201710L");
48b0b196
JM
532 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
533 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
534 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
c740cee2
NB
535 else if (CPP_OPTION (pfile, c99))
536 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
537
a48e3dd1 538 if (CPP_OPTION (pfile, uliterals)
e4276ba5
ESR
539 && !(CPP_OPTION (pfile, cplusplus)
540 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
541 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
a48e3dd1
JM
542 {
543 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
544 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
545 }
546
6e270179 547 if (hosted)
58b5b894 548 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 549 else
58b5b894 550 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 551
0f7866e7
ZL
552 if (CPP_OPTION (pfile, objc))
553 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
554}
555
2443d4e1 556/* Sanity-checks are dependent on command-line options, so it is
174f6622 557 called as a subroutine of cpp_read_main_file. */
22d66382 558#if CHECKING_P
6cf87ca4
ZW
559static void sanity_checks (cpp_reader *);
560static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
561{
562 cppchar_t test = 0;
c9220e3a 563 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
564
565 /* Sanity checks for assumptions about CPP arithmetic and target
566 type precisions made by cpplib. */
567 test--;
568 if (test < 1)
0527bc4e 569 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 570
c9220e3a 571 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 572 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
573 "preprocessor arithmetic has maximum precision of %lu bits;"
574 " target requires %lu bits",
c9220e3a
NB
575 (unsigned long) max_precision,
576 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
577
578 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 579 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
580 "CPP arithmetic must be at least as precise as a target int");
581
582 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 583 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
584
585 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 586 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
587 "target wchar_t is narrower than target char");
588
589 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 590 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
591 "target int is narrower than target char");
592
c9220e3a
NB
593 /* This is assumed in eval_token() and could be fixed if necessary. */
594 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
595 cpp_error (pfile, CPP_DL_ICE,
596 "CPP half-integer narrower than CPP character");
c9220e3a 597
2443d4e1 598 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 599 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
600 "CPP on this host cannot handle wide character constants over"
601 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
602 (unsigned long) BITS_PER_CPPCHAR_T,
603 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
604}
605#else
606# define sanity_checks(PFILE)
607#endif
608
f5e99456 609/* This is called after options have been parsed, and partially
59e4e217 610 processed. */
4169c321
PB
611void
612cpp_post_options (cpp_reader *pfile)
6de1e2a9 613{
3d8b2a98
ILT
614 int flags;
615
2443d4e1
NB
616 sanity_checks (pfile);
617
f4ff5a69
NB
618 post_options (pfile);
619
c19b12cb 620 /* Mark named operators before handling command line macros. */
3d8b2a98 621 flags = 0;
c19b12cb 622 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
3d8b2a98
ILT
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);
4169c321 628}
c19b12cb 629
4dc299fb 630/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
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)
4169c321 635{
ac81cf0b
DM
636 const source_location loc = 0;
637
f4ff5a69
NB
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 }
96302433 646
4dc299fb 647 pfile->main_file
ac81cf0b
DM
648 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
649 loc);
4dc299fb 650 if (_cpp_find_failed (pfile->main_file))
3092d0fc 651 return NULL;
f5e99456 652
ac81cf0b 653 _cpp_stack_file (pfile, pfile->main_file, false, loc);
4dc299fb
PB
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))
8e9ea4d7
PB
658 {
659 read_original_filename (pfile);
46427374
TT
660 fname =
661 ORDINARY_MAP_FILE_NAME
662 ((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
8e9ea4d7
PB
663 }
664 return fname;
f5e99456
NB
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
6cf87ca4 672read_original_filename (cpp_reader *pfile)
f5e99456
NB
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 {
456b8ce5 681 pfile->state.in_directive = 1;
f5e99456
NB
682 token1 = _cpp_lex_direct (pfile);
683 _cpp_backup_tokens (pfile, 1);
456b8ce5 684 pfile->state.in_directive = 0;
f5e99456
NB
685
686 /* If it's a #line directive, handle it. */
709d7160
JJ
687 if (token1->type == CPP_NUMBER
688 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
f5e99456 689 {
b20d9f0c 690 read_original_directory (pfile);
f5e99456
NB
691 return;
692 }
693 }
694
695 /* Backup as if nothing happened. */
696 _cpp_backup_tokens (pfile, 1);
697}
698
b20d9f0c
AO
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
4489800d
KT
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])))
b20d9f0c
AO
730 {
731 _cpp_backup_tokens (pfile, 3);
732 return;
733 }
734
735 if (pfile->cb.dir_change)
736 {
c3f829c1 737 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
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);
8e9ea4d7 744 }
b20d9f0c
AO
745}
746
76c3e73e 747/* This is called at the end of preprocessing. It pops the last
148e4216 748 buffer and writes dependency output.
16dd5cfe 749
76c3e73e
NB
750 Maybe it should also reset state, such that you could call
751 cpp_start_read with a new filename to restart processing. */
148e4216 752void
6cf87ca4 753cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 754{
a69cbaac
NB
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
a2566ae9 759 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 760 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 761 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
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);
c1212d2f 766
f4ff5a69 767 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
148e4216 768 && deps_stream)
76c3e73e
NB
769 {
770 deps_write (pfile->deps, deps_stream, 72);
771
f4ff5a69 772 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
773 deps_phony_targets (pfile->deps, deps_stream);
774 }
3caee4a8 775
d4506961
ZW
776 /* Report on headers that could use multiple include guards. */
777 if (CPP_OPTION (pfile, print_include_names))
c71f835b 778 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
779}
780
f4ff5a69 781static void
6cf87ca4 782post_options (cpp_reader *pfile)
96302433
NB
783{
784 /* -Wtraditional is not useful in C++ mode. */
785 if (CPP_OPTION (pfile, cplusplus))
e3339d0f 786 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
96302433 787
6d4587f7 788 /* Permanently disable macro expansion if we are rescanning
43612ffb 789 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 790 if (CPP_OPTION (pfile, preprocessed))
43612ffb 791 {
ccfc4c91
OW
792 if (!CPP_OPTION (pfile, directives_only))
793 pfile->state.prevent_expansion = 1;
43612ffb
NB
794 CPP_OPTION (pfile, traditional) = 0;
795 }
796
a8eb6044
NB
797 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
798 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
799
43612ffb 800 if (CPP_OPTION (pfile, traditional))
26aea073 801 {
26aea073
NB
802 CPP_OPTION (pfile, trigraphs) = 0;
803 CPP_OPTION (pfile, warn_trigraphs) = 0;
804 }
7ca3d2b1 805}