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