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