]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/init.c
sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC.
[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 },
2aaeea19 108 /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0 },
fe95b036 109 /* GNUCXX14 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0 },
2aaeea19 110 /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
fe95b036
ESR
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
15c98b2e
ES
260 /* Initialize source_date_epoch to -2 (not yet set). */
261 pfile->source_date_epoch = (time_t) -2;
262
87ed109f
NB
263 /* The expression parser stack. */
264 _cpp_expand_op_stack (pfile);
265
4912a07c 266 /* Initialize the buffer obstack. */
19a9ba64 267 obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
2a967f3d 268
8f9b4009 269 _cpp_init_files (pfile);
cf44ea52 270
b4e46cea
PB
271 _cpp_init_hashtable (pfile, table);
272
cf44ea52 273 return pfile;
f2d5f0cc
ZW
274}
275
5ffeb913
TT
276/* Set the line_table entry in PFILE. This is called after reading a
277 PCH file, as the old line_table will be incorrect. */
278void
279cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
280{
281 pfile->line_table = line_table;
282}
283
400023a3 284/* Free resources used by PFILE. Accessing PFILE after this function
8d9afc4e 285 returns leads to undefined behavior. Returns the error count. */
76c3e73e 286void
6cf87ca4 287cpp_destroy (cpp_reader *pfile)
6de1e2a9 288{
93c80368 289 cpp_context *context, *contextn;
17e7cb85 290 struct def_pragma_macro *pmacro;
50410426 291 tokenrun *run, *runn;
631d0d36 292 int i;
709e9e50 293
87ed109f 294 free (pfile->op_stack);
af0d16cd 295
38b24ee2 296 while (CPP_BUFFER (pfile) != NULL)
ef6e958a 297 _cpp_pop_buffer (pfile);
6de1e2a9 298
04695783 299 free (pfile->out.base);
004cb263 300
93c80368 301 if (pfile->macro_buffer)
4b49c365 302 {
fad205ff 303 free (pfile->macro_buffer);
4b49c365
AO
304 pfile->macro_buffer = NULL;
305 pfile->macro_buffer_len = 0;
306 }
93c80368 307
f4ff5a69
NB
308 if (pfile->deps)
309 deps_free (pfile->deps);
2a967f3d 310 obstack_free (&pfile->buffer_ob, 0);
49e6c08e 311
2a967f3d 312 _cpp_destroy_hashtable (pfile);
8f9b4009 313 _cpp_cleanup_files (pfile);
e6cc3a24 314 _cpp_destroy_iconv (pfile);
709e9e50 315
8c3b2693 316 _cpp_free_buff (pfile->a_buff);
ece54d54 317 _cpp_free_buff (pfile->u_buff);
b8af0ca5 318 _cpp_free_buff (pfile->free_buffs);
93c80368 319
50410426
NB
320 for (run = &pfile->base_run; run; run = runn)
321 {
322 runn = run->next;
323 free (run->base);
324 if (run != &pfile->base_run)
325 free (run);
326 }
327
93c80368
NB
328 for (context = pfile->base_context.next; context; context = contextn)
329 {
330 contextn = context->next;
331 free (context);
332 }
400023a3 333
631d0d36
MG
334 if (pfile->comments.entries)
335 {
336 for (i = 0; i < pfile->comments.count; i++)
337 free (pfile->comments.entries[i].comment);
338
339 free (pfile->comments.entries);
340 }
17e7cb85
KT
341 if (pfile->pushed_macros)
342 {
343 do
344 {
345 pmacro = pfile->pushed_macros;
346 pfile->pushed_macros = pmacro->next;
347 free (pmacro->name);
348 free (pmacro);
349 }
350 while (pfile->pushed_macros);
351 }
631d0d36 352
400023a3 353 free (pfile);
6de1e2a9
ZW
354}
355
93c80368 356/* This structure defines one built-in identifier. A node will be
f24a153a
ZW
357 entered in the hash table under the name NAME, with value VALUE.
358
359 There are two tables of these. builtin_array holds all the
360 "builtin" macros: these are handled by builtin_macro() in
a2566ae9 361 macro.c. Builtin is somewhat of a misnomer -- the property of
f24a153a 362 interest is that these macros require special code to compute their
128465e6 363 expansions. The value is a "cpp_builtin_type" enumerator.
f24a153a
ZW
364
365 operator_array holds the C++ named operators. These are keywords
366 which act as aliases for punctuators. In C++, they cannot be
367 altered through #define, and #if recognizes them as operators. In
368 C, these are not entered into the hash table at all (but see
369 <iso646.h>). The value is a token-type enumerator. */
c047ce93 370struct builtin_macro
a9ae4483 371{
c047ce93
SB
372 const uchar *const name;
373 const unsigned short len;
374 const unsigned short value;
375 const bool always_warn_if_redefined;
a9ae4483 376};
93c80368 377
c047ce93
SB
378#define B(n, t, f) { DSC(n), t, f }
379static const struct builtin_macro builtin_array[] =
6de1e2a9 380{
c047ce93
SB
381 B("__TIMESTAMP__", BT_TIMESTAMP, false),
382 B("__TIME__", BT_TIME, false),
383 B("__DATE__", BT_DATE, false),
384 B("__FILE__", BT_FILE, false),
385 B("__BASE_FILE__", BT_BASE_FILE, false),
386 B("__LINE__", BT_SPECLINE, true),
387 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
388 B("__COUNTER__", BT_COUNTER, true),
1f8d3e84
JJ
389 B("__has_attribute", BT_HAS_ATTRIBUTE, true),
390 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
278c4662
NB
391 /* Keep builtins not used for -traditional-cpp at the end, and
392 update init_builtins() if any more are added. */
c047ce93
SB
393 B("_Pragma", BT_PRAGMA, true),
394 B("__STDC__", BT_STDC, true),
395};
396#undef B
397
398struct builtin_operator
399{
400 const uchar *const name;
401 const unsigned short len;
402 const unsigned short value;
f24a153a 403};
92936ecf 404
c047ce93
SB
405#define B(n, t) { DSC(n), t }
406static const struct builtin_operator operator_array[] =
f24a153a
ZW
407{
408 B("and", CPP_AND_AND),
409 B("and_eq", CPP_AND_EQ),
410 B("bitand", CPP_AND),
411 B("bitor", CPP_OR),
412 B("compl", CPP_COMPL),
413 B("not", CPP_NOT),
414 B("not_eq", CPP_NOT_EQ),
415 B("or", CPP_OR_OR),
416 B("or_eq", CPP_OR_EQ),
417 B("xor", CPP_XOR),
418 B("xor_eq", CPP_XOR_EQ)
a9ae4483 419};
12cf91fe 420#undef B
a9ae4483 421
17645b15
NB
422/* Mark the C++ named operators in the hash table. */
423static void
3d8b2a98 424mark_named_operators (cpp_reader *pfile, int flags)
17645b15 425{
c047ce93 426 const struct builtin_operator *b;
17645b15
NB
427
428 for (b = operator_array;
429 b < (operator_array + ARRAY_SIZE (operator_array));
430 b++)
431 {
432 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
3d8b2a98 433 hp->flags |= flags;
4977bab6
ZW
434 hp->is_directive = 0;
435 hp->directive_index = b->value;
17645b15
NB
436 }
437}
438
cfc93532
MLI
439/* Helper function of cpp_type2name. Return the string associated with
440 named operator TYPE. */
441const char *
442cpp_named_operator2name (enum cpp_ttype type)
443{
444 const struct builtin_operator *b;
445
446 for (b = operator_array;
447 b < (operator_array + ARRAY_SIZE (operator_array));
448 b++)
449 {
450 if (type == b->value)
451 return (const char *) b->name;
452 }
453
454 return NULL;
455}
456
c1bad961 457void
ccfc4c91 458cpp_init_special_builtins (cpp_reader *pfile)
a9ae4483 459{
c047ce93 460 const struct builtin_macro *b;
278c4662 461 size_t n = ARRAY_SIZE (builtin_array);
771c4df3 462
278c4662
NB
463 if (CPP_OPTION (pfile, traditional))
464 n -= 2;
83900997
JJ
465 else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
466 || CPP_OPTION (pfile, std))
ccfc4c91 467 n--;
278c4662 468
83900997 469 for (b = builtin_array; b < builtin_array + n; b++)
6de1e2a9 470 {
1f8d3e84
JJ
471 if (b->value == BT_HAS_ATTRIBUTE
472 && (CPP_OPTION (pfile, lang) == CLK_ASM
473 || pfile->cb.has_attribute == NULL))
474 continue;
f24a153a
ZW
475 cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
476 hp->type = NT_MACRO;
c047ce93 477 hp->flags |= NODE_BUILTIN;
b753b37b 478 if (b->always_warn_if_redefined)
c047ce93 479 hp->flags |= NODE_WARN;
7e5487a2 480 hp->value.builtin = (enum cpp_builtin_type) b->value;
6de1e2a9 481 }
ccfc4c91
OW
482}
483
484/* Read the builtins table above and enter them, and language-specific
485 macros, into the hash table. HOSTED is true if this is a hosted
486 environment. */
487void
488cpp_init_builtins (cpp_reader *pfile, int hosted)
489{
490 cpp_init_special_builtins (pfile);
491
492 if (!CPP_OPTION (pfile, traditional)
493 && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
494 || CPP_OPTION (pfile, std)))
495 _cpp_define_builtin (pfile, "__STDC__ 1");
c740cee2
NB
496
497 if (CPP_OPTION (pfile, cplusplus))
1fb80b0c 498 {
e4276ba5
ESR
499 if (CPP_OPTION (pfile, lang) == CLK_CXX1Z
500 || CPP_OPTION (pfile, lang) == CLK_GNUCXX1Z)
501 _cpp_define_builtin (pfile, "__cplusplus 201500L");
502 else if (CPP_OPTION (pfile, lang) == CLK_CXX14
503 || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
504 _cpp_define_builtin (pfile, "__cplusplus 201402L");
61949153
PC
505 else if (CPP_OPTION (pfile, lang) == CLK_CXX11
506 || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
1fb80b0c
JM
507 _cpp_define_builtin (pfile, "__cplusplus 201103L");
508 else
509 _cpp_define_builtin (pfile, "__cplusplus 199711L");
510 }
2a1dc0d8
ZW
511 else if (CPP_OPTION (pfile, lang) == CLK_ASM)
512 _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
0f7866e7 513 else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
c740cee2 514 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
48b0b196
JM
515 else if (CPP_OPTION (pfile, lang) == CLK_STDC11
516 || CPP_OPTION (pfile, lang) == CLK_GNUC11)
517 _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
c740cee2
NB
518 else if (CPP_OPTION (pfile, c99))
519 _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
520
a48e3dd1 521 if (CPP_OPTION (pfile, uliterals)
e4276ba5
ESR
522 && !(CPP_OPTION (pfile, cplusplus)
523 && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
524 || CPP_OPTION (pfile, lang) == CLK_CXX98)))
a48e3dd1
JM
525 {
526 _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
527 _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
528 }
529
6e270179 530 if (hosted)
58b5b894 531 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
6e270179 532 else
58b5b894 533 _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
6e270179 534
0f7866e7
ZL
535 if (CPP_OPTION (pfile, objc))
536 _cpp_define_builtin (pfile, "__OBJC__ 1");
4a58aab6
NB
537}
538
2443d4e1 539/* Sanity-checks are dependent on command-line options, so it is
174f6622 540 called as a subroutine of cpp_read_main_file. */
22d66382 541#if CHECKING_P
6cf87ca4
ZW
542static void sanity_checks (cpp_reader *);
543static void sanity_checks (cpp_reader *pfile)
2443d4e1
NB
544{
545 cppchar_t test = 0;
c9220e3a 546 size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
2443d4e1
NB
547
548 /* Sanity checks for assumptions about CPP arithmetic and target
549 type precisions made by cpplib. */
550 test--;
551 if (test < 1)
0527bc4e 552 cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
2443d4e1 553
c9220e3a 554 if (CPP_OPTION (pfile, precision) > max_precision)
0527bc4e 555 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
556 "preprocessor arithmetic has maximum precision of %lu bits;"
557 " target requires %lu bits",
c9220e3a
NB
558 (unsigned long) max_precision,
559 (unsigned long) CPP_OPTION (pfile, precision));
2443d4e1
NB
560
561 if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
0527bc4e 562 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
563 "CPP arithmetic must be at least as precise as a target int");
564
565 if (CPP_OPTION (pfile, char_precision) < 8)
0527bc4e 566 cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
2443d4e1
NB
567
568 if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 569 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
570 "target wchar_t is narrower than target char");
571
572 if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
0527bc4e 573 cpp_error (pfile, CPP_DL_ICE,
2443d4e1
NB
574 "target int is narrower than target char");
575
c9220e3a
NB
576 /* This is assumed in eval_token() and could be fixed if necessary. */
577 if (sizeof (cppchar_t) > sizeof (cpp_num_part))
0527bc4e
JDA
578 cpp_error (pfile, CPP_DL_ICE,
579 "CPP half-integer narrower than CPP character");
c9220e3a 580
2443d4e1 581 if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
0527bc4e 582 cpp_error (pfile, CPP_DL_ICE,
6cf87ca4
ZW
583 "CPP on this host cannot handle wide character constants over"
584 " %lu bits, but the target requires %lu bits",
c9220e3a
NB
585 (unsigned long) BITS_PER_CPPCHAR_T,
586 (unsigned long) CPP_OPTION (pfile, wchar_precision));
2443d4e1
NB
587}
588#else
589# define sanity_checks(PFILE)
590#endif
591
f5e99456 592/* This is called after options have been parsed, and partially
59e4e217 593 processed. */
4169c321
PB
594void
595cpp_post_options (cpp_reader *pfile)
6de1e2a9 596{
3d8b2a98
ILT
597 int flags;
598
2443d4e1
NB
599 sanity_checks (pfile);
600
f4ff5a69
NB
601 post_options (pfile);
602
c19b12cb 603 /* Mark named operators before handling command line macros. */
3d8b2a98 604 flags = 0;
c19b12cb 605 if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
3d8b2a98
ILT
606 flags |= NODE_OPERATOR;
607 if (CPP_OPTION (pfile, warn_cxx_operator_names))
608 flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
609 if (flags != 0)
610 mark_named_operators (pfile, flags);
4169c321 611}
c19b12cb 612
4dc299fb 613/* Setup for processing input from the file named FNAME, or stdin if
8e9ea4d7
PB
614 it is the empty string. Return the original filename
615 on success (e.g. foo.i->foo.c), or NULL on failure. */
616const char *
617cpp_read_main_file (cpp_reader *pfile, const char *fname)
4169c321 618{
ac81cf0b
DM
619 const source_location loc = 0;
620
f4ff5a69
NB
621 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
622 {
623 if (!pfile->deps)
624 pfile->deps = deps_init ();
625
626 /* Set the default target (if there is none already). */
627 deps_add_default_target (pfile->deps, fname);
628 }
96302433 629
4dc299fb 630 pfile->main_file
ac81cf0b
DM
631 = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
632 loc);
4dc299fb 633 if (_cpp_find_failed (pfile->main_file))
3092d0fc 634 return NULL;
f5e99456 635
ac81cf0b 636 _cpp_stack_file (pfile, pfile->main_file, false, loc);
4dc299fb
PB
637
638 /* For foo.i, read the original filename foo.c now, for the benefit
639 of the front ends. */
640 if (CPP_OPTION (pfile, preprocessed))
8e9ea4d7
PB
641 {
642 read_original_filename (pfile);
46427374
TT
643 fname =
644 ORDINARY_MAP_FILE_NAME
645 ((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
8e9ea4d7
PB
646 }
647 return fname;
f5e99456
NB
648}
649
650/* For preprocessed files, if the first tokens are of the form # NUM.
651 handle the directive so we know the original file name. This will
652 generate file_change callbacks, which the front ends must handle
653 appropriately given their state of initialization. */
654static void
6cf87ca4 655read_original_filename (cpp_reader *pfile)
f5e99456
NB
656{
657 const cpp_token *token, *token1;
658
659 /* Lex ahead; if the first tokens are of the form # NUM, then
660 process the directive, otherwise back up. */
661 token = _cpp_lex_direct (pfile);
662 if (token->type == CPP_HASH)
663 {
456b8ce5 664 pfile->state.in_directive = 1;
f5e99456
NB
665 token1 = _cpp_lex_direct (pfile);
666 _cpp_backup_tokens (pfile, 1);
456b8ce5 667 pfile->state.in_directive = 0;
f5e99456
NB
668
669 /* If it's a #line directive, handle it. */
709d7160
JJ
670 if (token1->type == CPP_NUMBER
671 && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
f5e99456 672 {
b20d9f0c 673 read_original_directory (pfile);
f5e99456
NB
674 return;
675 }
676 }
677
678 /* Backup as if nothing happened. */
679 _cpp_backup_tokens (pfile, 1);
680}
681
b20d9f0c
AO
682/* For preprocessed files, if the tokens following the first filename
683 line is of the form # <line> "/path/name//", handle the
684 directive so we know the original current directory. */
685static void
686read_original_directory (cpp_reader *pfile)
687{
688 const cpp_token *hash, *token;
689
690 /* Lex ahead; if the first tokens are of the form # NUM, then
691 process the directive, otherwise back up. */
692 hash = _cpp_lex_direct (pfile);
693 if (hash->type != CPP_HASH)
694 {
695 _cpp_backup_tokens (pfile, 1);
696 return;
697 }
698
699 token = _cpp_lex_direct (pfile);
700
701 if (token->type != CPP_NUMBER)
702 {
703 _cpp_backup_tokens (pfile, 2);
704 return;
705 }
706
707 token = _cpp_lex_direct (pfile);
708
709 if (token->type != CPP_STRING
710 || ! (token->val.str.len >= 5
4489800d
KT
711 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
712 && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
b20d9f0c
AO
713 {
714 _cpp_backup_tokens (pfile, 3);
715 return;
716 }
717
718 if (pfile->cb.dir_change)
719 {
c3f829c1 720 char *debugdir = (char *) alloca (token->val.str.len - 3);
b20d9f0c
AO
721
722 memcpy (debugdir, (const char *) token->val.str.text + 1,
723 token->val.str.len - 4);
724 debugdir[token->val.str.len - 4] = '\0';
725
726 pfile->cb.dir_change (pfile, debugdir);
8e9ea4d7 727 }
b20d9f0c
AO
728}
729
76c3e73e 730/* This is called at the end of preprocessing. It pops the last
148e4216 731 buffer and writes dependency output.
16dd5cfe 732
76c3e73e
NB
733 Maybe it should also reset state, such that you could call
734 cpp_start_read with a new filename to restart processing. */
148e4216 735void
6cf87ca4 736cpp_finish (cpp_reader *pfile, FILE *deps_stream)
6de1e2a9 737{
a69cbaac
NB
738 /* Warn about unused macros before popping the final buffer. */
739 if (CPP_OPTION (pfile, warn_unused_macros))
740 cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
741
a2566ae9 742 /* lex.c leaves the final buffer on the stack. This it so that
7364fdd8 743 it returns an unending stream of CPP_EOFs to the client. If we
a1f300c0 744 popped the buffer, we'd dereference a NULL buffer pointer and
7364fdd8
NB
745 segfault. It's nice to allow the client to do worry-free excess
746 cpp_get_token calls. */
747 while (pfile->buffer)
748 _cpp_pop_buffer (pfile);
c1212d2f 749
f4ff5a69 750 if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
148e4216 751 && deps_stream)
76c3e73e
NB
752 {
753 deps_write (pfile->deps, deps_stream, 72);
754
f4ff5a69 755 if (CPP_OPTION (pfile, deps.phony_targets))
76c3e73e
NB
756 deps_phony_targets (pfile->deps, deps_stream);
757 }
3caee4a8 758
d4506961
ZW
759 /* Report on headers that could use multiple include guards. */
760 if (CPP_OPTION (pfile, print_include_names))
c71f835b 761 _cpp_report_missing_guards (pfile);
6de1e2a9
ZW
762}
763
f4ff5a69 764static void
6cf87ca4 765post_options (cpp_reader *pfile)
96302433
NB
766{
767 /* -Wtraditional is not useful in C++ mode. */
768 if (CPP_OPTION (pfile, cplusplus))
e3339d0f 769 CPP_OPTION (pfile, cpp_warn_traditional) = 0;
96302433 770
6d4587f7 771 /* Permanently disable macro expansion if we are rescanning
43612ffb 772 preprocessed text. Read preprocesed source in ISO mode. */
6d4587f7 773 if (CPP_OPTION (pfile, preprocessed))
43612ffb 774 {
ccfc4c91
OW
775 if (!CPP_OPTION (pfile, directives_only))
776 pfile->state.prevent_expansion = 1;
43612ffb
NB
777 CPP_OPTION (pfile, traditional) = 0;
778 }
779
a8eb6044
NB
780 if (CPP_OPTION (pfile, warn_trigraphs) == 2)
781 CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
782
43612ffb 783 if (CPP_OPTION (pfile, traditional))
26aea073 784 {
26aea073
NB
785 CPP_OPTION (pfile, trigraphs) = 0;
786 CPP_OPTION (pfile, warn_trigraphs) = 0;
787 }
7ca3d2b1 788}