init.c 25.7 KB
Newer Older
1
/* CPP Library.
2
   Copyright (C) 1986-2018 Free Software Foundation, Inc.
3 4 5 6 7 8
   Contributed by Per Bothner, 1994-95.
   Based on CCCP program by Paul Rubin, June 1986
   Adapted to ANSI C, Richard Stallman, Jan 1987

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
9
Free Software Foundation; either version 3, or (at your option) any
10 11 12 13 14 15 16 17
later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
18 19
along with this program; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */
20 21 22

#include "config.h"
#include "system.h"
23
#include "cpplib.h"
24
#include "internal.h"
25
#include "mkdeps.h"
Zack Weinberg committed
26
#include "localedir.h"
27
#include "filenames.h"
28

29
#ifndef ENABLE_CANONICAL_SYSTEM_HEADERS
30 31 32
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
#define ENABLE_CANONICAL_SYSTEM_HEADERS 1
#else
33 34
#define ENABLE_CANONICAL_SYSTEM_HEADERS 0
#endif
35
#endif
36

37
static void init_library (void);
38
static void mark_named_operators (cpp_reader *, int);
39
static void read_original_filename (cpp_reader *);
40
static void read_original_directory (cpp_reader *);
41
static void post_options (cpp_reader *);
42

43 44
/* If we have designated initializers (GCC >2.7) these tables can be
   initialized, constant data.  Otherwise, they have to be filled in at
45
   runtime.  */
46
#if HAVE_DESIGNATED_INITIALIZERS
47

Neil Booth committed
48
#define init_trigraph_map()  /* Nothing.  */
49
#define TRIGRAPH_MAP \
50
__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
51

52
#define END };
53
#define s(p, v) [p] = v,
54

55
#else
56

57
#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
58
 static void init_trigraph_map (void) { \
59 60
 unsigned char *x = _cpp_trigraph_map;

61
#define END }
62
#define s(p, v) x[p] = v;
63

64
#endif
65

66 67 68 69 70 71
TRIGRAPH_MAP
  s('=', '#')	s(')', ']')	s('!', '|')
  s('(', '[')	s('\'', '^')	s('>', '}')
  s('/', '\\')	s('<', '{')	s('-', '~')
END

72
#undef s
73
#undef END
74
#undef TRIGRAPH_MAP
75

76 77
/* A set of booleans indicating what CPP features each source language
   requires.  */
78 79 80 81 82
struct lang_flags
{
  char c99;
  char cplusplus;
  char extended_numbers;
83
  char extended_identifiers;
Joseph Myers committed
84
  char c11_identifiers;
85
  char std;
86
  char digraphs;
87
  char uliterals;
88
  char rliterals;
89
  char user_literals;
Jakub Jelinek committed
90
  char binary_constants;
91
  char digit_separators;
92
  char trigraphs;
93
  char utf8_char_literals;
Tom Tromey committed
94
  char va_opt;
95 96 97
};

static const struct lang_flags lang_defaults[] =
Tom Tromey committed
98 99 100 101 102
{ /*              c99 c++ xnum xid c11 std digr ulit rlit udlit bincst digsep trig u8chlit vaopt */
  /* GNUC89   */  { 0,  0,  1,  0,  0,  0,  1,   0,   0,   0,    0,     0,     0,   0,      1 },
  /* GNUC99   */  { 1,  0,  1,  1,  0,  0,  1,   1,   1,   0,    0,     0,     0,   0,      1 },
  /* GNUC11   */  { 1,  0,  1,  1,  1,  0,  1,   1,   1,   0,    0,     0,     0,   0,      1 },
  /* GNUC17   */  { 1,  0,  1,  1,  1,  0,  1,   1,   1,   0,    0,     0,     0,   0,      1 },
103
  /* GNUC2X   */  { 1,  0,  1,  1,  1,  0,  1,   1,   1,   0,    0,     0,     0,   0,      1 },
Tom Tromey committed
104 105 106 107 108
  /* STDC89   */  { 0,  0,  0,  0,  0,  1,  0,   0,   0,   0,    0,     0,     1,   0,      0 },
  /* STDC94   */  { 0,  0,  0,  0,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0,      0 },
  /* STDC99   */  { 1,  0,  1,  1,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0,      0 },
  /* STDC11   */  { 1,  0,  1,  1,  1,  1,  1,   1,   0,   0,    0,     0,     1,   0,      0 },
  /* STDC17   */  { 1,  0,  1,  1,  1,  1,  1,   1,   0,   0,    0,     0,     1,   0,      0 },
109
  /* STDC2X   */  { 1,  0,  1,  1,  1,  1,  1,   1,   0,   0,    0,     0,     1,   0,      0 },
Tom Tromey committed
110 111 112 113 114 115 116 117 118 119 120
  /* GNUCXX   */  { 0,  1,  1,  1,  0,  0,  1,   0,   0,   0,    0,     0,     0,   0,      1 },
  /* CXX98    */  { 0,  1,  0,  1,  0,  1,  1,   0,   0,   0,    0,     0,     1,   0,      0 },
  /* GNUCXX11 */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    0,     0,     0,   0,      1 },
  /* CXX11    */  { 1,  1,  0,  1,  1,  1,  1,   1,   1,   1,    0,     0,     1,   0,      0 },
  /* GNUCXX14 */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    1,     1,     0,   0,      1 },
  /* CXX14    */  { 1,  1,  0,  1,  1,  1,  1,   1,   1,   1,    1,     1,     1,   0,      0 },
  /* GNUCXX17 */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    1,     1,     0,   1,      1 },
  /* CXX17    */  { 1,  1,  1,  1,  1,  1,  1,   1,   1,   1,    1,     1,     0,   1,      0 },
  /* GNUCXX2A */  { 1,  1,  1,  1,  1,  0,  1,   1,   1,   1,    1,     1,     0,   1,      1 },
  /* CXX2A    */  { 1,  1,  1,  1,  1,  1,  1,   1,   1,   1,    1,     1,     0,   1,      1 },
  /* ASM      */  { 0,  0,  1,  0,  0,  0,  0,   0,   0,   0,    0,     0,     0,   0,      0 }
121 122
};

123
/* Sets internal flags correctly for a given language.  */
124
void
125
cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
126
{
127
  const struct lang_flags *l = &lang_defaults[(int) lang];
128

129
  CPP_OPTION (pfile, lang) = lang;
130

131 132 133 134
  CPP_OPTION (pfile, c99)			 = l->c99;
  CPP_OPTION (pfile, cplusplus)			 = l->cplusplus;
  CPP_OPTION (pfile, extended_numbers)		 = l->extended_numbers;
  CPP_OPTION (pfile, extended_identifiers)	 = l->extended_identifiers;
Joseph Myers committed
135
  CPP_OPTION (pfile, c11_identifiers)		 = l->c11_identifiers;
136 137
  CPP_OPTION (pfile, std)			 = l->std;
  CPP_OPTION (pfile, digraphs)			 = l->digraphs;
138
  CPP_OPTION (pfile, uliterals)			 = l->uliterals;
139
  CPP_OPTION (pfile, rliterals)			 = l->rliterals;
140
  CPP_OPTION (pfile, user_literals)		 = l->user_literals;
Jakub Jelinek committed
141
  CPP_OPTION (pfile, binary_constants)		 = l->binary_constants;
142
  CPP_OPTION (pfile, digit_separators)		 = l->digit_separators;
143
  CPP_OPTION (pfile, trigraphs)			 = l->trigraphs;
144
  CPP_OPTION (pfile, utf8_char_literals)	 = l->utf8_char_literals;
Tom Tromey committed
145
  CPP_OPTION (pfile, va_opt)			 = l->va_opt;
146 147
}

Neil Booth committed
148
/* Initialize library global state.  */
149
static void
150
init_library (void)
151
{
152 153 154 155 156 157
  static int initialized = 0;

  if (! initialized)
    {
      initialized = 1;

158 159
      _cpp_init_lexer ();

160 161 162 163
      /* Set up the trigraph map.  This doesn't need to do anything if
	 we were compiled with a compiler that supports C99 designated
	 initializers.  */
      init_trigraph_map ();
164 165

#ifdef ENABLE_NLS
166
       (void) bindtextdomain (PACKAGE, LOCALEDIR);
167
#endif
168
    }
169 170
}

171
/* Initialize a cpp_reader structure.  */
172
cpp_reader *
173
cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
174
		   struct line_maps *line_table)
175
{
176
  cpp_reader *pfile;
Neil Booth committed
177

178
  /* Initialize this instance of the library if it hasn't been already.  */
179
  init_library ();
180

181
  pfile = XCNEW (cpp_reader);
182
  memset (&pfile->base_context, 0, sizeof (pfile->base_context));
Neil Booth committed
183

184
  cpp_set_lang (pfile, lang);
185
  CPP_OPTION (pfile, warn_multichar) = 1;
186
  CPP_OPTION (pfile, discard_comments) = 1;
187
  CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
188
  CPP_OPTION (pfile, tabstop) = 8;
189
  CPP_OPTION (pfile, operator_names) = 1;
190
  CPP_OPTION (pfile, warn_trigraphs) = 2;
191
  CPP_OPTION (pfile, warn_endif_labels) = 1;
192
  CPP_OPTION (pfile, cpp_warn_c90_c99_compat) = -1;
193
  CPP_OPTION (pfile, cpp_warn_cxx11_compat) = 0;
194 195
  CPP_OPTION (pfile, cpp_warn_deprecated) = 1;
  CPP_OPTION (pfile, cpp_warn_long_long) = 0;
196
  CPP_OPTION (pfile, dollars_in_ident) = 1;
197
  CPP_OPTION (pfile, warn_dollars) = 1;
198
  CPP_OPTION (pfile, warn_variadic_macros) = 1;
199
  CPP_OPTION (pfile, warn_builtin_macro_redefined) = 1;
Jakub Jelinek committed
200
  CPP_OPTION (pfile, cpp_warn_implicit_fallthrough) = 0;
201 202 203 204 205 206
  /* By default, track locations of tokens resulting from macro
     expansion.  The '2' means, track the locations with the highest
     accuracy.  Read the comments for struct
     cpp_options::track_macro_expansion to learn about the other
     values.  */
  CPP_OPTION (pfile, track_macro_expansion) = 2;
Geoffrey Keating committed
207
  CPP_OPTION (pfile, warn_normalize) = normalized_C;
208
  CPP_OPTION (pfile, warn_literal_suffix) = 1;
209 210
  CPP_OPTION (pfile, canonical_system_headers)
      = ENABLE_CANONICAL_SYSTEM_HEADERS;
211
  CPP_OPTION (pfile, ext_numeric_literals) = 1;
212
  CPP_OPTION (pfile, warn_date_time) = 0;
213

214 215
  /* Default CPP arithmetic to something sensible for the host for the
     benefit of dumb users like fix-header.  */
216
  CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
217 218 219
  CPP_OPTION (pfile, char_precision) = CHAR_BIT;
  CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
  CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
220
  CPP_OPTION (pfile, unsigned_char) = 0;
221
  CPP_OPTION (pfile, unsigned_wchar) = 1;
222 223 224
  CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */

  /* Default to no charset conversion.  */
Eric Christopher committed
225
  CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
226
  CPP_OPTION (pfile, wide_charset) = 0;
227

Eric Christopher committed
228 229
  /* Default the input character set to UTF-8.  */
  CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
230

231 232 233 234 235 236
  /* A fake empty "directory" used as the starting point for files
     looked up without a search path.  Name cannot be '/' because we
     don't want to prepend anything at all to filenames using it.  All
     other entries are correct zero-initialized.  */
  pfile->no_search_path.name = (char *) "";

237
  /* Initialize the line map.  */
238
  pfile->line_table = line_table;
Neil Booth committed
239

Neil Booth committed
240
  /* Initialize lexer state.  */
Neil Booth committed
241 242
  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);

243 244 245 246 247
  /* Set up static tokens.  */
  pfile->avoid_paste.type = CPP_PADDING;
  pfile->avoid_paste.val.source = NULL;
  pfile->eof.type = CPP_EOF;
  pfile->eof.flags = 0;
Neil Booth committed
248

249 250 251 252 253
  /* Create a token buffer for the lexer.  */
  _cpp_init_tokenrun (&pfile->base_run, 250);
  pfile->cur_run = &pfile->base_run;
  pfile->cur_token = pfile->base_run.base;

254
  /* Initialize the base context.  */
Neil Booth committed
255
  pfile->context = &pfile->base_context;
256
  pfile->base_context.c.macro = 0;
Neil Booth committed
257 258
  pfile->base_context.prev = pfile->base_context.next = 0;

259 260
  /* Aligned and unaligned storage.  */
  pfile->a_buff = _cpp_get_buff (pfile, 0);
261
  pfile->u_buff = _cpp_get_buff (pfile, 0);
Neil Booth committed
262

Kai Tietz committed
263 264 265
  /* Initialize table for push_macro/pop_macro.  */
  pfile->pushed_macros = 0;

266 267 268
  /* Do not force token locations by default.  */
  pfile->forced_token_location_p = NULL;

269 270 271
  /* Initialize source_date_epoch to -2 (not yet set).  */
  pfile->source_date_epoch = (time_t) -2;

272 273 274
  /* The expression parser stack.  */
  _cpp_expand_op_stack (pfile);

275
  /* Initialize the buffer obstack.  */
276
  obstack_specify_allocation (&pfile->buffer_ob, 0, 0, xmalloc, free);
277

278
  _cpp_init_files (pfile);
279

280 281
  _cpp_init_hashtable (pfile, table);

282
  return pfile;
283 284
}

285 286 287 288 289 290 291 292
/* Set the line_table entry in PFILE.  This is called after reading a
   PCH file, as the old line_table will be incorrect.  */
void
cpp_set_line_map (cpp_reader *pfile, struct line_maps *line_table)
{
  pfile->line_table = line_table;
}

293
/* Free resources used by PFILE.  Accessing PFILE after this function
294
   returns leads to undefined behavior.  Returns the error count.  */
295
void
296
cpp_destroy (cpp_reader *pfile)
297
{
Neil Booth committed
298
  cpp_context *context, *contextn;
Kai Tietz committed
299
  struct def_pragma_macro *pmacro;
300
  tokenrun *run, *runn;
301
  int i;
302

303
  free (pfile->op_stack);
304

305
  while (CPP_BUFFER (pfile) != NULL)
306
    _cpp_pop_buffer (pfile);
307

308
  free (pfile->out.base);
309

Neil Booth committed
310
  if (pfile->macro_buffer)
311
    {
312
      free (pfile->macro_buffer);
313 314 315
      pfile->macro_buffer = NULL;
      pfile->macro_buffer_len = 0;
    }
Neil Booth committed
316

317 318
  if (pfile->deps)
    deps_free (pfile->deps);
319
  obstack_free (&pfile->buffer_ob, 0);
320

321
  _cpp_destroy_hashtable (pfile);
322
  _cpp_cleanup_files (pfile);
323
  _cpp_destroy_iconv (pfile);
324

325
  _cpp_free_buff (pfile->a_buff);
326
  _cpp_free_buff (pfile->u_buff);
327
  _cpp_free_buff (pfile->free_buffs);
Neil Booth committed
328

329 330 331 332 333 334 335 336
  for (run = &pfile->base_run; run; run = runn)
    {
      runn = run->next;
      free (run->base);
      if (run != &pfile->base_run)
	free (run);
    }

Neil Booth committed
337 338 339 340 341
  for (context = pfile->base_context.next; context; context = contextn)
    {
      contextn = context->next;
      free (context);
    }
342

343 344 345 346 347 348 349
  if (pfile->comments.entries)
    {
      for (i = 0; i < pfile->comments.count; i++)
	free (pfile->comments.entries[i].comment);

      free (pfile->comments.entries);
    }
Kai Tietz committed
350 351 352 353 354 355 356 357 358 359 360
  if (pfile->pushed_macros)
    {
      do
	{
	  pmacro = pfile->pushed_macros;
	  pfile->pushed_macros = pmacro->next;
	  free (pmacro->name);
	  free (pmacro);
	}
      while (pfile->pushed_macros);
    }
361

362
  free (pfile);
363 364
}

Neil Booth committed
365
/* This structure defines one built-in identifier.  A node will be
366 367 368 369
   entered in the hash table under the name NAME, with value VALUE.

   There are two tables of these.  builtin_array holds all the
   "builtin" macros: these are handled by builtin_macro() in
370
   macro.c.  Builtin is somewhat of a misnomer -- the property of
371
   interest is that these macros require special code to compute their
372
   expansions.  The value is a "cpp_builtin_type" enumerator.
373 374 375 376 377 378

   operator_array holds the C++ named operators.  These are keywords
   which act as aliases for punctuators.  In C++, they cannot be
   altered through #define, and #if recognizes them as operators.  In
   C, these are not entered into the hash table at all (but see
   <iso646.h>).  The value is a token-type enumerator.  */
379
struct builtin_macro
380
{
381 382 383 384
  const uchar *const name;
  const unsigned short len;
  const unsigned short value;
  const bool always_warn_if_redefined;
385
};
Neil Booth committed
386

387 388
#define B(n, t, f)    { DSC(n), t, f }
static const struct builtin_macro builtin_array[] =
389
{
390 391 392 393 394 395 396 397
  B("__TIMESTAMP__",	 BT_TIMESTAMP,     false),
  B("__TIME__",		 BT_TIME,          false),
  B("__DATE__",		 BT_DATE,          false),
  B("__FILE__",		 BT_FILE,          false),
  B("__BASE_FILE__",	 BT_BASE_FILE,     false),
  B("__LINE__",		 BT_SPECLINE,      true),
  B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
  B("__COUNTER__",	 BT_COUNTER,       true),
398 399
  B("__has_attribute",	 BT_HAS_ATTRIBUTE, true),
  B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
400 401
  /* Keep builtins not used for -traditional-cpp at the end, and
     update init_builtins() if any more are added.  */
402 403 404 405 406 407 408 409 410 411
  B("_Pragma",		 BT_PRAGMA,        true),
  B("__STDC__",		 BT_STDC,          true),
};
#undef B

struct builtin_operator
{
  const uchar *const name;
  const unsigned short len;
  const unsigned short value;
412
};
413

414 415
#define B(n, t)    { DSC(n), t }
static const struct builtin_operator operator_array[] =
416 417 418 419 420 421 422 423 424 425 426 427
{
  B("and",	CPP_AND_AND),
  B("and_eq",	CPP_AND_EQ),
  B("bitand",	CPP_AND),
  B("bitor",	CPP_OR),
  B("compl",	CPP_COMPL),
  B("not",	CPP_NOT),
  B("not_eq",	CPP_NOT_EQ),
  B("or",	CPP_OR_OR),
  B("or_eq",	CPP_OR_EQ),
  B("xor",	CPP_XOR),
  B("xor_eq",	CPP_XOR_EQ)
428
};
429
#undef B
430

431 432
/* Mark the C++ named operators in the hash table.  */
static void
433
mark_named_operators (cpp_reader *pfile, int flags)
434
{
435
  const struct builtin_operator *b;
436 437 438 439 440 441

  for (b = operator_array;
       b < (operator_array + ARRAY_SIZE (operator_array));
       b++)
    {
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
442
      hp->flags |= flags;
443 444
      hp->is_directive = 0;
      hp->directive_index = b->value;
445 446 447
    }
}

448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465
/* Helper function of cpp_type2name. Return the string associated with
   named operator TYPE.  */
const char *
cpp_named_operator2name (enum cpp_ttype type)
{
  const struct builtin_operator *b;

  for (b = operator_array;
       b < (operator_array + ARRAY_SIZE (operator_array));
       b++)
    {
      if (type == b->value)
	return (const char *) b->name;
    }

  return NULL;
}

Neil Booth committed
466
void
467
cpp_init_special_builtins (cpp_reader *pfile)
468
{
469
  const struct builtin_macro *b;
470
  size_t n = ARRAY_SIZE (builtin_array);
471

472 473
  if (CPP_OPTION (pfile, traditional))
    n -= 2;
474 475
  else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
	   || CPP_OPTION (pfile, std))
476
    n--;
477

478
  for (b = builtin_array; b < builtin_array + n; b++)
479
    {
480 481 482 483
      if (b->value == BT_HAS_ATTRIBUTE
	  && (CPP_OPTION (pfile, lang) == CLK_ASM
	      || pfile->cb.has_attribute == NULL))
	continue;
484
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
Nathan Sidwell committed
485
      hp->type = NT_BUILTIN_MACRO;
486
      if (b->always_warn_if_redefined)
487
	hp->flags |= NODE_WARN;
488
      hp->value.builtin = (enum cpp_builtin_type) b->value;
489
    }
490 491 492 493 494 495 496 497 498 499 500 501 502 503
}

/* Read the builtins table above and enter them, and language-specific
   macros, into the hash table.  HOSTED is true if this is a hosted
   environment.  */
void
cpp_init_builtins (cpp_reader *pfile, int hosted)
{
  cpp_init_special_builtins (pfile);

  if (!CPP_OPTION (pfile, traditional)
      && (! CPP_OPTION (pfile, stdc_0_in_system_headers)
	  || CPP_OPTION (pfile, std)))
    _cpp_define_builtin (pfile, "__STDC__ 1");
504 505

  if (CPP_OPTION (pfile, cplusplus))
506
    {
507 508 509 510
      if (CPP_OPTION (pfile, lang) == CLK_CXX2A
	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX2A)
	_cpp_define_builtin (pfile, "__cplusplus 201709L");
      else if (CPP_OPTION (pfile, lang) == CLK_CXX17
511
	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX17)
512
	_cpp_define_builtin (pfile, "__cplusplus 201703L");
513 514 515
      else if (CPP_OPTION (pfile, lang) == CLK_CXX14
	  || CPP_OPTION (pfile, lang) == CLK_GNUCXX14)
	_cpp_define_builtin (pfile, "__cplusplus 201402L");
516 517
      else if (CPP_OPTION (pfile, lang) == CLK_CXX11
	       || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
518 519 520 521
	_cpp_define_builtin (pfile, "__cplusplus 201103L");
      else
	_cpp_define_builtin (pfile, "__cplusplus 199711L");
    }
522 523
  else if (CPP_OPTION (pfile, lang) == CLK_ASM)
    _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
524
  else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
525
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
526 527 528
  else if (CPP_OPTION (pfile, lang) == CLK_STDC2X
	   || CPP_OPTION (pfile, lang) == CLK_GNUC2X)
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 202000L");
529 530 531
  else if (CPP_OPTION (pfile, lang) == CLK_STDC17
	   || CPP_OPTION (pfile, lang) == CLK_GNUC17)
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 201710L");
Joseph Myers committed
532 533 534
  else if (CPP_OPTION (pfile, lang) == CLK_STDC11
	   || CPP_OPTION (pfile, lang) == CLK_GNUC11)
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 201112L");
535 536 537
  else if (CPP_OPTION (pfile, c99))
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");

538
  if (CPP_OPTION (pfile, uliterals)
539 540 541
      && !(CPP_OPTION (pfile, cplusplus)
	   && (CPP_OPTION (pfile, lang) == CLK_GNUCXX
	    || CPP_OPTION (pfile, lang) == CLK_CXX98)))
542 543 544 545 546
    {
      _cpp_define_builtin (pfile, "__STDC_UTF_16__ 1");
      _cpp_define_builtin (pfile, "__STDC_UTF_32__ 1");
    }

547
  if (hosted)
548
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
549
  else
550
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
551

552 553
  if (CPP_OPTION (pfile, objc))
    _cpp_define_builtin (pfile, "__OBJC__ 1");
Neil Booth committed
554 555
}

556
/* Sanity-checks are dependent on command-line options, so it is
557
   called as a subroutine of cpp_read_main_file.  */
558
#if CHECKING_P
559 560
static void sanity_checks (cpp_reader *);
static void sanity_checks (cpp_reader *pfile)
561 562
{
  cppchar_t test = 0;
563
  size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
564 565 566 567 568

  /* Sanity checks for assumptions about CPP arithmetic and target
     type precisions made by cpplib.  */
  test--;
  if (test < 1)
569
    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
570

571
  if (CPP_OPTION (pfile, precision) > max_precision)
572
    cpp_error (pfile, CPP_DL_ICE,
573 574
	       "preprocessor arithmetic has maximum precision of %lu bits;"
	       " target requires %lu bits",
575 576
	       (unsigned long) max_precision,
	       (unsigned long) CPP_OPTION (pfile, precision));
577 578

  if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
579
    cpp_error (pfile, CPP_DL_ICE,
580 581 582
	       "CPP arithmetic must be at least as precise as a target int");

  if (CPP_OPTION (pfile, char_precision) < 8)
583
    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
584 585

  if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
586
    cpp_error (pfile, CPP_DL_ICE,
587 588 589
	       "target wchar_t is narrower than target char");

  if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
590
    cpp_error (pfile, CPP_DL_ICE,
591 592
	       "target int is narrower than target char");

593 594
  /* This is assumed in eval_token() and could be fixed if necessary.  */
  if (sizeof (cppchar_t) > sizeof (cpp_num_part))
595 596
    cpp_error (pfile, CPP_DL_ICE,
	       "CPP half-integer narrower than CPP character");
597

598
  if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
599
    cpp_error (pfile, CPP_DL_ICE,
600 601
	       "CPP on this host cannot handle wide character constants over"
	       " %lu bits, but the target requires %lu bits",
602 603
	       (unsigned long) BITS_PER_CPPCHAR_T,
	       (unsigned long) CPP_OPTION (pfile, wchar_precision));
604 605 606 607 608
}
#else
# define sanity_checks(PFILE)
#endif

609
/* This is called after options have been parsed, and partially
610
   processed.  */
611 612
void
cpp_post_options (cpp_reader *pfile)
613
{
614 615
  int flags;

616 617
  sanity_checks (pfile);

618 619
  post_options (pfile);

620
  /* Mark named operators before handling command line macros.  */
621
  flags = 0;
622
  if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
623 624 625 626 627
    flags |= NODE_OPERATOR;
  if (CPP_OPTION (pfile, warn_cxx_operator_names))
    flags |= NODE_DIAGNOSTIC | NODE_WARN_OPERATOR;
  if (flags != 0)
    mark_named_operators (pfile, flags);
628
}
629

630
/* Setup for processing input from the file named FNAME, or stdin if
631 632 633 634
   it is the empty string.  Return the original filename
   on success (e.g. foo.i->foo.c), or NULL on failure.  */
const char *
cpp_read_main_file (cpp_reader *pfile, const char *fname)
635
{
636 637
  const source_location loc = 0;

638 639 640 641 642 643 644 645
  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
    {
      if (!pfile->deps)
	pfile->deps = deps_init ();

      /* Set the default target (if there is none already).  */
      deps_add_default_target (pfile->deps, fname);
    }
646

647
  pfile->main_file
648 649
    = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0, false,
		      loc);
650
  if (_cpp_find_failed (pfile->main_file))
651
    return NULL;
652

653
  _cpp_stack_file (pfile, pfile->main_file, false, loc);
654 655 656 657

  /* For foo.i, read the original filename foo.c now, for the benefit
     of the front ends.  */
  if (CPP_OPTION (pfile, preprocessed))
658 659
    {
      read_original_filename (pfile);
660 661 662
      fname =
	ORDINARY_MAP_FILE_NAME
	((LINEMAPS_LAST_ORDINARY_MAP (pfile->line_table)));
663 664
    }
  return fname;
665 666 667 668 669 670 671
}

/* For preprocessed files, if the first tokens are of the form # NUM.
   handle the directive so we know the original file name.  This will
   generate file_change callbacks, which the front ends must handle
   appropriately given their state of initialization.  */
static void
672
read_original_filename (cpp_reader *pfile)
673 674 675 676 677 678 679 680
{
  const cpp_token *token, *token1;

  /* Lex ahead; if the first tokens are of the form # NUM, then
     process the directive, otherwise back up.  */
  token = _cpp_lex_direct (pfile);
  if (token->type == CPP_HASH)
    {
681
      pfile->state.in_directive = 1;
682 683
      token1 = _cpp_lex_direct (pfile);
      _cpp_backup_tokens (pfile, 1);
684
      pfile->state.in_directive = 0;
685 686

      /* If it's a #line directive, handle it.  */
687 688
      if (token1->type == CPP_NUMBER
	  && _cpp_handle_directive (pfile, token->flags & PREV_WHITE))
689
	{
690
	  read_original_directory (pfile);
691 692 693 694 695 696 697 698
	  return;
	}
    }

  /* Backup as if nothing happened.  */
  _cpp_backup_tokens (pfile, 1);
}

699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727
/* For preprocessed files, if the tokens following the first filename
   line is of the form # <line> "/path/name//", handle the
   directive so we know the original current directory.  */
static void
read_original_directory (cpp_reader *pfile)
{
  const cpp_token *hash, *token;

  /* Lex ahead; if the first tokens are of the form # NUM, then
     process the directive, otherwise back up.  */
  hash = _cpp_lex_direct (pfile);
  if (hash->type != CPP_HASH)
    {
      _cpp_backup_tokens (pfile, 1);
      return;
    }

  token = _cpp_lex_direct (pfile);

  if (token->type != CPP_NUMBER)
    {
      _cpp_backup_tokens (pfile, 2);
      return;
    }

  token = _cpp_lex_direct (pfile);

  if (token->type != CPP_STRING
      || ! (token->val.str.len >= 5
728 729
	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-2])
	    && IS_DIR_SEPARATOR (token->val.str.text[token->val.str.len-3])))
730 731 732 733 734 735 736
    {
      _cpp_backup_tokens (pfile, 3);
      return;
    }

  if (pfile->cb.dir_change)
    {
737
      char *debugdir = (char *) alloca (token->val.str.len - 3);
738 739 740 741 742 743

      memcpy (debugdir, (const char *) token->val.str.text + 1,
	      token->val.str.len - 4);
      debugdir[token->val.str.len - 4] = '\0';

      pfile->cb.dir_change (pfile, debugdir);
744
    }      
745 746
}

747
/* This is called at the end of preprocessing.  It pops the last
748
   buffer and writes dependency output.
Eric Christopher committed
749

750 751
   Maybe it should also reset state, such that you could call
   cpp_start_read with a new filename to restart processing.  */
752
void
753
cpp_finish (cpp_reader *pfile, FILE *deps_stream)
754
{
755 756 757 758
  /* Warn about unused macros before popping the final buffer.  */
  if (CPP_OPTION (pfile, warn_unused_macros))
    cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);

759
  /* lex.c leaves the final buffer on the stack.  This it so that
760
     it returns an unending stream of CPP_EOFs to the client.  If we
761
     popped the buffer, we'd dereference a NULL buffer pointer and
762 763 764 765
     segfault.  It's nice to allow the client to do worry-free excess
     cpp_get_token calls.  */
  while (pfile->buffer)
    _cpp_pop_buffer (pfile);
766

767
  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
768
      && deps_stream)
769 770 771
    {
      deps_write (pfile->deps, deps_stream, 72);

772
      if (CPP_OPTION (pfile, deps.phony_targets))
773 774
	deps_phony_targets (pfile->deps, deps_stream);
    }
775

776 777
  /* Report on headers that could use multiple include guards.  */
  if (CPP_OPTION (pfile, print_include_names))
778
    _cpp_report_missing_guards (pfile);
779 780
}

781
static void
782
post_options (cpp_reader *pfile)
783 784 785
{
  /* -Wtraditional is not useful in C++ mode.  */
  if (CPP_OPTION (pfile, cplusplus))
786
    CPP_OPTION (pfile, cpp_warn_traditional) = 0;
787

788
  /* Permanently disable macro expansion if we are rescanning
789
     preprocessed text.  Read preprocesed source in ISO mode.  */
790
  if (CPP_OPTION (pfile, preprocessed))
791
    {
792 793
      if (!CPP_OPTION (pfile, directives_only))
	pfile->state.prevent_expansion = 1;
794 795 796
      CPP_OPTION (pfile, traditional) = 0;
    }

797 798 799
  if (CPP_OPTION (pfile, warn_trigraphs) == 2)
    CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);

800
  if (CPP_OPTION (pfile, traditional))
801 802 803 804
    {
      CPP_OPTION (pfile, trigraphs) = 0;
      CPP_OPTION (pfile, warn_trigraphs) = 0;
    }
805
}