OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [libcpp/] [init.c] - Blame information for rev 827

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* CPP Library.
2
   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
   Contributed by Per Bothner, 1994-95.
5
   Based on CCCP program by Paul Rubin, June 1986
6
   Adapted to ANSI C, Richard Stallman, Jan 1987
7
 
8
This program is free software; you can redistribute it and/or modify it
9
under the terms of the GNU General Public License as published by the
10
Free Software Foundation; either version 2, or (at your option) any
11
later version.
12
 
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
21
 
22
#include "config.h"
23
#include "system.h"
24
#include "cpplib.h"
25
#include "internal.h"
26
#include "mkdeps.h"
27
#include "localedir.h"
28
 
29
static void init_library (void);
30
static void mark_named_operators (cpp_reader *);
31
static void read_original_filename (cpp_reader *);
32
static void read_original_directory (cpp_reader *);
33
static void post_options (cpp_reader *);
34
 
35
/* If we have designated initializers (GCC >2.7) these tables can be
36
   initialized, constant data.  Otherwise, they have to be filled in at
37
   runtime.  */
38
#if HAVE_DESIGNATED_INITIALIZERS
39
 
40
#define init_trigraph_map()  /* Nothing.  */
41
#define TRIGRAPH_MAP \
42
__extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
43
 
44
#define END };
45
#define s(p, v) [p] = v,
46
 
47
#else
48
 
49
#define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
50
 static void init_trigraph_map (void) { \
51
 unsigned char *x = _cpp_trigraph_map;
52
 
53
#define END }
54
#define s(p, v) x[p] = v;
55
 
56
#endif
57
 
58
TRIGRAPH_MAP
59
  s('=', '#')   s(')', ']')     s('!', '|')
60
  s('(', '[')   s('\'', '^')    s('>', '}')
61
  s('/', '\\')  s('<', '{')     s('-', '~')
62
END
63
 
64
#undef s
65
#undef END
66
#undef TRIGRAPH_MAP
67
 
68
/* A set of booleans indicating what CPP features each source language
69
   requires.  */
70
struct lang_flags
71
{
72
  char c99;
73
  char cplusplus;
74
  char extended_numbers;
75
  char extended_identifiers;
76
  char std;
77
  char cplusplus_comments;
78
  char digraphs;
79
};
80
 
81
static const struct lang_flags lang_defaults[] =
82
{ /*              c99 c++ xnum xid std  //   digr  */
83
  /* GNUC89 */  { 0,  0,  1,   0,  0,   1,   1     },
84
  /* GNUC99 */  { 1,  0,  1,   0,  0,   1,   1     },
85
  /* STDC89 */  { 0,  0,  0,   0,  1,   0,   0     },
86
  /* STDC94 */  { 0,  0,  0,   0,  1,   0,   1     },
87
  /* STDC99 */  { 1,  0,  1,   0,  1,   1,   1     },
88
  /* GNUCXX */  { 0,  1,  1,   0,  0,   1,   1     },
89
  /* CXX98  */  { 0,  1,  1,   0,  1,   1,   1     },
90
  /* ASM    */  { 0,  0,  1,   0,  0,   1,   0     }
91
  /* xid should be 1 for GNUC99, STDC99, GNUCXX and CXX98 when no
92
     longer experimental (when all uses of identifiers in the compiler
93
     have been audited for correct handling of extended
94
     identifiers).  */
95
};
96
 
97
/* Sets internal flags correctly for a given language.  */
98
void
99
cpp_set_lang (cpp_reader *pfile, enum c_lang lang)
100
{
101
  const struct lang_flags *l = &lang_defaults[(int) lang];
102
 
103
  CPP_OPTION (pfile, lang) = lang;
104
 
105
  CPP_OPTION (pfile, c99)                        = l->c99;
106
  CPP_OPTION (pfile, cplusplus)                  = l->cplusplus;
107
  CPP_OPTION (pfile, extended_numbers)           = l->extended_numbers;
108
  CPP_OPTION (pfile, extended_identifiers)       = l->extended_identifiers;
109
  CPP_OPTION (pfile, std)                        = l->std;
110
  CPP_OPTION (pfile, trigraphs)                  = l->std;
111
  CPP_OPTION (pfile, cplusplus_comments)         = l->cplusplus_comments;
112
  CPP_OPTION (pfile, digraphs)                   = l->digraphs;
113
}
114
 
115
/* Initialize library global state.  */
116
static void
117
init_library (void)
118
{
119
  static int initialized = 0;
120
 
121
  if (! initialized)
122
    {
123
      initialized = 1;
124
 
125
      /* Set up the trigraph map.  This doesn't need to do anything if
126
         we were compiled with a compiler that supports C99 designated
127
         initializers.  */
128
      init_trigraph_map ();
129
 
130
#ifdef ENABLE_NLS
131
       (void) bindtextdomain (PACKAGE, LOCALEDIR);
132
#endif
133
    }
134
}
135
 
136
/* Initialize a cpp_reader structure.  */
137
cpp_reader *
138
cpp_create_reader (enum c_lang lang, hash_table *table,
139
                   struct line_maps *line_table)
140
{
141
  cpp_reader *pfile;
142
 
143
  /* Initialize this instance of the library if it hasn't been already.  */
144
  init_library ();
145
 
146
  pfile = XCNEW (cpp_reader);
147
 
148
  cpp_set_lang (pfile, lang);
149
  CPP_OPTION (pfile, warn_multichar) = 1;
150
  CPP_OPTION (pfile, discard_comments) = 1;
151
  CPP_OPTION (pfile, discard_comments_in_macro_exp) = 1;
152
  CPP_OPTION (pfile, show_column) = 1;
153
  CPP_OPTION (pfile, tabstop) = 8;
154
  CPP_OPTION (pfile, operator_names) = 1;
155
  CPP_OPTION (pfile, warn_trigraphs) = 2;
156
  CPP_OPTION (pfile, warn_endif_labels) = 1;
157
  CPP_OPTION (pfile, warn_deprecated) = 1;
158
  CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
159
  CPP_OPTION (pfile, dollars_in_ident) = 1;
160
  CPP_OPTION (pfile, warn_dollars) = 1;
161
  CPP_OPTION (pfile, warn_variadic_macros) = 1;
162
  CPP_OPTION (pfile, warn_normalize) = normalized_C;
163
 
164
  /* Default CPP arithmetic to something sensible for the host for the
165
     benefit of dumb users like fix-header.  */
166
  CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
167
  CPP_OPTION (pfile, char_precision) = CHAR_BIT;
168
  CPP_OPTION (pfile, wchar_precision) = CHAR_BIT * sizeof (int);
169
  CPP_OPTION (pfile, int_precision) = CHAR_BIT * sizeof (int);
170
  CPP_OPTION (pfile, unsigned_char) = 0;
171
  CPP_OPTION (pfile, unsigned_wchar) = 1;
172
  CPP_OPTION (pfile, bytes_big_endian) = 1;  /* does not matter */
173
 
174
  /* Default to no charset conversion.  */
175
  CPP_OPTION (pfile, narrow_charset) = _cpp_default_encoding ();
176
  CPP_OPTION (pfile, wide_charset) = 0;
177
 
178
  /* Default the input character set to UTF-8.  */
179
  CPP_OPTION (pfile, input_charset) = _cpp_default_encoding ();
180
 
181
  /* A fake empty "directory" used as the starting point for files
182
     looked up without a search path.  Name cannot be '/' because we
183
     don't want to prepend anything at all to filenames using it.  All
184
     other entries are correct zero-initialized.  */
185
  pfile->no_search_path.name = (char *) "";
186
 
187
  /* Initialize the line map.  */
188
  pfile->line_table = line_table;
189
 
190
  /* Initialize lexer state.  */
191
  pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
192
 
193
  /* Set up static tokens.  */
194
  pfile->avoid_paste.type = CPP_PADDING;
195
  pfile->avoid_paste.val.source = NULL;
196
  pfile->eof.type = CPP_EOF;
197
  pfile->eof.flags = 0;
198
 
199
  /* Create a token buffer for the lexer.  */
200
  _cpp_init_tokenrun (&pfile->base_run, 250);
201
  pfile->cur_run = &pfile->base_run;
202
  pfile->cur_token = pfile->base_run.base;
203
 
204
  /* Initialize the base context.  */
205
  pfile->context = &pfile->base_context;
206
  pfile->base_context.macro = 0;
207
  pfile->base_context.prev = pfile->base_context.next = 0;
208
 
209
  /* Aligned and unaligned storage.  */
210
  pfile->a_buff = _cpp_get_buff (pfile, 0);
211
  pfile->u_buff = _cpp_get_buff (pfile, 0);
212
 
213
  /* The expression parser stack.  */
214
  _cpp_expand_op_stack (pfile);
215
 
216
  /* Initialize the buffer obstack.  */
217
  _obstack_begin (&pfile->buffer_ob, 0, 0,
218
                  (void *(*) (long)) xmalloc,
219
                  (void (*) (void *)) free);
220
 
221
  _cpp_init_files (pfile);
222
 
223
  _cpp_init_hashtable (pfile, table);
224
 
225
  return pfile;
226
}
227
 
228
/* Free resources used by PFILE.  Accessing PFILE after this function
229
   returns leads to undefined behavior.  Returns the error count.  */
230
void
231
cpp_destroy (cpp_reader *pfile)
232
{
233
  cpp_context *context, *contextn;
234
  tokenrun *run, *runn;
235
 
236
  free (pfile->op_stack);
237
 
238
  while (CPP_BUFFER (pfile) != NULL)
239
    _cpp_pop_buffer (pfile);
240
 
241
  if (pfile->out.base)
242
    free (pfile->out.base);
243
 
244
  if (pfile->macro_buffer)
245
    {
246
      free (pfile->macro_buffer);
247
      pfile->macro_buffer = NULL;
248
      pfile->macro_buffer_len = 0;
249
    }
250
 
251
  if (pfile->deps)
252
    deps_free (pfile->deps);
253
  obstack_free (&pfile->buffer_ob, 0);
254
 
255
  _cpp_destroy_hashtable (pfile);
256
  _cpp_cleanup_files (pfile);
257
  _cpp_destroy_iconv (pfile);
258
 
259
  _cpp_free_buff (pfile->a_buff);
260
  _cpp_free_buff (pfile->u_buff);
261
  _cpp_free_buff (pfile->free_buffs);
262
 
263
  for (run = &pfile->base_run; run; run = runn)
264
    {
265
      runn = run->next;
266
      free (run->base);
267
      if (run != &pfile->base_run)
268
        free (run);
269
    }
270
 
271
  for (context = pfile->base_context.next; context; context = contextn)
272
    {
273
      contextn = context->next;
274
      free (context);
275
    }
276
 
277
  free (pfile);
278
}
279
 
280
/* This structure defines one built-in identifier.  A node will be
281
   entered in the hash table under the name NAME, with value VALUE.
282
 
283
   There are two tables of these.  builtin_array holds all the
284
   "builtin" macros: these are handled by builtin_macro() in
285
   macro.c.  Builtin is somewhat of a misnomer -- the property of
286
   interest is that these macros require special code to compute their
287
   expansions.  The value is a "builtin_type" enumerator.
288
 
289
   operator_array holds the C++ named operators.  These are keywords
290
   which act as aliases for punctuators.  In C++, they cannot be
291
   altered through #define, and #if recognizes them as operators.  In
292
   C, these are not entered into the hash table at all (but see
293
   <iso646.h>).  The value is a token-type enumerator.  */
294
struct builtin
295
{
296
  const uchar *name;
297
  unsigned short len;
298
  unsigned short value;
299
};
300
 
301
#define B(n, t)    { DSC(n), t }
302
static const struct builtin builtin_array[] =
303
{
304
  B("__TIMESTAMP__",     BT_TIMESTAMP),
305
  B("__TIME__",          BT_TIME),
306
  B("__DATE__",          BT_DATE),
307
  B("__FILE__",          BT_FILE),
308
  B("__BASE_FILE__",     BT_BASE_FILE),
309
  B("__LINE__",          BT_SPECLINE),
310
  B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL),
311
  /* Keep builtins not used for -traditional-cpp at the end, and
312
     update init_builtins() if any more are added.  */
313
  B("_Pragma",           BT_PRAGMA),
314
  B("__STDC__",          BT_STDC),
315
};
316
 
317
static const struct builtin operator_array[] =
318
{
319
  B("and",      CPP_AND_AND),
320
  B("and_eq",   CPP_AND_EQ),
321
  B("bitand",   CPP_AND),
322
  B("bitor",    CPP_OR),
323
  B("compl",    CPP_COMPL),
324
  B("not",      CPP_NOT),
325
  B("not_eq",   CPP_NOT_EQ),
326
  B("or",       CPP_OR_OR),
327
  B("or_eq",    CPP_OR_EQ),
328
  B("xor",      CPP_XOR),
329
  B("xor_eq",   CPP_XOR_EQ)
330
};
331
#undef B
332
 
333
/* Mark the C++ named operators in the hash table.  */
334
static void
335
mark_named_operators (cpp_reader *pfile)
336
{
337
  const struct builtin *b;
338
 
339
  for (b = operator_array;
340
       b < (operator_array + ARRAY_SIZE (operator_array));
341
       b++)
342
    {
343
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
344
      hp->flags |= NODE_OPERATOR;
345
      hp->is_directive = 0;
346
      hp->directive_index = b->value;
347
    }
348
}
349
 
350
/* Read the builtins table above and enter them, and language-specific
351
   macros, into the hash table.  HOSTED is true if this is a hosted
352
   environment.  */
353
void
354
cpp_init_builtins (cpp_reader *pfile, int hosted)
355
{
356
  const struct builtin *b;
357
  size_t n = ARRAY_SIZE (builtin_array);
358
 
359
  if (CPP_OPTION (pfile, traditional))
360
    n -= 2;
361
  else if (! CPP_OPTION (pfile, stdc_0_in_system_headers)
362
           || CPP_OPTION (pfile, std))
363
    {
364
      n--;
365
      _cpp_define_builtin (pfile, "__STDC__ 1");
366
    }
367
 
368
  for (b = builtin_array; b < builtin_array + n; b++)
369
    {
370
      cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
371
      hp->type = NT_MACRO;
372
      hp->flags |= NODE_BUILTIN | NODE_WARN;
373
      hp->value.builtin = (enum builtin_type) b->value;
374
    }
375
 
376
  if (CPP_OPTION (pfile, cplusplus))
377
    _cpp_define_builtin (pfile, "__cplusplus 1");
378
  else if (CPP_OPTION (pfile, lang) == CLK_ASM)
379
    _cpp_define_builtin (pfile, "__ASSEMBLER__ 1");
380
  else if (CPP_OPTION (pfile, lang) == CLK_STDC94)
381
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199409L");
382
  else if (CPP_OPTION (pfile, c99))
383
    _cpp_define_builtin (pfile, "__STDC_VERSION__ 199901L");
384
 
385
  if (hosted)
386
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 1");
387
  else
388
    _cpp_define_builtin (pfile, "__STDC_HOSTED__ 0");
389
 
390
  if (CPP_OPTION (pfile, objc))
391
    _cpp_define_builtin (pfile, "__OBJC__ 1");
392
}
393
 
394
/* Sanity-checks are dependent on command-line options, so it is
395
   called as a subroutine of cpp_read_main_file ().  */
396
#if ENABLE_CHECKING
397
static void sanity_checks (cpp_reader *);
398
static void sanity_checks (cpp_reader *pfile)
399
{
400
  cppchar_t test = 0;
401
  size_t max_precision = 2 * CHAR_BIT * sizeof (cpp_num_part);
402
 
403
  /* Sanity checks for assumptions about CPP arithmetic and target
404
     type precisions made by cpplib.  */
405
  test--;
406
  if (test < 1)
407
    cpp_error (pfile, CPP_DL_ICE, "cppchar_t must be an unsigned type");
408
 
409
  if (CPP_OPTION (pfile, precision) > max_precision)
410
    cpp_error (pfile, CPP_DL_ICE,
411
               "preprocessor arithmetic has maximum precision of %lu bits;"
412
               " target requires %lu bits",
413
               (unsigned long) max_precision,
414
               (unsigned long) CPP_OPTION (pfile, precision));
415
 
416
  if (CPP_OPTION (pfile, precision) < CPP_OPTION (pfile, int_precision))
417
    cpp_error (pfile, CPP_DL_ICE,
418
               "CPP arithmetic must be at least as precise as a target int");
419
 
420
  if (CPP_OPTION (pfile, char_precision) < 8)
421
    cpp_error (pfile, CPP_DL_ICE, "target char is less than 8 bits wide");
422
 
423
  if (CPP_OPTION (pfile, wchar_precision) < CPP_OPTION (pfile, char_precision))
424
    cpp_error (pfile, CPP_DL_ICE,
425
               "target wchar_t is narrower than target char");
426
 
427
  if (CPP_OPTION (pfile, int_precision) < CPP_OPTION (pfile, char_precision))
428
    cpp_error (pfile, CPP_DL_ICE,
429
               "target int is narrower than target char");
430
 
431
  /* This is assumed in eval_token() and could be fixed if necessary.  */
432
  if (sizeof (cppchar_t) > sizeof (cpp_num_part))
433
    cpp_error (pfile, CPP_DL_ICE,
434
               "CPP half-integer narrower than CPP character");
435
 
436
  if (CPP_OPTION (pfile, wchar_precision) > BITS_PER_CPPCHAR_T)
437
    cpp_error (pfile, CPP_DL_ICE,
438
               "CPP on this host cannot handle wide character constants over"
439
               " %lu bits, but the target requires %lu bits",
440
               (unsigned long) BITS_PER_CPPCHAR_T,
441
               (unsigned long) CPP_OPTION (pfile, wchar_precision));
442
}
443
#else
444
# define sanity_checks(PFILE)
445
#endif
446
 
447
/* This is called after options have been parsed, and partially
448
   processed.  */
449
void
450
cpp_post_options (cpp_reader *pfile)
451
{
452
  sanity_checks (pfile);
453
 
454
  post_options (pfile);
455
 
456
  /* Mark named operators before handling command line macros.  */
457
  if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
458
    mark_named_operators (pfile);
459
}
460
 
461
/* Setup for processing input from the file named FNAME, or stdin if
462
   it is the empty string.  Return the original filename
463
   on success (e.g. foo.i->foo.c), or NULL on failure.  */
464
const char *
465
cpp_read_main_file (cpp_reader *pfile, const char *fname)
466
{
467
  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
468
    {
469
      if (!pfile->deps)
470
        pfile->deps = deps_init ();
471
 
472
      /* Set the default target (if there is none already).  */
473
      deps_add_default_target (pfile->deps, fname);
474
    }
475
 
476
  pfile->main_file
477
    = _cpp_find_file (pfile, fname, &pfile->no_search_path, false, 0);
478
  if (_cpp_find_failed (pfile->main_file))
479
    return NULL;
480
 
481
  _cpp_stack_file (pfile, pfile->main_file, false);
482
 
483
  /* For foo.i, read the original filename foo.c now, for the benefit
484
     of the front ends.  */
485
  if (CPP_OPTION (pfile, preprocessed))
486
    {
487
      read_original_filename (pfile);
488
      fname = pfile->line_table->maps[pfile->line_table->used-1].to_file;
489
    }
490
  return fname;
491
}
492
 
493
/* For preprocessed files, if the first tokens are of the form # NUM.
494
   handle the directive so we know the original file name.  This will
495
   generate file_change callbacks, which the front ends must handle
496
   appropriately given their state of initialization.  */
497
static void
498
read_original_filename (cpp_reader *pfile)
499
{
500
  const cpp_token *token, *token1;
501
 
502
  /* Lex ahead; if the first tokens are of the form # NUM, then
503
     process the directive, otherwise back up.  */
504
  token = _cpp_lex_direct (pfile);
505
  if (token->type == CPP_HASH)
506
    {
507
      pfile->state.in_directive = 1;
508
      token1 = _cpp_lex_direct (pfile);
509
      _cpp_backup_tokens (pfile, 1);
510
      pfile->state.in_directive = 0;
511
 
512
      /* If it's a #line directive, handle it.  */
513
      if (token1->type == CPP_NUMBER)
514
        {
515
          _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
516
          read_original_directory (pfile);
517
          return;
518
        }
519
    }
520
 
521
  /* Backup as if nothing happened.  */
522
  _cpp_backup_tokens (pfile, 1);
523
}
524
 
525
/* For preprocessed files, if the tokens following the first filename
526
   line is of the form # <line> "/path/name//", handle the
527
   directive so we know the original current directory.  */
528
static void
529
read_original_directory (cpp_reader *pfile)
530
{
531
  const cpp_token *hash, *token;
532
 
533
  /* Lex ahead; if the first tokens are of the form # NUM, then
534
     process the directive, otherwise back up.  */
535
  hash = _cpp_lex_direct (pfile);
536
  if (hash->type != CPP_HASH)
537
    {
538
      _cpp_backup_tokens (pfile, 1);
539
      return;
540
    }
541
 
542
  token = _cpp_lex_direct (pfile);
543
 
544
  if (token->type != CPP_NUMBER)
545
    {
546
      _cpp_backup_tokens (pfile, 2);
547
      return;
548
    }
549
 
550
  token = _cpp_lex_direct (pfile);
551
 
552
  if (token->type != CPP_STRING
553
      || ! (token->val.str.len >= 5
554
            && token->val.str.text[token->val.str.len-2] == '/'
555
            && token->val.str.text[token->val.str.len-3] == '/'))
556
    {
557
      _cpp_backup_tokens (pfile, 3);
558
      return;
559
    }
560
 
561
  if (pfile->cb.dir_change)
562
    {
563
      char *debugdir = (char *) alloca (token->val.str.len - 3);
564
 
565
      memcpy (debugdir, (const char *) token->val.str.text + 1,
566
              token->val.str.len - 4);
567
      debugdir[token->val.str.len - 4] = '\0';
568
 
569
      pfile->cb.dir_change (pfile, debugdir);
570
    }
571
}
572
 
573
/* This is called at the end of preprocessing.  It pops the last
574
   buffer and writes dependency output, and returns the number of
575
   errors.
576
 
577
   Maybe it should also reset state, such that you could call
578
   cpp_start_read with a new filename to restart processing.  */
579
int
580
cpp_finish (cpp_reader *pfile, FILE *deps_stream)
581
{
582
  /* Warn about unused macros before popping the final buffer.  */
583
  if (CPP_OPTION (pfile, warn_unused_macros))
584
    cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
585
 
586
  /* lex.c leaves the final buffer on the stack.  This it so that
587
     it returns an unending stream of CPP_EOFs to the client.  If we
588
     popped the buffer, we'd dereference a NULL buffer pointer and
589
     segfault.  It's nice to allow the client to do worry-free excess
590
     cpp_get_token calls.  */
591
  while (pfile->buffer)
592
    _cpp_pop_buffer (pfile);
593
 
594
  /* Don't write the deps file if there are errors.  */
595
  if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
596
      && deps_stream && pfile->errors == 0)
597
    {
598
      deps_write (pfile->deps, deps_stream, 72);
599
 
600
      if (CPP_OPTION (pfile, deps.phony_targets))
601
        deps_phony_targets (pfile->deps, deps_stream);
602
    }
603
 
604
  /* Report on headers that could use multiple include guards.  */
605
  if (CPP_OPTION (pfile, print_include_names))
606
    _cpp_report_missing_guards (pfile);
607
 
608
  return pfile->errors;
609
}
610
 
611
static void
612
post_options (cpp_reader *pfile)
613
{
614
  /* -Wtraditional is not useful in C++ mode.  */
615
  if (CPP_OPTION (pfile, cplusplus))
616
    CPP_OPTION (pfile, warn_traditional) = 0;
617
 
618
  /* Permanently disable macro expansion if we are rescanning
619
     preprocessed text.  Read preprocesed source in ISO mode.  */
620
  if (CPP_OPTION (pfile, preprocessed))
621
    {
622
      pfile->state.prevent_expansion = 1;
623
      CPP_OPTION (pfile, traditional) = 0;
624
    }
625
 
626
  if (CPP_OPTION (pfile, warn_trigraphs) == 2)
627
    CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
628
 
629
  if (CPP_OPTION (pfile, traditional))
630
    {
631
      CPP_OPTION (pfile, cplusplus_comments) = 0;
632
 
633
      /* Traditional CPP does not accurately track column information.  */
634
      CPP_OPTION (pfile, show_column) = 0;
635
      CPP_OPTION (pfile, trigraphs) = 0;
636
      CPP_OPTION (pfile, warn_trigraphs) = 0;
637
    }
638
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.