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