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