Merge from vendor branch OPENSSH:
[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);
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       fname = pfile->map->to_file;
481     }
482   return fname;
483 }
484
485 /* For preprocessed files, if the first tokens are of the form # NUM.
486    handle the directive so we know the original file name.  This will
487    generate file_change callbacks, which the front ends must handle
488    appropriately given their state of initialization.  */
489 static void
490 read_original_filename (cpp_reader *pfile)
491 {
492   const cpp_token *token, *token1;
493
494   /* Lex ahead; if the first tokens are of the form # NUM, then
495      process the directive, otherwise back up.  */
496   token = _cpp_lex_direct (pfile);
497   if (token->type == CPP_HASH)
498     {
499       token1 = _cpp_lex_direct (pfile);
500       _cpp_backup_tokens (pfile, 1);
501
502       /* If it's a #line directive, handle it.  */
503       if (token1->type == CPP_NUMBER)
504         {
505           _cpp_handle_directive (pfile, token->flags & PREV_WHITE);
506           read_original_directory (pfile);
507           return;
508         }
509     }
510
511   /* Backup as if nothing happened.  */
512   _cpp_backup_tokens (pfile, 1);
513 }
514
515 /* For preprocessed files, if the tokens following the first filename
516    line is of the form # <line> "/path/name//", handle the
517    directive so we know the original current directory.  */
518 static void
519 read_original_directory (cpp_reader *pfile)
520 {
521   const cpp_token *hash, *token;
522
523   /* Lex ahead; if the first tokens are of the form # NUM, then
524      process the directive, otherwise back up.  */
525   hash = _cpp_lex_direct (pfile);
526   if (hash->type != CPP_HASH)
527     {
528       _cpp_backup_tokens (pfile, 1);
529       return;
530     }
531
532   token = _cpp_lex_direct (pfile);
533
534   if (token->type != CPP_NUMBER)
535     {
536       _cpp_backup_tokens (pfile, 2);
537       return;
538     }
539
540   token = _cpp_lex_direct (pfile);
541
542   if (token->type != CPP_STRING
543       || ! (token->val.str.len >= 5
544             && token->val.str.text[token->val.str.len-2] == '/'
545             && token->val.str.text[token->val.str.len-3] == '/'))
546     {
547       _cpp_backup_tokens (pfile, 3);
548       return;
549     }
550
551   if (pfile->cb.dir_change)
552     {
553       char *debugdir = alloca (token->val.str.len - 3);
554
555       memcpy (debugdir, (const char *) token->val.str.text + 1,
556               token->val.str.len - 4);
557       debugdir[token->val.str.len - 4] = '\0';
558
559       pfile->cb.dir_change (pfile, debugdir);
560     }      
561 }
562
563 /* This is called at the end of preprocessing.  It pops the last
564    buffer and writes dependency output, and returns the number of
565    errors.
566
567    Maybe it should also reset state, such that you could call
568    cpp_start_read with a new filename to restart processing.  */
569 int
570 cpp_finish (cpp_reader *pfile, FILE *deps_stream)
571 {
572   /* Warn about unused macros before popping the final buffer.  */
573   if (CPP_OPTION (pfile, warn_unused_macros))
574     cpp_forall_identifiers (pfile, _cpp_warn_if_unused_macro, NULL);
575
576   /* cpplex.c leaves the final buffer on the stack.  This it so that
577      it returns an unending stream of CPP_EOFs to the client.  If we
578      popped the buffer, we'd dereference a NULL buffer pointer and
579      segfault.  It's nice to allow the client to do worry-free excess
580      cpp_get_token calls.  */
581   while (pfile->buffer)
582     _cpp_pop_buffer (pfile);
583
584   /* Don't write the deps file if there are errors.  */
585   if (CPP_OPTION (pfile, deps.style) != DEPS_NONE
586       && deps_stream && pfile->errors == 0)
587     {
588       deps_write (pfile->deps, deps_stream, 72);
589
590       if (CPP_OPTION (pfile, deps.phony_targets))
591         deps_phony_targets (pfile->deps, deps_stream);
592     }
593
594   /* Report on headers that could use multiple include guards.  */
595   if (CPP_OPTION (pfile, print_include_names))
596     _cpp_report_missing_guards (pfile);
597
598   return pfile->errors;
599 }
600
601 static void
602 post_options (cpp_reader *pfile)
603 {
604   /* -Wtraditional is not useful in C++ mode.  */
605   if (CPP_OPTION (pfile, cplusplus))
606     CPP_OPTION (pfile, warn_traditional) = 0;
607
608   /* Permanently disable macro expansion if we are rescanning
609      preprocessed text.  Read preprocesed source in ISO mode.  */
610   if (CPP_OPTION (pfile, preprocessed))
611     {
612       pfile->state.prevent_expansion = 1;
613       CPP_OPTION (pfile, traditional) = 0;
614     }
615
616   if (CPP_OPTION (pfile, warn_trigraphs) == 2)
617     CPP_OPTION (pfile, warn_trigraphs) = !CPP_OPTION (pfile, trigraphs);
618
619   if (CPP_OPTION (pfile, traditional))
620     {
621       CPP_OPTION (pfile, cplusplus_comments) = 0;
622
623       /* Traditional CPP does not accurately track column information.  */
624       CPP_OPTION (pfile, show_column) = 0;
625       CPP_OPTION (pfile, trigraphs) = 0;
626       CPP_OPTION (pfile, warn_trigraphs) = 0;
627     }
628 }