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