Require target lra in gcc.c-torture/compile/asmgoto-6.c
[official-gcc.git] / libcpp / init.cc
blob693feaa31eda4a00e43fdf0761dbd4554e666023
1 /* CPP Library.
2 Copyright (C) 1986-2023 Free Software Foundation, Inc.
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
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #include "config.h"
22 #include "system.h"
23 #include "cpplib.h"
24 #include "internal.h"
25 #include "mkdeps.h"
26 #include "localedir.h"
27 #include "filenames.h"
29 #ifndef ENABLE_CANONICAL_SYSTEM_HEADERS
30 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
31 #define ENABLE_CANONICAL_SYSTEM_HEADERS 1
32 #else
33 #define ENABLE_CANONICAL_SYSTEM_HEADERS 0
34 #endif
35 #endif
37 static void init_library (void);
38 static void mark_named_operators (cpp_reader *, int);
39 static bool read_original_filename (cpp_reader *);
40 static void read_original_directory (cpp_reader *);
41 static void post_options (cpp_reader *);
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
45 runtime. */
46 #if HAVE_DESIGNATED_INITIALIZERS
48 #define init_trigraph_map() /* Nothing. */
49 #define TRIGRAPH_MAP \
50 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
52 #define END };
53 #define s(p, v) [p] = v,
55 #else
57 #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
58 static void init_trigraph_map (void) { \
59 unsigned char *x = _cpp_trigraph_map;
61 #define END }
62 #define s(p, v) x[p] = v;
64 #endif
66 TRIGRAPH_MAP
67 s('=', '#') s(')', ']') s('!', '|')
68 s('(', '[') s('\'', '^') s('>', '}')
69 s('/', '\\') s('<', '{') s('-', '~')
70 END
72 #undef s
73 #undef END
74 #undef TRIGRAPH_MAP
76 /* A set of booleans indicating what CPP features each source language
77 requires. */
78 struct lang_flags
80 char c99;
81 char cplusplus;
82 char extended_numbers;
83 char extended_identifiers;
84 char c11_identifiers;
85 char xid_identifiers;
86 char std;
87 char digraphs;
88 char uliterals;
89 char rliterals;
90 char user_literals;
91 char binary_constants;
92 char digit_separators;
93 char trigraphs;
94 char utf8_char_literals;
95 char va_opt;
96 char scope;
97 char dfp_constants;
98 char size_t_literals;
99 char elifdef;
100 char warning_directive;
101 char delimited_escape_seqs;
102 char true_false;
105 static const struct lang_flags lang_defaults[] =
106 { /* c99 c++ xnum xid c11 xidid std digr ulit rlit udlit bincst digsep trig u8chlit vaopt scope dfp szlit elifdef warndir delim trufal */
107 /* GNUC89 */ { 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
108 /* GNUC99 */ { 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
109 /* GNUC11 */ { 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
110 /* GNUC17 */ { 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
111 /* GNUC2X */ { 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
112 /* STDC89 */ { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
113 /* STDC94 */ { 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
114 /* STDC99 */ { 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
115 /* STDC11 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
116 /* STDC17 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
117 /* STDC2X */ { 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
118 /* GNUCXX */ { 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
119 /* CXX98 */ { 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
120 /* GNUCXX11 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
121 /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
122 /* GNUCXX14 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
123 /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
124 /* GNUCXX17 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
125 /* CXX17 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 },
126 /* GNUCXX20 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
127 /* CXX20 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
128 /* GNUCXX23 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
129 /* CXX23 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
130 /* GNUCXX26 */ { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
131 /* CXX26 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
132 /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
135 /* Sets internal flags correctly for a given language. */
136 void
137 cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
139 const struct lang_flags *l = &lang_defaults[(int) lang];
141 CPP_OPTION (pfile, lang) = lang;
143 CPP_OPTION (pfile, c99) = l->c99;
144 CPP_OPTION (pfile, cplusplus) = l->cplusplus;
145 CPP_OPTION (pfile, extended_numbers) = l->extended_numbers;
146 CPP_OPTION (pfile, extended_identifiers) = l->extended_identifiers;
147 CPP_OPTION (pfile, c11_identifiers) = l->c11_identifiers;
148 CPP_OPTION (pfile, xid_identifiers) = l->xid_identifiers;
149 CPP_OPTION (pfile, std) = l->std;
150 CPP_OPTION (pfile, digraphs) = l->digraphs;
151 CPP_OPTION (pfile, uliterals) = l->uliterals;
152 CPP_OPTION (pfile, rliterals) = l->rliterals;
153 CPP_OPTION (pfile, user_literals) = l->user_literals;
154 CPP_OPTION (pfile, binary_constants) = l->binary_constants;
155 CPP_OPTION (pfile, digit_separators) = l->digit_separators;
156 CPP_OPTION (pfile, trigraphs) = l->trigraphs;
157 CPP_OPTION (pfile, utf8_char_literals) = l->utf8_char_literals;
158 CPP_OPTION (pfile, va_opt) = l->va_opt;
159 CPP_OPTION (pfile, scope) = l->scope;
160 CPP_OPTION (pfile, dfp_constants) = l->dfp_constants;
161 CPP_OPTION (pfile, size_t_literals) = l->size_t_literals;
162 CPP_OPTION (pfile, elifdef) = l->elifdef;
163 CPP_OPTION (pfile, warning_directive) = l->warning_directive;
164 CPP_OPTION (pfile, delimited_escape_seqs) = l->delimited_escape_seqs;
165 CPP_OPTION (pfile, true_false) = l->true_false;
168 /* Initialize library global state. */
169 static void
170 init_library (void)
172 static int initialized = 0;
174 if (! initialized)
176 initialized = 1;
178 _cpp_init_lexer ();
180 /* Set up the trigraph map. This doesn't need to do anything if
181 we were compiled with a compiler that supports C99 designated
182 initializers. */
183 init_trigraph_map ();
185 #ifdef ENABLE_NLS
186 (void) bindtextdomain (PACKAGE, LOCALEDIR);
187 #endif
191 /* Initialize a cpp_reader structure. */
192 cpp_reader *
193 cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
194 class line_maps *line_table)
196 cpp_reader *pfile;
198 /* Initialize this instance of the library if it hasn't been already. */
199 init_library ();
201 pfile = XCNEW (cpp_reader);
202 memset (&pfile->base_context, 0, sizeof (pfile->base_context));
204 cpp_set_lang (pfile, lang);
205 CPP_OPTION (pfile, warn_multichar) = 1;
206 CPP_OPTION (pfile, discard_comments) = 1;
207 CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
208 CPP_OPTION (pfile, max_include_depth) = 200;
209 CPP_OPTION (pfile, operator_names) = 1;
210 CPP_OPTION (pfile, warn_trigraphs) = 2;
211 CPP_OPTION (pfile, warn_endif_labels) = 1;
212 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
213 CPP_OPTION (pfile, cpp_warn_c11_c2x_compat) = -1;
214 CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
215 CPP_OPTION (pfile, cpp_warn_cxx20_compat) = 0;
216 CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
217 CPP_OPTION (pfile, cpp_warn_long_long) = 0;
218 CPP_OPTION (pfile, dollars_in_ident) = 1;
219 CPP_OPTION (pfile, warn_dollars) = 1;
220 CPP_OPTION (pfile, warn_variadic_macros) = 1;
221 CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
222 CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
223 /* By default, track locations of tokens resulting from macro
224 expansion. The '2' means, track the locations with the highest
225 accuracy. Read the comments for struct
226 cpp_options::track_macro_expansion to learn about the other
227 values. */
228 CPP_OPTION (pfile, track_macro_expansion) = 2;
229 CPP_OPTION (pfile, warn_normalize) = normalized_C;
230 CPP_OPTION (pfile, warn_literal_suffix) = 1;
231 CPP_OPTION (pfile, canonical_system_headers)
232 = ENABLE_CANONICAL_SYSTEM_HEADERS;
233 CPP_OPTION (pfile, ext_numeric_literals) = 1;
234 CPP_OPTION (pfile, warn_date_time) = 0;
235 CPP_OPTION (pfile, cpp_warn_bidirectional) = bidirectional_unpaired;
236 CPP_OPTION (pfile, cpp_warn_invalid_utf8) = 0;
237 CPP_OPTION (pfile, cpp_warn_unicode) = 1;
238 CPP_OPTION (pfile, cpp_input_charset_explicit) = 0;
240 /* Default CPP arithmetic to something sensible for the host for the
241 benefit of dumb users like fix-header. */
242 CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
243 CPP_OPTION (pfile, char_precision) = CHAR_BIT;
244 CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
245 CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
246 CPP_OPTION (pfile, unsigned_char) = 0;
247 CPP_OPTION (pfile, unsigned_wchar) = 1;
248 CPP_OPTION (pfile, unsigned_utf8char) = 1;
249 CPP_OPTION (pfile, bytes_big_endian) = 1; /* does not matter */
251 /* Default to no charset conversion. */
252 CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
253 CPP_OPTION (pfile, wide_charset) = 0;
255 /* Default the input character set to UTF-8. */
256 CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
258 /* A fake empty "directory" used as the starting point for files
259 looked up without a search path. Name cannot be '/' because we
260 don't want to prepend anything at all to filenames using it. All
261 other entries are correct zero-initialized. */
262 pfile->no_search_path.name = (char *) "";
264 /* Initialize the line map. */
265 pfile->line_table = line_table;
267 /* Initialize lexer state. */
268 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
270 /* Set up static tokens. */
271 pfile->avoid_paste.type = CPP_PADDING;
272 pfile->avoid_paste.val.source = NULL;
273 pfile->avoid_paste.src_loc = 0;
274 pfile->endarg.type = CPP_EOF;
275 pfile->endarg.flags = 0;
276 pfile->endarg.src_loc = 0;
278 /* Create a token buffer for the lexer. */
279 _cpp_init_tokenrun (&pfile->base_run, 250);
280 pfile->cur_run = &pfile->base_run;
281 pfile->cur_token = pfile->base_run.base;
283 /* Initialize the base context. */
284 pfile->context = &pfile->base_context;
285 pfile->base_context.c.macro = 0;
286 pfile->base_context.prev = pfile->base_context.next = 0;
288 /* Aligned and unaligned storage. */
289 pfile->a_buff = _cpp_get_buff (pfile, 0);
290 pfile->u_buff = _cpp_get_buff (pfile, 0);
292 /* Initialize table for push_macro/pop_macro. */
293 pfile->pushed_macros = 0;
295 /* Do not force token locations by default. */
296 pfile->forced_token_location = 0;
298 /* Note the timestamp is unset. */
299 pfile->time_stamp = time_t (-1);
300 pfile->time_stamp_kind = 0;
302 /* The expression parser stack. */
303 _cpp_expand_op_stack (pfile);
305 /* Initialize the buffer obstack. */
306 obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
308 _cpp_init_files (pfile);
310 _cpp_init_hashtable (pfile, table);
312 return pfile;
315 /* Set the line_table entry in PFILE. This is called after reading a
316 PCH file, as the old line_table will be incorrect. */
317 void
318 cpp_set_line_map (cpp_reader *pfile, class line_maps *line_table)
320 pfile->line_table = line_table;
323 /* Free resources used by PFILE. Accessing PFILE after this function
324 returns leads to undefined behavior. Returns the error count. */
325 void
326 cpp_destroy (cpp_reader *pfile)
328 cpp_context *context, *contextn;
329 struct def_pragma_macro *pmacro;
330 tokenrun *run, *runn;
331 int i;
333 free (pfile->op_stack);
335 while (CPP_BUFFER (pfile) != NULL)
336 _cpp_pop_buffer (pfile);
338 free (pfile->out.base);
340 if (pfile->macro_buffer)
342 free (pfile->macro_buffer);
343 pfile->macro_buffer = NULL;
344 pfile->macro_buffer_len = 0;
347 if (pfile->deps)
348 deps_free (pfile->deps);
349 obstack_free (&pfile->buffer_ob, 0);
351 _cpp_destroy_hashtable (pfile);
352 _cpp_cleanup_files (pfile);
353 _cpp_destroy_iconv (pfile);
355 _cpp_free_buff (pfile->a_buff);
356 _cpp_free_buff (pfile->u_buff);
357 _cpp_free_buff (pfile->free_buffs);
359 for (run = &pfile->base_run; run; run = runn)
361 runn = run->next;
362 free (run->base);
363 if (run != &pfile->base_run)
364 free (run);
367 for (context = pfile->base_context.next; context; context = contextn)
369 contextn = context->next;
370 free (context);
373 if (pfile->comments.entries)
375 for (i = 0; i < pfile->comments.count; i++)
376 free (pfile->comments.entries[i].comment);
378 free (pfile->comments.entries);
380 if (pfile->pushed_macros)
384 pmacro = pfile->pushed_macros;
385 pfile->pushed_macros = pmacro->next;
386 free (pmacro->name);
387 free (pmacro);
389 while (pfile->pushed_macros);
392 free (pfile);
395 /* This structure defines one built-in identifier. A node will be
396 entered in the hash table under the name NAME, with value VALUE.
398 There are two tables of these. builtin_array holds all the
399 "builtin" macros: these are handled by builtin_macro() in
400 macro.cc. Builtin is somewhat of a misnomer -- the property of
401 interest is that these macros require special code to compute their
402 expansions. The value is a "cpp_builtin_type" enumerator.
404 operator_array holds the C++ named operators. These are keywords
405 which act as aliases for punctuators. In C++, they cannot be
406 altered through #define, and #if recognizes them as operators. In
407 C, these are not entered into the hash table at all (but see
408 <iso646.h>). The value is a token-type enumerator. */
409 struct builtin_macro
411 const uchar *const name;
412 const unsigned short len;
413 const unsigned short value;
414 const bool always_warn_if_redefined;
417 #define B(n, t, f) { DSC(n), t, f }
418 static const struct builtin_macro builtin_array[] =
420 B("__TIMESTAMP__", BT_TIMESTAMP, false),
421 B("__TIME__", BT_TIME, false),
422 B("__DATE__", BT_DATE, false),
423 B("__FILE__", BT_FILE, false),
424 B("__FILE_NAME__", BT_FILE_NAME, false),
425 B("__BASE_FILE__", BT_BASE_FILE, false),
426 B("__LINE__", BT_SPECLINE, true),
427 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
428 B("__COUNTER__", BT_COUNTER, true),
429 /* Make sure to update the list of built-in
430 function-like macros in traditional.cc:
431 fun_like_macro() when adding more following */
432 B("__has_attribute", BT_HAS_ATTRIBUTE, true),
433 B("__has_c_attribute", BT_HAS_STD_ATTRIBUTE, true),
434 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
435 B("__has_builtin", BT_HAS_BUILTIN, true),
436 B("__has_include", BT_HAS_INCLUDE, true),
437 B("__has_include_next",BT_HAS_INCLUDE_NEXT, true),
438 /* Keep builtins not used for -traditional-cpp at the end, and
439 update init_builtins() if any more are added. */
440 B("_Pragma", BT_PRAGMA, true),
441 B("__STDC__", BT_STDC, true),
443 #undef B
445 struct builtin_operator
447 const uchar *const name;
448 const unsigned short len;
449 const unsigned short value;
452 #define B(n, t) { DSC(n), t }
453 static const struct builtin_operator operator_array[] =
455 B("and", CPP_AND_AND),
456 B("and_eq", CPP_AND_EQ),
457 B("bitand", CPP_AND),
458 B("bitor", CPP_OR),
459 B("compl", CPP_COMPL),
460 B("not", CPP_NOT),
461 B("not_eq", CPP_NOT_EQ),
462 B("or", CPP_OR_OR),
463 B("or_eq", CPP_OR_EQ),
464 B("xor", CPP_XOR),
465 B("xor_eq", CPP_XOR_EQ)
467 #undef B
469 /* Mark the C++ named operators in the hash table. */
470 static void
471 mark_named_operators (cpp_reader *pfile, int flags)
473 const struct builtin_operator *b;
475 for (b = operator_array;
476 b < (operator_array + ARRAY_SIZE (operator_array));
477 b++)
479 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
480 hp->flags |= flags;
481 hp->is_directive = 0;
482 hp->directive_index = b->value;
486 /* Helper function of cpp_type2name. Return the string associated with
487 named operator TYPE. */
488 const char *
489 cpp_named_operator2name (enum cpp_ttype type)
491 const struct builtin_operator *b;
493 for (b = operator_array;
494 b < (operator_array + ARRAY_SIZE (operator_array));
495 b++)
497 if (type == b->value)
498 return (const char *) b->name;
501 return NULL;
504 void
505 cpp_init_special_builtins (cpp_reader *pfile)
507 const struct builtin_macro *b;
508 size_t n = ARRAY_SIZE (builtin_array);
510 if (CPP_OPTION (pfile, traditional))
511 n -= 2;
512 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
513 || CPP_OPTION (pfile, std))
514 n--;
516 for (b = builtin_array; b < builtin_array + n; b++)
518 if ((b->value == BT_HAS_ATTRIBUTE
519 || b->value == BT_HAS_STD_ATTRIBUTE
520 || b->value == BT_HAS_BUILTIN)
521 && (CPP_OPTION (pfile, lang) == CLK_ASM
522 || pfile->cb.has_attribute == NULL))
523 continue;
524 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
525 hp->type = NT_BUILTIN_MACRO;
526 if (b->always_warn_if_redefined)
527 hp->flags |= NODE_WARN;
528 hp->value.builtin = (enum cpp_builtin_type) b->value;
532 /* Restore macro C to builtin macro definition. */
534 void
535 _cpp_restore_special_builtin (cpp_reader *pfile, struct def_pragma_macro *c)
537 size_t len = strlen (c->name);
539 for (const struct builtin_macro *b = builtin_array;
540 b < builtin_array + ARRAY_SIZE (builtin_array); b++)
541 if (b->len == len && memcmp (c->name, b->name, len + 1) == 0)
543 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
544 hp->type = NT_BUILTIN_MACRO;
545 if (b->always_warn_if_redefined)
546 hp->flags |= NODE_WARN;
547 hp->value.builtin = (enum cpp_builtin_type) b->value;
551 /* Read the builtins table above and enter them, and language-specific
552 macros, into the hash table. HOSTED is true if this is a hosted
553 environment. */
554 void
555 cpp_init_builtins (cpp_reader *pfile, int hosted)
557 cpp_init_special_builtins (pfile);
559 if (!CPP_OPTION (pfile, traditional)
560 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
561 || CPP_OPTION (pfile, std)))
562 _cpp_define_builtin (pfile, "__STDC__ 1");
564 if (CPP_OPTION (pfile, cplusplus))
566 /* C++26 is not yet a standard. For now, use an invalid
567 year/month, 202400L, which is larger than 202302L. */
568 if (CPP_OPTION (pfile, lang) == CLK_CXX26
569 || CPP_OPTION (pfile, lang) == CLK_GNUCXX26)
570 _cpp_define_builtin (pfile, "__cplusplus 202400L");
571 else if (CPP_OPTION (pfile, lang) == CLK_CXX23
572 || CPP_OPTION (pfile, lang) == CLK_GNUCXX23)
573 _cpp_define_builtin (pfile, "__cplusplus 202302L");
574 else if (CPP_OPTION (pfile, lang) == CLK_CXX20
575 || CPP_OPTION (pfile, lang) == CLK_GNUCXX20)
576 _cpp_define_builtin (pfile, "__cplusplus 202002L");
577 else if (CPP_OPTION (pfile, lang) == CLK_CXX17
578 || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
579 _cpp_define_builtin (pfile, "__cplusplus 201703L");
580 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
581 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
582 _cpp_define_builtin (pfile, "__cplusplus 201402L");
583 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
584 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
585 _cpp_define_builtin (pfile, "__cplusplus 201103L");
586 else
587 _cpp_define_builtin (pfile, "__cplusplus 199711L");
589 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
590 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
591 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
592 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
593 else if (CPP_OPTION (pfile, lang) == CLK_STDC2X
594 || CPP_OPTION (pfile, lang) == CLK_GNUC2X)
595 _cpp_define_builtin (pfile, "__STDC_VERSION__ 202000L");
596 else if (CPP_OPTION (pfile, lang) == CLK_STDC17
597 || CPP_OPTION (pfile, lang) == CLK_GNUC17)
598 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201710L");
599 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
600 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
601 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
602 else if (CPP_OPTION (pfile, c99))
603 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
605 if (CPP_OPTION (pfile, uliterals)
606 && !(CPP_OPTION (pfile, cplusplus)
607 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
608 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
610 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
611 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
614 if (hosted)
615 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
616 else
617 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
619 if (CPP_OPTION (pfile, objc))
620 _cpp_define_builtin (pfile, "__OBJC__ 1");
623 /* Sanity-checks are dependent on command-line options, so it is
624 called as a subroutine of cpp_read_main_file. */
625 #if CHECKING_P
626 static void sanity_checks (cpp_reader *);
627 static void sanity_checks (cpp_reader *pfile)
629 cppchar_t test = 0;
630 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
632 /* Sanity checks for assumptions about CPP arithmetic and target
633 type precisions made by cpplib. */
634 test--;
635 if (test < 1)
636 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
638 if (CPP_OPTION (pfile, precision) > max_precision)
639 cpp_error (pfile, CPP_DL_ICE,
640 "preprocessor arithmetic has maximum precision of %lu bits;"
641 " target requires %lu bits",
642 (unsigned long) max_precision,
643 (unsigned long) CPP_OPTION (pfile, precision));
645 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
646 cpp_error (pfile, CPP_DL_ICE,
647 "CPP arithmetic must be at least as precise as a target int");
649 if (CPP_OPTION (pfile, char_precision) < 8)
650 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
652 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
653 cpp_error (pfile, CPP_DL_ICE,
654 "target wchar_t is narrower than target char");
656 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
657 cpp_error (pfile, CPP_DL_ICE,
658 "target int is narrower than target char");
660 /* This is assumed in eval_token() and could be fixed if necessary. */
661 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
662 cpp_error (pfile, CPP_DL_ICE,
663 "CPP half-integer narrower than CPP character");
665 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
666 cpp_error (pfile, CPP_DL_ICE,
667 "CPP on this host cannot handle wide character constants over"
668 " %lu bits, but the target requires %lu bits",
669 (unsigned long) BITS_PER_CPPCHAR_T,
670 (unsigned long) CPP_OPTION (pfile, wchar_precision));
672 #else
673 # define sanity_checks(PFILE)
674 #endif
676 /* This is called after options have been parsed, and partially
677 processed. */
678 void
679 cpp_post_options (cpp_reader *pfile)
681 int flags;
683 sanity_checks (pfile);
685 post_options (pfile);
687 /* Mark named operators before handling command line macros. */
688 flags = 0;
689 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
690 flags |= NODE_OPERATOR;
691 if (CPP_OPTION (pfile, warn_cxx_operator_names))
692 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
693 if (flags != 0)
694 mark_named_operators (pfile, flags);
697 /* Setup for processing input from the file named FNAME, or stdin if
698 it is the empty string. Return the original filename on success
699 (e.g. foo.i->foo.c), or NULL on failure. INJECTING is true if
700 there may be injected headers before line 1 of the main file. */
701 const char *
702 cpp_read_main_file (cpp_reader *pfile, const char *fname, bool injecting)
704 if (mkdeps *deps = cpp_get_deps (pfile))
705 /* Set the default target (if there is none already). */
706 deps_add_default_target (deps, fname);
708 pfile->main_file
709 = _cpp_find_file (pfile, fname,
710 CPP_OPTION (pfile, preprocessed) ? &pfile->no_search_path
711 : CPP_OPTION (pfile, main_search) == CMS_user
712 ? pfile->quote_include
713 : CPP_OPTION (pfile, main_search) == CMS_system
714 ? pfile->bracket_include : &pfile->no_search_path,
715 /*angle=*/0, _cpp_FFK_NORMAL, 0);
717 if (_cpp_find_failed (pfile->main_file))
718 return NULL;
720 _cpp_stack_file (pfile, pfile->main_file,
721 injecting || CPP_OPTION (pfile, preprocessed)
722 ? IT_PRE_MAIN : IT_MAIN, 0);
724 /* For foo.i, read the original filename foo.c now, for the benefit
725 of the front ends. */
726 if (CPP_OPTION (pfile, preprocessed))
727 if (!read_original_filename (pfile))
729 /* We're on line 1 after all. */
730 auto *last = linemap_check_ordinary
731 (LINEMAPS_LAST_MAP (pfile->line_table, false));
732 last->to_line = 1;
733 /* Inform of as-if a file change. */
734 _cpp_do_file_change (pfile, LC_RENAME_VERBATIM, LINEMAP_FILE (last),
735 LINEMAP_LINE (last), LINEMAP_SYSP (last));
738 auto *map = LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table);
739 pfile->main_loc = MAP_START_LOCATION (map);
741 return ORDINARY_MAP_FILE_NAME (map);
744 location_t
745 cpp_main_loc (const cpp_reader *pfile)
747 return pfile->main_loc;
750 /* For preprocessed files, if the very first characters are
751 '#<SPACE>[01]<SPACE>', then handle a line directive so we know the
752 original file name. This will generate file_change callbacks,
753 which the front ends must handle appropriately given their state of
754 initialization. We peek directly into the character buffer, so
755 that we're not confused by otherwise-skipped white space &
756 comments. We can be very picky, because this should have been
757 machine-generated text (by us, no less). This way we do not
758 interfere with the module directive state machine. */
760 static bool
761 read_original_filename (cpp_reader *pfile)
763 auto *buf = pfile->buffer->next_line;
765 if (pfile->buffer->rlimit - buf > 4
766 && buf[0] == '#'
767 && buf[1] == ' '
768 // Also permit '1', as that's what used to be here
769 && (buf[2] == '0' || buf[2] == '1')
770 && buf[3] == ' ')
772 const cpp_token *token = _cpp_lex_direct (pfile);
773 gcc_checking_assert (token->type == CPP_HASH);
774 if (_cpp_handle_directive (pfile, token->flags & PREV_WHITE))
776 read_original_directory (pfile);
778 auto *penult = &linemap_check_ordinary
779 (LINEMAPS_LAST_MAP (pfile->line_table, false))[-1];
780 if (penult[1].reason == LC_RENAME_VERBATIM)
782 /* Expunge any evidence of the original linemap. */
783 pfile->line_table->highest_location
784 = pfile->line_table->highest_line
785 = penult[0].start_location;
787 penult[1].start_location = penult[0].start_location;
788 penult[1].reason = penult[0].reason;
789 penult[0] = penult[1];
790 pfile->line_table->info_ordinary.used--;
791 pfile->line_table->info_ordinary.cache = 0;
794 return true;
798 return false;
801 /* For preprocessed files, if the tokens following the first filename
802 line is of the form # <line> "/path/name//", handle the
803 directive so we know the original current directory.
805 As with the first line peeking, we can do this without lexing by
806 being picky. */
807 static void
808 read_original_directory (cpp_reader *pfile)
810 auto *buf = pfile->buffer->next_line;
812 if (pfile->buffer->rlimit - buf > 4
813 && buf[0] == '#'
814 && buf[1] == ' '
815 // Also permit '1', as that's what used to be here
816 && (buf[2] == '0' || buf[2] == '1')
817 && buf[3] == ' ')
819 const cpp_token *hash = _cpp_lex_direct (pfile);
820 gcc_checking_assert (hash->type == CPP_HASH);
821 pfile->state.in_directive = 1;
822 const cpp_token *number = _cpp_lex_direct (pfile);
823 gcc_checking_assert (number->type == CPP_NUMBER);
824 const cpp_token *string = _cpp_lex_direct (pfile);
825 pfile->state.in_directive = 0;
827 const unsigned char *text = nullptr;
828 size_t len = 0;
829 if (string->type == CPP_STRING)
831 /* The string value includes the quotes. */
832 text = string->val.str.text;
833 len = string->val.str.len;
835 if (len < 5
836 || !IS_DIR_SEPARATOR (text[len - 2])
837 || !IS_DIR_SEPARATOR (text[len - 3]))
839 /* That didn't work out, back out. */
840 _cpp_backup_tokens (pfile, 3);
841 return;
844 if (pfile->cb.dir_change)
846 /* Smash the string directly, it's dead at this point */
847 char *smashy = (char *)text;
848 smashy[len - 3] = 0;
850 pfile->cb.dir_change (pfile, smashy + 1);
853 /* We should be at EOL. */
857 /* This is called at the end of preprocessing. It pops the last
858 buffer and writes dependency output.
860 Maybe it should also reset state, such that you could call
861 cpp_start_read with a new filename to restart processing. */
862 void
863 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
865 /* Warn about unused macros before popping the final buffer. */
866 if (CPP_OPTION (pfile, warn_unused_macros))
867 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
869 /* lex.cc leaves the final buffer on the stack. This it so that
870 it returns an unending stream of CPP_EOFs to the client. If we
871 popped the buffer, we'd dereference a NULL buffer pointer and
872 segfault. It's nice to allow the client to do worry-free excess
873 cpp_get_token calls. */
874 while (pfile->buffer)
875 _cpp_pop_buffer (pfile);
877 if (deps_stream)
878 deps_write (pfile, deps_stream, 72);
880 /* Report on headers that could use multiple include guards. */
881 if (CPP_OPTION (pfile, print_include_names))
882 _cpp_report_missing_guards (pfile);
885 static void
886 post_options (cpp_reader *pfile)
888 /* -Wtraditional is not useful in C++ mode. */
889 if (CPP_OPTION (pfile, cplusplus))
890 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
892 /* Permanently disable macro expansion if we are rescanning
893 preprocessed text. Read preprocesed source in ISO mode. */
894 if (CPP_OPTION (pfile, preprocessed))
896 if (!CPP_OPTION (pfile, directives_only))
897 pfile->state.prevent_expansion = 1;
898 CPP_OPTION (pfile, traditional) = 0;
901 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
902 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
904 if (CPP_OPTION (pfile, traditional))
906 CPP_OPTION (pfile, trigraphs) = 0;
907 CPP_OPTION (pfile, warn_trigraphs) = 0;
910 if (CPP_OPTION (pfile, module_directives))
912 /* These unspellable tokens have a leading space. */
913 const char *const inits[spec_nodes::M_HWM]
914 = {"export ", "module ", "import ", "__import"};
916 for (int ix = 0; ix != spec_nodes::M_HWM; ix++)
918 cpp_hashnode *node = cpp_lookup (pfile, UC (inits[ix]),
919 strlen (inits[ix]));
921 /* Token we pass to the compiler. */
922 pfile->spec_nodes.n_modules[ix][1] = node;
924 if (ix != spec_nodes::M__IMPORT)
925 /* Token we recognize when lexing, drop the trailing ' '. */
926 node = cpp_lookup (pfile, NODE_NAME (node), NODE_LEN (node) - 1);
928 node->flags |= NODE_MODULE;
929 pfile->spec_nodes.n_modules[ix][0] = node;