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