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