OSDN Git Service

2011-11-02 Paolo Carlini <paolo.carlini@oracle.com>
[pf3gnuchains/gcc-fork.git] / libcpp / directives.c
1 /* CPP Library. (Directive handling.)
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005,
4    2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
5    Contributed by Per Bothner, 1994-95.
6    Based on CCCP program by Paul Rubin, June 1986
7    Adapted to ANSI C, Richard Stallman, Jan 1987
8
9 This program is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by the
11 Free Software Foundation; either version 3, or (at your option) any
12 later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "cpplib.h"
26 #include "internal.h"
27 #include "mkdeps.h"
28 #include "obstack.h"
29
30 /* Stack of conditionals currently in progress
31    (including both successful and failing conditionals).  */
32 struct if_stack
33 {
34   struct if_stack *next;
35   source_location line;         /* Line where condition started.  */
36   const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
37   bool skip_elses;              /* Can future #else / #elif be skipped?  */
38   bool was_skipping;            /* If were skipping on entry.  */
39   int type;                     /* Most recent conditional for diagnostics.  */
40 };
41
42 /* Contains a registered pragma or pragma namespace.  */
43 typedef void (*pragma_cb) (cpp_reader *);
44 struct pragma_entry
45 {
46   struct pragma_entry *next;
47   const cpp_hashnode *pragma;   /* Name and length.  */
48   bool is_nspace;
49   bool is_internal;
50   bool is_deferred;
51   bool allow_expansion;
52   union {
53     pragma_cb handler;
54     struct pragma_entry *space;
55     unsigned int ident;
56   } u;
57 };
58
59 /* Values for the origin field of struct directive.  KANDR directives
60    come from traditional (K&R) C.  STDC89 directives come from the
61    1989 C standard.  EXTENSION directives are extensions.  */
62 #define KANDR           0
63 #define STDC89          1
64 #define EXTENSION       2
65
66 /* Values for the flags field of struct directive.  COND indicates a
67    conditional; IF_COND an opening conditional.  INCL means to treat
68    "..." and <...> as q-char and h-char sequences respectively.  IN_I
69    means this directive should be handled even if -fpreprocessed is in
70    effect (these are the directives with callback hooks).
71
72    EXPAND is set on directives that are always macro-expanded.  */
73 #define COND            (1 << 0)
74 #define IF_COND         (1 << 1)
75 #define INCL            (1 << 2)
76 #define IN_I            (1 << 3)
77 #define EXPAND          (1 << 4)
78 #define DEPRECATED      (1 << 5)
79
80 /* Defines one #-directive, including how to handle it.  */
81 typedef void (*directive_handler) (cpp_reader *);
82 typedef struct directive directive;
83 struct directive
84 {
85   directive_handler handler;    /* Function to handle directive.  */
86   const uchar *name;            /* Name of directive.  */
87   unsigned short length;        /* Length of name.  */
88   unsigned char origin;         /* Origin of directive.  */
89   unsigned char flags;          /* Flags describing this directive.  */
90 };
91
92 /* Forward declarations.  */
93
94 static void skip_rest_of_line (cpp_reader *);
95 static void check_eol (cpp_reader *, bool);
96 static void start_directive (cpp_reader *);
97 static void prepare_directive_trad (cpp_reader *);
98 static void end_directive (cpp_reader *, int);
99 static void directive_diagnostics (cpp_reader *, const directive *, int);
100 static void run_directive (cpp_reader *, int, const char *, size_t);
101 static char *glue_header_name (cpp_reader *);
102 static const char *parse_include (cpp_reader *, int *, const cpp_token ***,
103                                   source_location *);
104 static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
105 static unsigned int read_flag (cpp_reader *, unsigned int);
106 static bool strtolinenum (const uchar *, size_t, linenum_type *, bool *);
107 static void do_diagnostic (cpp_reader *, int, int, int);
108 static cpp_hashnode *lex_macro_node (cpp_reader *, bool);
109 static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
110 static void do_include_common (cpp_reader *, enum include_type);
111 static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
112                                                  const cpp_hashnode *);
113 static int count_registered_pragmas (struct pragma_entry *);
114 static char ** save_registered_pragmas (struct pragma_entry *, char **);
115 static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
116                                            char **);
117 static void do_pragma_once (cpp_reader *);
118 static void do_pragma_poison (cpp_reader *);
119 static void do_pragma_system_header (cpp_reader *);
120 static void do_pragma_dependency (cpp_reader *);
121 static void do_linemarker (cpp_reader *);
122 static const cpp_token *get_token_no_padding (cpp_reader *);
123 static const cpp_token *get__Pragma_string (cpp_reader *);
124 static void destringize_and_run (cpp_reader *, const cpp_string *);
125 static int parse_answer (cpp_reader *, struct answer **, int, source_location);
126 static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
127 static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
128 static void handle_assertion (cpp_reader *, const char *, int);
129 static void do_pragma_push_macro (cpp_reader *);
130 static void do_pragma_pop_macro (cpp_reader *);
131 static void cpp_pop_definition (cpp_reader *, struct def_pragma_macro *);
132
133 /* This is the table of directive handlers.  It is ordered by
134    frequency of occurrence; the numbers at the end are directive
135    counts from all the source code I have lying around (egcs and libc
136    CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
137    pcmcia-cs-3.0.9).  This is no longer important as directive lookup
138    is now O(1).  All extensions other than #warning, #include_next,
139    and #import are deprecated.  The name is where the extension
140    appears to have come from.  */
141
142 #define DIRECTIVE_TABLE                                                 \
143 D(define,       T_DEFINE = 0,   KANDR,     IN_I)           /* 270554 */ \
144 D(include,      T_INCLUDE,      KANDR,     INCL | EXPAND)  /*  52262 */ \
145 D(endif,        T_ENDIF,        KANDR,     COND)           /*  45855 */ \
146 D(ifdef,        T_IFDEF,        KANDR,     COND | IF_COND) /*  22000 */ \
147 D(if,           T_IF,           KANDR, COND | IF_COND | EXPAND) /*  18162 */ \
148 D(else,         T_ELSE,         KANDR,     COND)           /*   9863 */ \
149 D(ifndef,       T_IFNDEF,       KANDR,     COND | IF_COND) /*   9675 */ \
150 D(undef,        T_UNDEF,        KANDR,     IN_I)           /*   4837 */ \
151 D(line,         T_LINE,         KANDR,     EXPAND)         /*   2465 */ \
152 D(elif,         T_ELIF,         STDC89,    COND | EXPAND)  /*    610 */ \
153 D(error,        T_ERROR,        STDC89,    0)              /*    475 */ \
154 D(pragma,       T_PRAGMA,       STDC89,    IN_I)           /*    195 */ \
155 D(warning,      T_WARNING,      EXTENSION, 0)              /*     22 */ \
156 D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND)  /*     19 */ \
157 D(ident,        T_IDENT,        EXTENSION, IN_I)           /*     11 */ \
158 D(import,       T_IMPORT,       EXTENSION, INCL | EXPAND)  /* 0 ObjC */ \
159 D(assert,       T_ASSERT,       EXTENSION, DEPRECATED)     /* 0 SVR4 */ \
160 D(unassert,     T_UNASSERT,     EXTENSION, DEPRECATED)     /* 0 SVR4 */ \
161 D(sccs,         T_SCCS,         EXTENSION, IN_I)           /* 0 SVR4? */
162
163 /* #sccs is synonymous with #ident.  */
164 #define do_sccs do_ident
165
166 /* Use the table to generate a series of prototypes, an enum for the
167    directive names, and an array of directive handlers.  */
168
169 #define D(name, t, o, f) static void do_##name (cpp_reader *);
170 DIRECTIVE_TABLE
171 #undef D
172
173 #define D(n, tag, o, f) tag,
174 enum
175 {
176   DIRECTIVE_TABLE
177   N_DIRECTIVES
178 };
179 #undef D
180
181 #define D(name, t, origin, flags) \
182 { do_##name, (const uchar *) #name, \
183   sizeof #name - 1, origin, flags },
184 static const directive dtable[] =
185 {
186 DIRECTIVE_TABLE
187 };
188 #undef D
189 #undef DIRECTIVE_TABLE
190
191 /* Wrapper struct directive for linemarkers.
192    The origin is more or less true - the original K+R cpp
193    did use this notation in its preprocessed output.  */
194 static const directive linemarker_dir =
195 {
196   do_linemarker, UC"#", 1, KANDR, IN_I
197 };
198
199 #define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
200
201 /* Skip any remaining tokens in a directive.  */
202 static void
203 skip_rest_of_line (cpp_reader *pfile)
204 {
205   /* Discard all stacked contexts.  */
206   while (pfile->context->prev)
207     _cpp_pop_context (pfile);
208
209   /* Sweep up all tokens remaining on the line.  */
210   if (! SEEN_EOL ())
211     while (_cpp_lex_token (pfile)->type != CPP_EOF)
212       ;
213 }
214
215 /* Ensure there are no stray tokens at the end of a directive.  If
216    EXPAND is true, tokens macro-expanding to nothing are allowed.  */
217 static void
218 check_eol (cpp_reader *pfile, bool expand)
219 {
220   if (! SEEN_EOL () && (expand
221                         ? cpp_get_token (pfile)
222                         : _cpp_lex_token (pfile))->type != CPP_EOF)
223     cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
224                pfile->directive->name);
225 }
226
227 /* Ensure there are no stray tokens other than comments at the end of
228    a directive, and gather the comments.  */
229 static const cpp_token **
230 check_eol_return_comments (cpp_reader *pfile)
231 {
232   size_t c;
233   size_t capacity = 8;
234   const cpp_token **buf;
235
236   buf = XNEWVEC (const cpp_token *, capacity);
237   c = 0;
238   if (! SEEN_EOL ())
239     {
240       while (1)
241         {
242           const cpp_token *tok;
243
244           tok = _cpp_lex_token (pfile);
245           if (tok->type == CPP_EOF)
246             break;
247           if (tok->type != CPP_COMMENT)
248             cpp_error (pfile, CPP_DL_PEDWARN,
249                        "extra tokens at end of #%s directive",
250                        pfile->directive->name);
251           else
252             {
253               if (c + 1 >= capacity)
254                 {
255                   capacity *= 2;
256                   buf = XRESIZEVEC (const cpp_token *, buf, capacity);
257                 }
258               buf[c] = tok;
259               ++c;
260             }
261         }
262     }
263   buf[c] = NULL;
264   return buf;
265 }
266
267 /* Called when entering a directive, _Pragma or command-line directive.  */
268 static void
269 start_directive (cpp_reader *pfile)
270 {
271   /* Setup in-directive state.  */
272   pfile->state.in_directive = 1;
273   pfile->state.save_comments = 0;
274   pfile->directive_result.type = CPP_PADDING;
275
276   /* Some handlers need the position of the # for diagnostics.  */
277   pfile->directive_line = pfile->line_table->highest_line;
278 }
279
280 /* Called when leaving a directive, _Pragma or command-line directive.  */
281 static void
282 end_directive (cpp_reader *pfile, int skip_line)
283 {
284   if (CPP_OPTION (pfile, traditional))
285     {
286       /* Revert change of prepare_directive_trad.  */
287       if (!pfile->state.in_deferred_pragma)
288         pfile->state.prevent_expansion--;
289
290       if (pfile->directive != &dtable[T_DEFINE])
291         _cpp_remove_overlay (pfile);
292     }
293   else if (pfile->state.in_deferred_pragma)
294     ;
295   /* We don't skip for an assembler #.  */
296   else if (skip_line)
297     {
298       skip_rest_of_line (pfile);
299       if (!pfile->keep_tokens)
300         {
301           pfile->cur_run = &pfile->base_run;
302           pfile->cur_token = pfile->base_run.base;
303         }
304     }
305
306   /* Restore state.  */
307   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
308   pfile->state.in_directive = 0;
309   pfile->state.in_expression = 0;
310   pfile->state.angled_headers = 0;
311   pfile->directive = 0;
312 }
313
314 /* Prepare to handle the directive in pfile->directive.  */
315 static void
316 prepare_directive_trad (cpp_reader *pfile)
317 {
318   if (pfile->directive != &dtable[T_DEFINE])
319     {
320       bool no_expand = (pfile->directive
321                         && ! (pfile->directive->flags & EXPAND));
322       bool was_skipping = pfile->state.skipping;
323
324       pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
325                                     || pfile->directive == &dtable[T_ELIF]);
326       if (pfile->state.in_expression)
327         pfile->state.skipping = false;
328
329       if (no_expand)
330         pfile->state.prevent_expansion++;
331       _cpp_scan_out_logical_line (pfile, NULL);
332       if (no_expand)
333         pfile->state.prevent_expansion--;
334
335       pfile->state.skipping = was_skipping;
336       _cpp_overlay_buffer (pfile, pfile->out.base,
337                            pfile->out.cur - pfile->out.base);
338     }
339
340   /* Stop ISO C from expanding anything.  */
341   pfile->state.prevent_expansion++;
342 }
343
344 /* Output diagnostics for a directive DIR.  INDENTED is nonzero if
345    the '#' was indented.  */
346 static void
347 directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
348 {
349   /* Issue -pedantic or deprecated warnings for extensions.  We let
350      -pedantic take precedence if both are applicable.  */
351   if (! pfile->state.skipping)
352     {
353       if (dir->origin == EXTENSION
354           && !(dir == &dtable[T_IMPORT] && CPP_OPTION (pfile, objc))
355           && CPP_PEDANTIC (pfile))
356         cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
357       else if (((dir->flags & DEPRECATED) != 0
358                 || (dir == &dtable[T_IMPORT] && !CPP_OPTION (pfile, objc)))
359                && CPP_OPTION (pfile, cpp_warn_deprecated))
360         cpp_warning (pfile, CPP_W_DEPRECATED,
361                      "#%s is a deprecated GCC extension", dir->name);
362     }
363
364   /* Traditionally, a directive is ignored unless its # is in
365      column 1.  Therefore in code intended to work with K+R
366      compilers, directives added by C89 must have their #
367      indented, and directives present in traditional C must not.
368      This is true even of directives in skipped conditional
369      blocks.  #elif cannot be used at all.  */
370   if (CPP_WTRADITIONAL (pfile))
371     {
372       if (dir == &dtable[T_ELIF])
373         cpp_warning (pfile, CPP_W_TRADITIONAL,
374                      "suggest not using #elif in traditional C");
375       else if (indented && dir->origin == KANDR)
376         cpp_warning (pfile, CPP_W_TRADITIONAL,
377                      "traditional C ignores #%s with the # indented",
378                      dir->name);
379       else if (!indented && dir->origin != KANDR)
380         cpp_warning (pfile, CPP_W_TRADITIONAL,
381                      "suggest hiding #%s from traditional C with an indented #",
382                      dir->name);
383     }
384 }
385
386 /* Check if we have a known directive.  INDENTED is nonzero if the
387    '#' of the directive was indented.  This function is in this file
388    to save unnecessarily exporting dtable etc. to lex.c.  Returns
389    nonzero if the line of tokens has been handled, zero if we should
390    continue processing the line.  */
391 int
392 _cpp_handle_directive (cpp_reader *pfile, int indented)
393 {
394   const directive *dir = 0;
395   const cpp_token *dname;
396   bool was_parsing_args = pfile->state.parsing_args;
397   bool was_discarding_output = pfile->state.discarding_output;
398   int skip = 1;
399
400   if (was_discarding_output)
401     pfile->state.prevent_expansion = 0;
402
403   if (was_parsing_args)
404     {
405       if (CPP_OPTION (pfile, cpp_pedantic))
406         cpp_error (pfile, CPP_DL_PEDWARN,
407              "embedding a directive within macro arguments is not portable");
408       pfile->state.parsing_args = 0;
409       pfile->state.prevent_expansion = 0;
410     }
411   start_directive (pfile);
412   dname = _cpp_lex_token (pfile);
413
414   if (dname->type == CPP_NAME)
415     {
416       if (dname->val.node.node->is_directive)
417         dir = &dtable[dname->val.node.node->directive_index];
418     }
419   /* We do not recognize the # followed by a number extension in
420      assembler code.  */
421   else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
422     {
423       dir = &linemarker_dir;
424       if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
425           && ! pfile->state.skipping)
426         cpp_error (pfile, CPP_DL_PEDWARN,
427                    "style of line directive is a GCC extension");
428     }
429
430   if (dir)
431     {
432       /* If we have a directive that is not an opening conditional,
433          invalidate any control macro.  */
434       if (! (dir->flags & IF_COND))
435         pfile->mi_valid = false;
436
437       /* Kluge alert.  In order to be sure that code like this
438
439          #define HASH #
440          HASH define foo bar
441
442          does not cause '#define foo bar' to get executed when
443          compiled with -save-temps, we recognize directives in
444          -fpreprocessed mode only if the # is in column 1.  macro.c
445          puts a space in front of any '#' at the start of a macro.
446          
447          We exclude the -fdirectives-only case because macro expansion
448          has not been performed yet, and block comments can cause spaces
449          to preceed the directive.  */
450       if (CPP_OPTION (pfile, preprocessed)
451           && !CPP_OPTION (pfile, directives_only)
452           && (indented || !(dir->flags & IN_I)))
453         {
454           skip = 0;
455           dir = 0;
456         }
457       else
458         {
459           /* In failed conditional groups, all non-conditional
460              directives are ignored.  Before doing that, whether
461              skipping or not, we should lex angle-bracketed headers
462              correctly, and maybe output some diagnostics.  */
463           pfile->state.angled_headers = dir->flags & INCL;
464           pfile->state.directive_wants_padding = dir->flags & INCL;
465           if (! CPP_OPTION (pfile, preprocessed))
466             directive_diagnostics (pfile, dir, indented);
467           if (pfile->state.skipping && !(dir->flags & COND))
468             dir = 0;
469         }
470     }
471   else if (dname->type == CPP_EOF)
472     ;   /* CPP_EOF is the "null directive".  */
473   else
474     {
475       /* An unknown directive.  Don't complain about it in assembly
476          source: we don't know where the comments are, and # may
477          introduce assembler pseudo-ops.  Don't complain about invalid
478          directives in skipped conditional groups (6.10 p4).  */
479       if (CPP_OPTION (pfile, lang) == CLK_ASM)
480         skip = 0;
481       else if (!pfile->state.skipping)
482         cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
483                    cpp_token_as_text (pfile, dname));
484     }
485
486   pfile->directive = dir;
487   if (CPP_OPTION (pfile, traditional))
488     prepare_directive_trad (pfile);
489
490   if (dir)
491     pfile->directive->handler (pfile);
492   else if (skip == 0)
493     _cpp_backup_tokens (pfile, 1);
494
495   end_directive (pfile, skip);
496   if (was_parsing_args && !pfile->state.in_deferred_pragma)
497     {
498       /* Restore state when within macro args.  */
499       pfile->state.parsing_args = 2;
500       pfile->state.prevent_expansion = 1;
501     }
502   if (was_discarding_output)
503     pfile->state.prevent_expansion = 1;
504   return skip;
505 }
506
507 /* Directive handler wrapper used by the command line option
508    processor.  BUF is \n terminated.  */
509 static void
510 run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
511 {
512   cpp_push_buffer (pfile, (const uchar *) buf, count,
513                    /* from_stage3 */ true);
514   start_directive (pfile);
515
516   /* This is a short-term fix to prevent a leading '#' being
517      interpreted as a directive.  */
518   _cpp_clean_line (pfile);
519
520   pfile->directive = &dtable[dir_no];
521   if (CPP_OPTION (pfile, traditional))
522     prepare_directive_trad (pfile);
523   pfile->directive->handler (pfile);
524   end_directive (pfile, 1);
525   _cpp_pop_buffer (pfile);
526 }
527
528 /* Checks for validity the macro name in #define, #undef, #ifdef and
529    #ifndef directives.  IS_DEF_OR_UNDEF is true if this call is
530    processing a #define or #undefine directive, and false
531    otherwise.  */
532 static cpp_hashnode *
533 lex_macro_node (cpp_reader *pfile, bool is_def_or_undef)
534 {
535   const cpp_token *token = _cpp_lex_token (pfile);
536
537   /* The token immediately after #define must be an identifier.  That
538      identifier may not be "defined", per C99 6.10.8p4.
539      In C++, it may not be any of the "named operators" either,
540      per C++98 [lex.digraph], [lex.key].
541      Finally, the identifier may not have been poisoned.  (In that case
542      the lexer has issued the error message for us.)  */
543
544   if (token->type == CPP_NAME)
545     {
546       cpp_hashnode *node = token->val.node.node;
547
548       if (is_def_or_undef && node == pfile->spec_nodes.n_defined)
549         cpp_error (pfile, CPP_DL_ERROR,
550                    "\"defined\" cannot be used as a macro name");
551       else if (! (node->flags & NODE_POISONED))
552         return node;
553     }
554   else if (token->flags & NAMED_OP)
555     cpp_error (pfile, CPP_DL_ERROR,
556        "\"%s\" cannot be used as a macro name as it is an operator in C++",
557                NODE_NAME (token->val.node.node));
558   else if (token->type == CPP_EOF)
559     cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
560                pfile->directive->name);
561   else
562     cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
563
564   return NULL;
565 }
566
567 /* Process a #define directive.  Most work is done in macro.c.  */
568 static void
569 do_define (cpp_reader *pfile)
570 {
571   cpp_hashnode *node = lex_macro_node (pfile, true);
572
573   if (node)
574     {
575       /* If we have been requested to expand comments into macros,
576          then re-enable saving of comments.  */
577       pfile->state.save_comments =
578         ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
579
580       if (pfile->cb.before_define)
581         pfile->cb.before_define (pfile);
582
583       if (_cpp_create_definition (pfile, node))
584         if (pfile->cb.define)
585           pfile->cb.define (pfile, pfile->directive_line, node);
586
587       node->flags &= ~NODE_USED;
588     }
589 }
590
591 /* Handle #undef.  Mark the identifier NT_VOID in the hash table.  */
592 static void
593 do_undef (cpp_reader *pfile)
594 {
595   cpp_hashnode *node = lex_macro_node (pfile, true);
596
597   if (node)
598     {
599       if (pfile->cb.before_define)
600         pfile->cb.before_define (pfile);
601
602       if (pfile->cb.undef)
603         pfile->cb.undef (pfile, pfile->directive_line, node);
604
605       /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
606          identifier is not currently defined as a macro name.  */
607       if (node->type == NT_MACRO)
608         {
609           if (node->flags & NODE_WARN)
610             cpp_error (pfile, CPP_DL_WARNING,
611                        "undefining \"%s\"", NODE_NAME (node));
612
613           if (CPP_OPTION (pfile, warn_unused_macros))
614             _cpp_warn_if_unused_macro (pfile, node, NULL);
615
616           _cpp_free_definition (node);
617         }
618     }
619
620   check_eol (pfile, false);
621 }
622
623 /* Undefine a single macro/assertion/whatever.  */
624
625 static int
626 undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
627                  void *data_p ATTRIBUTE_UNUSED)
628 {
629   /* Body of _cpp_free_definition inlined here for speed.
630      Macros and assertions no longer have anything to free.  */
631   h->type = NT_VOID;
632   h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED|NODE_USED);
633   return 1;
634 }
635
636 /* Undefine all macros and assertions.  */
637
638 void
639 cpp_undef_all (cpp_reader *pfile)
640 {
641   cpp_forall_identifiers (pfile, undefine_macros, NULL);
642 }
643
644
645 /* Helper routine used by parse_include.  Reinterpret the current line
646    as an h-char-sequence (< ... >); we are looking at the first token
647    after the <.  Returns a malloced filename.  */
648 static char *
649 glue_header_name (cpp_reader *pfile)
650 {
651   const cpp_token *token;
652   char *buffer;
653   size_t len, total_len = 0, capacity = 1024;
654
655   /* To avoid lexed tokens overwriting our glued name, we can only
656      allocate from the string pool once we've lexed everything.  */
657   buffer = XNEWVEC (char, capacity);
658   for (;;)
659     {
660       token = get_token_no_padding (pfile);
661
662       if (token->type == CPP_GREATER)
663         break;
664       if (token->type == CPP_EOF)
665         {
666           cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
667           break;
668         }
669
670       len = cpp_token_len (token) + 2; /* Leading space, terminating \0.  */
671       if (total_len + len > capacity)
672         {
673           capacity = (capacity + len) * 2;
674           buffer = XRESIZEVEC (char, buffer, capacity);
675         }
676
677       if (token->flags & PREV_WHITE)
678         buffer[total_len++] = ' ';
679
680       total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
681                                     true)
682                    - (uchar *) buffer);
683     }
684
685   buffer[total_len] = '\0';
686   return buffer;
687 }
688
689 /* Returns the file name of #include, #include_next, #import and
690    #pragma dependency.  The string is malloced and the caller should
691    free it.  Returns NULL on error.  LOCATION is the source location
692    of the file name.  */
693
694 static const char *
695 parse_include (cpp_reader *pfile, int *pangle_brackets,
696                const cpp_token ***buf, source_location *location)
697 {
698   char *fname;
699   const cpp_token *header;
700
701   /* Allow macro expansion.  */
702   header = get_token_no_padding (pfile);
703   *location = header->src_loc;
704   if ((header->type == CPP_STRING && header->val.str.text[0] != 'R')
705       || header->type == CPP_HEADER_NAME)
706     {
707       fname = XNEWVEC (char, header->val.str.len - 1);
708       memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
709       fname[header->val.str.len - 2] = '\0';
710       *pangle_brackets = header->type == CPP_HEADER_NAME;
711     }
712   else if (header->type == CPP_LESS)
713     {
714       fname = glue_header_name (pfile);
715       *pangle_brackets = 1;
716     }
717   else
718     {
719       const unsigned char *dir;
720
721       if (pfile->directive == &dtable[T_PRAGMA])
722         dir = UC"pragma dependency";
723       else
724         dir = pfile->directive->name;
725       cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
726                  dir);
727
728       return NULL;
729     }
730
731   if (pfile->directive == &dtable[T_PRAGMA])
732     {
733       /* This pragma allows extra tokens after the file name.  */
734     }
735   else if (buf == NULL || CPP_OPTION (pfile, discard_comments))
736     check_eol (pfile, true);
737   else
738     {
739       /* If we are not discarding comments, then gather them while
740          doing the eol check.  */
741       *buf = check_eol_return_comments (pfile);
742     }
743
744   return fname;
745 }
746
747 /* Handle #include, #include_next and #import.  */
748 static void
749 do_include_common (cpp_reader *pfile, enum include_type type)
750 {
751   const char *fname;
752   int angle_brackets;
753   const cpp_token **buf = NULL;
754   source_location location;
755
756   /* Re-enable saving of comments if requested, so that the include
757      callback can dump comments which follow #include.  */
758   pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
759
760   fname = parse_include (pfile, &angle_brackets, &buf, &location);
761   if (!fname)
762     {
763       if (buf)
764         XDELETEVEC (buf);
765       return;
766     }
767
768   if (!*fname)
769   {
770     cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
771                          "empty filename in #%s",
772                          pfile->directive->name);
773     XDELETEVEC (fname);
774     if (buf)
775       XDELETEVEC (buf);
776     return;
777   }
778
779   /* Prevent #include recursion.  */
780   if (pfile->line_table->depth >= CPP_STACK_MAX)
781     cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
782   else
783     {
784       /* Get out of macro context, if we are.  */
785       skip_rest_of_line (pfile);
786
787       if (pfile->cb.include)
788         pfile->cb.include (pfile, pfile->directive_line,
789                            pfile->directive->name, fname, angle_brackets,
790                            buf);
791
792       _cpp_stack_include (pfile, fname, angle_brackets, type);
793     }
794
795   XDELETEVEC (fname);
796   if (buf)
797     XDELETEVEC (buf);
798 }
799
800 static void
801 do_include (cpp_reader *pfile)
802 {
803   do_include_common (pfile, IT_INCLUDE);
804 }
805
806 static void
807 do_import (cpp_reader *pfile)
808 {
809   do_include_common (pfile, IT_IMPORT);
810 }
811
812 static void
813 do_include_next (cpp_reader *pfile)
814 {
815   enum include_type type = IT_INCLUDE_NEXT;
816
817   /* If this is the primary source file, warn and use the normal
818      search logic.  */
819   if (cpp_in_primary_file (pfile))
820     {
821       cpp_error (pfile, CPP_DL_WARNING,
822                  "#include_next in primary source file");
823       type = IT_INCLUDE;
824     }
825   do_include_common (pfile, type);
826 }
827
828 /* Subroutine of do_linemarker.  Read possible flags after file name.
829    LAST is the last flag seen; 0 if this is the first flag. Return the
830    flag if it is valid, 0 at the end of the directive. Otherwise
831    complain.  */
832 static unsigned int
833 read_flag (cpp_reader *pfile, unsigned int last)
834 {
835   const cpp_token *token = _cpp_lex_token (pfile);
836
837   if (token->type == CPP_NUMBER && token->val.str.len == 1)
838     {
839       unsigned int flag = token->val.str.text[0] - '0';
840
841       if (flag > last && flag <= 4
842           && (flag != 4 || last == 3)
843           && (flag != 2 || last == 0))
844         return flag;
845     }
846
847   if (token->type != CPP_EOF)
848     cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
849                cpp_token_as_text (pfile, token));
850   return 0;
851 }
852
853 /* Subroutine of do_line and do_linemarker.  Convert a number in STR,
854    of length LEN, to binary; store it in NUMP, and return false if the
855    number was well-formed, true if not. WRAPPED is set to true if the
856    number did not fit into 'unsigned long'.  */
857 static bool
858 strtolinenum (const uchar *str, size_t len, linenum_type *nump, bool *wrapped)
859 {
860   linenum_type reg = 0;
861   linenum_type reg_prev = 0;
862
863   uchar c;
864   *wrapped = false;
865   while (len--)
866     {
867       c = *str++;
868       if (!ISDIGIT (c))
869         return true;
870       reg *= 10;
871       reg += c - '0';
872       if (reg < reg_prev) 
873         *wrapped = true;
874       reg_prev = reg;
875     }
876   *nump = reg;
877   return false;
878 }
879
880 /* Interpret #line command.
881    Note that the filename string (if any) is a true string constant
882    (escapes are interpreted), unlike in #line.  */
883 static void
884 do_line (cpp_reader *pfile)
885 {
886   const struct line_maps *line_table = pfile->line_table;
887   const struct line_map *map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
888
889   /* skip_rest_of_line() may cause line table to be realloc()ed so note down
890      sysp right now.  */
891
892   unsigned char map_sysp = ORDINARY_MAP_IN_SYSTEM_HEADER_P (map);
893   const cpp_token *token;
894   const char *new_file = ORDINARY_MAP_FILE_NAME (map);
895   linenum_type new_lineno;
896
897   /* C99 raised the minimum limit on #line numbers.  */
898   linenum_type cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
899   bool wrapped;
900
901   /* #line commands expand macros.  */
902   token = cpp_get_token (pfile);
903   if (token->type != CPP_NUMBER
904       || strtolinenum (token->val.str.text, token->val.str.len,
905                        &new_lineno, &wrapped))
906     {
907       if (token->type == CPP_EOF)
908         cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
909       else
910         cpp_error (pfile, CPP_DL_ERROR,
911                    "\"%s\" after #line is not a positive integer",
912                    cpp_token_as_text (pfile, token));
913       return;
914     }
915
916   if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap || wrapped))
917     cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
918   else if (wrapped)
919     cpp_error (pfile, CPP_DL_WARNING, "line number out of range");
920
921   token = cpp_get_token (pfile);
922   if (token->type == CPP_STRING)
923     {
924       cpp_string s = { 0, 0 };
925       if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
926                                             &s, CPP_STRING))
927         new_file = (const char *)s.text;
928       check_eol (pfile, true);
929     }
930   else if (token->type != CPP_EOF)
931     {
932       cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
933                  cpp_token_as_text (pfile, token));
934       return;
935     }
936
937   skip_rest_of_line (pfile);
938   _cpp_do_file_change (pfile, LC_RENAME_VERBATIM, new_file, new_lineno,
939                        map_sysp);
940 }
941
942 /* Interpret the # 44 "file" [flags] notation, which has slightly
943    different syntax and semantics from #line:  Flags are allowed,
944    and we never complain about the line number being too big.  */
945 static void
946 do_linemarker (cpp_reader *pfile)
947 {
948   const struct line_maps *line_table = pfile->line_table;
949   const struct line_map *map = LINEMAPS_LAST_ORDINARY_MAP (line_table);
950   const cpp_token *token;
951   const char *new_file = ORDINARY_MAP_FILE_NAME (map);
952   linenum_type new_lineno;
953   unsigned int new_sysp = ORDINARY_MAP_IN_SYSTEM_HEADER_P (map);
954   enum lc_reason reason = LC_RENAME_VERBATIM;
955   int flag;
956   bool wrapped;
957
958   /* Back up so we can get the number again.  Putting this in
959      _cpp_handle_directive risks two calls to _cpp_backup_tokens in
960      some circumstances, which can segfault.  */
961   _cpp_backup_tokens (pfile, 1);
962
963   /* #line commands expand macros.  */
964   token = cpp_get_token (pfile);
965   if (token->type != CPP_NUMBER
966       || strtolinenum (token->val.str.text, token->val.str.len,
967                        &new_lineno, &wrapped))
968     {
969       /* Unlike #line, there does not seem to be a way to get an EOF
970          here.  So, it should be safe to always spell the token.  */
971       cpp_error (pfile, CPP_DL_ERROR,
972                  "\"%s\" after # is not a positive integer",
973                  cpp_token_as_text (pfile, token));
974       return;
975     }
976
977   token = cpp_get_token (pfile);
978   if (token->type == CPP_STRING)
979     {
980       cpp_string s = { 0, 0 };
981       if (cpp_interpret_string_notranslate (pfile, &token->val.str,
982                                             1, &s, CPP_STRING))
983         new_file = (const char *)s.text;
984
985       new_sysp = 0;
986       flag = read_flag (pfile, 0);
987       if (flag == 1)
988         {
989           reason = LC_ENTER;
990           /* Fake an include for cpp_included ().  */
991           _cpp_fake_include (pfile, new_file);
992           flag = read_flag (pfile, flag);
993         }
994       else if (flag == 2)
995         {
996           reason = LC_LEAVE;
997           flag = read_flag (pfile, flag);
998         }
999       if (flag == 3)
1000         {
1001           new_sysp = 1;
1002           flag = read_flag (pfile, flag);
1003           if (flag == 4)
1004             new_sysp = 2;
1005         }
1006       pfile->buffer->sysp = new_sysp;
1007
1008       check_eol (pfile, false);
1009     }
1010   else if (token->type != CPP_EOF)
1011     {
1012       cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
1013                  cpp_token_as_text (pfile, token));
1014       return;
1015     }
1016
1017   skip_rest_of_line (pfile);
1018
1019   /* Compensate for the increment in linemap_add that occurs in
1020      _cpp_do_file_change.  We're currently at the start of the line
1021      *following* the #line directive.  A separate source_location for this
1022      location makes no sense (until we do the LC_LEAVE), and
1023      complicates LAST_SOURCE_LINE_LOCATION.  */
1024   pfile->line_table->highest_location--;
1025
1026   _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
1027 }
1028
1029 /* Arrange the file_change callback.  pfile->line has changed to
1030    FILE_LINE of TO_FILE, for reason REASON.  SYSP is 1 for a system
1031    header, 2 for a system header that needs to be extern "C" protected,
1032    and zero otherwise.  */
1033 void
1034 _cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
1035                      const char *to_file, linenum_type file_line,
1036                      unsigned int sysp)
1037 {
1038   const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
1039                                             to_file, file_line);
1040   if (map != NULL)
1041     linemap_line_start (pfile->line_table,
1042                         ORDINARY_MAP_STARTING_LINE_NUMBER (map),
1043                         127);
1044
1045   if (pfile->cb.file_change)
1046     pfile->cb.file_change (pfile, map);
1047 }
1048
1049 /* Report a warning or error detected by the program we are
1050    processing.  Use the directive's tokens in the error message.  */
1051 static void
1052 do_diagnostic (cpp_reader *pfile, int code, int reason, int print_dir)
1053 {
1054   const unsigned char *dir_name;
1055   unsigned char *line;
1056   source_location src_loc = pfile->cur_token[-1].src_loc;
1057
1058   if (print_dir)
1059     dir_name = pfile->directive->name;
1060   else
1061     dir_name = NULL;
1062   pfile->state.prevent_expansion++;
1063   line = cpp_output_line_to_string (pfile, dir_name);
1064   pfile->state.prevent_expansion--;
1065
1066   if (code == CPP_DL_WARNING_SYSHDR && reason)
1067     cpp_warning_with_line_syshdr (pfile, reason, src_loc, 0, "%s", line);
1068   else if (code == CPP_DL_WARNING && reason)
1069     cpp_warning_with_line (pfile, reason, src_loc, 0, "%s", line);
1070   else
1071     cpp_error_with_line (pfile, code, src_loc, 0, "%s", line);
1072   free (line);
1073 }
1074
1075 static void
1076 do_error (cpp_reader *pfile)
1077 {
1078   do_diagnostic (pfile, CPP_DL_ERROR, 0, 1);
1079 }
1080
1081 static void
1082 do_warning (cpp_reader *pfile)
1083 {
1084   /* We want #warning diagnostics to be emitted in system headers too.  */
1085   do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, CPP_W_WARNING_DIRECTIVE, 1);
1086 }
1087
1088 /* Report program identification.  */
1089 static void
1090 do_ident (cpp_reader *pfile)
1091 {
1092   const cpp_token *str = cpp_get_token (pfile);
1093
1094   if (str->type != CPP_STRING)
1095     cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
1096                pfile->directive->name);
1097   else if (pfile->cb.ident)
1098     pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
1099
1100   check_eol (pfile, false);
1101 }
1102
1103 /* Lookup a PRAGMA name in a singly-linked CHAIN.  Returns the
1104    matching entry, or NULL if none is found.  The returned entry could
1105    be the start of a namespace chain, or a pragma.  */
1106 static struct pragma_entry *
1107 lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
1108 {
1109   while (chain && chain->pragma != pragma)
1110     chain = chain->next;
1111
1112   return chain;
1113 }
1114
1115 /* Create and insert a blank pragma entry at the beginning of a
1116    singly-linked CHAIN.  */
1117 static struct pragma_entry *
1118 new_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain)
1119 {
1120   struct pragma_entry *new_entry;
1121
1122   new_entry = (struct pragma_entry *)
1123     _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
1124
1125   memset (new_entry, 0, sizeof (struct pragma_entry));
1126   new_entry->next = *chain;
1127
1128   *chain = new_entry;
1129   return new_entry;
1130 }
1131
1132 /* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
1133    goes in the global namespace.  */
1134 static struct pragma_entry *
1135 register_pragma_1 (cpp_reader *pfile, const char *space, const char *name,
1136                    bool allow_name_expansion)
1137 {
1138   struct pragma_entry **chain = &pfile->pragmas;
1139   struct pragma_entry *entry;
1140   const cpp_hashnode *node;
1141
1142   if (space)
1143     {
1144       node = cpp_lookup (pfile, UC space, strlen (space));
1145       entry = lookup_pragma_entry (*chain, node);
1146       if (!entry)
1147         {
1148           entry = new_pragma_entry (pfile, chain);
1149           entry->pragma = node;
1150           entry->is_nspace = true;
1151           entry->allow_expansion = allow_name_expansion;
1152         }
1153       else if (!entry->is_nspace)
1154         goto clash;
1155       else if (entry->allow_expansion != allow_name_expansion)
1156         {
1157           cpp_error (pfile, CPP_DL_ICE,
1158                      "registering pragmas in namespace \"%s\" with mismatched "
1159                      "name expansion", space);
1160           return NULL;
1161         }
1162       chain = &entry->u.space;
1163     }
1164   else if (allow_name_expansion)
1165     {
1166       cpp_error (pfile, CPP_DL_ICE,
1167                  "registering pragma \"%s\" with name expansion "
1168                  "and no namespace", name);
1169       return NULL;
1170     }
1171
1172   /* Check for duplicates.  */
1173   node = cpp_lookup (pfile, UC name, strlen (name));
1174   entry = lookup_pragma_entry (*chain, node);
1175   if (entry == NULL)
1176     {
1177       entry = new_pragma_entry (pfile, chain);
1178       entry->pragma = node;
1179       return entry;
1180     }
1181
1182   if (entry->is_nspace)
1183     clash:
1184     cpp_error (pfile, CPP_DL_ICE,
1185                "registering \"%s\" as both a pragma and a pragma namespace",
1186                NODE_NAME (node));
1187   else if (space)
1188     cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
1189                space, name);
1190   else
1191     cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
1192
1193   return NULL;
1194 }
1195
1196 /* Register a cpplib internal pragma SPACE NAME with HANDLER.  */
1197 static void
1198 register_pragma_internal (cpp_reader *pfile, const char *space,
1199                           const char *name, pragma_cb handler)
1200 {
1201   struct pragma_entry *entry;
1202
1203   entry = register_pragma_1 (pfile, space, name, false);
1204   entry->is_internal = true;
1205   entry->u.handler = handler;
1206 }
1207
1208 /* Register a pragma NAME in namespace SPACE.  If SPACE is null, it
1209    goes in the global namespace.  HANDLER is the handler it will call,
1210    which must be non-NULL.  If ALLOW_EXPANSION is set, allow macro
1211    expansion while parsing pragma NAME.  This function is exported
1212    from libcpp. */
1213 void
1214 cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
1215                      pragma_cb handler, bool allow_expansion)
1216 {
1217   struct pragma_entry *entry;
1218
1219   if (!handler)
1220     {
1221       cpp_error (pfile, CPP_DL_ICE, "registering pragma with NULL handler");
1222       return;
1223     }
1224
1225   entry = register_pragma_1 (pfile, space, name, false);
1226   if (entry)
1227     {
1228       entry->allow_expansion = allow_expansion;
1229       entry->u.handler = handler;
1230     }
1231 }
1232
1233 /* Similarly, but create mark the pragma for deferred processing.
1234    When found, a CPP_PRAGMA token will be insertted into the stream
1235    with IDENT in the token->u.pragma slot.  */
1236 void
1237 cpp_register_deferred_pragma (cpp_reader *pfile, const char *space,
1238                               const char *name, unsigned int ident,
1239                               bool allow_expansion, bool allow_name_expansion)
1240 {
1241   struct pragma_entry *entry;
1242
1243   entry = register_pragma_1 (pfile, space, name, allow_name_expansion);
1244   if (entry)
1245     {
1246       entry->is_deferred = true;
1247       entry->allow_expansion = allow_expansion;
1248       entry->u.ident = ident;
1249     }
1250 }  
1251
1252 /* Register the pragmas the preprocessor itself handles.  */
1253 void
1254 _cpp_init_internal_pragmas (cpp_reader *pfile)
1255 {
1256   /* Pragmas in the global namespace.  */
1257   register_pragma_internal (pfile, 0, "once", do_pragma_once);
1258   register_pragma_internal (pfile, 0, "push_macro", do_pragma_push_macro);
1259   register_pragma_internal (pfile, 0, "pop_macro", do_pragma_pop_macro);
1260
1261   /* New GCC-specific pragmas should be put in the GCC namespace.  */
1262   register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison);
1263   register_pragma_internal (pfile, "GCC", "system_header",
1264                             do_pragma_system_header);
1265   register_pragma_internal (pfile, "GCC", "dependency", do_pragma_dependency);
1266 }
1267
1268 /* Return the number of registered pragmas in PE.  */
1269
1270 static int
1271 count_registered_pragmas (struct pragma_entry *pe)
1272 {
1273   int ct = 0;
1274   for (; pe != NULL; pe = pe->next)
1275     {
1276       if (pe->is_nspace)
1277         ct += count_registered_pragmas (pe->u.space);
1278       ct++;
1279     }
1280   return ct;
1281 }
1282
1283 /* Save into SD the names of the registered pragmas referenced by PE,
1284    and return a pointer to the next free space in SD.  */
1285
1286 static char **
1287 save_registered_pragmas (struct pragma_entry *pe, char **sd)
1288 {
1289   for (; pe != NULL; pe = pe->next)
1290     {
1291       if (pe->is_nspace)
1292         sd = save_registered_pragmas (pe->u.space, sd);
1293       *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
1294                                 HT_LEN (&pe->pragma->ident),
1295                                 HT_LEN (&pe->pragma->ident) + 1);
1296     }
1297   return sd;
1298 }
1299
1300 /* Return a newly-allocated array which saves the names of the
1301    registered pragmas.  */
1302
1303 char **
1304 _cpp_save_pragma_names (cpp_reader *pfile)
1305 {
1306   int ct = count_registered_pragmas (pfile->pragmas);
1307   char **result = XNEWVEC (char *, ct);
1308   (void) save_registered_pragmas (pfile->pragmas, result);
1309   return result;
1310 }
1311
1312 /* Restore from SD the names of the registered pragmas referenced by PE,
1313    and return a pointer to the next unused name in SD.  */
1314
1315 static char **
1316 restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1317                             char **sd)
1318 {
1319   for (; pe != NULL; pe = pe->next)
1320     {
1321       if (pe->is_nspace)
1322         sd = restore_registered_pragmas (pfile, pe->u.space, sd);
1323       pe->pragma = cpp_lookup (pfile, UC *sd, strlen (*sd));
1324       free (*sd);
1325       sd++;
1326     }
1327   return sd;
1328 }
1329
1330 /* Restore the names of the registered pragmas from SAVED.  */
1331
1332 void
1333 _cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
1334 {
1335   (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1336   free (saved);
1337 }
1338
1339 /* Pragmata handling.  We handle some, and pass the rest on to the
1340    front end.  C99 defines three pragmas and says that no macro
1341    expansion is to be performed on them; whether or not macro
1342    expansion happens for other pragmas is implementation defined.
1343    This implementation allows for a mix of both, since GCC did not
1344    traditionally macro expand its (few) pragmas, whereas OpenMP
1345    specifies that macro expansion should happen.  */
1346 static void
1347 do_pragma (cpp_reader *pfile)
1348 {
1349   const struct pragma_entry *p = NULL;
1350   const cpp_token *token, *pragma_token = pfile->cur_token;
1351   cpp_token ns_token;
1352   unsigned int count = 1;
1353
1354   pfile->state.prevent_expansion++;
1355
1356   token = cpp_get_token (pfile);
1357   ns_token = *token;
1358   if (token->type == CPP_NAME)
1359     {
1360       p = lookup_pragma_entry (pfile->pragmas, token->val.node.node);
1361       if (p && p->is_nspace)
1362         {
1363           bool allow_name_expansion = p->allow_expansion;
1364           if (allow_name_expansion)
1365             {
1366               pfile->state.prevent_expansion--;
1367               /*
1368                 Kludge ahead.
1369
1370                 Consider this code snippet:
1371
1372                 #define P parallel
1373                 #pragma omp P for
1374                 ... a for loop ...
1375
1376                 Once we parsed the 'omp' namespace of the #pragma
1377                 directive, we then parse the 'P' token that represents the
1378                 pragma name.  P being a macro, it is expanded into the
1379                 resulting 'parallel' token.
1380
1381                 At this point the 'p' variable contains the 'parallel'
1382                 pragma name.  And pfile->context->macro is non-null
1383                 because we are still right at the end of the macro
1384                 context of 'P'.  The problem is, if we are being
1385                 (indirectly) called by cpp_get_token_with_location,
1386                 that function might test pfile->context->macro to see
1387                 if we are in the context of a macro expansion, (and we
1388                 are) and then use pfile->invocation_location as the
1389                 location of the macro invocation.  So we must instruct
1390                 cpp_get_token below to set
1391                 pfile->invocation_location.  */
1392               pfile->set_invocation_location = true;
1393             }
1394
1395           token = cpp_get_token (pfile);
1396           if (token->type == CPP_NAME)
1397             p = lookup_pragma_entry (p->u.space, token->val.node.node);
1398           else
1399             p = NULL;
1400           if (allow_name_expansion)
1401             pfile->state.prevent_expansion++;
1402           count = 2;
1403         }
1404     }
1405
1406   if (p)
1407     {
1408       if (p->is_deferred)
1409         {
1410           pfile->directive_result.src_loc = pragma_token->src_loc;
1411           pfile->directive_result.type = CPP_PRAGMA;
1412           pfile->directive_result.flags = pragma_token->flags;
1413           pfile->directive_result.val.pragma = p->u.ident;
1414           pfile->state.in_deferred_pragma = true;
1415           pfile->state.pragma_allow_expansion = p->allow_expansion;
1416           if (!p->allow_expansion)
1417             pfile->state.prevent_expansion++;
1418         }
1419       else
1420         {
1421           /* Since the handler below doesn't get the line number, that
1422              it might need for diagnostics, make sure it has the right
1423              numbers in place.  */
1424           if (pfile->cb.line_change)
1425             (*pfile->cb.line_change) (pfile, pragma_token, false);
1426           if (p->allow_expansion)
1427             pfile->state.prevent_expansion--;
1428           (*p->u.handler) (pfile);
1429           if (p->allow_expansion)
1430             pfile->state.prevent_expansion++;
1431         }
1432     }
1433   else if (pfile->cb.def_pragma)
1434     {
1435       if (count == 1 || pfile->context->prev == NULL)
1436         _cpp_backup_tokens (pfile, count);
1437       else
1438         {
1439           /* Invalid name comes from macro expansion, _cpp_backup_tokens
1440              won't allow backing 2 tokens.  */
1441           /* ??? The token buffer is leaked.  Perhaps if def_pragma hook
1442              reads both tokens, we could perhaps free it, but if it doesn't,
1443              we don't know the exact lifespan.  */
1444           cpp_token *toks = XNEWVEC (cpp_token, 2);
1445           toks[0] = ns_token;
1446           toks[0].flags |= NO_EXPAND;
1447           toks[1] = *token;
1448           toks[1].flags |= NO_EXPAND;
1449           _cpp_push_token_context (pfile, NULL, toks, 2);
1450         }
1451       pfile->cb.def_pragma (pfile, pfile->directive_line);
1452     }
1453
1454   pfile->state.prevent_expansion--;
1455 }
1456
1457 /* Handle #pragma once.  */
1458 static void
1459 do_pragma_once (cpp_reader *pfile)
1460 {
1461   if (cpp_in_primary_file (pfile))
1462     cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
1463
1464   check_eol (pfile, false);
1465   _cpp_mark_file_once_only (pfile, pfile->buffer->file);
1466 }
1467
1468 /* Handle #pragma push_macro(STRING).  */
1469 static void
1470 do_pragma_push_macro (cpp_reader *pfile)
1471 {
1472   cpp_hashnode *node;
1473   size_t defnlen;
1474   const uchar *defn = NULL;
1475   char *macroname, *dest;
1476   const char *limit, *src;
1477   const cpp_token *txt;
1478   struct def_pragma_macro *c;
1479
1480   txt = get__Pragma_string (pfile);
1481   if (!txt)
1482     {
1483       source_location src_loc = pfile->cur_token[-1].src_loc;
1484       cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
1485                  "invalid #pragma push_macro directive");
1486       check_eol (pfile, false);
1487       skip_rest_of_line (pfile);
1488       return;
1489     }
1490   dest = macroname = (char *) alloca (txt->val.str.len + 2);
1491   src = (const char *) (txt->val.str.text + 1 + (txt->val.str.text[0] == 'L'));
1492   limit = (const char *) (txt->val.str.text + txt->val.str.len - 1);
1493   while (src < limit)
1494     {
1495       /* We know there is a character following the backslash.  */
1496       if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1497         src++;
1498       *dest++ = *src++;
1499     }
1500   *dest = 0;
1501   check_eol (pfile, false);
1502   skip_rest_of_line (pfile);
1503   c = XNEW (struct def_pragma_macro);
1504   memset (c, 0, sizeof (struct def_pragma_macro));
1505   c->name = XNEWVAR (char, strlen (macroname) + 1);
1506   strcpy (c->name, macroname);
1507   c->next = pfile->pushed_macros;
1508   node = _cpp_lex_identifier (pfile, c->name);
1509   if (node->type == NT_VOID)
1510     c->is_undef = 1;
1511   else
1512     {
1513       defn = cpp_macro_definition (pfile, node);
1514       defnlen = ustrlen (defn);
1515       c->definition = XNEWVEC (uchar, defnlen + 2);
1516       c->definition[defnlen] = '\n';
1517       c->definition[defnlen + 1] = 0;
1518       c->line = node->value.macro->line;
1519       c->syshdr = node->value.macro->syshdr;
1520       c->used = node->value.macro->used;
1521       memcpy (c->definition, defn, defnlen);
1522     }
1523
1524   pfile->pushed_macros = c;
1525 }
1526
1527 /* Handle #pragma pop_macro(STRING).  */
1528 static void
1529 do_pragma_pop_macro (cpp_reader *pfile)
1530 {
1531   char *macroname, *dest;
1532   const char *limit, *src;
1533   const cpp_token *txt;
1534   struct def_pragma_macro *l = NULL, *c = pfile->pushed_macros;
1535   txt = get__Pragma_string (pfile);
1536   if (!txt)
1537     {
1538       source_location src_loc = pfile->cur_token[-1].src_loc;
1539       cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
1540                  "invalid #pragma pop_macro directive");
1541       check_eol (pfile, false);
1542       skip_rest_of_line (pfile);
1543       return;
1544     }
1545   dest = macroname = (char *) alloca (txt->val.str.len + 2);
1546   src = (const char *) (txt->val.str.text + 1 + (txt->val.str.text[0] == 'L'));
1547   limit = (const char *) (txt->val.str.text + txt->val.str.len - 1);
1548   while (src < limit)
1549     {
1550       /* We know there is a character following the backslash.  */
1551       if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1552         src++;
1553       *dest++ = *src++;
1554     }
1555   *dest = 0;
1556   check_eol (pfile, false);
1557   skip_rest_of_line (pfile);
1558
1559   while (c != NULL)
1560     {
1561       if (!strcmp (c->name, macroname))
1562         {
1563           if (!l)
1564             pfile->pushed_macros = c->next;
1565           else
1566             l->next = c->next;
1567           cpp_pop_definition (pfile, c);
1568           free (c->definition);
1569           free (c->name);
1570           free (c);
1571           break;
1572         }
1573       l = c;
1574       c = c->next;
1575     }
1576 }
1577
1578 /* Handle #pragma GCC poison, to poison one or more identifiers so
1579    that the lexer produces a hard error for each subsequent usage.  */
1580 static void
1581 do_pragma_poison (cpp_reader *pfile)
1582 {
1583   const cpp_token *tok;
1584   cpp_hashnode *hp;
1585
1586   pfile->state.poisoned_ok = 1;
1587   for (;;)
1588     {
1589       tok = _cpp_lex_token (pfile);
1590       if (tok->type == CPP_EOF)
1591         break;
1592       if (tok->type != CPP_NAME)
1593         {
1594           cpp_error (pfile, CPP_DL_ERROR,
1595                      "invalid #pragma GCC poison directive");
1596           break;
1597         }
1598
1599       hp = tok->val.node.node;
1600       if (hp->flags & NODE_POISONED)
1601         continue;
1602
1603       if (hp->type == NT_MACRO)
1604         cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
1605                    NODE_NAME (hp));
1606       _cpp_free_definition (hp);
1607       hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
1608     }
1609   pfile->state.poisoned_ok = 0;
1610 }
1611
1612 /* Mark the current header as a system header.  This will suppress
1613    some categories of warnings (notably those from -pedantic).  It is
1614    intended for use in system libraries that cannot be implemented in
1615    conforming C, but cannot be certain that their headers appear in a
1616    system include directory.  To prevent abuse, it is rejected in the
1617    primary source file.  */
1618 static void
1619 do_pragma_system_header (cpp_reader *pfile)
1620 {
1621   if (cpp_in_primary_file (pfile))
1622     cpp_error (pfile, CPP_DL_WARNING,
1623                "#pragma system_header ignored outside include file");
1624   else
1625     {
1626       check_eol (pfile, false);
1627       skip_rest_of_line (pfile);
1628       cpp_make_system_header (pfile, 1, 0);
1629     }
1630 }
1631
1632 /* Check the modified date of the current include file against a specified
1633    file. Issue a diagnostic, if the specified file is newer. We use this to
1634    determine if a fixed header should be refixed.  */
1635 static void
1636 do_pragma_dependency (cpp_reader *pfile)
1637 {
1638   const char *fname;
1639   int angle_brackets, ordering;
1640   source_location location;
1641
1642   fname = parse_include (pfile, &angle_brackets, NULL, &location);
1643   if (!fname)
1644     return;
1645
1646   ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
1647   if (ordering < 0)
1648     cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
1649   else if (ordering > 0)
1650     {
1651       cpp_error (pfile, CPP_DL_WARNING,
1652                  "current file is older than %s", fname);
1653       if (cpp_get_token (pfile)->type != CPP_EOF)
1654         {
1655           _cpp_backup_tokens (pfile, 1);
1656           do_diagnostic (pfile, CPP_DL_WARNING, 0, 0);
1657         }
1658     }
1659
1660   free ((void *) fname);
1661 }
1662
1663 /* Get a token but skip padding.  */
1664 static const cpp_token *
1665 get_token_no_padding (cpp_reader *pfile)
1666 {
1667   for (;;)
1668     {
1669       const cpp_token *result = cpp_get_token (pfile);
1670       if (result->type != CPP_PADDING)
1671         return result;
1672     }
1673 }
1674
1675 /* Check syntax is "(string-literal)".  Returns the string on success,
1676    or NULL on failure.  */
1677 static const cpp_token *
1678 get__Pragma_string (cpp_reader *pfile)
1679 {
1680   const cpp_token *string;
1681   const cpp_token *paren;
1682
1683   paren = get_token_no_padding (pfile);
1684   if (paren->type == CPP_EOF)
1685     _cpp_backup_tokens (pfile, 1);
1686   if (paren->type != CPP_OPEN_PAREN)
1687     return NULL;
1688
1689   string = get_token_no_padding (pfile);
1690   if (string->type == CPP_EOF)
1691     _cpp_backup_tokens (pfile, 1);
1692   if (string->type != CPP_STRING && string->type != CPP_WSTRING
1693       && string->type != CPP_STRING32 && string->type != CPP_STRING16
1694       && string->type != CPP_UTF8STRING)
1695     return NULL;
1696
1697   paren = get_token_no_padding (pfile);
1698   if (paren->type == CPP_EOF)
1699     _cpp_backup_tokens (pfile, 1);
1700   if (paren->type != CPP_CLOSE_PAREN)
1701     return NULL;
1702
1703   return string;
1704 }
1705
1706 /* Destringize IN into a temporary buffer, by removing the first \ of
1707    \" and \\ sequences, and process the result as a #pragma directive.  */
1708 static void
1709 destringize_and_run (cpp_reader *pfile, const cpp_string *in)
1710 {
1711   const unsigned char *src, *limit;
1712   char *dest, *result;
1713   cpp_context *saved_context;
1714   cpp_token *saved_cur_token;
1715   tokenrun *saved_cur_run;
1716   cpp_token *toks;
1717   int count;
1718   const struct directive *save_directive;
1719
1720   dest = result = (char *) alloca (in->len - 1);
1721   src = in->text + 1 + (in->text[0] == 'L');
1722   limit = in->text + in->len - 1;
1723   while (src < limit)
1724     {
1725       /* We know there is a character following the backslash.  */
1726       if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1727         src++;
1728       *dest++ = *src++;
1729     }
1730   *dest = '\n';
1731
1732   /* Ugh; an awful kludge.  We are really not set up to be lexing
1733      tokens when in the middle of a macro expansion.  Use a new
1734      context to force cpp_get_token to lex, and so skip_rest_of_line
1735      doesn't go beyond the end of the text.  Also, remember the
1736      current lexing position so we can return to it later.
1737
1738      Something like line-at-a-time lexing should remove the need for
1739      this.  */
1740   saved_context = pfile->context;
1741   saved_cur_token = pfile->cur_token;
1742   saved_cur_run = pfile->cur_run;
1743
1744   pfile->context = XNEW (cpp_context);
1745   pfile->context->c.macro = 0;
1746   pfile->context->prev = 0;
1747   pfile->context->next = 0;
1748
1749   /* Inline run_directive, since we need to delay the _cpp_pop_buffer
1750      until we've read all of the tokens that we want.  */
1751   cpp_push_buffer (pfile, (const uchar *) result, dest - result,
1752                    /* from_stage3 */ true);
1753   /* ??? Antique Disgusting Hack.  What does this do?  */
1754   if (pfile->buffer->prev)
1755     pfile->buffer->file = pfile->buffer->prev->file;
1756
1757   start_directive (pfile);
1758   _cpp_clean_line (pfile);
1759   save_directive = pfile->directive;
1760   pfile->directive = &dtable[T_PRAGMA];
1761   do_pragma (pfile);
1762   end_directive (pfile, 1);
1763   pfile->directive = save_directive;
1764
1765   /* We always insert at least one token, the directive result.  It'll
1766      either be a CPP_PADDING or a CPP_PRAGMA.  In the later case, we 
1767      need to insert *all* of the tokens, including the CPP_PRAGMA_EOL.  */
1768
1769   /* If we're not handling the pragma internally, read all of the tokens from
1770      the string buffer now, while the string buffer is still installed.  */
1771   /* ??? Note that the token buffer allocated here is leaked.  It's not clear
1772      to me what the true lifespan of the tokens are.  It would appear that
1773      the lifespan is the entire parse of the main input stream, in which case
1774      this may not be wrong.  */
1775   if (pfile->directive_result.type == CPP_PRAGMA)
1776     {
1777       int maxcount;
1778
1779       count = 1;
1780       maxcount = 50;
1781       toks = XNEWVEC (cpp_token, maxcount);
1782       toks[0] = pfile->directive_result;
1783
1784       do
1785         {
1786           if (count == maxcount)
1787             {
1788               maxcount = maxcount * 3 / 2;
1789               toks = XRESIZEVEC (cpp_token, toks, maxcount);
1790             }
1791           toks[count] = *cpp_get_token (pfile);
1792           /* Macros have been already expanded by cpp_get_token
1793              if the pragma allowed expansion.  */
1794           toks[count++].flags |= NO_EXPAND;
1795         }
1796       while (toks[count-1].type != CPP_PRAGMA_EOL);
1797     }
1798   else
1799     {
1800       count = 1;
1801       toks = XNEW (cpp_token);
1802       toks[0] = pfile->directive_result;
1803
1804       /* If we handled the entire pragma internally, make sure we get the
1805          line number correct for the next token.  */
1806       if (pfile->cb.line_change)
1807         pfile->cb.line_change (pfile, pfile->cur_token, false);
1808     }
1809
1810   /* Finish inlining run_directive.  */
1811   pfile->buffer->file = NULL;
1812   _cpp_pop_buffer (pfile);
1813
1814   /* Reset the old macro state before ...  */
1815   XDELETE (pfile->context);
1816   pfile->context = saved_context;
1817   pfile->cur_token = saved_cur_token;
1818   pfile->cur_run = saved_cur_run;
1819
1820   /* ... inserting the new tokens we collected.  */
1821   _cpp_push_token_context (pfile, NULL, toks, count);
1822 }
1823
1824 /* Handle the _Pragma operator.  Return 0 on error, 1 if ok.  */
1825 int
1826 _cpp_do__Pragma (cpp_reader *pfile)
1827 {
1828   const cpp_token *string = get__Pragma_string (pfile);
1829   pfile->directive_result.type = CPP_PADDING;
1830
1831   if (string)
1832     {
1833       destringize_and_run (pfile, &string->val.str);
1834       return 1;
1835     }
1836   cpp_error (pfile, CPP_DL_ERROR,
1837              "_Pragma takes a parenthesized string literal");
1838   return 0;
1839 }
1840
1841 /* Handle #ifdef.  */
1842 static void
1843 do_ifdef (cpp_reader *pfile)
1844 {
1845   int skip = 1;
1846
1847   if (! pfile->state.skipping)
1848     {
1849       cpp_hashnode *node = lex_macro_node (pfile, false);
1850
1851       if (node)
1852         {
1853           /* Do not treat conditional macros as being defined.  This is due to
1854              the powerpc and spu ports using conditional macros for 'vector',
1855              'bool', and 'pixel' to act as conditional keywords.  This messes
1856              up tests like #ifndef bool.  */
1857           skip = (node->type != NT_MACRO
1858                   || ((node->flags & NODE_CONDITIONAL) != 0));
1859           _cpp_mark_macro_used (node);
1860           if (!(node->flags & NODE_USED))
1861             {
1862               node->flags |= NODE_USED;
1863               if (node->type == NT_MACRO)
1864                 {
1865                   if ((node->flags & NODE_BUILTIN)
1866                       && pfile->cb.user_builtin_macro)
1867                     pfile->cb.user_builtin_macro (pfile, node);
1868                   if (pfile->cb.used_define)
1869                     pfile->cb.used_define (pfile, pfile->directive_line, node);
1870                 }
1871               else
1872                 {
1873                   if (pfile->cb.used_undef)
1874                     pfile->cb.used_undef (pfile, pfile->directive_line, node);
1875                 }
1876             }
1877           if (pfile->cb.used)
1878             pfile->cb.used (pfile, pfile->directive_line, node);
1879           check_eol (pfile, false);
1880         }
1881     }
1882
1883   push_conditional (pfile, skip, T_IFDEF, 0);
1884 }
1885
1886 /* Handle #ifndef.  */
1887 static void
1888 do_ifndef (cpp_reader *pfile)
1889 {
1890   int skip = 1;
1891   cpp_hashnode *node = 0;
1892
1893   if (! pfile->state.skipping)
1894     {
1895       node = lex_macro_node (pfile, false);
1896
1897       if (node)
1898         {
1899           /* Do not treat conditional macros as being defined.  This is due to
1900              the powerpc and spu ports using conditional macros for 'vector',
1901              'bool', and 'pixel' to act as conditional keywords.  This messes
1902              up tests like #ifndef bool.  */
1903           skip = (node->type == NT_MACRO
1904                   && ((node->flags & NODE_CONDITIONAL) == 0));
1905           _cpp_mark_macro_used (node);
1906           if (!(node->flags & NODE_USED))
1907             {
1908               node->flags |= NODE_USED;
1909               if (node->type == NT_MACRO)
1910                 {
1911                   if ((node->flags & NODE_BUILTIN)
1912                       && pfile->cb.user_builtin_macro)
1913                     pfile->cb.user_builtin_macro (pfile, node);
1914                   if (pfile->cb.used_define)
1915                     pfile->cb.used_define (pfile, pfile->directive_line, node);
1916                 }
1917               else
1918                 {
1919                   if (pfile->cb.used_undef)
1920                     pfile->cb.used_undef (pfile, pfile->directive_line, node);
1921                 }
1922             }
1923           if (pfile->cb.used)
1924             pfile->cb.used (pfile, pfile->directive_line, node);
1925           check_eol (pfile, false);
1926         }
1927     }
1928
1929   push_conditional (pfile, skip, T_IFNDEF, node);
1930 }
1931
1932 /* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1933    pfile->mi_ind_cmacro so we can handle multiple-include
1934    optimizations.  If macro expansion occurs in the expression, we
1935    cannot treat it as a controlling conditional, since the expansion
1936    could change in the future.  That is handled by cpp_get_token.  */
1937 static void
1938 do_if (cpp_reader *pfile)
1939 {
1940   int skip = 1;
1941
1942   if (! pfile->state.skipping)
1943     skip = _cpp_parse_expr (pfile, true) == false;
1944
1945   push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
1946 }
1947
1948 /* Flip skipping state if appropriate and continue without changing
1949    if_stack; this is so that the error message for missing #endif's
1950    etc. will point to the original #if.  */
1951 static void
1952 do_else (cpp_reader *pfile)
1953 {
1954   cpp_buffer *buffer = pfile->buffer;
1955   struct if_stack *ifs = buffer->if_stack;
1956
1957   if (ifs == NULL)
1958     cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
1959   else
1960     {
1961       if (ifs->type == T_ELSE)
1962         {
1963           cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1964           cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1965                                "the conditional began here");
1966         }
1967       ifs->type = T_ELSE;
1968
1969       /* Skip any future (erroneous) #elses or #elifs.  */
1970       pfile->state.skipping = ifs->skip_elses;
1971       ifs->skip_elses = true;
1972
1973       /* Invalidate any controlling macro.  */
1974       ifs->mi_cmacro = 0;
1975
1976       /* Only check EOL if was not originally skipping.  */
1977       if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
1978         check_eol (pfile, false);
1979     }
1980 }
1981
1982 /* Handle a #elif directive by not changing if_stack either.  See the
1983    comment above do_else.  */
1984 static void
1985 do_elif (cpp_reader *pfile)
1986 {
1987   cpp_buffer *buffer = pfile->buffer;
1988   struct if_stack *ifs = buffer->if_stack;
1989
1990   if (ifs == NULL)
1991     cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
1992   else
1993     {
1994       if (ifs->type == T_ELSE)
1995         {
1996           cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1997           cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
1998                                "the conditional began here");
1999         }
2000       ifs->type = T_ELIF;
2001
2002       if (! ifs->was_skipping)
2003         {
2004           bool value;
2005           /* The standard mandates that the expression be parsed even
2006              if we are skipping elses at this point -- the lexical
2007              restrictions on #elif only apply to skipped groups, but
2008              this group is not being skipped.  Temporarily set
2009              skipping to false to get lexer warnings.  */
2010           pfile->state.skipping = 0;
2011           value = _cpp_parse_expr (pfile, false);
2012           if (ifs->skip_elses)
2013             pfile->state.skipping = 1;
2014           else
2015             {
2016               pfile->state.skipping = ! value;
2017               ifs->skip_elses = value;
2018             }
2019         }
2020
2021       /* Invalidate any controlling macro.  */
2022       ifs->mi_cmacro = 0;
2023     }
2024 }
2025
2026 /* #endif pops the if stack and resets pfile->state.skipping.  */
2027 static void
2028 do_endif (cpp_reader *pfile)
2029 {
2030   cpp_buffer *buffer = pfile->buffer;
2031   struct if_stack *ifs = buffer->if_stack;
2032
2033   if (ifs == NULL)
2034     cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
2035   else
2036     {
2037       /* Only check EOL if was not originally skipping.  */
2038       if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
2039         check_eol (pfile, false);
2040
2041       /* If potential control macro, we go back outside again.  */
2042       if (ifs->next == 0 && ifs->mi_cmacro)
2043         {
2044           pfile->mi_valid = true;
2045           pfile->mi_cmacro = ifs->mi_cmacro;
2046         }
2047
2048       buffer->if_stack = ifs->next;
2049       pfile->state.skipping = ifs->was_skipping;
2050       obstack_free (&pfile->buffer_ob, ifs);
2051     }
2052 }
2053
2054 /* Push an if_stack entry for a preprocessor conditional, and set
2055    pfile->state.skipping to SKIP.  If TYPE indicates the conditional
2056    is #if or #ifndef, CMACRO is a potentially controlling macro, and
2057    we need to check here that we are at the top of the file.  */
2058 static void
2059 push_conditional (cpp_reader *pfile, int skip, int type,
2060                   const cpp_hashnode *cmacro)
2061 {
2062   struct if_stack *ifs;
2063   cpp_buffer *buffer = pfile->buffer;
2064
2065   ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
2066   ifs->line = pfile->directive_line;
2067   ifs->next = buffer->if_stack;
2068   ifs->skip_elses = pfile->state.skipping || !skip;
2069   ifs->was_skipping = pfile->state.skipping;
2070   ifs->type = type;
2071   /* This condition is effectively a test for top-of-file.  */
2072   if (pfile->mi_valid && pfile->mi_cmacro == 0)
2073     ifs->mi_cmacro = cmacro;
2074   else
2075     ifs->mi_cmacro = 0;
2076
2077   pfile->state.skipping = skip;
2078   buffer->if_stack = ifs;
2079 }
2080
2081 /* Read the tokens of the answer into the macro pool, in a directive
2082    of type TYPE.  Only commit the memory if we intend it as permanent
2083    storage, i.e. the #assert case.  Returns 0 on success, and sets
2084    ANSWERP to point to the answer.  PRED_LOC is the location of the
2085    predicate.  */
2086 static int
2087 parse_answer (cpp_reader *pfile, struct answer **answerp, int type,
2088               source_location pred_loc)
2089 {
2090   const cpp_token *paren;
2091   struct answer *answer;
2092   unsigned int acount;
2093
2094   /* In a conditional, it is legal to not have an open paren.  We
2095      should save the following token in this case.  */
2096   paren = cpp_get_token (pfile);
2097
2098   /* If not a paren, see if we're OK.  */
2099   if (paren->type != CPP_OPEN_PAREN)
2100     {
2101       /* In a conditional no answer is a test for any answer.  It
2102          could be followed by any token.  */
2103       if (type == T_IF)
2104         {
2105           _cpp_backup_tokens (pfile, 1);
2106           return 0;
2107         }
2108
2109       /* #unassert with no answer is valid - it removes all answers.  */
2110       if (type == T_UNASSERT && paren->type == CPP_EOF)
2111         return 0;
2112
2113       cpp_error_with_line (pfile, CPP_DL_ERROR, pred_loc, 0,
2114                            "missing '(' after predicate");
2115       return 1;
2116     }
2117
2118   for (acount = 0;; acount++)
2119     {
2120       size_t room_needed;
2121       const cpp_token *token = cpp_get_token (pfile);
2122       cpp_token *dest;
2123
2124       if (token->type == CPP_CLOSE_PAREN)
2125         break;
2126
2127       if (token->type == CPP_EOF)
2128         {
2129           cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
2130           return 1;
2131         }
2132
2133       /* struct answer includes the space for one token.  */
2134       room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
2135
2136       if (BUFF_ROOM (pfile->a_buff) < room_needed)
2137         _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
2138
2139       dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
2140       *dest = *token;
2141
2142       /* Drop whitespace at start, for answer equivalence purposes.  */
2143       if (acount == 0)
2144         dest->flags &= ~PREV_WHITE;
2145     }
2146
2147   if (acount == 0)
2148     {
2149       cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
2150       return 1;
2151     }
2152
2153   answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
2154   answer->count = acount;
2155   answer->next = NULL;
2156   *answerp = answer;
2157
2158   return 0;
2159 }
2160
2161 /* Parses an assertion directive of type TYPE, returning a pointer to
2162    the hash node of the predicate, or 0 on error.  If an answer was
2163    supplied, it is placed in ANSWERP, otherwise it is set to 0.  */
2164 static cpp_hashnode *
2165 parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
2166 {
2167   cpp_hashnode *result = 0;
2168   const cpp_token *predicate;
2169
2170   /* We don't expand predicates or answers.  */
2171   pfile->state.prevent_expansion++;
2172
2173   *answerp = 0;
2174   predicate = cpp_get_token (pfile);
2175   if (predicate->type == CPP_EOF)
2176     cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
2177   else if (predicate->type != CPP_NAME)
2178     cpp_error_with_line (pfile, CPP_DL_ERROR, predicate->src_loc, 0,
2179                          "predicate must be an identifier");
2180   else if (parse_answer (pfile, answerp, type, predicate->src_loc) == 0)
2181     {
2182       unsigned int len = NODE_LEN (predicate->val.node.node);
2183       unsigned char *sym = (unsigned char *) alloca (len + 1);
2184
2185       /* Prefix '#' to get it out of macro namespace.  */
2186       sym[0] = '#';
2187       memcpy (sym + 1, NODE_NAME (predicate->val.node.node), len);
2188       result = cpp_lookup (pfile, sym, len + 1);
2189     }
2190
2191   pfile->state.prevent_expansion--;
2192   return result;
2193 }
2194
2195 /* Returns a pointer to the pointer to CANDIDATE in the answer chain,
2196    or a pointer to NULL if the answer is not in the chain.  */
2197 static struct answer **
2198 find_answer (cpp_hashnode *node, const struct answer *candidate)
2199 {
2200   unsigned int i;
2201   struct answer **result;
2202
2203   for (result = &node->value.answers; *result; result = &(*result)->next)
2204     {
2205       struct answer *answer = *result;
2206
2207       if (answer->count == candidate->count)
2208         {
2209           for (i = 0; i < answer->count; i++)
2210             if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
2211               break;
2212
2213           if (i == answer->count)
2214             break;
2215         }
2216     }
2217
2218   return result;
2219 }
2220
2221 /* Test an assertion within a preprocessor conditional.  Returns
2222    nonzero on failure, zero on success.  On success, the result of
2223    the test is written into VALUE, otherwise the value 0.  */
2224 int
2225 _cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
2226 {
2227   struct answer *answer;
2228   cpp_hashnode *node;
2229
2230   node = parse_assertion (pfile, &answer, T_IF);
2231
2232   /* For recovery, an erroneous assertion expression is handled as a
2233      failing assertion.  */
2234   *value = 0;
2235
2236   if (node)
2237     *value = (node->type == NT_ASSERTION &&
2238               (answer == 0 || *find_answer (node, answer) != 0));
2239   else if (pfile->cur_token[-1].type == CPP_EOF)
2240     _cpp_backup_tokens (pfile, 1);
2241
2242   /* We don't commit the memory for the answer - it's temporary only.  */
2243   return node == 0;
2244 }
2245
2246 /* Handle #assert.  */
2247 static void
2248 do_assert (cpp_reader *pfile)
2249 {
2250   struct answer *new_answer;
2251   cpp_hashnode *node;
2252
2253   node = parse_assertion (pfile, &new_answer, T_ASSERT);
2254   if (node)
2255     {
2256       size_t answer_size;
2257
2258       /* Place the new answer in the answer list.  First check there
2259          is not a duplicate.  */
2260       new_answer->next = 0;
2261       if (node->type == NT_ASSERTION)
2262         {
2263           if (*find_answer (node, new_answer))
2264             {
2265               cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
2266                          NODE_NAME (node) + 1);
2267               return;
2268             }
2269           new_answer->next = node->value.answers;
2270         }
2271
2272       answer_size = sizeof (struct answer) + ((new_answer->count - 1)
2273                                               * sizeof (cpp_token));
2274       /* Commit or allocate storage for the object.  */
2275       if (pfile->hash_table->alloc_subobject)
2276         {
2277           struct answer *temp_answer = new_answer;
2278           new_answer = (struct answer *) pfile->hash_table->alloc_subobject
2279             (answer_size);
2280           memcpy (new_answer, temp_answer, answer_size);
2281         }
2282       else
2283         BUFF_FRONT (pfile->a_buff) += answer_size;
2284
2285       node->type = NT_ASSERTION;
2286       node->value.answers = new_answer;
2287       check_eol (pfile, false);
2288     }
2289 }
2290
2291 /* Handle #unassert.  */
2292 static void
2293 do_unassert (cpp_reader *pfile)
2294 {
2295   cpp_hashnode *node;
2296   struct answer *answer;
2297
2298   node = parse_assertion (pfile, &answer, T_UNASSERT);
2299   /* It isn't an error to #unassert something that isn't asserted.  */
2300   if (node && node->type == NT_ASSERTION)
2301     {
2302       if (answer)
2303         {
2304           struct answer **p = find_answer (node, answer), *temp;
2305
2306           /* Remove the answer from the list.  */
2307           temp = *p;
2308           if (temp)
2309             *p = temp->next;
2310
2311           /* Did we free the last answer?  */
2312           if (node->value.answers == 0)
2313             node->type = NT_VOID;
2314
2315           check_eol (pfile, false);
2316         }
2317       else
2318         _cpp_free_definition (node);
2319     }
2320
2321   /* We don't commit the memory for the answer - it's temporary only.  */
2322 }
2323
2324 /* These are for -D, -U, -A.  */
2325
2326 /* Process the string STR as if it appeared as the body of a #define.
2327    If STR is just an identifier, define it with value 1.
2328    If STR has anything after the identifier, then it should
2329    be identifier=definition.  */
2330 void
2331 cpp_define (cpp_reader *pfile, const char *str)
2332 {
2333   char *buf;
2334   const char *p;
2335   size_t count;
2336
2337   /* Copy the entire option so we can modify it.
2338      Change the first "=" in the string to a space.  If there is none,
2339      tack " 1" on the end.  */
2340
2341   count = strlen (str);
2342   buf = (char *) alloca (count + 3);
2343   memcpy (buf, str, count);
2344
2345   p = strchr (str, '=');
2346   if (p)
2347     buf[p - str] = ' ';
2348   else
2349     {
2350       buf[count++] = ' ';
2351       buf[count++] = '1';
2352     }
2353   buf[count] = '\n';
2354
2355   run_directive (pfile, T_DEFINE, buf, count);
2356 }
2357
2358
2359 /* Use to build macros to be run through cpp_define() as
2360    described above.
2361    Example: cpp_define_formatted (pfile, "MACRO=%d", value);  */
2362
2363 void
2364 cpp_define_formatted (cpp_reader *pfile, const char *fmt, ...)
2365 {
2366   char *ptr = NULL;
2367
2368   va_list ap;
2369   va_start (ap, fmt);
2370   vasprintf (&ptr, fmt, ap);
2371   va_end (ap);
2372
2373   cpp_define (pfile, ptr);
2374   free (ptr);
2375 }
2376
2377
2378 /* Slight variant of the above for use by initialize_builtins.  */
2379 void
2380 _cpp_define_builtin (cpp_reader *pfile, const char *str)
2381 {
2382   size_t len = strlen (str);
2383   char *buf = (char *) alloca (len + 1);
2384   memcpy (buf, str, len);
2385   buf[len] = '\n';
2386   run_directive (pfile, T_DEFINE, buf, len);
2387 }
2388
2389 /* Process MACRO as if it appeared as the body of an #undef.  */
2390 void
2391 cpp_undef (cpp_reader *pfile, const char *macro)
2392 {
2393   size_t len = strlen (macro);
2394   char *buf = (char *) alloca (len + 1);
2395   memcpy (buf, macro, len);
2396   buf[len] = '\n';
2397   run_directive (pfile, T_UNDEF, buf, len);
2398 }
2399
2400 /* Replace a previous definition DEF of the macro STR.  If DEF is NULL,
2401    or first element is zero, then the macro should be undefined.  */
2402 static void
2403 cpp_pop_definition (cpp_reader *pfile, struct def_pragma_macro *c)
2404 {
2405   cpp_hashnode *node = _cpp_lex_identifier (pfile, c->name);
2406   if (node == NULL)
2407     return;
2408
2409   if (pfile->cb.before_define)
2410     pfile->cb.before_define (pfile);
2411
2412   if (node->type == NT_MACRO)
2413     {
2414       if (pfile->cb.undef)
2415         pfile->cb.undef (pfile, pfile->directive_line, node);
2416       if (CPP_OPTION (pfile, warn_unused_macros))
2417         _cpp_warn_if_unused_macro (pfile, node, NULL);
2418     }
2419   if (node->type != NT_VOID)
2420     _cpp_free_definition (node);
2421
2422   if (c->is_undef)
2423     return;
2424   {
2425     size_t namelen;
2426     const uchar *dn;
2427     cpp_hashnode *h = NULL;
2428     cpp_buffer *nbuf;
2429
2430     namelen = ustrcspn (c->definition, "( \n");
2431     h = cpp_lookup (pfile, c->definition, namelen);
2432     dn = c->definition + namelen;
2433
2434     h->type = NT_VOID;
2435     h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED|NODE_USED);
2436     nbuf = cpp_push_buffer (pfile, dn, ustrchr (dn, '\n') - dn, true);
2437     if (nbuf != NULL)
2438       {
2439         _cpp_clean_line (pfile);
2440         nbuf->sysp = 1;
2441         if (!_cpp_create_definition (pfile, h))
2442           abort ();
2443         _cpp_pop_buffer (pfile);
2444       }
2445     else
2446       abort ();
2447     h->value.macro->line = c->line;
2448     h->value.macro->syshdr = c->syshdr;
2449     h->value.macro->used = c->used;
2450   }
2451 }
2452
2453 /* Process the string STR as if it appeared as the body of a #assert.  */
2454 void
2455 cpp_assert (cpp_reader *pfile, const char *str)
2456 {
2457   handle_assertion (pfile, str, T_ASSERT);
2458 }
2459
2460 /* Process STR as if it appeared as the body of an #unassert.  */
2461 void
2462 cpp_unassert (cpp_reader *pfile, const char *str)
2463 {
2464   handle_assertion (pfile, str, T_UNASSERT);
2465 }
2466
2467 /* Common code for cpp_assert (-A) and cpp_unassert (-A-).  */
2468 static void
2469 handle_assertion (cpp_reader *pfile, const char *str, int type)
2470 {
2471   size_t count = strlen (str);
2472   const char *p = strchr (str, '=');
2473
2474   /* Copy the entire option so we can modify it.  Change the first
2475      "=" in the string to a '(', and tack a ')' on the end.  */
2476   char *buf = (char *) alloca (count + 2);
2477
2478   memcpy (buf, str, count);
2479   if (p)
2480     {
2481       buf[p - str] = '(';
2482       buf[count++] = ')';
2483     }
2484   buf[count] = '\n';
2485   str = buf;
2486
2487   run_directive (pfile, type, str, count);
2488 }
2489
2490 /* The options structure.  */
2491 cpp_options *
2492 cpp_get_options (cpp_reader *pfile)
2493 {
2494   return &pfile->opts;
2495 }
2496
2497 /* The callbacks structure.  */
2498 cpp_callbacks *
2499 cpp_get_callbacks (cpp_reader *pfile)
2500 {
2501   return &pfile->cb;
2502 }
2503
2504 /* Copy the given callbacks structure to our own.  */
2505 void
2506 cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
2507 {
2508   pfile->cb = *cb;
2509 }
2510
2511 /* The dependencies structure.  (Creates one if it hasn't already been.)  */
2512 struct deps *
2513 cpp_get_deps (cpp_reader *pfile)
2514 {
2515   if (!pfile->deps)
2516     pfile->deps = deps_init ();
2517   return pfile->deps;
2518 }
2519
2520 /* Push a new buffer on the buffer stack.  Returns the new buffer; it
2521    doesn't fail.  It does not generate a file change call back; that
2522    is the responsibility of the caller.  */
2523 cpp_buffer *
2524 cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
2525                  int from_stage3)
2526 {
2527   cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
2528
2529   /* Clears, amongst other things, if_stack and mi_cmacro.  */
2530   memset (new_buffer, 0, sizeof (cpp_buffer));
2531
2532   new_buffer->next_line = new_buffer->buf = buffer;
2533   new_buffer->rlimit = buffer + len;
2534   new_buffer->from_stage3 = from_stage3;
2535   new_buffer->prev = pfile->buffer;
2536   new_buffer->need_line = true;
2537
2538   pfile->buffer = new_buffer;
2539
2540   return new_buffer;
2541 }
2542
2543 /* Pops a single buffer, with a file change call-back if appropriate.
2544    Then pushes the next -include file, if any remain.  */
2545 void
2546 _cpp_pop_buffer (cpp_reader *pfile)
2547 {
2548   cpp_buffer *buffer = pfile->buffer;
2549   struct _cpp_file *inc = buffer->file;
2550   struct if_stack *ifs;
2551
2552   /* Walk back up the conditional stack till we reach its level at
2553      entry to this file, issuing error messages.  */
2554   for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
2555     cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
2556                          "unterminated #%s", dtable[ifs->type].name);
2557
2558   /* In case of a missing #endif.  */
2559   pfile->state.skipping = 0;
2560
2561   /* _cpp_do_file_change expects pfile->buffer to be the new one.  */
2562   pfile->buffer = buffer->prev;
2563
2564   free (buffer->notes);
2565
2566   /* Free the buffer object now; we may want to push a new buffer
2567      in _cpp_push_next_include_file.  */
2568   obstack_free (&pfile->buffer_ob, buffer);
2569
2570   if (inc)
2571     {
2572       _cpp_pop_file_buffer (pfile, inc);
2573
2574       _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
2575     }
2576 }
2577
2578 /* Enter all recognized directives in the hash table.  */
2579 void
2580 _cpp_init_directives (cpp_reader *pfile)
2581 {
2582   unsigned int i;
2583   cpp_hashnode *node;
2584
2585   for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
2586     {
2587       node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
2588       node->is_directive = 1;
2589       node->directive_index = i;
2590     }
2591 }