Limit dg-xfail-run-if for *-*-hpux11.[012]* to -O0
[official-gcc.git] / libcpp / init.cc
blob54fc9236d3801da9a0789bf402bae521f8a7a2fc
1 /* CPP Library.
2 Copyright (C) 1986-2024 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 /* GNUC23 */ { 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 /* STDC23 */ { 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, cpp_hash_table *extra_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_c23_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, extra_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 B("__has_feature", BT_HAS_FEATURE, true),
439 B("__has_extension", BT_HAS_EXTENSION, true),
440 /* Keep builtins not used for -traditional-cpp at the end, and
441 update init_builtins() if any more are added. */
442 B("_Pragma", BT_PRAGMA, true),
443 B("__STDC__", BT_STDC, true),
445 #undef B
447 struct builtin_operator
449 const uchar *const name;
450 const unsigned short len;
451 const unsigned short value;
454 #define B(n, t) { DSC(n), t }
455 static const struct builtin_operator operator_array[] =
457 B("and", CPP_AND_AND),
458 B("and_eq", CPP_AND_EQ),
459 B("bitand", CPP_AND),
460 B("bitor", CPP_OR),
461 B("compl", CPP_COMPL),
462 B("not", CPP_NOT),
463 B("not_eq", CPP_NOT_EQ),
464 B("or", CPP_OR_OR),
465 B("or_eq", CPP_OR_EQ),
466 B("xor", CPP_XOR),
467 B("xor_eq", CPP_XOR_EQ)
469 #undef B
471 /* Mark the C++ named operators in the hash table. */
472 static void
473 mark_named_operators (cpp_reader *pfile, int flags)
475 const struct builtin_operator *b;
477 for (b = operator_array;
478 b < (operator_array + ARRAY_SIZE (operator_array));
479 b++)
481 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
482 hp->flags |= flags;
483 hp->is_directive = 0;
484 hp->directive_index = b->value;
488 /* Helper function of cpp_type2name. Return the string associated with
489 named operator TYPE. */
490 const char *
491 cpp_named_operator2name (enum cpp_ttype type)
493 const struct builtin_operator *b;
495 for (b = operator_array;
496 b < (operator_array + ARRAY_SIZE (operator_array));
497 b++)
499 if (type == b->value)
500 return (const char *) b->name;
503 return NULL;
506 void
507 cpp_init_special_builtins (cpp_reader *pfile)
509 const struct builtin_macro *b;
510 size_t n = ARRAY_SIZE (builtin_array);
512 if (CPP_OPTION (pfile, traditional))
513 n -= 2;
514 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
515 || CPP_OPTION (pfile, std))
516 n--;
518 for (b = builtin_array; b < builtin_array + n; b++)
520 if ((b->value == BT_HAS_ATTRIBUTE
521 || b->value == BT_HAS_STD_ATTRIBUTE
522 || b->value == BT_HAS_BUILTIN)
523 && (CPP_OPTION (pfile, lang) == CLK_ASM
524 || pfile->cb.has_attribute == NULL))
525 continue;
526 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
527 hp->type = NT_BUILTIN_MACRO;
528 if (b->always_warn_if_redefined)
529 hp->flags |= NODE_WARN;
530 hp->value.builtin = (enum cpp_builtin_type) b->value;
534 /* Restore macro C to builtin macro definition. */
536 void
537 _cpp_restore_special_builtin (cpp_reader *pfile, struct def_pragma_macro *c)
539 size_t len = strlen (c->name);
541 for (const struct builtin_macro *b = builtin_array;
542 b < builtin_array + ARRAY_SIZE (builtin_array); b++)
543 if (b->len == len && memcmp (c->name, b->name, len + 1) == 0)
545 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
546 hp->type = NT_BUILTIN_MACRO;
547 if (b->always_warn_if_redefined)
548 hp->flags |= NODE_WARN;
549 hp->value.builtin = (enum cpp_builtin_type) b->value;
553 /* Read the builtins table above and enter them, and language-specific
554 macros, into the hash table. HOSTED is true if this is a hosted
555 environment. */
556 void
557 cpp_init_builtins (cpp_reader *pfile, int hosted)
559 cpp_init_special_builtins (pfile);
561 if (!CPP_OPTION (pfile, traditional)
562 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
563 || CPP_OPTION (pfile, std)))
564 _cpp_define_builtin (pfile, "__STDC__ 1");
566 if (CPP_OPTION (pfile, cplusplus))
568 /* C++26 is not yet a standard. For now, use an invalid
569 year/month, 202400L, which is larger than 202302L. */
570 if (CPP_OPTION (pfile, lang) == CLK_CXX26
571 || CPP_OPTION (pfile, lang) == CLK_GNUCXX26)
572 _cpp_define_builtin (pfile, "__cplusplus 202400L");
573 else if (CPP_OPTION (pfile, lang) == CLK_CXX23
574 || CPP_OPTION (pfile, lang) == CLK_GNUCXX23)
575 _cpp_define_builtin (pfile, "__cplusplus 202302L");
576 else if (CPP_OPTION (pfile, lang) == CLK_CXX20
577 || CPP_OPTION (pfile, lang) == CLK_GNUCXX20)
578 _cpp_define_builtin (pfile, "__cplusplus 202002L");
579 else if (CPP_OPTION (pfile, lang) == CLK_CXX17
580 || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
581 _cpp_define_builtin (pfile, "__cplusplus 201703L");
582 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
583 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
584 _cpp_define_builtin (pfile, "__cplusplus 201402L");
585 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
586 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
587 _cpp_define_builtin (pfile, "__cplusplus 201103L");
588 else
589 _cpp_define_builtin (pfile, "__cplusplus 199711L");
591 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
592 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
593 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
594 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
595 else if (CPP_OPTION (pfile, lang) == CLK_STDC23
596 || CPP_OPTION (pfile, lang) == CLK_GNUC23)
597 _cpp_define_builtin (pfile, "__STDC_VERSION__ 202000L");
598 else if (CPP_OPTION (pfile, lang) == CLK_STDC17
599 || CPP_OPTION (pfile, lang) == CLK_GNUC17)
600 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201710L");
601 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
602 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
603 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
604 else if (CPP_OPTION (pfile, c99))
605 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
607 if (CPP_OPTION (pfile, uliterals)
608 && !(CPP_OPTION (pfile, cplusplus)
609 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
610 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
612 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
613 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
616 if (hosted)
617 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
618 else
619 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
621 if (CPP_OPTION (pfile, objc))
622 _cpp_define_builtin (pfile, "__OBJC__ 1");
625 /* Sanity-checks are dependent on command-line options, so it is
626 called as a subroutine of cpp_read_main_file. */
627 #if CHECKING_P
628 static void sanity_checks (cpp_reader *);
629 static void sanity_checks (cpp_reader *pfile)
631 cppchar_t test = 0;
632 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
634 /* Sanity checks for assumptions about CPP arithmetic and target
635 type precisions made by cpplib. */
636 test--;
637 if (test < 1)
638 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
640 if (CPP_OPTION (pfile, precision) > max_precision)
641 cpp_error (pfile, CPP_DL_ICE,
642 "preprocessor arithmetic has maximum precision of %lu bits;"
643 " target requires %lu bits",
644 (unsigned long) max_precision,
645 (unsigned long) CPP_OPTION (pfile, precision));
647 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
648 cpp_error (pfile, CPP_DL_ICE,
649 "CPP arithmetic must be at least as precise as a target int");
651 if (CPP_OPTION (pfile, char_precision) < 8)
652 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
654 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
655 cpp_error (pfile, CPP_DL_ICE,
656 "target wchar_t is narrower than target char");
658 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
659 cpp_error (pfile, CPP_DL_ICE,
660 "target int is narrower than target char");
662 /* This is assumed in eval_token() and could be fixed if necessary. */
663 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
664 cpp_error (pfile, CPP_DL_ICE,
665 "CPP half-integer narrower than CPP character");
667 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
668 cpp_error (pfile, CPP_DL_ICE,
669 "CPP on this host cannot handle wide character constants over"
670 " %lu bits, but the target requires %lu bits",
671 (unsigned long) BITS_PER_CPPCHAR_T,
672 (unsigned long) CPP_OPTION (pfile, wchar_precision));
674 #else
675 # define sanity_checks(PFILE)
676 #endif
678 /* This is called after options have been parsed, and partially
679 processed. */
680 void
681 cpp_post_options (cpp_reader *pfile)
683 int flags;
685 sanity_checks (pfile);
687 post_options (pfile);
689 /* Mark named operators before handling command line macros. */
690 flags = 0;
691 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
692 flags |= NODE_OPERATOR;
693 if (CPP_OPTION (pfile, warn_cxx_operator_names))
694 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
695 if (flags != 0)
696 mark_named_operators (pfile, flags);
699 /* Setup for processing input from the file named FNAME, or stdin if
700 it is the empty string. Return the original filename on success
701 (e.g. foo.i->foo.c), or NULL on failure. INJECTING is true if
702 there may be injected headers before line 1 of the main file. */
703 const char *
704 cpp_read_main_file (cpp_reader *pfile, const char *fname, bool injecting)
706 if (mkdeps *deps = cpp_get_deps (pfile))
707 /* Set the default target (if there is none already). */
708 deps_add_default_target (deps, fname);
710 pfile->main_file
711 = _cpp_find_file (pfile, fname,
712 CPP_OPTION (pfile, preprocessed) ? &pfile->no_search_path
713 : CPP_OPTION (pfile, main_search) == CMS_user
714 ? pfile->quote_include
715 : CPP_OPTION (pfile, main_search) == CMS_system
716 ? pfile->bracket_include : &pfile->no_search_path,
717 /*angle=*/0, _cpp_FFK_NORMAL, 0);
719 if (_cpp_find_failed (pfile->main_file))
720 return NULL;
722 _cpp_stack_file (pfile, pfile->main_file,
723 injecting || CPP_OPTION (pfile, preprocessed)
724 ? IT_PRE_MAIN : IT_MAIN, 0);
726 /* For foo.i, read the original filename foo.c now, for the benefit
727 of the front ends. */
728 if (CPP_OPTION (pfile, preprocessed))
729 if (!read_original_filename (pfile))
731 /* We're on line 1 after all. */
732 auto *last = linemap_check_ordinary
733 (LINEMAPS_LAST_MAP (pfile->line_table, false));
734 last->to_line = 1;
735 /* Inform of as-if a file change. */
736 _cpp_do_file_change (pfile, LC_RENAME_VERBATIM, LINEMAP_FILE (last),
737 LINEMAP_LINE (last), LINEMAP_SYSP (last));
740 auto *map = LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table);
741 pfile->main_loc = MAP_START_LOCATION (map);
743 return ORDINARY_MAP_FILE_NAME (map);
746 location_t
747 cpp_main_loc (const cpp_reader *pfile)
749 return pfile->main_loc;
752 /* For preprocessed files, if the very first characters are
753 '#<SPACE>[01]<SPACE>', then handle a line directive so we know the
754 original file name. This will generate file_change callbacks,
755 which the front ends must handle appropriately given their state of
756 initialization. We peek directly into the character buffer, so
757 that we're not confused by otherwise-skipped white space &
758 comments. We can be very picky, because this should have been
759 machine-generated text (by us, no less). This way we do not
760 interfere with the module directive state machine. */
762 static bool
763 read_original_filename (cpp_reader *pfile)
765 auto *buf = pfile->buffer->next_line;
767 if (pfile->buffer->rlimit - buf > 4
768 && buf[0] == '#'
769 && buf[1] == ' '
770 // Also permit '1', as that's what used to be here
771 && (buf[2] == '0' || buf[2] == '1')
772 && buf[3] == ' ')
774 const cpp_token *token = _cpp_lex_direct (pfile);
775 gcc_checking_assert (token->type == CPP_HASH);
776 if (_cpp_handle_directive (pfile, token->flags & PREV_WHITE))
778 read_original_directory (pfile);
780 auto *penult = &linemap_check_ordinary
781 (LINEMAPS_LAST_MAP (pfile->line_table, false))[-1];
782 if (penult[1].reason == LC_RENAME_VERBATIM)
784 /* Expunge any evidence of the original linemap. */
785 pfile->line_table->highest_location
786 = pfile->line_table->highest_line
787 = penult[0].start_location;
789 penult[1].start_location = penult[0].start_location;
790 penult[1].reason = penult[0].reason;
791 penult[0] = penult[1];
792 pfile->line_table->info_ordinary.used--;
793 pfile->line_table->info_ordinary.m_cache = 0;
796 return true;
800 return false;
803 /* For preprocessed files, if the tokens following the first filename
804 line is of the form # <line> "/path/name//", handle the
805 directive so we know the original current directory.
807 As with the first line peeking, we can do this without lexing by
808 being picky. */
809 static void
810 read_original_directory (cpp_reader *pfile)
812 auto *buf = pfile->buffer->next_line;
814 if (pfile->buffer->rlimit - buf > 4
815 && buf[0] == '#'
816 && buf[1] == ' '
817 // Also permit '1', as that's what used to be here
818 && (buf[2] == '0' || buf[2] == '1')
819 && buf[3] == ' ')
821 const cpp_token *hash = _cpp_lex_direct (pfile);
822 gcc_checking_assert (hash->type == CPP_HASH);
823 pfile->state.in_directive = 1;
824 const cpp_token *number = _cpp_lex_direct (pfile);
825 gcc_checking_assert (number->type == CPP_NUMBER);
826 const cpp_token *string = _cpp_lex_direct (pfile);
827 pfile->state.in_directive = 0;
829 const unsigned char *text = nullptr;
830 size_t len = 0;
831 if (string->type == CPP_STRING)
833 /* The string value includes the quotes. */
834 text = string->val.str.text;
835 len = string->val.str.len;
837 if (len < 5
838 || !IS_DIR_SEPARATOR (text[len - 2])
839 || !IS_DIR_SEPARATOR (text[len - 3]))
841 /* That didn't work out, back out. */
842 _cpp_backup_tokens (pfile, 3);
843 return;
846 if (pfile->cb.dir_change)
848 /* Smash the string directly, it's dead at this point */
849 char *smashy = (char *)text;
850 smashy[len - 3] = 0;
852 pfile->cb.dir_change (pfile, smashy + 1);
855 /* We should be at EOL. */
859 /* This is called at the end of preprocessing. It pops the last
860 buffer and writes dependency output.
862 Maybe it should also reset state, such that you could call
863 cpp_start_read with a new filename to restart processing. */
864 void
865 cpp_finish (struct cpp_reader *pfile, FILE *deps_stream, FILE *fdeps_stream)
867 /* Warn about unused macros before popping the final buffer. */
868 if (CPP_OPTION (pfile, warn_unused_macros))
869 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
871 /* lex.cc leaves the final buffer on the stack. This it so that
872 it returns an unending stream of CPP_EOFs to the client. If we
873 popped the buffer, we'd dereference a NULL buffer pointer and
874 segfault. It's nice to allow the client to do worry-free excess
875 cpp_get_token calls. */
876 while (pfile->buffer)
877 _cpp_pop_buffer (pfile);
879 cpp_fdeps_format fdeps_format = CPP_OPTION (pfile, deps.fdeps_format);
880 if (fdeps_format == FDEPS_FMT_P1689R5 && fdeps_stream)
881 deps_write_p1689r5 (pfile->deps, fdeps_stream);
883 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
884 && deps_stream)
886 deps_write (pfile, deps_stream, 72);
889 /* Report on headers that could use multiple include guards. */
890 if (CPP_OPTION (pfile, print_include_names))
891 _cpp_report_missing_guards (pfile);
894 static void
895 post_options (cpp_reader *pfile)
897 /* -Wtraditional is not useful in C++ mode. */
898 if (CPP_OPTION (pfile, cplusplus))
899 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
901 /* Permanently disable macro expansion if we are rescanning
902 preprocessed text. Read preprocesed source in ISO mode. */
903 if (CPP_OPTION (pfile, preprocessed))
905 if (!CPP_OPTION (pfile, directives_only))
906 pfile->state.prevent_expansion = 1;
907 CPP_OPTION (pfile, traditional) = 0;
910 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
911 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
913 if (CPP_OPTION (pfile, traditional))
915 CPP_OPTION (pfile, trigraphs) = 0;
916 CPP_OPTION (pfile, warn_trigraphs) = 0;
919 if (CPP_OPTION (pfile, module_directives))
921 /* These unspellable tokens have a leading space. */
922 const char *const inits[spec_nodes::M_HWM]
923 = {"export ", "module ", "import ", "__import"};
925 for (int ix = 0; ix != spec_nodes::M_HWM; ix++)
927 cpp_hashnode *node = cpp_lookup (pfile, UC (inits[ix]),
928 strlen (inits[ix]));
930 /* Token we pass to the compiler. */
931 pfile->spec_nodes.n_modules[ix][1] = node;
933 if (ix != spec_nodes::M__IMPORT)
934 /* Token we recognize when lexing, drop the trailing ' '. */
935 node = cpp_lookup (pfile, NODE_NAME (node), NODE_LEN (node) - 1);
937 node->flags |= NODE_MODULE;
938 pfile->spec_nodes.n_modules[ix][0] = node;