Imported Upstream version 2.9.0
[debian/cc1111] / support / cpp / libcpp / macro.c
1 /* Part of CPP library.  (Macro and #define handling.)
2    Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005,
4    2006, 2007, 2008 Free Software Foundation, Inc.
5    Written by Per Bothner, 1994.
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 2, 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; if not, write to the Free Software
21 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23  In other words, you are welcome to use, share and improve this program.
24  You are forbidden to forbid anyone else to use, share and improve
25  what you give them.   Help stamp out software-hoarding!  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "cpplib.h"
30 #include "internal.h"
31
32 typedef struct macro_arg macro_arg;
33 struct macro_arg
34 {
35   const cpp_token **first;      /* First token in unexpanded argument.  */
36   const cpp_token **expanded;   /* Macro-expanded argument.  */
37   const cpp_token *stringified; /* Stringified argument.  */
38   unsigned int count;           /* # of tokens in argument.  */
39   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
40 };
41
42 /* Macro expansion.  */
43
44 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
45                                 const cpp_token *);
46 static int builtin_macro (cpp_reader *, cpp_hashnode *);
47 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48                                  const cpp_token **, unsigned int);
49 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
50                                 _cpp_buff **);
51 static cpp_context *next_context (cpp_reader *);
52 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
53 static void expand_arg (cpp_reader *, macro_arg *);
54 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
55 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
56 static void paste_all_tokens (cpp_reader *, const cpp_token *);
57 static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
58 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
59                           macro_arg *);
60 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
61                                         _cpp_buff **);
62 static bool create_iso_definition (cpp_reader *, cpp_macro *);
63
64 /* #define directive parsing and handling.  */
65
66 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
67 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
68 static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
69                                   const cpp_macro *);
70 static bool parse_params (cpp_reader *, cpp_macro *);
71 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
72                                         const cpp_string *);
73
74 /* Emits a warning if NODE is a macro defined in the main file that
75    has not been used.  */
76 int
77 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
78                            void *v ATTRIBUTE_UNUSED)
79 {
80   if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
81     {
82       cpp_macro *macro = node->value.macro;
83
84       if (!macro->used
85           && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
86         cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
87                              "macro \"%s\" is not used", NODE_NAME (node));
88     }
89
90   return 1;
91 }
92
93 /* Allocates and returns a CPP_STRING token, containing TEXT of length
94    LEN, after null-terminating it.  TEXT must be in permanent storage.  */
95 static const cpp_token *
96 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
97 {
98   cpp_token *token = _cpp_temp_token (pfile);
99
100   text[len] = '\0';
101   token->type = CPP_STRING;
102   token->val.str.len = len;
103   token->val.str.text = text;
104   token->flags = 0;
105   return token;
106 }
107
108 static const char * const monthnames[] =
109 {
110   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
111   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
112 };
113
114 /* Helper function for builtin_macro.  Returns the text generated by
115    a builtin macro. */
116 const uchar *
117 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
118 {
119   const struct line_map *map;
120   const uchar *result = NULL;
121   unsigned int number = 1;
122
123   switch (node->value.builtin)
124     {
125     default:
126       cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
127                  NODE_NAME (node));
128       break;
129
130     case BT_TIMESTAMP:
131       {
132         cpp_buffer *pbuffer = cpp_get_buffer (pfile);
133         if (pbuffer->timestamp == NULL)
134           {
135             /* Initialize timestamp value of the assotiated file. */
136             struct _cpp_file *file = cpp_get_file (pbuffer);
137             if (file)
138               {
139                 /* Generate __TIMESTAMP__ string, that represents
140                    the date and time of the last modification
141                    of the current source file. The string constant
142                    looks like "Sun Sep 16 01:03:52 1973".  */
143                 struct tm *tb = NULL;
144                 struct stat *st = _cpp_get_file_stat (file);
145                 if (st)
146                   tb = localtime (&st->st_mtime);
147                 if (tb)
148                   {
149                     char *str = asctime (tb);
150                     size_t len = strlen (str);
151                     unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
152                     buf[0] = '"';
153                     strcpy ((char *) buf + 1, str);
154                     buf[len] = '"';
155                     pbuffer->timestamp = buf;
156                   }
157                 else
158                   {
159                     cpp_errno (pfile, CPP_DL_WARNING,
160                         "could not determine file timestamp");
161                     pbuffer->timestamp = U"\"??? ??? ?? ??:??:?? ????\"";
162                   }
163               }
164           }
165         result = pbuffer->timestamp;
166       }
167       break;
168     case BT_FILE:
169     case BT_BASE_FILE:
170       {
171         unsigned int len;
172         const char *name;
173         uchar *buf;
174         map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
175
176         if (node->value.builtin == BT_BASE_FILE)
177           while (! MAIN_FILE_P (map))
178             map = INCLUDED_FROM (pfile->line_table, map);
179
180         name = map->to_file;
181         len = strlen (name);
182         buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
183         result = buf;
184         *buf = '"';
185         buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
186         *buf++ = '"';
187         *buf = '\0';
188       }
189       break;
190
191     case BT_INCLUDE_LEVEL:
192       /* The line map depth counts the primary source as level 1, but
193          historically __INCLUDE_DEPTH__ has called the primary source
194          level 0.  */
195       number = pfile->line_table->depth - 1;
196       break;
197
198     case BT_SPECLINE:
199       map = &pfile->line_table->maps[pfile->line_table->used-1];
200       /* If __LINE__ is embedded in a macro, it must expand to the
201          line of the macro's invocation, not its definition.
202          Otherwise things like assert() will not work properly.  */
203       if (CPP_OPTION (pfile, traditional))
204         number = pfile->line_table->highest_line;
205       else
206         number = pfile->cur_token[-1].src_loc;
207       number = SOURCE_LINE (map, number);
208       break;
209
210       /* __STDC__ has the value 1 under normal circumstances.
211          However, if (a) we are in a system header, (b) the option
212          stdc_0_in_system_headers is true (set by target config), and
213          (c) we are not in strictly conforming mode, then it has the
214          value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
215     case BT_STDC:
216       if (cpp_in_system_header (pfile))
217         number = 0;
218       else
219         number = 1;
220       break;
221
222     case BT_DATE:
223     case BT_TIME:
224       if (pfile->date == NULL)
225         {
226           /* Allocate __DATE__ and __TIME__ strings from permanent
227              storage.  We only do this once, and don't generate them
228              at init time, because time() and localtime() are very
229              slow on some systems.  */
230           time_t tt;
231           struct tm *tb = NULL;
232
233           /* (time_t) -1 is a legitimate value for "number of seconds
234              since the Epoch", so we have to do a little dance to
235              distinguish that from a genuine error.  */
236           errno = 0;
237           tt = time(NULL);
238           if (tt != (time_t)-1 || errno == 0)
239             tb = localtime (&tt);
240
241           if (tb)
242             {
243               pfile->date = _cpp_unaligned_alloc (pfile,
244                                                   sizeof ("\"Oct 11 1347\""));
245               sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
246                        monthnames[tb->tm_mon], tb->tm_mday,
247                        tb->tm_year + 1900);
248
249               pfile->time = _cpp_unaligned_alloc (pfile,
250                                                   sizeof ("\"12:34:56\""));
251               sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
252                        tb->tm_hour, tb->tm_min, tb->tm_sec);
253             }
254           else
255             {
256               cpp_errno (pfile, CPP_DL_WARNING,
257                          "could not determine date and time");
258
259               pfile->date = U"\"??? ?? ????\"";
260               pfile->time = U"\"??:??:??\"";
261             }
262         }
263
264       if (node->value.builtin == BT_DATE)
265         result = pfile->date;
266       else
267         result = pfile->time;
268       break;
269
270     case BT_COUNTER:
271       if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
272         cpp_error (pfile, CPP_DL_ERROR,
273             "__COUNTER__ expanded inside directive with -fdirectives-only");
274       number = pfile->counter++;
275       break;
276     }
277
278   if (result == NULL)
279     {
280       /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
281       result = _cpp_unaligned_alloc (pfile, 21);
282       sprintf ((char *) result, "%u", number);
283     }
284
285   return result;
286 }
287
288 /* Convert builtin macros like __FILE__ to a token and push it on the
289    context stack.  Also handles _Pragma, for which a new token may not
290    be created.  Returns 1 if it generates a new token context, 0 to
291    return the token to the caller.  */
292 static int
293 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
294 {
295   const uchar *buf;
296   size_t len;
297   char *nbuf;
298
299   if (node->value.builtin == BT_PRAGMA)
300     {
301       /* Don't interpret _Pragma within directives.  The standard is
302          not clear on this, but to me this makes most sense.  */
303       if (pfile->state.in_directive)
304         return 0;
305
306       return _cpp_do__Pragma (pfile);
307     }
308
309   buf = _cpp_builtin_macro_text (pfile, node);
310   len = ustrlen (buf);
311   nbuf = (char *) alloca (len + 1);
312   memcpy (nbuf, buf, len);
313   nbuf[len]='\n';
314
315   cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
316   _cpp_clean_line (pfile);
317
318   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
319   pfile->cur_token = _cpp_temp_token (pfile);
320   _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
321   if (pfile->buffer->cur != pfile->buffer->rlimit)
322     cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
323                NODE_NAME (node));
324   _cpp_pop_buffer (pfile);
325
326   return 1;
327 }
328
329 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
330    backslashes and double quotes. DEST must be of sufficient size.
331    Returns a pointer to the end of the string.  */
332 uchar *
333 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
334 {
335   while (len--)
336     {
337       uchar c = *src++;
338
339       if (c == '\\' || c == '"')
340         {
341           *dest++ = '\\';
342           *dest++ = c;
343         }
344       else
345           *dest++ = c;
346     }
347
348   return dest;
349 }
350
351 /* Convert a token sequence ARG to a single string token according to
352    the rules of the ISO C #-operator.  */
353 static const cpp_token *
354 stringify_arg (cpp_reader *pfile, macro_arg *arg)
355 {
356   unsigned char *dest;
357   unsigned int i, escape_it, backslash_count = 0;
358   const cpp_token *source = NULL;
359   size_t len;
360
361   if (BUFF_ROOM (pfile->u_buff) < 3)
362     _cpp_extend_buff (pfile, &pfile->u_buff, 3);
363   dest = BUFF_FRONT (pfile->u_buff);
364   *dest++ = '"';
365
366   /* Loop, reading in the argument's tokens.  */
367   for (i = 0; i < arg->count; i++)
368     {
369       const cpp_token *token = arg->first[i];
370
371       if (token->type == CPP_PADDING)
372         {
373           if (source == NULL)
374             source = token->val.source;
375           continue;
376         }
377
378       escape_it = (token->type == CPP_STRING || token->type == CPP_WSTRING
379                    || token->type == CPP_CHAR || token->type == CPP_WCHAR);
380
381       /* Room for each char being written in octal, initial space and
382          final quote and NUL.  */
383       len = cpp_token_len (token);
384       if (escape_it)
385         len *= 4;
386       len += 3;
387
388       if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
389         {
390           size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
391           _cpp_extend_buff (pfile, &pfile->u_buff, len);
392           dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
393         }
394
395       /* Leading white space?  */
396       if (dest - 1 != BUFF_FRONT (pfile->u_buff))
397         {
398           if (source == NULL)
399             source = token;
400           if (source->flags & PREV_WHITE)
401             *dest++ = ' ';
402         }
403       source = NULL;
404
405       if (escape_it)
406         {
407           _cpp_buff *buff = _cpp_get_buff (pfile, len);
408           unsigned char *buf = BUFF_FRONT (buff);
409           len = cpp_spell_token (pfile, token, buf, true) - buf;
410           dest = cpp_quote_string (dest, buf, len);
411           _cpp_release_buff (pfile, buff);
412         }
413       else
414         dest = cpp_spell_token (pfile, token, dest, true);
415
416       if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
417         backslash_count++;
418       else
419         backslash_count = 0;
420     }
421
422   /* Ignore the final \ of invalid string literals.  */
423   if (backslash_count & 1)
424     {
425       cpp_error (pfile, CPP_DL_WARNING,
426                  "invalid string literal, ignoring final '\\'");
427       dest--;
428     }
429
430   /* Commit the memory, including NUL, and return the token.  */
431   *dest++ = '"';
432   len = dest - BUFF_FRONT (pfile->u_buff);
433   BUFF_FRONT (pfile->u_buff) = dest + 1;
434   return new_string_token (pfile, dest - len, len);
435 }
436
437 /* Try to paste two tokens.  On success, return nonzero.  In any
438    case, PLHS is updated to point to the pasted token, which is
439    guaranteed to not have the PASTE_LEFT flag set.  */
440 static bool
441 paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
442 {
443   unsigned char *buf, *end, *lhsend;
444   cpp_token *lhs;
445   unsigned int len;
446
447   len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
448   buf = (unsigned char *) alloca (len);
449   end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
450
451   /* Avoid comment headers, since they are still processed in stage 3.
452      It is simpler to insert a space here, rather than modifying the
453      lexer to ignore comments in some circumstances.  Simply returning
454      false doesn't work, since we want to clear the PASTE_LEFT flag.  */
455   if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
456     *end++ = ' ';
457   /* In one obscure case we might see padding here.  */
458   if (rhs->type != CPP_PADDING)
459     end = cpp_spell_token (pfile, rhs, end, false);
460   *end = '\n';
461
462   cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
463   _cpp_clean_line (pfile);
464
465   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
466   pfile->cur_token = _cpp_temp_token (pfile);
467   lhs = _cpp_lex_direct (pfile);
468   if (pfile->buffer->cur != pfile->buffer->rlimit)
469     {
470       source_location saved_loc = lhs->src_loc;
471
472       _cpp_pop_buffer (pfile);
473       _cpp_backup_tokens (pfile, 1);
474       *lhsend = '\0';
475
476       /* We have to remove the PASTE_LEFT flag from the old lhs, but
477          we want to keep the new location.  */
478       *lhs = **plhs;
479       *plhs = lhs;
480       lhs->src_loc = saved_loc;
481       lhs->flags &= ~PASTE_LEFT;
482
483       /* Mandatory error for all apart from assembler.  */
484       if (CPP_OPTION (pfile, lang) != CLK_ASM)
485         cpp_error (pfile, CPP_DL_ERROR,
486          "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
487                    buf, cpp_token_as_text (pfile, rhs));
488       return false;
489     }
490
491   *plhs = lhs;
492   _cpp_pop_buffer (pfile);
493   return true;
494 }
495
496 /* Handles an arbitrarily long sequence of ## operators, with initial
497    operand LHS.  This implementation is left-associative,
498    non-recursive, and finishes a paste before handling succeeding
499    ones.  If a paste fails, we back up to the RHS of the failing ##
500    operator before pushing the context containing the result of prior
501    successful pastes, with the effect that the RHS appears in the
502    output stream after the pasted LHS normally.  */
503 static void
504 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
505 {
506   const cpp_token *rhs;
507   cpp_context *context = pfile->context;
508
509   do
510     {
511       /* Take the token directly from the current context.  We can do
512          this, because we are in the replacement list of either an
513          object-like macro, or a function-like macro with arguments
514          inserted.  In either case, the constraints to #define
515          guarantee we have at least one more token.  */
516       if (context->direct_p)
517         rhs = FIRST (context).token++;
518       else
519         rhs = *FIRST (context).ptoken++;
520
521       if (rhs->type == CPP_PADDING)
522         {
523           if (rhs->flags & PASTE_LEFT)
524             abort ();
525         }
526       if (!paste_tokens (pfile, &lhs, rhs))
527         break;
528     }
529   while (rhs->flags & PASTE_LEFT);
530
531   /* Put the resulting token in its own context.  */
532   _cpp_push_token_context (pfile, NULL, lhs, 1);
533 }
534
535 /* Returns TRUE if the number of arguments ARGC supplied in an
536    invocation of the MACRO referenced by NODE is valid.  An empty
537    invocation to a macro with no parameters should pass ARGC as zero.
538
539    Note that MACRO cannot necessarily be deduced from NODE, in case
540    NODE was redefined whilst collecting arguments.  */
541 bool
542 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
543 {
544   if (argc == macro->paramc)
545     return true;
546
547   if (argc < macro->paramc)
548     {
549       /* As an extension, a rest argument is allowed to not appear in
550          the invocation at all.
551          e.g. #define debug(format, args...) something
552          debug("string");
553
554          This is exactly the same as if there had been an empty rest
555          argument - debug("string", ).  */
556
557       if (argc + 1 == macro->paramc && macro->variadic)
558         {
559           if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
560             cpp_error (pfile, CPP_DL_PEDWARN,
561                        "ISO C99 requires rest arguments to be used");
562           return true;
563         }
564
565       cpp_error (pfile, CPP_DL_ERROR,
566                  "macro \"%s\" requires %u arguments, but only %u given",
567                  NODE_NAME (node), macro->paramc, argc);
568     }
569   else
570     cpp_error (pfile, CPP_DL_ERROR,
571                "macro \"%s\" passed %u arguments, but takes just %u",
572                NODE_NAME (node), argc, macro->paramc);
573
574   return false;
575 }
576
577 /* Reads and returns the arguments to a function-like macro
578    invocation.  Assumes the opening parenthesis has been processed.
579    If there is an error, emits an appropriate diagnostic and returns
580    NULL.  Each argument is terminated by a CPP_EOF token, for the
581    future benefit of expand_arg().  If there are any deferred
582    #pragma directives among macro arguments, store pointers to the
583    CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.  */
584 static _cpp_buff *
585 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
586               _cpp_buff **pragma_buff)
587 {
588   _cpp_buff *buff, *base_buff;
589   cpp_macro *macro;
590   macro_arg *args, *arg;
591   const cpp_token *token;
592   unsigned int argc;
593
594   macro = node->value.macro;
595   if (macro->paramc)
596     argc = macro->paramc;
597   else
598     argc = 1;
599   buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
600                                        + sizeof (macro_arg)));
601   base_buff = buff;
602   args = (macro_arg *) buff->base;
603   memset (args, 0, argc * sizeof (macro_arg));
604   buff->cur = (unsigned char *) &args[argc];
605   arg = args, argc = 0;
606
607   /* Collect the tokens making up each argument.  We don't yet know
608      how many arguments have been supplied, whether too many or too
609      few.  Hence the slightly bizarre usage of "argc" and "arg".  */
610   do
611     {
612       unsigned int paren_depth = 0;
613       unsigned int ntokens = 0;
614
615       argc++;
616       arg->first = (const cpp_token **) buff->cur;
617
618       for (;;)
619         {
620           /* Require space for 2 new tokens (including a CPP_EOF).  */
621           if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
622             {
623               buff = _cpp_append_extend_buff (pfile, buff,
624                                               1000 * sizeof (cpp_token *));
625               arg->first = (const cpp_token **) buff->cur;
626             }
627
628           token = cpp_get_token (pfile);
629
630           if (token->type == CPP_PADDING)
631             {
632               /* Drop leading padding.  */
633               if (ntokens == 0)
634                 continue;
635             }
636           else if (token->type == CPP_OPEN_PAREN)
637             paren_depth++;
638           else if (token->type == CPP_CLOSE_PAREN)
639             {
640               if (paren_depth-- == 0)
641                 break;
642             }
643           else if (token->type == CPP_COMMA)
644             {
645               /* A comma does not terminate an argument within
646                  parentheses or as part of a variable argument.  */
647               if (paren_depth == 0
648                   && ! (macro->variadic && argc == macro->paramc))
649                 break;
650             }
651           else if (token->type == CPP_EOF
652                    || (token->type == CPP_HASH && token->flags & BOL))
653             break;
654           else if (token->type == CPP_PRAGMA)
655             {
656               cpp_token *newtok = _cpp_temp_token (pfile);
657
658               /* CPP_PRAGMA token lives in directive_result, which will
659                  be overwritten on the next directive.  */
660               *newtok = *token;
661               token = newtok;
662               do
663                 {
664                   if (*pragma_buff == NULL
665                       || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
666                     {
667                       _cpp_buff *next;
668                       if (*pragma_buff == NULL)
669                         *pragma_buff
670                           = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
671                       else
672                         {
673                           next = *pragma_buff;
674                           *pragma_buff
675                             = _cpp_get_buff (pfile,
676                                              (BUFF_FRONT (*pragma_buff)
677                                               - (*pragma_buff)->base) * 2);
678                           (*pragma_buff)->next = next;
679                         }
680                     }
681                   *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
682                   BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
683                   if (token->type == CPP_PRAGMA_EOL)
684                     break;
685                   token = cpp_get_token (pfile);
686                 }
687               while (token->type != CPP_EOF);
688
689               /* In deferred pragmas parsing_args and prevent_expansion
690                  had been changed, reset it.  */
691               pfile->state.parsing_args = 2;
692               pfile->state.prevent_expansion = 1;
693
694               if (token->type == CPP_EOF)
695                 break;
696               else
697                 continue;
698             }
699
700           arg->first[ntokens++] = token;
701         }
702
703       /* Drop trailing padding.  */
704       while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
705         ntokens--;
706
707       arg->count = ntokens;
708       arg->first[ntokens] = &pfile->eof;
709
710       /* Terminate the argument.  Excess arguments loop back and
711          overwrite the final legitimate argument, before failing.  */
712       if (argc <= macro->paramc)
713         {
714           buff->cur = (unsigned char *) &arg->first[ntokens + 1];
715           if (argc != macro->paramc)
716             arg++;
717         }
718     }
719   while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
720
721   if (token->type == CPP_EOF)
722     {
723       /* We still need the CPP_EOF to end directives, and to end
724          pre-expansion of a macro argument.  Step back is not
725          unconditional, since we don't want to return a CPP_EOF to our
726          callers at the end of an -include-d file.  */
727       if (pfile->context->prev || pfile->state.in_directive)
728         _cpp_backup_tokens (pfile, 1);
729       cpp_error (pfile, CPP_DL_ERROR,
730                  "unterminated argument list invoking macro \"%s\"",
731                  NODE_NAME (node));
732     }
733   else
734     {
735       /* A single empty argument is counted as no argument.  */
736       if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
737         argc = 0;
738       if (_cpp_arguments_ok (pfile, macro, node, argc))
739         {
740           /* GCC has special semantics for , ## b where b is a varargs
741              parameter: we remove the comma if b was omitted entirely.
742              If b was merely an empty argument, the comma is retained.
743              If the macro takes just one (varargs) parameter, then we
744              retain the comma only if we are standards conforming.
745
746              If FIRST is NULL replace_args () swallows the comma.  */
747           if (macro->variadic && (argc < macro->paramc
748                                   || (argc == 1 && args[0].count == 0
749                                       && !CPP_OPTION (pfile, std))))
750             args[macro->paramc - 1].first = NULL;
751           return base_buff;
752         }
753     }
754
755   /* An error occurred.  */
756   _cpp_release_buff (pfile, base_buff);
757   return NULL;
758 }
759
760 /* Search for an opening parenthesis to the macro of NODE, in such a
761    way that, if none is found, we don't lose the information in any
762    intervening padding tokens.  If we find the parenthesis, collect
763    the arguments and return the buffer containing them.  PRAGMA_BUFF
764    argument is the same as in collect_args.  */
765 static _cpp_buff *
766 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
767                       _cpp_buff **pragma_buff)
768 {
769   const cpp_token *token, *padding = NULL;
770
771   for (;;)
772     {
773       token = cpp_get_token (pfile);
774       if (token->type != CPP_PADDING)
775         break;
776       if (padding == NULL
777           || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
778         padding = token;
779     }
780
781   if (token->type == CPP_OPEN_PAREN)
782     {
783       pfile->state.parsing_args = 2;
784       return collect_args (pfile, node, pragma_buff);
785     }
786
787   /* CPP_EOF can be the end of macro arguments, or the end of the
788      file.  We mustn't back up over the latter.  Ugh.  */
789   if (token->type != CPP_EOF || token == &pfile->eof)
790     {
791       /* Back up.  We may have skipped padding, in which case backing
792          up more than one token when expanding macros is in general
793          too difficult.  We re-insert it in its own context.  */
794       _cpp_backup_tokens (pfile, 1);
795       if (padding)
796         _cpp_push_token_context (pfile, NULL, padding, 1);
797     }
798
799   return NULL;
800 }
801
802 /* Push the context of a macro with hash entry NODE onto the context
803    stack.  If we can successfully expand the macro, we push a context
804    containing its yet-to-be-rescanned replacement list and return one.
805    If there were additionally any unexpanded deferred #pragma directives
806    among macro arguments, push another context containing the
807    pragma tokens before the yet-to-be-rescanned replacement list
808    and return two.  Otherwise, we don't push a context and return zero.  */
809 static int
810 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
811                      const cpp_token *result)
812 {
813   /* The presence of a macro invalidates a file's controlling macro.  */
814   pfile->mi_valid = false;
815
816   pfile->state.angled_headers = false;
817
818   /* Handle standard macros.  */
819   if (! (node->flags & NODE_BUILTIN))
820     {
821       cpp_macro *macro = node->value.macro;
822       _cpp_buff *pragma_buff = NULL;
823
824       if (macro->fun_like)
825         {
826           _cpp_buff *buff;
827
828           pfile->state.prevent_expansion++;
829           pfile->keep_tokens++;
830           pfile->state.parsing_args = 1;
831           buff = funlike_invocation_p (pfile, node, &pragma_buff);
832           pfile->state.parsing_args = 0;
833           pfile->keep_tokens--;
834           pfile->state.prevent_expansion--;
835
836           if (buff == NULL)
837             {
838               if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
839                 cpp_error (pfile, CPP_DL_WARNING,
840  "function-like macro \"%s\" must be used with arguments in traditional C",
841                            NODE_NAME (node));
842
843               if (pragma_buff)
844                 _cpp_release_buff (pfile, pragma_buff);
845
846               return 0;
847             }
848
849           if (macro->paramc > 0)
850             replace_args (pfile, node, macro, (macro_arg *) buff->base);
851           _cpp_release_buff (pfile, buff);
852         }
853
854       /* Disable the macro within its expansion.  */
855       node->flags |= NODE_DISABLED;
856
857       macro->used = 1;
858
859       if (macro->paramc == 0)
860         _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count);
861
862       if (pragma_buff)
863         {
864           if (!pfile->state.in_directive)
865             _cpp_push_token_context (pfile, NULL,
866                                      padding_token (pfile, result), 1);
867           do
868             {
869               _cpp_buff *tail = pragma_buff->next;
870               pragma_buff->next = NULL;
871               push_ptoken_context (pfile, NULL, pragma_buff,
872                                    (const cpp_token **) pragma_buff->base,
873                                    ((const cpp_token **) BUFF_FRONT (pragma_buff)
874                                     - (const cpp_token **) pragma_buff->base));
875               pragma_buff = tail;
876             }
877           while (pragma_buff != NULL);
878           return 2;
879         }
880
881       return 1;
882     }
883
884   /* Handle built-in macros and the _Pragma operator.  */
885   return builtin_macro (pfile, node);
886 }
887
888 /* Replace the parameters in a function-like macro of NODE with the
889    actual ARGS, and place the result in a newly pushed token context.
890    Expand each argument before replacing, unless it is operated upon
891    by the # or ## operators.  */
892 static void
893 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
894 {
895   unsigned int i, total;
896   const cpp_token *src, *limit;
897   const cpp_token **dest, **first;
898   macro_arg *arg;
899   _cpp_buff *buff;
900
901   /* First, fully macro-expand arguments, calculating the number of
902      tokens in the final expansion as we go.  The ordering of the if
903      statements below is subtle; we must handle stringification before
904      pasting.  */
905   total = macro->count;
906   limit = macro->exp.tokens + macro->count;
907
908   for (src = macro->exp.tokens; src < limit; src++)
909     if (src->type == CPP_MACRO_ARG)
910       {
911         /* Leading and trailing padding tokens.  */
912         total += 2;
913
914         /* We have an argument.  If it is not being stringified or
915            pasted it is macro-replaced before insertion.  */
916         arg = &args[src->val.arg_no - 1];
917
918         if (src->flags & STRINGIFY_ARG)
919           {
920             if (!arg->stringified)
921               arg->stringified = stringify_arg (pfile, arg);
922           }
923         else if ((src->flags & PASTE_LEFT)
924                  || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
925           total += arg->count - 1;
926         else
927           {
928             if (!arg->expanded)
929               expand_arg (pfile, arg);
930             total += arg->expanded_count - 1;
931           }
932       }
933
934   /* Now allocate space for the expansion, copy the tokens and replace
935      the arguments.  */
936   buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
937   first = (const cpp_token **) buff->base;
938   dest = first;
939
940   for (src = macro->exp.tokens; src < limit; src++)
941     {
942       unsigned int count;
943       const cpp_token **from, **paste_flag;
944
945       if (src->type != CPP_MACRO_ARG)
946         {
947           *dest++ = src;
948           continue;
949         }
950
951       paste_flag = 0;
952       arg = &args[src->val.arg_no - 1];
953       if (src->flags & STRINGIFY_ARG)
954         count = 1, from = &arg->stringified;
955       else if (src->flags & PASTE_LEFT)
956         count = arg->count, from = arg->first;
957       else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
958         {
959           count = arg->count, from = arg->first;
960           if (dest != first)
961             {
962               if (dest[-1]->type == CPP_COMMA
963                   && macro->variadic
964                   && src->val.arg_no == macro->paramc)
965                 {
966                   /* Swallow a pasted comma if from == NULL, otherwise
967                      drop the paste flag.  */
968                   if (from == NULL)
969                     dest--;
970                   else
971                     paste_flag = dest - 1;
972                 }
973               /* Remove the paste flag if the RHS is a placemarker.  */
974               else if (count == 0)
975                 paste_flag = dest - 1;
976             }
977         }
978       else
979         count = arg->expanded_count, from = arg->expanded;
980
981       /* Padding on the left of an argument (unless RHS of ##).  */
982       if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
983           && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
984         *dest++ = padding_token (pfile, src);
985
986       if (count)
987         {
988           memcpy (dest, from, count * sizeof (cpp_token *));
989           dest += count;
990
991           /* With a non-empty argument on the LHS of ##, the last
992              token should be flagged PASTE_LEFT.  */
993           if (src->flags & PASTE_LEFT)
994             paste_flag = dest - 1;
995         }
996
997       /* Avoid paste on RHS (even case count == 0).  */
998       if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
999         *dest++ = &pfile->avoid_paste;
1000
1001       /* Add a new paste flag, or remove an unwanted one.  */
1002       if (paste_flag)
1003         {
1004           cpp_token *token = _cpp_temp_token (pfile);
1005           token->type = (*paste_flag)->type;
1006           token->val = (*paste_flag)->val;
1007           if (src->flags & PASTE_LEFT)
1008             token->flags = (*paste_flag)->flags | PASTE_LEFT;
1009           else
1010             token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1011           *paste_flag = token;
1012         }
1013     }
1014
1015   /* Free the expanded arguments.  */
1016   for (i = 0; i < macro->paramc; i++)
1017     if (args[i].expanded)
1018       free (args[i].expanded);
1019
1020   push_ptoken_context (pfile, node, buff, first, dest - first);
1021 }
1022
1023 /* Return a special padding token, with padding inherited from SOURCE.  */
1024 static const cpp_token *
1025 padding_token (cpp_reader *pfile, const cpp_token *source)
1026 {
1027   cpp_token *result = _cpp_temp_token (pfile);
1028
1029   result->type = CPP_PADDING;
1030
1031   /* Data in GCed data structures cannot be made const so far, so we
1032      need a cast here.  */
1033   result->val.source = (cpp_token *) source;
1034   result->flags = 0;
1035   return result;
1036 }
1037
1038 /* Get a new uninitialized context.  Create a new one if we cannot
1039    re-use an old one.  */
1040 static cpp_context *
1041 next_context (cpp_reader *pfile)
1042 {
1043   cpp_context *result = pfile->context->next;
1044
1045   if (result == 0)
1046     {
1047       result = XNEW (cpp_context);
1048       result->prev = pfile->context;
1049       result->next = 0;
1050       pfile->context->next = result;
1051     }
1052
1053   pfile->context = result;
1054   return result;
1055 }
1056
1057 /* Push a list of pointers to tokens.  */
1058 static void
1059 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1060                      const cpp_token **first, unsigned int count)
1061 {
1062   cpp_context *context = next_context (pfile);
1063
1064   context->direct_p = false;
1065   context->macro = macro;
1066   context->buff = buff;
1067   FIRST (context).ptoken = first;
1068   LAST (context).ptoken = first + count;
1069 }
1070
1071 /* Push a list of tokens.  */
1072 void
1073 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1074                          const cpp_token *first, unsigned int count)
1075 {
1076   cpp_context *context = next_context (pfile);
1077
1078   context->direct_p = true;
1079   context->macro = macro;
1080   context->buff = NULL;
1081   FIRST (context).token = first;
1082   LAST (context).token = first + count;
1083 }
1084
1085 /* Push a traditional macro's replacement text.  */
1086 void
1087 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1088                         const uchar *start, size_t len)
1089 {
1090   cpp_context *context = next_context (pfile);
1091
1092   context->direct_p = true;
1093   context->macro = macro;
1094   context->buff = NULL;
1095   CUR (context) = start;
1096   RLIMIT (context) = start + len;
1097   macro->flags |= NODE_DISABLED;
1098 }
1099
1100 /* Expand an argument ARG before replacing parameters in a
1101    function-like macro.  This works by pushing a context with the
1102    argument's tokens, and then expanding that into a temporary buffer
1103    as if it were a normal part of the token stream.  collect_args()
1104    has terminated the argument's tokens with a CPP_EOF so that we know
1105    when we have fully expanded the argument.  */
1106 static void
1107 expand_arg (cpp_reader *pfile, macro_arg *arg)
1108 {
1109   unsigned int capacity;
1110   bool saved_warn_trad;
1111
1112   if (arg->count == 0)
1113     return;
1114
1115   /* Don't warn about funlike macros when pre-expanding.  */
1116   saved_warn_trad = CPP_WTRADITIONAL (pfile);
1117   CPP_WTRADITIONAL (pfile) = 0;
1118
1119   /* Loop, reading in the arguments.  */
1120   capacity = 256;
1121   arg->expanded = XNEWVEC (const cpp_token *, capacity);
1122
1123   push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
1124   for (;;)
1125     {
1126       const cpp_token *token;
1127
1128       if (arg->expanded_count + 1 >= capacity)
1129         {
1130           capacity *= 2;
1131           arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1132                                       capacity);
1133         }
1134
1135       token = cpp_get_token (pfile);
1136
1137       if (token->type == CPP_EOF)
1138         break;
1139
1140       arg->expanded[arg->expanded_count++] = token;
1141     }
1142
1143   _cpp_pop_context (pfile);
1144
1145   CPP_WTRADITIONAL (pfile) = saved_warn_trad;
1146 }
1147
1148 /* Pop the current context off the stack, re-enabling the macro if the
1149    context represented a macro's replacement list.  The context
1150    structure is not freed so that we can re-use it later.  */
1151 void
1152 _cpp_pop_context (cpp_reader *pfile)
1153 {
1154   cpp_context *context = pfile->context;
1155
1156   if (context->macro)
1157     context->macro->flags &= ~NODE_DISABLED;
1158
1159   if (context->buff)
1160     _cpp_release_buff (pfile, context->buff);
1161
1162   pfile->context = context->prev;
1163 }
1164
1165 /* External routine to get a token.  Also used nearly everywhere
1166    internally, except for places where we know we can safely call
1167    _cpp_lex_token directly, such as lexing a directive name.
1168
1169    Macro expansions and directives are transparently handled,
1170    including entering included files.  Thus tokens are post-macro
1171    expansion, and after any intervening directives.  External callers
1172    see CPP_EOF only at EOF.  Internal callers also see it when meeting
1173    a directive inside a macro call, when at the end of a directive and
1174    state.in_directive is still 1, and at the end of argument
1175    pre-expansion.  */
1176 const cpp_token *
1177 cpp_get_token (cpp_reader *pfile)
1178 {
1179   const cpp_token *result;
1180   bool can_set = pfile->set_invocation_location;
1181   pfile->set_invocation_location = false;
1182
1183   for (;;)
1184     {
1185       cpp_hashnode *node;
1186       cpp_context *context = pfile->context;
1187
1188       /* Context->prev == 0 <=> base context.  */
1189       if (!context->prev)
1190         result = _cpp_lex_token (pfile);
1191       else if (FIRST (context).token != LAST (context).token)
1192         {
1193           if (context->direct_p)
1194             result = FIRST (context).token++;
1195           else
1196             result = *FIRST (context).ptoken++;
1197
1198           if (result->flags & PASTE_LEFT)
1199             {
1200               paste_all_tokens (pfile, result);
1201               if (pfile->state.in_directive)
1202                 continue;
1203               return padding_token (pfile, result);
1204             }
1205         }
1206       else
1207         {
1208           _cpp_pop_context (pfile);
1209           if (pfile->state.in_directive)
1210             continue;
1211           return &pfile->avoid_paste;
1212         }
1213
1214       if (pfile->state.in_directive && result->type == CPP_COMMENT)
1215         continue;
1216
1217       if (result->type != CPP_NAME)
1218         break;
1219
1220       node = result->val.node;
1221
1222       if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1223         break;
1224
1225       if (!(node->flags & NODE_DISABLED))
1226         {
1227           int ret;
1228           /* If not in a macro context, and we're going to start an
1229              expansion, record the location.  */
1230           if (can_set && !context->macro)
1231             pfile->invocation_location = result->src_loc;
1232           if (pfile->state.prevent_expansion)
1233             break;
1234           ret = enter_macro_context (pfile, node, result);
1235           if (ret)
1236             {
1237               if (pfile->state.in_directive || ret == 2)
1238                 continue;
1239               return padding_token (pfile, result);
1240             }
1241         }
1242       else
1243         {
1244           /* Flag this token as always unexpandable.  FIXME: move this
1245              to collect_args()?.  */
1246           cpp_token *t = _cpp_temp_token (pfile);
1247           t->type = result->type;
1248           t->flags = result->flags | NO_EXPAND;
1249           t->val = result->val;
1250           result = t;
1251         }
1252
1253       break;
1254     }
1255
1256   return result;
1257 }
1258
1259 /* Like cpp_get_token, but also returns a location separate from the
1260    one provided by the returned token.  LOC is an out parameter; *LOC
1261    is set to the location "as expected by the user".  This matters
1262    when a token results from macro expansion -- the token's location
1263    will indicate where the macro is defined, but *LOC will be the
1264    location of the start of the expansion.  */
1265 const cpp_token *
1266 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
1267 {
1268   const cpp_token *result;
1269
1270   pfile->set_invocation_location = true;
1271   result = cpp_get_token (pfile);
1272   if (pfile->context->macro)
1273     *loc = pfile->invocation_location;
1274   else
1275     *loc = result->src_loc;
1276
1277   return result;
1278 }
1279
1280 /* Returns true if we're expanding an object-like macro that was
1281    defined in a system header.  Just checks the macro at the top of
1282    the stack.  Used for diagnostic suppression.  */
1283 int
1284 cpp_sys_macro_p (cpp_reader *pfile)
1285 {
1286   cpp_hashnode *node = pfile->context->macro;
1287
1288   return node && node->value.macro && node->value.macro->syshdr;
1289 }
1290
1291 /* Read each token in, until end of the current file.  Directives are
1292    transparently processed.  */
1293 void
1294 cpp_scan_nooutput (cpp_reader *pfile)
1295 {
1296   /* Request a CPP_EOF token at the end of this file, rather than
1297      transparently continuing with the including file.  */
1298   pfile->buffer->return_at_eof = true;
1299
1300   pfile->state.discarding_output++;
1301   pfile->state.prevent_expansion++;
1302
1303   if (CPP_OPTION (pfile, traditional))
1304     while (_cpp_read_logical_line_trad (pfile))
1305       ;
1306   else
1307     while (cpp_get_token (pfile)->type != CPP_EOF)
1308       ;
1309
1310   pfile->state.discarding_output--;
1311   pfile->state.prevent_expansion--;
1312 }
1313
1314 /* Step back one (or more) tokens.  Can only step back more than 1 if
1315    they are from the lexer, and not from macro expansion.  */
1316 void
1317 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
1318 {
1319   if (pfile->context->prev == NULL)
1320     {
1321       pfile->lookaheads += count;
1322       while (count--)
1323         {
1324           pfile->cur_token--;
1325           if (pfile->cur_token == pfile->cur_run->base
1326               /* Possible with -fpreprocessed and no leading #line.  */
1327               && pfile->cur_run->prev != NULL)
1328             {
1329               pfile->cur_run = pfile->cur_run->prev;
1330               pfile->cur_token = pfile->cur_run->limit;
1331             }
1332         }
1333     }
1334   else
1335     {
1336       if (count != 1)
1337         abort ();
1338       if (pfile->context->direct_p)
1339         FIRST (pfile->context).token--;
1340       else
1341         FIRST (pfile->context).ptoken--;
1342     }
1343 }
1344
1345 /* #define directive parsing and handling.  */
1346
1347 /* Returns nonzero if a macro redefinition warning is required.  */
1348 static bool
1349 warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1350                       const cpp_macro *macro2)
1351 {
1352   const cpp_macro *macro1;
1353   unsigned int i;
1354
1355   /* Some redefinitions need to be warned about regardless.  */
1356   if (node->flags & NODE_WARN)
1357     return true;
1358
1359   /* Redefinition of a macro is allowed if and only if the old and new
1360      definitions are the same.  (6.10.3 paragraph 2).  */
1361   macro1 = node->value.macro;
1362
1363   /* Don't check count here as it can be different in valid
1364      traditional redefinitions with just whitespace differences.  */
1365   if (macro1->paramc != macro2->paramc
1366       || macro1->fun_like != macro2->fun_like
1367       || macro1->variadic != macro2->variadic)
1368     return true;
1369
1370   /* Check parameter spellings.  */
1371   for (i = 0; i < macro1->paramc; i++)
1372     if (macro1->params[i] != macro2->params[i])
1373       return true;
1374
1375   /* Check the replacement text or tokens.  */
1376   if (CPP_OPTION (pfile, traditional))
1377     return _cpp_expansions_different_trad (macro1, macro2);
1378
1379   if (macro1->count != macro2->count)
1380     return true;
1381
1382   for (i = 0; i < macro1->count; i++)
1383     if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1384       return true;
1385
1386   return false;
1387 }
1388
1389 /* Free the definition of hashnode H.  */
1390 void
1391 _cpp_free_definition (cpp_hashnode *h)
1392 {
1393   /* Macros and assertions no longer have anything to free.  */
1394   h->type = NT_VOID;
1395   /* Clear builtin flag in case of redefinition.  */
1396   h->flags &= ~(NODE_BUILTIN | NODE_DISABLED);
1397 }
1398
1399 /* Save parameter NODE to the parameter list of macro MACRO.  Returns
1400    zero on success, nonzero if the parameter is a duplicate.  */
1401 bool
1402 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
1403 {
1404   unsigned int len;
1405   /* Constraint 6.10.3.6 - duplicate parameter names.  */
1406   if (node->flags & NODE_MACRO_ARG)
1407     {
1408       cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
1409                  NODE_NAME (node));
1410       return true;
1411     }
1412
1413   if (BUFF_ROOM (pfile->a_buff)
1414       < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1415     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
1416
1417   ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
1418   node->flags |= NODE_MACRO_ARG;
1419   len = macro->paramc * sizeof (union _cpp_hashnode_value);
1420   if (len > pfile->macro_buffer_len)
1421     {
1422       pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1423                                         len);
1424       pfile->macro_buffer_len = len;
1425     }
1426   ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1427     = node->value;
1428
1429   node->value.arg_index  = macro->paramc;
1430   return false;
1431 }
1432
1433 /* Check the syntax of the parameters in a MACRO definition.  Returns
1434    false if an error occurs.  */
1435 static bool
1436 parse_params (cpp_reader *pfile, cpp_macro *macro)
1437 {
1438   unsigned int prev_ident = 0;
1439
1440   for (;;)
1441     {
1442       const cpp_token *token = _cpp_lex_token (pfile);
1443
1444       switch (token->type)
1445         {
1446         default:
1447           /* Allow/ignore comments in parameter lists if we are
1448              preserving comments in macro expansions.  */
1449           if (token->type == CPP_COMMENT
1450               && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1451             continue;
1452
1453           cpp_error (pfile, CPP_DL_ERROR,
1454                      "\"%s\" may not appear in macro parameter list",
1455                      cpp_token_as_text (pfile, token));
1456           return false;
1457
1458         case CPP_NAME:
1459           if (prev_ident)
1460             {
1461               cpp_error (pfile, CPP_DL_ERROR,
1462                          "macro parameters must be comma-separated");
1463               return false;
1464             }
1465           prev_ident = 1;
1466
1467           if (_cpp_save_parameter (pfile, macro, token->val.node))
1468             return false;
1469           continue;
1470
1471         case CPP_CLOSE_PAREN:
1472           if (prev_ident || macro->paramc == 0)
1473             return true;
1474
1475           /* Fall through to pick up the error.  */
1476         case CPP_COMMA:
1477           if (!prev_ident)
1478             {
1479               cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
1480               return false;
1481             }
1482           prev_ident = 0;
1483           continue;
1484
1485         case CPP_ELLIPSIS:
1486           macro->variadic = 1;
1487           if (!prev_ident)
1488             {
1489               _cpp_save_parameter (pfile, macro,
1490                                    pfile->spec_nodes.n__VA_ARGS__);
1491               pfile->state.va_args_ok = 1;
1492               if (! CPP_OPTION (pfile, c99)
1493                   && CPP_OPTION (pfile, pedantic)
1494                   && CPP_OPTION (pfile, warn_variadic_macros))
1495                 cpp_error (pfile, CPP_DL_PEDWARN,
1496                            "anonymous variadic macros were introduced in C99");
1497             }
1498           else if (CPP_OPTION (pfile, pedantic)
1499                    && CPP_OPTION (pfile, warn_variadic_macros))
1500             cpp_error (pfile, CPP_DL_PEDWARN,
1501                        "ISO C does not permit named variadic macros");
1502
1503           /* We're at the end, and just expect a closing parenthesis.  */
1504           token = _cpp_lex_token (pfile);
1505           if (token->type == CPP_CLOSE_PAREN)
1506             return true;
1507           /* Fall through.  */
1508
1509         case CPP_EOF:
1510           cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
1511           return false;
1512         }
1513     }
1514 }
1515
1516 /* Allocate room for a token from a macro's replacement list.  */
1517 static cpp_token *
1518 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1519 {
1520   if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1521     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
1522
1523   return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
1524 }
1525
1526 /* Lex a token from the expansion of MACRO, but mark parameters as we
1527    find them and warn of traditional stringification.  */
1528 static cpp_token *
1529 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
1530 {
1531   cpp_token *token, *saved_cur_token;
1532
1533   saved_cur_token = pfile->cur_token;
1534   pfile->cur_token = alloc_expansion_token (pfile, macro);
1535   token = _cpp_lex_direct (pfile);
1536   pfile->cur_token = saved_cur_token;
1537
1538   /* Is this a parameter?  */
1539   if (token->type == CPP_NAME
1540       && (token->val.node->flags & NODE_MACRO_ARG) != 0)
1541     {
1542       token->type = CPP_MACRO_ARG;
1543       token->val.arg_no = token->val.node->value.arg_index;
1544     }
1545   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1546            && (token->type == CPP_STRING || token->type == CPP_CHAR))
1547     check_trad_stringification (pfile, macro, &token->val.str);
1548
1549   return token;
1550 }
1551
1552 static bool
1553 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
1554 {
1555   cpp_token *token;
1556   const cpp_token *ctoken;
1557   bool following_paste_op = false;
1558   const char *paste_op_error_msg =
1559     N_("'##' cannot appear at either end of a macro expansion");
1560
1561   /* Get the first token of the expansion (or the '(' of a
1562      function-like macro).  */
1563   ctoken = _cpp_lex_token (pfile);
1564
1565   if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
1566     {
1567       bool ok = parse_params (pfile, macro);
1568       macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1569       if (!ok)
1570         return false;
1571
1572       /* Success.  Commit or allocate the parameter array.  */
1573       if (pfile->hash_table->alloc_subobject)
1574         {
1575           cpp_hashnode **params =
1576             (cpp_hashnode **) pfile->hash_table->alloc_subobject
1577             (sizeof (cpp_hashnode *) * macro->paramc);
1578           memcpy (params, macro->params,
1579                   sizeof (cpp_hashnode *) * macro->paramc);
1580           macro->params = params;
1581         }
1582       else
1583         BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
1584       macro->fun_like = 1;
1585     }
1586   else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
1587     {
1588       /* While ISO C99 requires whitespace before replacement text
1589          in a macro definition, ISO C90 with TC1 allows there characters
1590          from the basic source character set.  */
1591       if (CPP_OPTION (pfile, c99))
1592         cpp_error (pfile, CPP_DL_PEDWARN,
1593                    "ISO C99 requires whitespace after the macro name");
1594       else
1595         {
1596           int warntype = CPP_DL_WARNING;
1597           switch (ctoken->type)
1598             {
1599             case CPP_ATSIGN:
1600             case CPP_AT_NAME:
1601             case CPP_OBJC_STRING:
1602               /* '@' is not in basic character set.  */
1603               warntype = CPP_DL_PEDWARN;
1604               break;
1605             case CPP_OTHER:
1606               /* Basic character set sans letters, digits and _.  */
1607               if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1608                           ctoken->val.str.text[0]) == NULL)
1609                 warntype = CPP_DL_PEDWARN;
1610               break;
1611             default:
1612               /* All other tokens start with a character from basic
1613                  character set.  */
1614               break;
1615             }
1616           cpp_error (pfile, warntype,
1617                      "missing whitespace after the macro name");
1618         }
1619     }
1620
1621   if (macro->fun_like)
1622     token = lex_expansion_token (pfile, macro);
1623   else
1624     {
1625       token = alloc_expansion_token (pfile, macro);
1626       *token = *ctoken;
1627     }
1628
1629   for (;;)
1630     {
1631       /* Check the stringifying # constraint 6.10.3.2.1 of
1632          function-like macros when lexing the subsequent token.  */
1633       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1634         {
1635           if (token->type == CPP_MACRO_ARG)
1636             {
1637               token->flags &= ~PREV_WHITE;
1638               token->flags |= STRINGIFY_ARG;
1639               token->flags |= token[-1].flags & PREV_WHITE;
1640               token[-1] = token[0];
1641               macro->count--;
1642             }
1643           /* Let assembler get away with murder.  */
1644           else if ((CPP_OPTION (pfile, lang) != CLK_ASM)
1645                 && (!CPP_OPTION(pfile, allow_naked_hash)))
1646             {
1647               cpp_error (pfile, CPP_DL_ERROR,
1648                          "'#' is not followed by a macro parameter");
1649               return false;
1650             }
1651         }
1652
1653       if (token->type == CPP_EOF)
1654         {
1655           /* Paste operator constraint 6.10.3.3.1:
1656              Token-paste ##, can appear in both object-like and
1657              function-like macros, but not at the end.  */
1658           if (following_paste_op)
1659             {
1660               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1661               return false;
1662             }
1663           break;
1664         }
1665
1666       /* Paste operator constraint 6.10.3.3.1.  */
1667       if (token->type == CPP_PASTE)
1668         {
1669           /* Token-paste ##, can appear in both object-like and
1670              function-like macros, but not at the beginning.  */
1671           if (macro->count == 1)
1672             {
1673               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1674               return false;
1675             }
1676
1677           --macro->count;
1678           token[-1].flags |= PASTE_LEFT;
1679         }
1680
1681       following_paste_op = (token->type == CPP_PASTE);
1682       token = lex_expansion_token (pfile, macro);
1683     }
1684
1685   macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
1686   macro->traditional = 0;
1687
1688   /* Don't count the CPP_EOF.  */
1689   macro->count--;
1690
1691   /* Clear whitespace on first token for warn_of_redefinition().  */
1692   if (macro->count)
1693     macro->exp.tokens[0].flags &= ~PREV_WHITE;
1694
1695   /* Commit or allocate the memory.  */
1696   if (pfile->hash_table->alloc_subobject)
1697     {
1698       cpp_token *tokns =
1699         (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1700                                                           * macro->count);
1701       memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1702       macro->exp.tokens = tokns;
1703     }
1704   else
1705     BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
1706
1707   return true;
1708 }
1709
1710 /* Parse a macro and save its expansion.  Returns nonzero on success.  */
1711 bool
1712 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
1713 {
1714   cpp_macro *macro;
1715   unsigned int i;
1716   bool ok;
1717
1718   if (pfile->hash_table->alloc_subobject)
1719     macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1720       (sizeof (cpp_macro));
1721   else
1722     macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
1723   macro->line = pfile->directive_line;
1724   macro->params = 0;
1725   macro->paramc = 0;
1726   macro->variadic = 0;
1727   macro->used = !CPP_OPTION (pfile, warn_unused_macros);
1728   macro->count = 0;
1729   macro->fun_like = 0;
1730   /* To suppress some diagnostics.  */
1731   macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
1732
1733   if (CPP_OPTION (pfile, traditional))
1734     ok = _cpp_create_trad_definition (pfile, macro);
1735   else
1736     {
1737       ok = create_iso_definition (pfile, macro);
1738
1739       /* We set the type for SEEN_EOL() in directives.c.
1740
1741          Longer term we should lex the whole line before coming here,
1742          and just copy the expansion.  */
1743
1744       /* Stop the lexer accepting __VA_ARGS__.  */
1745       pfile->state.va_args_ok = 0;
1746     }
1747
1748   /* Clear the fast argument lookup indices.  */
1749   for (i = macro->paramc; i-- > 0; )
1750     {
1751       struct cpp_hashnode *node = macro->params[i];
1752       node->flags &= ~ NODE_MACRO_ARG;
1753       node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1754     }
1755
1756   if (!ok)
1757     return ok;
1758
1759   if (node->type == NT_MACRO)
1760     {
1761       if (CPP_OPTION (pfile, warn_unused_macros))
1762         _cpp_warn_if_unused_macro (pfile, node, NULL);
1763
1764       if (warn_of_redefinition (pfile, node, macro))
1765         {
1766           cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
1767                                "\"%s\" redefined", NODE_NAME (node));
1768
1769           if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
1770             cpp_error_with_line (pfile, CPP_DL_PEDWARN,
1771                                  node->value.macro->line, 0,
1772                          "this is the location of the previous definition");
1773         }
1774     }
1775
1776   if (node->type != NT_VOID)
1777     _cpp_free_definition (node);
1778
1779   /* Enter definition in hash table.  */
1780   node->type = NT_MACRO;
1781   node->value.macro = macro;
1782   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
1783       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
1784       /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
1785          in the C standard, as something that one must use in C++.
1786          However DR#593 indicates that these aren't actually mentioned
1787          in the C++ standard.  We special-case them anyway.  */
1788       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
1789       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
1790     node->flags |= NODE_WARN;
1791
1792   return ok;
1793 }
1794
1795 /* Warn if a token in STRING matches one of a function-like MACRO's
1796    parameters.  */
1797 static void
1798 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1799                             const cpp_string *string)
1800 {
1801   unsigned int i, len;
1802   const uchar *p, *q, *limit;
1803
1804   /* Loop over the string.  */
1805   limit = string->text + string->len - 1;
1806   for (p = string->text + 1; p < limit; p = q)
1807     {
1808       /* Find the start of an identifier.  */
1809       while (p < limit && !is_idstart (*p))
1810         p++;
1811
1812       /* Find the end of the identifier.  */
1813       q = p;
1814       while (q < limit && is_idchar (*q))
1815         q++;
1816
1817       len = q - p;
1818
1819       /* Loop over the function macro arguments to see if the
1820          identifier inside the string matches one of them.  */
1821       for (i = 0; i < macro->paramc; i++)
1822         {
1823           const cpp_hashnode *node = macro->params[i];
1824
1825           if (NODE_LEN (node) == len
1826               && !memcmp (p, NODE_NAME (node), len))
1827             {
1828               cpp_error (pfile, CPP_DL_WARNING,
1829            "macro argument \"%s\" would be stringified in traditional C",
1830                          NODE_NAME (node));
1831               break;
1832             }
1833         }
1834     }
1835 }
1836
1837 /* Returns the name, arguments and expansion of a macro, in a format
1838    suitable to be read back in again, and therefore also for DWARF 2
1839    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1840    Caller is expected to generate the "#define" bit if needed.  The
1841    returned text is temporary, and automatically freed later.  */
1842 const unsigned char *
1843 cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
1844 {
1845   unsigned int i, len;
1846   const cpp_macro *macro = node->value.macro;
1847   unsigned char *buffer;
1848
1849   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1850     {
1851       cpp_error (pfile, CPP_DL_ICE,
1852                  "invalid hash type %d in cpp_macro_definition", node->type);
1853       return 0;
1854     }
1855
1856   /* Calculate length.  */
1857   len = NODE_LEN (node) + 2;                    /* ' ' and NUL.  */
1858   if (macro->fun_like)
1859     {
1860       len += 4;         /* "()" plus possible final ".." of named
1861                            varargs (we have + 1 below).  */
1862       for (i = 0; i < macro->paramc; i++)
1863         len += NODE_LEN (macro->params[i]) + 1; /* "," */
1864     }
1865
1866   /* This should match below where we fill in the buffer.  */
1867   if (CPP_OPTION (pfile, traditional))
1868     len += _cpp_replacement_text_len (macro);
1869   else
1870     {
1871       for (i = 0; i < macro->count; i++)
1872         {
1873           cpp_token *token = &macro->exp.tokens[i];
1874
1875           if (token->type == CPP_MACRO_ARG)
1876             len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1877           else
1878             len += cpp_token_len (token);
1879
1880           if (token->flags & STRINGIFY_ARG)
1881             len++;                      /* "#" */
1882           if (token->flags & PASTE_LEFT)
1883             len += 3;           /* " ##" */
1884           if (token->flags & PREV_WHITE)
1885             len++;              /* " " */
1886         }
1887     }
1888
1889   if (len > pfile->macro_buffer_len)
1890     {
1891       pfile->macro_buffer = XRESIZEVEC (unsigned char,
1892                                         pfile->macro_buffer, len);
1893       pfile->macro_buffer_len = len;
1894     }
1895
1896   /* Fill in the buffer.  Start with the macro name.  */
1897   buffer = pfile->macro_buffer;
1898   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1899   buffer += NODE_LEN (node);
1900
1901   /* Parameter names.  */
1902   if (macro->fun_like)
1903     {
1904       *buffer++ = '(';
1905       for (i = 0; i < macro->paramc; i++)
1906         {
1907           cpp_hashnode *param = macro->params[i];
1908
1909           if (param != pfile->spec_nodes.n__VA_ARGS__)
1910             {
1911               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1912               buffer += NODE_LEN (param);
1913             }
1914
1915           if (i + 1 < macro->paramc)
1916             /* Don't emit a space after the comma here; we're trying
1917                to emit a Dwarf-friendly definition, and the Dwarf spec
1918                forbids spaces in the argument list.  */
1919             *buffer++ = ',';
1920           else if (macro->variadic)
1921             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1922         }
1923       *buffer++ = ')';
1924     }
1925
1926   /* The Dwarf spec requires a space after the macro name, even if the
1927      definition is the empty string.  */
1928   *buffer++ = ' ';
1929
1930   if (CPP_OPTION (pfile, traditional))
1931     buffer = _cpp_copy_replacement_text (macro, buffer);
1932   else if (macro->count)
1933   /* Expansion tokens.  */
1934     {
1935       for (i = 0; i < macro->count; i++)
1936         {
1937           cpp_token *token = &macro->exp.tokens[i];
1938
1939           if (token->flags & PREV_WHITE)
1940             *buffer++ = ' ';
1941           if (token->flags & STRINGIFY_ARG)
1942             *buffer++ = '#';
1943
1944           if (token->type == CPP_MACRO_ARG)
1945             {
1946               memcpy (buffer,
1947                       NODE_NAME (macro->params[token->val.arg_no - 1]),
1948                       NODE_LEN (macro->params[token->val.arg_no - 1]));
1949               buffer += NODE_LEN (macro->params[token->val.arg_no - 1]);
1950             }
1951           else
1952             buffer = cpp_spell_token (pfile, token, buffer, false);
1953
1954           if (token->flags & PASTE_LEFT)
1955             {
1956               *buffer++ = ' ';
1957               *buffer++ = '#';
1958               *buffer++ = '#';
1959               /* Next has PREV_WHITE; see _cpp_create_definition.  */
1960             }
1961         }
1962     }
1963
1964   *buffer = '\0';
1965   return pfile->macro_buffer;
1966 }