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