remove unused files
[platform/upstream/gcc48.git] / libcpp / macro.c
1 /* Part of CPP library.  (Macro and #define handling.)
2    Copyright (C) 1986-2013 Free Software Foundation, Inc.
3    Written by Per Bothner, 1994.
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  In other words, you are welcome to use, share and improve this program.
22  You are forbidden to forbid anyone else to use, share and improve
23  what you give them.   Help stamp out software-hoarding!  */
24
25 #include "config.h"
26 #include "system.h"
27 #include "cpplib.h"
28 #include "internal.h"
29
30 typedef struct macro_arg macro_arg;
31 /* This structure represents the tokens of a macro argument.  These
32    tokens can be macro themselves, in which case they can be either
33    expanded or unexpanded.  When they are expanded, this data
34    structure keeps both the expanded and unexpanded forms.  */
35 struct macro_arg
36 {
37   const cpp_token **first;      /* First token in unexpanded argument.  */
38   const cpp_token **expanded;   /* Macro-expanded argument.  */
39   const cpp_token *stringified; /* Stringified argument.  */
40   unsigned int count;           /* # of tokens in argument.  */
41   unsigned int expanded_count;  /* # of tokens in expanded argument.  */
42   source_location *virt_locs;   /* Where virtual locations for
43                                    unexpanded tokens are stored.  */
44   source_location *expanded_virt_locs; /* Where virtual locations for
45                                           expanded tokens are
46                                           stored.  */
47 };
48
49 /* The kind of macro tokens which the instance of
50    macro_arg_token_iter is supposed to iterate over.  */
51 enum macro_arg_token_kind {
52   MACRO_ARG_TOKEN_NORMAL,
53   /* This is a macro argument token that got transformed into a string
54      litteral, e.g. #foo.  */
55   MACRO_ARG_TOKEN_STRINGIFIED,
56   /* This is a token resulting from the expansion of a macro
57      argument that was itself a macro.  */
58   MACRO_ARG_TOKEN_EXPANDED
59 };
60
61 /* An iterator over tokens coming from a function-like macro
62    argument.  */
63 typedef struct macro_arg_token_iter macro_arg_token_iter;
64 struct macro_arg_token_iter
65 {
66   /* Whether or not -ftrack-macro-expansion is used.  */
67   bool track_macro_exp_p;
68   /* The kind of token over which we are supposed to iterate.  */
69   enum macro_arg_token_kind kind;
70   /* A pointer to the current token pointed to by the iterator.  */
71   const cpp_token **token_ptr;
72   /* A pointer to the "full" location of the current token.  If
73      -ftrack-macro-expansion is used this location tracks loci across
74      macro expansion.  */
75   const source_location *location_ptr;
76 #ifdef ENABLE_CHECKING
77   /* The number of times the iterator went forward. This useful only
78      when checking is enabled.  */
79   size_t num_forwards;
80 #endif
81 };
82
83 /* Macro expansion.  */
84
85 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
86                                 const cpp_token *, source_location);
87 static int builtin_macro (cpp_reader *, cpp_hashnode *);
88 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
89                                  const cpp_token **, unsigned int);
90 static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
91                                           _cpp_buff *, source_location *,
92                                           const cpp_token **, unsigned int);
93 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
94                                 _cpp_buff **, unsigned *);
95 static cpp_context *next_context (cpp_reader *);
96 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
97 static void expand_arg (cpp_reader *, macro_arg *);
98 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
99 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
100 static void paste_all_tokens (cpp_reader *, const cpp_token *);
101 static bool paste_tokens (cpp_reader *, source_location,
102                           const cpp_token **, const cpp_token *);
103 static void alloc_expanded_arg_mem (cpp_reader *, macro_arg *, size_t);
104 static void ensure_expanded_arg_room (cpp_reader *, macro_arg *, size_t, size_t *);
105 static void delete_macro_args (_cpp_buff*, unsigned num_args);
106 static void set_arg_token (macro_arg *, const cpp_token *,
107                            source_location, size_t,
108                            enum macro_arg_token_kind,
109                            bool);
110 static const source_location *get_arg_token_location (const macro_arg *,
111                                                       enum macro_arg_token_kind);
112 static const cpp_token **arg_token_ptr_at (const macro_arg *,
113                                            size_t,
114                                            enum macro_arg_token_kind,
115                                            source_location **virt_location);
116
117 static void macro_arg_token_iter_init (macro_arg_token_iter *, bool,
118                                        enum macro_arg_token_kind,
119                                        const macro_arg *,
120                                        const cpp_token **);
121 static const cpp_token *macro_arg_token_iter_get_token
122 (const macro_arg_token_iter *it);
123 static source_location macro_arg_token_iter_get_location
124 (const macro_arg_token_iter *);
125 static void macro_arg_token_iter_forward (macro_arg_token_iter *);
126 static _cpp_buff *tokens_buff_new (cpp_reader *, size_t,
127                                    source_location **);
128 static size_t tokens_buff_count (_cpp_buff *);
129 static const cpp_token **tokens_buff_last_token_ptr (_cpp_buff *);
130 static inline const cpp_token **tokens_buff_put_token_to (const cpp_token **,
131                                                           source_location *,
132                                                           const cpp_token *,
133                                                           source_location,
134                                                           source_location,
135                                                           const struct line_map *,
136                                                           unsigned int);
137
138 static const cpp_token **tokens_buff_add_token (_cpp_buff *,
139                                                 source_location *,
140                                                 const cpp_token *,
141                                                 source_location,
142                                                 source_location,
143                                                 const struct line_map *,
144                                                 unsigned int);
145 static inline void tokens_buff_remove_last_token (_cpp_buff *);
146 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
147                           macro_arg *, source_location);
148 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
149                                         _cpp_buff **, unsigned *);
150 static bool create_iso_definition (cpp_reader *, cpp_macro *);
151
152 /* #define directive parsing and handling.  */
153
154 static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
155 static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
156 static bool warn_of_redefinition (cpp_reader *, cpp_hashnode *,
157                                   const cpp_macro *);
158 static bool parse_params (cpp_reader *, cpp_macro *);
159 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
160                                         const cpp_string *);
161 static bool reached_end_of_context (cpp_context *);
162 static void consume_next_token_from_context (cpp_reader *pfile,
163                                              const cpp_token **,
164                                              source_location *);
165 static const cpp_token* cpp_get_token_1 (cpp_reader *, source_location *);
166
167 static cpp_hashnode* macro_of_context (cpp_context *context);
168
169 static bool in_macro_expansion_p (cpp_reader *pfile);
170
171 /* Statistical counter tracking the number of macros that got
172    expanded.  */
173 unsigned num_expanded_macros_counter = 0;
174 /* Statistical counter tracking the total number tokens resulting
175    from macro expansion.  */
176 unsigned num_macro_tokens_counter = 0;
177
178 /* Emits a warning if NODE is a macro defined in the main file that
179    has not been used.  */
180 int
181 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
182                            void *v ATTRIBUTE_UNUSED)
183 {
184   if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
185     {
186       cpp_macro *macro = node->value.macro;
187
188       if (!macro->used
189           && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
190         cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
191                                "macro \"%s\" is not used", NODE_NAME (node));
192     }
193
194   return 1;
195 }
196
197 /* Allocates and returns a CPP_STRING token, containing TEXT of length
198    LEN, after null-terminating it.  TEXT must be in permanent storage.  */
199 static const cpp_token *
200 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
201 {
202   cpp_token *token = _cpp_temp_token (pfile);
203
204   text[len] = '\0';
205   token->type = CPP_STRING;
206   token->val.str.len = len;
207   token->val.str.text = text;
208   token->flags = 0;
209   return token;
210 }
211
212 static const char * const monthnames[] =
213 {
214   "Jan", "Feb", "Mar", "Apr", "May", "Jun",
215   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
216 };
217
218 /* Helper function for builtin_macro.  Returns the text generated by
219    a builtin macro. */
220 const uchar *
221 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
222 {
223   const uchar *result = NULL;
224   linenum_type number = 1;
225
226   switch (node->value.builtin)
227     {
228     default:
229       cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
230                  NODE_NAME (node));
231       break;
232
233     case BT_TIMESTAMP:
234       {
235         cpp_buffer *pbuffer = cpp_get_buffer (pfile);
236         if (pbuffer->timestamp == NULL)
237           {
238             /* Initialize timestamp value of the assotiated file. */
239             struct _cpp_file *file = cpp_get_file (pbuffer);
240             if (file)
241               {
242                 /* Generate __TIMESTAMP__ string, that represents 
243                    the date and time of the last modification 
244                    of the current source file. The string constant 
245                    looks like "Sun Sep 16 01:03:52 1973".  */
246                 struct tm *tb = NULL;
247                 struct stat *st = _cpp_get_file_stat (file);
248                 if (st)
249                   tb = localtime (&st->st_mtime);
250                 if (tb)
251                   {
252                     char *str = asctime (tb);
253                     size_t len = strlen (str);
254                     unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
255                     buf[0] = '"';
256                     strcpy ((char *) buf + 1, str);
257                     buf[len] = '"';
258                     pbuffer->timestamp = buf;
259                   }
260                 else
261                   {
262                     cpp_errno (pfile, CPP_DL_WARNING,
263                         "could not determine file timestamp");
264                     pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
265                   }
266               }
267           }
268         result = pbuffer->timestamp;
269       }
270       break;
271     case BT_FILE:
272     case BT_BASE_FILE:
273       {
274         unsigned int len;
275         const char *name;
276         uchar *buf;
277         
278         if (node->value.builtin == BT_FILE)
279           name = linemap_get_expansion_filename (pfile->line_table,
280                                                  pfile->line_table->highest_line);
281         else
282           {
283             name = _cpp_get_file_name (pfile->main_file);
284             if (!name)
285               abort ();
286           }
287         len = strlen (name);
288         buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
289         result = buf;
290         *buf = '"';
291         buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
292         *buf++ = '"';
293         *buf = '\0';
294       }
295       break;
296
297     case BT_INCLUDE_LEVEL:
298       /* The line map depth counts the primary source as level 1, but
299          historically __INCLUDE_DEPTH__ has called the primary source
300          level 0.  */
301       number = pfile->line_table->depth - 1;
302       break;
303
304     case BT_SPECLINE:
305       /* If __LINE__ is embedded in a macro, it must expand to the
306          line of the macro's invocation, not its definition.
307          Otherwise things like assert() will not work properly.  */
308       number = linemap_get_expansion_line (pfile->line_table,
309                                            CPP_OPTION (pfile, traditional)
310                                            ? pfile->line_table->highest_line
311                                            : pfile->cur_token[-1].src_loc);
312       break;
313
314       /* __STDC__ has the value 1 under normal circumstances.
315          However, if (a) we are in a system header, (b) the option
316          stdc_0_in_system_headers is true (set by target config), and
317          (c) we are not in strictly conforming mode, then it has the
318          value 0.  (b) and (c) are already checked in cpp_init_builtins.  */
319     case BT_STDC:
320       if (cpp_in_system_header (pfile))
321         number = 0;
322       else
323         number = 1;
324       break;
325
326     case BT_DATE:
327     case BT_TIME:
328       if (pfile->date == NULL)
329         {
330           /* Allocate __DATE__ and __TIME__ strings from permanent
331              storage.  We only do this once, and don't generate them
332              at init time, because time() and localtime() are very
333              slow on some systems.  */
334           time_t tt;
335           struct tm *tb = NULL;
336
337           /* (time_t) -1 is a legitimate value for "number of seconds
338              since the Epoch", so we have to do a little dance to
339              distinguish that from a genuine error.  */
340           errno = 0;
341           tt = time(NULL);
342           if (tt != (time_t)-1 || errno == 0)
343             tb = localtime (&tt);
344
345           if (tb)
346             {
347               pfile->date = _cpp_unaligned_alloc (pfile,
348                                                   sizeof ("\"Oct 11 1347\""));
349               sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
350                        monthnames[tb->tm_mon], tb->tm_mday,
351                        tb->tm_year + 1900);
352
353               pfile->time = _cpp_unaligned_alloc (pfile,
354                                                   sizeof ("\"12:34:56\""));
355               sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
356                        tb->tm_hour, tb->tm_min, tb->tm_sec);
357             }
358           else
359             {
360               cpp_errno (pfile, CPP_DL_WARNING,
361                          "could not determine date and time");
362                 
363               pfile->date = UC"\"??? ?? ????\"";
364               pfile->time = UC"\"??:??:??\"";
365             }
366         }
367
368       if (node->value.builtin == BT_DATE)
369         result = pfile->date;
370       else
371         result = pfile->time;
372       break;
373
374     case BT_COUNTER:
375       if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
376         cpp_error (pfile, CPP_DL_ERROR,
377             "__COUNTER__ expanded inside directive with -fdirectives-only");
378       number = pfile->counter++;
379       break;
380     }
381
382   if (result == NULL)
383     {
384       /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers.  */
385       result = _cpp_unaligned_alloc (pfile, 21);
386       sprintf ((char *) result, "%u", number);
387     }
388
389   return result;      
390 }
391
392 /* Convert builtin macros like __FILE__ to a token and push it on the
393    context stack.  Also handles _Pragma, for which a new token may not
394    be created.  Returns 1 if it generates a new token context, 0 to
395    return the token to the caller.  */
396 static int
397 builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
398 {
399   const uchar *buf;
400   size_t len;
401   char *nbuf;
402
403   if (node->value.builtin == BT_PRAGMA)
404     {
405       /* Don't interpret _Pragma within directives.  The standard is
406          not clear on this, but to me this makes most sense.  */
407       if (pfile->state.in_directive)
408         return 0;
409
410       return _cpp_do__Pragma (pfile);
411     }
412
413   buf = _cpp_builtin_macro_text (pfile, node);
414   len = ustrlen (buf);
415   nbuf = (char *) alloca (len + 1);
416   memcpy (nbuf, buf, len);
417   nbuf[len]='\n';
418
419   cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
420   _cpp_clean_line (pfile);
421
422   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
423   pfile->cur_token = _cpp_temp_token (pfile);
424   _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
425   if (pfile->buffer->cur != pfile->buffer->rlimit)
426     cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
427                NODE_NAME (node));
428   _cpp_pop_buffer (pfile);
429
430   return 1;
431 }
432
433 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
434    backslashes and double quotes. DEST must be of sufficient size.
435    Returns a pointer to the end of the string.  */
436 uchar *
437 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
438 {
439   while (len--)
440     {
441       uchar c = *src++;
442
443       if (c == '\\' || c == '"')
444         {
445           *dest++ = '\\';
446           *dest++ = c;
447         }
448       else
449           *dest++ = c;
450     }
451
452   return dest;
453 }
454
455 /* Convert a token sequence ARG to a single string token according to
456    the rules of the ISO C #-operator.  */
457 static const cpp_token *
458 stringify_arg (cpp_reader *pfile, macro_arg *arg)
459 {
460   unsigned char *dest;
461   unsigned int i, escape_it, backslash_count = 0;
462   const cpp_token *source = NULL;
463   size_t len;
464
465   if (BUFF_ROOM (pfile->u_buff) < 3)
466     _cpp_extend_buff (pfile, &pfile->u_buff, 3);
467   dest = BUFF_FRONT (pfile->u_buff);
468   *dest++ = '"';
469
470   /* Loop, reading in the argument's tokens.  */
471   for (i = 0; i < arg->count; i++)
472     {
473       const cpp_token *token = arg->first[i];
474
475       if (token->type == CPP_PADDING)
476         {
477           if (source == NULL
478               || (!(source->flags & PREV_WHITE)
479                   && token->val.source == NULL))
480             source = token->val.source;
481           continue;
482         }
483
484       escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
485                    || token->type == CPP_WSTRING || token->type == CPP_WCHAR
486                    || token->type == CPP_STRING32 || token->type == CPP_CHAR32
487                    || token->type == CPP_STRING16 || token->type == CPP_CHAR16
488                    || token->type == CPP_UTF8STRING);
489
490       /* Room for each char being written in octal, initial space and
491          final quote and NUL.  */
492       len = cpp_token_len (token);
493       if (escape_it)
494         len *= 4;
495       len += 3;
496
497       if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
498         {
499           size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
500           _cpp_extend_buff (pfile, &pfile->u_buff, len);
501           dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
502         }
503
504       /* Leading white space?  */
505       if (dest - 1 != BUFF_FRONT (pfile->u_buff))
506         {
507           if (source == NULL)
508             source = token;
509           if (source->flags & PREV_WHITE)
510             *dest++ = ' ';
511         }
512       source = NULL;
513
514       if (escape_it)
515         {
516           _cpp_buff *buff = _cpp_get_buff (pfile, len);
517           unsigned char *buf = BUFF_FRONT (buff);
518           len = cpp_spell_token (pfile, token, buf, true) - buf;
519           dest = cpp_quote_string (dest, buf, len);
520           _cpp_release_buff (pfile, buff);
521         }
522       else
523         dest = cpp_spell_token (pfile, token, dest, true);
524
525       if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
526         backslash_count++;
527       else
528         backslash_count = 0;
529     }
530
531   /* Ignore the final \ of invalid string literals.  */
532   if (backslash_count & 1)
533     {
534       cpp_error (pfile, CPP_DL_WARNING,
535                  "invalid string literal, ignoring final '\\'");
536       dest--;
537     }
538
539   /* Commit the memory, including NUL, and return the token.  */
540   *dest++ = '"';
541   len = dest - BUFF_FRONT (pfile->u_buff);
542   BUFF_FRONT (pfile->u_buff) = dest + 1;
543   return new_string_token (pfile, dest - len, len);
544 }
545
546 /* Try to paste two tokens.  On success, return nonzero.  In any
547    case, PLHS is updated to point to the pasted token, which is
548    guaranteed to not have the PASTE_LEFT flag set.  LOCATION is
549    the virtual location used for error reporting.  */
550 static bool
551 paste_tokens (cpp_reader *pfile, source_location location,
552               const cpp_token **plhs, const cpp_token *rhs)
553 {
554   unsigned char *buf, *end, *lhsend;
555   cpp_token *lhs;
556   unsigned int len;
557
558   len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
559   buf = (unsigned char *) alloca (len);
560   end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
561
562   /* Avoid comment headers, since they are still processed in stage 3.
563      It is simpler to insert a space here, rather than modifying the
564      lexer to ignore comments in some circumstances.  Simply returning
565      false doesn't work, since we want to clear the PASTE_LEFT flag.  */
566   if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
567     *end++ = ' ';
568   /* In one obscure case we might see padding here.  */
569   if (rhs->type != CPP_PADDING)
570     end = cpp_spell_token (pfile, rhs, end, false);
571   *end = '\n';
572
573   cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
574   _cpp_clean_line (pfile);
575
576   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
577   pfile->cur_token = _cpp_temp_token (pfile);
578   lhs = _cpp_lex_direct (pfile);
579   if (pfile->buffer->cur != pfile->buffer->rlimit)
580     {
581       source_location saved_loc = lhs->src_loc;
582
583       _cpp_pop_buffer (pfile);
584       _cpp_backup_tokens (pfile, 1);
585       *lhsend = '\0';
586
587       /* We have to remove the PASTE_LEFT flag from the old lhs, but
588          we want to keep the new location.  */
589       *lhs = **plhs;
590       *plhs = lhs;
591       lhs->src_loc = saved_loc;
592       lhs->flags &= ~PASTE_LEFT;
593
594       /* Mandatory error for all apart from assembler.  */
595       if (CPP_OPTION (pfile, lang) != CLK_ASM)
596         cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
597          "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
598                    buf, cpp_token_as_text (pfile, rhs));
599       return false;
600     }
601
602   *plhs = lhs;
603   _cpp_pop_buffer (pfile);
604   return true;
605 }
606
607 /* Handles an arbitrarily long sequence of ## operators, with initial
608    operand LHS.  This implementation is left-associative,
609    non-recursive, and finishes a paste before handling succeeding
610    ones.  If a paste fails, we back up to the RHS of the failing ##
611    operator before pushing the context containing the result of prior
612    successful pastes, with the effect that the RHS appears in the
613    output stream after the pasted LHS normally.  */
614 static void
615 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
616 {
617   const cpp_token *rhs = NULL;
618   cpp_context *context = pfile->context;
619   source_location virt_loc = 0;
620
621   /* We are expanding a macro and we must have been called on a token
622      that appears at the left hand side of a ## operator.  */
623   if (macro_of_context (pfile->context) == NULL
624       || (!(lhs->flags & PASTE_LEFT)))
625     abort ();
626
627   if (context->tokens_kind == TOKENS_KIND_EXTENDED)
628     /* The caller must have called consume_next_token_from_context
629        right before calling us.  That has incremented the pointer to
630        the current virtual location.  So it now points to the location
631        of the token that comes right after *LHS.  We want the
632        resulting pasted token to have the location of the current
633        *LHS, though.  */
634     virt_loc = context->c.mc->cur_virt_loc[-1];
635   else
636     /* We are not tracking macro expansion.  So the best virtual
637        location we can get here is the expansion point of the macro we
638        are currently expanding.  */
639     virt_loc = pfile->invocation_location;
640
641   do
642     {
643       /* Take the token directly from the current context.  We can do
644          this, because we are in the replacement list of either an
645          object-like macro, or a function-like macro with arguments
646          inserted.  In either case, the constraints to #define
647          guarantee we have at least one more token.  */
648       if (context->tokens_kind == TOKENS_KIND_DIRECT)
649         rhs = FIRST (context).token++;
650       else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
651         rhs = *FIRST (context).ptoken++;
652       else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
653         {
654           /* So we are in presence of an extended token context, which
655              means that each token in this context has a virtual
656              location attached to it.  So let's not forget to update
657              the pointer to the current virtual location of the
658              current token when we update the pointer to the current
659              token */
660
661           rhs = *FIRST (context).ptoken++;
662           /* context->c.mc must be non-null, as if we were not in a
663              macro context, context->tokens_kind could not be equal to
664              TOKENS_KIND_EXTENDED.  */
665           context->c.mc->cur_virt_loc++;
666         }
667
668       if (rhs->type == CPP_PADDING)
669         {
670           if (rhs->flags & PASTE_LEFT)
671             abort ();
672         }
673       if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
674         break;
675     }
676   while (rhs->flags & PASTE_LEFT);
677
678   /* Put the resulting token in its own context.  */
679   if (context->tokens_kind == TOKENS_KIND_EXTENDED)
680     {
681       source_location *virt_locs = NULL;
682       _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
683       tokens_buff_add_token (token_buf, virt_locs, lhs,
684                              virt_loc, 0, NULL, 0);
685       push_extended_tokens_context (pfile, context->c.mc->macro_node,
686                                     token_buf, virt_locs,
687                                     (const cpp_token **)token_buf->base, 1);
688     }
689   else
690     _cpp_push_token_context (pfile, NULL, lhs, 1);
691 }
692
693 /* Returns TRUE if the number of arguments ARGC supplied in an
694    invocation of the MACRO referenced by NODE is valid.  An empty
695    invocation to a macro with no parameters should pass ARGC as zero.
696
697    Note that MACRO cannot necessarily be deduced from NODE, in case
698    NODE was redefined whilst collecting arguments.  */
699 bool
700 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
701 {
702   if (argc == macro->paramc)
703     return true;
704
705   if (argc < macro->paramc)
706     {
707       /* As an extension, a rest argument is allowed to not appear in
708          the invocation at all.
709          e.g. #define debug(format, args...) something
710          debug("string");
711
712          This is exactly the same as if there had been an empty rest
713          argument - debug("string", ).  */
714
715       if (argc + 1 == macro->paramc && macro->variadic)
716         {
717           if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
718             cpp_error (pfile, CPP_DL_PEDWARN,
719                        "ISO C99 requires rest arguments to be used");
720           return true;
721         }
722
723       cpp_error (pfile, CPP_DL_ERROR,
724                  "macro \"%s\" requires %u arguments, but only %u given",
725                  NODE_NAME (node), macro->paramc, argc);
726     }
727   else
728     cpp_error (pfile, CPP_DL_ERROR,
729                "macro \"%s\" passed %u arguments, but takes just %u",
730                NODE_NAME (node), argc, macro->paramc);
731
732   return false;
733 }
734
735 /* Reads and returns the arguments to a function-like macro
736    invocation.  Assumes the opening parenthesis has been processed.
737    If there is an error, emits an appropriate diagnostic and returns
738    NULL.  Each argument is terminated by a CPP_EOF token, for the
739    future benefit of expand_arg().  If there are any deferred
740    #pragma directives among macro arguments, store pointers to the
741    CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
742
743    What is returned is the buffer that contains the memory allocated
744    to hold the macro arguments.  NODE is the name of the macro this
745    function is dealing with.  If NUM_ARGS is non-NULL, *NUM_ARGS is
746    set to the actual number of macro arguments allocated in the
747    returned buffer.  */
748 static _cpp_buff *
749 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
750               _cpp_buff **pragma_buff, unsigned *num_args)
751 {
752   _cpp_buff *buff, *base_buff;
753   cpp_macro *macro;
754   macro_arg *args, *arg;
755   const cpp_token *token;
756   unsigned int argc;
757   source_location virt_loc;
758   bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
759   unsigned num_args_alloced = 0;
760
761   macro = node->value.macro;
762   if (macro->paramc)
763     argc = macro->paramc;
764   else
765     argc = 1;
766
767 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
768 #define ARG_TOKENS_EXTENT 1000
769
770   buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
771                                        * sizeof (cpp_token *)
772                                        + sizeof (macro_arg)));
773   base_buff = buff;
774   args = (macro_arg *) buff->base;
775   memset (args, 0, argc * sizeof (macro_arg));
776   buff->cur = (unsigned char *) &args[argc];
777   arg = args, argc = 0;
778
779   /* Collect the tokens making up each argument.  We don't yet know
780      how many arguments have been supplied, whether too many or too
781      few.  Hence the slightly bizarre usage of "argc" and "arg".  */
782   do
783     {
784       unsigned int paren_depth = 0;
785       unsigned int ntokens = 0;
786       unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
787       num_args_alloced++;
788
789       argc++;
790       arg->first = (const cpp_token **) buff->cur;
791       if (track_macro_expansion_p)
792         {
793           virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
794           arg->virt_locs = XNEWVEC (source_location,
795                                     virt_locs_capacity);
796         }
797
798       for (;;)
799         {
800           /* Require space for 2 new tokens (including a CPP_EOF).  */
801           if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
802             {
803               buff = _cpp_append_extend_buff (pfile, buff,
804                                               ARG_TOKENS_EXTENT
805                                               * sizeof (cpp_token *));
806               arg->first = (const cpp_token **) buff->cur;
807             }
808           if (track_macro_expansion_p
809               && (ntokens + 2 > virt_locs_capacity))
810             {
811               virt_locs_capacity += ARG_TOKENS_EXTENT;
812               arg->virt_locs = XRESIZEVEC (source_location,
813                                            arg->virt_locs,
814                                            virt_locs_capacity);
815             }
816
817           token = cpp_get_token_1 (pfile, &virt_loc);
818
819           if (token->type == CPP_PADDING)
820             {
821               /* Drop leading padding.  */
822               if (ntokens == 0)
823                 continue;
824             }
825           else if (token->type == CPP_OPEN_PAREN)
826             paren_depth++;
827           else if (token->type == CPP_CLOSE_PAREN)
828             {
829               if (paren_depth-- == 0)
830                 break;
831             }
832           else if (token->type == CPP_COMMA)
833             {
834               /* A comma does not terminate an argument within
835                  parentheses or as part of a variable argument.  */
836               if (paren_depth == 0
837                   && ! (macro->variadic && argc == macro->paramc))
838                 break;
839             }
840           else if (token->type == CPP_EOF
841                    || (token->type == CPP_HASH && token->flags & BOL))
842             break;
843           else if (token->type == CPP_PRAGMA)
844             {
845               cpp_token *newtok = _cpp_temp_token (pfile);
846
847               /* CPP_PRAGMA token lives in directive_result, which will
848                  be overwritten on the next directive.  */
849               *newtok = *token;
850               token = newtok;
851               do
852                 {
853                   if (*pragma_buff == NULL
854                       || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
855                     {
856                       _cpp_buff *next;
857                       if (*pragma_buff == NULL)
858                         *pragma_buff
859                           = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
860                       else
861                         {
862                           next = *pragma_buff;
863                           *pragma_buff
864                             = _cpp_get_buff (pfile,
865                                              (BUFF_FRONT (*pragma_buff)
866                                               - (*pragma_buff)->base) * 2);
867                           (*pragma_buff)->next = next;
868                         }
869                     }
870                   *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
871                   BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
872                   if (token->type == CPP_PRAGMA_EOL)
873                     break;
874                   token = cpp_get_token_1 (pfile, &virt_loc);
875                 }
876               while (token->type != CPP_EOF);
877
878               /* In deferred pragmas parsing_args and prevent_expansion
879                  had been changed, reset it.  */
880               pfile->state.parsing_args = 2;
881               pfile->state.prevent_expansion = 1;
882
883               if (token->type == CPP_EOF)
884                 break;
885               else
886                 continue;
887             }
888           set_arg_token (arg, token, virt_loc,
889                          ntokens, MACRO_ARG_TOKEN_NORMAL,
890                          CPP_OPTION (pfile, track_macro_expansion));
891           ntokens++;
892         }
893
894       /* Drop trailing padding.  */
895       while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
896         ntokens--;
897
898       arg->count = ntokens;
899       set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
900                      ntokens, MACRO_ARG_TOKEN_NORMAL,
901                      CPP_OPTION (pfile, track_macro_expansion));
902
903       /* Terminate the argument.  Excess arguments loop back and
904          overwrite the final legitimate argument, before failing.  */
905       if (argc <= macro->paramc)
906         {
907           buff->cur = (unsigned char *) &arg->first[ntokens + 1];
908           if (argc != macro->paramc)
909             arg++;
910         }
911     }
912   while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
913
914   if (token->type == CPP_EOF)
915     {
916       /* We still need the CPP_EOF to end directives, and to end
917          pre-expansion of a macro argument.  Step back is not
918          unconditional, since we don't want to return a CPP_EOF to our
919          callers at the end of an -include-d file.  */
920       if (pfile->context->prev || pfile->state.in_directive)
921         _cpp_backup_tokens (pfile, 1);
922       cpp_error (pfile, CPP_DL_ERROR,
923                  "unterminated argument list invoking macro \"%s\"",
924                  NODE_NAME (node));
925     }
926   else
927     {
928       /* A single empty argument is counted as no argument.  */
929       if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
930         argc = 0;
931       if (_cpp_arguments_ok (pfile, macro, node, argc))
932         {
933           /* GCC has special semantics for , ## b where b is a varargs
934              parameter: we remove the comma if b was omitted entirely.
935              If b was merely an empty argument, the comma is retained.
936              If the macro takes just one (varargs) parameter, then we
937              retain the comma only if we are standards conforming.
938
939              If FIRST is NULL replace_args () swallows the comma.  */
940           if (macro->variadic && (argc < macro->paramc
941                                   || (argc == 1 && args[0].count == 0
942                                       && !CPP_OPTION (pfile, std))))
943             args[macro->paramc - 1].first = NULL;
944           if (num_args)
945             *num_args = num_args_alloced;
946           return base_buff;
947         }
948     }
949
950   /* An error occurred.  */
951   _cpp_release_buff (pfile, base_buff);
952   return NULL;
953 }
954
955 /* Search for an opening parenthesis to the macro of NODE, in such a
956    way that, if none is found, we don't lose the information in any
957    intervening padding tokens.  If we find the parenthesis, collect
958    the arguments and return the buffer containing them.  PRAGMA_BUFF
959    argument is the same as in collect_args.  If NUM_ARGS is non-NULL,
960    *NUM_ARGS is set to the number of arguments contained in the
961    returned buffer.  */
962 static _cpp_buff *
963 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
964                       _cpp_buff **pragma_buff, unsigned *num_args)
965 {
966   const cpp_token *token, *padding = NULL;
967
968   for (;;)
969     {
970       token = cpp_get_token (pfile);
971       if (token->type != CPP_PADDING)
972         break;
973       if (padding == NULL
974           || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
975         padding = token;
976     }
977
978   if (token->type == CPP_OPEN_PAREN)
979     {
980       pfile->state.parsing_args = 2;
981       return collect_args (pfile, node, pragma_buff, num_args);
982     }
983
984   /* CPP_EOF can be the end of macro arguments, or the end of the
985      file.  We mustn't back up over the latter.  Ugh.  */
986   if (token->type != CPP_EOF || token == &pfile->eof)
987     {
988       /* Back up.  We may have skipped padding, in which case backing
989          up more than one token when expanding macros is in general
990          too difficult.  We re-insert it in its own context.  */
991       _cpp_backup_tokens (pfile, 1);
992       if (padding)
993         _cpp_push_token_context (pfile, NULL, padding, 1);
994     }
995
996   return NULL;
997 }
998
999 /* Return the real number of tokens in the expansion of MACRO.  */
1000 static inline unsigned int
1001 macro_real_token_count (const cpp_macro *macro)
1002 {
1003   unsigned int i;
1004   if (__builtin_expect (!macro->extra_tokens, true))
1005     return macro->count;
1006   for (i = 0; i < macro->count; i++)
1007     if (macro->exp.tokens[i].type == CPP_PASTE)
1008       return i;
1009   abort ();
1010 }
1011
1012 /* Push the context of a macro with hash entry NODE onto the context
1013    stack.  If we can successfully expand the macro, we push a context
1014    containing its yet-to-be-rescanned replacement list and return one.
1015    If there were additionally any unexpanded deferred #pragma
1016    directives among macro arguments, push another context containing
1017    the pragma tokens before the yet-to-be-rescanned replacement list
1018    and return two.  Otherwise, we don't push a context and return
1019    zero. LOCATION is the location of the expansion point of the
1020    macro.  */
1021 static int
1022 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
1023                      const cpp_token *result, source_location location)
1024 {
1025   /* The presence of a macro invalidates a file's controlling macro.  */
1026   pfile->mi_valid = false;
1027
1028   pfile->state.angled_headers = false;
1029
1030   /* From here to when we push the context for the macro later down
1031      this function, we need to flag the fact that we are about to
1032      expand a macro.  This is useful when -ftrack-macro-expansion is
1033      turned off.  In that case, we need to record the location of the
1034      expansion point of the top-most macro we are about to to expand,
1035      into pfile->invocation_location.  But we must not record any such
1036      location once the process of expanding the macro starts; that is,
1037      we must not do that recording between now and later down this
1038      function where set this flag to FALSE.  */
1039   pfile->about_to_expand_macro_p = true;
1040
1041   if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
1042     {
1043       node->flags |= NODE_USED;
1044       if ((!pfile->cb.user_builtin_macro
1045            || !pfile->cb.user_builtin_macro (pfile, node))
1046           && pfile->cb.used_define)
1047         pfile->cb.used_define (pfile, pfile->directive_line, node);
1048     }
1049
1050   /* Handle standard macros.  */
1051   if (! (node->flags & NODE_BUILTIN))
1052     {
1053       cpp_macro *macro = node->value.macro;
1054       _cpp_buff *pragma_buff = NULL;
1055
1056       if (macro->fun_like)
1057         {
1058           _cpp_buff *buff;
1059           unsigned num_args = 0;
1060
1061           pfile->state.prevent_expansion++;
1062           pfile->keep_tokens++;
1063           pfile->state.parsing_args = 1;
1064           buff = funlike_invocation_p (pfile, node, &pragma_buff,
1065                                        &num_args);
1066           pfile->state.parsing_args = 0;
1067           pfile->keep_tokens--;
1068           pfile->state.prevent_expansion--;
1069
1070           if (buff == NULL)
1071             {
1072               if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1073                 cpp_warning (pfile, CPP_W_TRADITIONAL,
1074  "function-like macro \"%s\" must be used with arguments in traditional C",
1075                              NODE_NAME (node));
1076
1077               if (pragma_buff)
1078                 _cpp_release_buff (pfile, pragma_buff);
1079
1080               pfile->about_to_expand_macro_p = false;
1081               return 0;
1082             }
1083
1084           if (macro->paramc > 0)
1085             replace_args (pfile, node, macro,
1086                           (macro_arg *) buff->base,
1087                           location);
1088           /* Free the memory used by the arguments of this
1089              function-like macro.  This memory has been allocated by
1090              funlike_invocation_p and by replace_args.  */
1091           delete_macro_args (buff, num_args);
1092         }
1093
1094       /* Disable the macro within its expansion.  */
1095       node->flags |= NODE_DISABLED;
1096
1097       if (!(node->flags & NODE_USED))
1098         {
1099           node->flags |= NODE_USED;
1100           if (pfile->cb.used_define)
1101             pfile->cb.used_define (pfile, pfile->directive_line, node);
1102         }
1103
1104       if (pfile->cb.used)
1105         pfile->cb.used (pfile, location, node);
1106
1107       macro->used = 1;
1108
1109       if (macro->paramc == 0)
1110         {
1111           if (CPP_OPTION (pfile, track_macro_expansion))
1112             {
1113               unsigned int i, count = macro->count;
1114               const cpp_token *src = macro->exp.tokens;
1115               const struct line_map *map;
1116               source_location *virt_locs = NULL;
1117               _cpp_buff *macro_tokens =
1118                 tokens_buff_new (pfile, count, &virt_locs);
1119
1120               /* Create a macro map to record the locations of the
1121                  tokens that are involved in the expansion. LOCATION
1122                  is the location of the macro expansion point.  */
1123               map  = linemap_enter_macro (pfile->line_table,
1124                                           node, location, count);
1125               for (i = 0; i < count; ++i)
1126                 {
1127                   tokens_buff_add_token (macro_tokens, virt_locs,
1128                                          src, src->src_loc,
1129                                          src->src_loc, map, i);
1130                   ++src;
1131                 }
1132               push_extended_tokens_context (pfile, node,
1133                                             macro_tokens,
1134                                             virt_locs,
1135                                             (const cpp_token **)
1136                                             macro_tokens->base,
1137                                             count);
1138               num_macro_tokens_counter += count;
1139             }
1140           else
1141             {
1142               unsigned tokens_count = macro_real_token_count (macro);
1143               _cpp_push_token_context (pfile, node, macro->exp.tokens,
1144                                        tokens_count);
1145               num_macro_tokens_counter += tokens_count;
1146             }
1147         }
1148
1149       if (pragma_buff)
1150         {
1151           if (!pfile->state.in_directive)
1152             _cpp_push_token_context (pfile, NULL,
1153                                      padding_token (pfile, result), 1);
1154           do
1155             {
1156               unsigned tokens_count;
1157               _cpp_buff *tail = pragma_buff->next;
1158               pragma_buff->next = NULL;
1159               tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1160                               - (const cpp_token **) pragma_buff->base);
1161               push_ptoken_context (pfile, NULL, pragma_buff,
1162                                    (const cpp_token **) pragma_buff->base,
1163                                    tokens_count);
1164               pragma_buff = tail;
1165               if (!CPP_OPTION (pfile, track_macro_expansion))
1166                 num_macro_tokens_counter += tokens_count;
1167
1168             }
1169           while (pragma_buff != NULL);
1170           pfile->about_to_expand_macro_p = false;
1171           return 2;
1172         }
1173
1174       pfile->about_to_expand_macro_p = false;
1175       return 1;
1176     }
1177
1178   pfile->about_to_expand_macro_p = false;
1179   /* Handle built-in macros and the _Pragma operator.  */
1180   return builtin_macro (pfile, node);
1181 }
1182
1183 /* De-allocate the memory used by BUFF which is an array of instances
1184    of macro_arg.  NUM_ARGS is the number of instances of macro_arg
1185    present in BUFF.  */
1186 static void
1187 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1188 {
1189   macro_arg *macro_args;
1190   unsigned i;
1191
1192   if (buff == NULL)
1193     return;
1194
1195   macro_args = (macro_arg *) buff->base;
1196
1197   /* Walk instances of macro_arg to free their expanded tokens as well
1198      as their macro_arg::virt_locs members.  */
1199   for (i = 0; i < num_args; ++i)
1200     {
1201       if (macro_args[i].expanded)
1202         {
1203           free (macro_args[i].expanded);
1204           macro_args[i].expanded = NULL;
1205         }
1206       if (macro_args[i].virt_locs)
1207         {
1208           free (macro_args[i].virt_locs);
1209           macro_args[i].virt_locs = NULL;
1210         }
1211       if (macro_args[i].expanded_virt_locs)
1212         {
1213           free (macro_args[i].expanded_virt_locs);
1214           macro_args[i].expanded_virt_locs = NULL;
1215         }
1216     }
1217   _cpp_free_buff (buff);
1218 }
1219
1220 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1221    to set, LOCATION is its virtual location.  "Virtual" location means
1222    the location that encodes loci across macro expansion. Otherwise
1223    it has to be TOKEN->SRC_LOC.  KIND is the kind of tokens the
1224    argument ARG is supposed to contain.  Note that ARG must be
1225    tailored so that it has enough room to contain INDEX + 1 numbers of
1226    tokens, at least.  */
1227 static void
1228 set_arg_token (macro_arg *arg, const cpp_token *token,
1229                source_location location, size_t index,
1230                enum macro_arg_token_kind kind,
1231                bool track_macro_exp_p)
1232 {
1233   const cpp_token **token_ptr;
1234   source_location *loc = NULL;
1235
1236   token_ptr =
1237     arg_token_ptr_at (arg, index, kind,
1238                       track_macro_exp_p ? &loc : NULL);
1239   *token_ptr = token;
1240
1241   if (loc != NULL)
1242     {
1243 #ifdef ENABLE_CHECKING
1244       if (kind == MACRO_ARG_TOKEN_STRINGIFIED
1245           || !track_macro_exp_p)
1246         /* We can't set the location of a stringified argument
1247            token and we can't set any location if we aren't tracking
1248            macro expansion locations.   */
1249         abort ();
1250 #endif
1251       *loc = location;
1252     }
1253 }
1254
1255 /* Get the pointer to the location of the argument token of the
1256    function-like macro argument ARG.  This function must be called
1257    only when we -ftrack-macro-expansion is on.  */
1258 static const source_location *
1259 get_arg_token_location (const macro_arg *arg,
1260                         enum macro_arg_token_kind kind)
1261 {
1262   const source_location *loc = NULL;
1263   const cpp_token **token_ptr =
1264     arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1265
1266   if (token_ptr == NULL)
1267     return NULL;
1268
1269   return loc;
1270 }
1271
1272 /* Return the pointer to the INDEXth token of the macro argument ARG.
1273    KIND specifies the kind of token the macro argument ARG contains.
1274    If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1275    of the virtual location of the returned token if the
1276    -ftrack-macro-expansion flag is on; otherwise, it's set to the
1277    spelling location of the returned token.  */
1278 static const cpp_token **
1279 arg_token_ptr_at (const macro_arg *arg, size_t index,
1280                   enum macro_arg_token_kind kind,
1281                   source_location **virt_location)
1282 {
1283   const cpp_token **tokens_ptr = NULL;
1284
1285   switch (kind)
1286     {
1287     case MACRO_ARG_TOKEN_NORMAL:
1288       tokens_ptr = arg->first;
1289       break;
1290     case MACRO_ARG_TOKEN_STRINGIFIED:      
1291       tokens_ptr = (const cpp_token **) &arg->stringified;
1292       break;
1293     case MACRO_ARG_TOKEN_EXPANDED:
1294         tokens_ptr = arg->expanded;
1295       break;
1296     }
1297
1298   if (tokens_ptr == NULL)
1299     /* This can happen for e.g, an empty token argument to a
1300        funtion-like macro.  */
1301     return tokens_ptr;
1302
1303   if (virt_location)
1304     {
1305       if (kind == MACRO_ARG_TOKEN_NORMAL)
1306         *virt_location = &arg->virt_locs[index];
1307       else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1308         *virt_location = &arg->expanded_virt_locs[index];
1309       else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1310         *virt_location =
1311           (source_location *) &tokens_ptr[index]->src_loc;
1312     }
1313   return &tokens_ptr[index];
1314 }
1315
1316 /* Initialize an iterator so that it iterates over the tokens of a
1317    function-like macro argument.  KIND is the kind of tokens we want
1318    ITER to iterate over. TOKEN_PTR points the first token ITER will
1319    iterate over.  */
1320 static void
1321 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1322                            bool track_macro_exp_p,
1323                            enum macro_arg_token_kind kind,
1324                            const macro_arg *arg,
1325                            const cpp_token **token_ptr)
1326 {
1327   iter->track_macro_exp_p = track_macro_exp_p;
1328   iter->kind = kind;
1329   iter->token_ptr = token_ptr;
1330   /* Unconditionally initialize this so that the compiler doesn't warn
1331      about iter->location_ptr being possibly uninitialized later after
1332      this code has been inlined somewhere.  */
1333   iter->location_ptr = NULL;
1334   if (track_macro_exp_p)
1335     iter->location_ptr = get_arg_token_location (arg, kind);
1336 #ifdef ENABLE_CHECKING
1337   iter->num_forwards = 0;
1338   if (track_macro_exp_p
1339       && token_ptr != NULL
1340       && iter->location_ptr == NULL)
1341     abort ();
1342 #endif
1343 }
1344
1345 /* Move the iterator one token forward. Note that if IT was
1346    initialized on an argument that has a stringified token, moving it
1347    forward doesn't make sense as a stringified token is essentially one
1348    string.  */
1349 static void
1350 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1351 {
1352   switch (it->kind)
1353     {
1354     case MACRO_ARG_TOKEN_NORMAL:
1355     case MACRO_ARG_TOKEN_EXPANDED:
1356       it->token_ptr++;
1357       if (it->track_macro_exp_p)
1358         it->location_ptr++;
1359       break;
1360     case MACRO_ARG_TOKEN_STRINGIFIED:
1361 #ifdef ENABLE_CHECKING
1362       if (it->num_forwards > 0)
1363         abort ();
1364 #endif
1365       break;
1366     }
1367
1368 #ifdef ENABLE_CHECKING
1369   it->num_forwards++;
1370 #endif
1371 }
1372
1373 /* Return the token pointed to by the iterator.  */
1374 static const cpp_token *
1375 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1376 {
1377 #ifdef ENABLE_CHECKING
1378   if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1379       && it->num_forwards > 0)
1380     abort ();
1381 #endif
1382   if (it->token_ptr == NULL)
1383     return NULL;
1384   return *it->token_ptr;
1385 }
1386
1387 /* Return the location of the token pointed to by the iterator.*/
1388 static source_location
1389 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1390 {
1391 #ifdef ENABLE_CHECKING
1392   if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1393       && it->num_forwards > 0)
1394     abort ();
1395 #endif
1396   if (it->track_macro_exp_p)
1397     return *it->location_ptr;
1398   else
1399     return (*it->token_ptr)->src_loc;
1400 }
1401
1402 /* Return the index of a token [resulting from macro expansion] inside
1403    the total list of tokens resulting from a given macro
1404    expansion. The index can be different depending on whether if we
1405    want each tokens resulting from function-like macro arguments
1406    expansion to have a different location or not.
1407
1408    E.g, consider this function-like macro: 
1409
1410         #define M(x) x - 3
1411
1412    Then consider us "calling" it (and thus expanding it) like:
1413    
1414        M(1+4)
1415
1416    It will be expanded into:
1417
1418        1+4-3
1419
1420    Let's consider the case of the token '4'.
1421
1422    Its index can be 2 (it's the third token of the set of tokens
1423    resulting from the expansion) or it can be 0 if we consider that
1424    all tokens resulting from the expansion of the argument "1+2" have
1425    the same index, which is 0. In this later case, the index of token
1426    '-' would then be 1 and the index of token '3' would be 2.
1427
1428    The later case is useful to use less memory e.g, for the case of
1429    the user using the option -ftrack-macro-expansion=1.
1430
1431    ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1432    are interested in.  CUR_REPLACEMENT_TOKEN is the token of the macro
1433    parameter (inside the macro replacement list) that corresponds to
1434    the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1435    of.
1436
1437    If we refer to the example above, for the '4' argument token,
1438    ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1439    would be set to the token 'x', in the replacement list "x - 3" of
1440    macro M.
1441
1442    This is a subroutine of replace_args.  */
1443 inline static unsigned
1444 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1445                       const cpp_token *cur_replacement_token,
1446                       unsigned absolute_token_index)
1447 {
1448   if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1449     return absolute_token_index;
1450   return cur_replacement_token - macro->exp.tokens;
1451 }
1452
1453 /* Replace the parameters in a function-like macro of NODE with the
1454    actual ARGS, and place the result in a newly pushed token context.
1455    Expand each argument before replacing, unless it is operated upon
1456    by the # or ## operators. EXPANSION_POINT_LOC is the location of
1457    the expansion point of the macro. E.g, the location of the
1458    function-like macro invocation.  */
1459 static void
1460 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1461               macro_arg *args, source_location expansion_point_loc)
1462 {
1463   unsigned int i, total;
1464   const cpp_token *src, *limit;
1465   const cpp_token **first = NULL;
1466   macro_arg *arg;
1467   _cpp_buff *buff = NULL;
1468   source_location *virt_locs = NULL;
1469   unsigned int exp_count;
1470   const struct line_map *map = NULL;
1471   int track_macro_exp;
1472
1473   /* First, fully macro-expand arguments, calculating the number of
1474      tokens in the final expansion as we go.  The ordering of the if
1475      statements below is subtle; we must handle stringification before
1476      pasting.  */
1477
1478   /* EXP_COUNT is the number of tokens in the macro replacement
1479      list.  TOTAL is the number of tokens /after/ macro parameters
1480      have been replaced by their arguments.   */
1481   exp_count = macro_real_token_count (macro);
1482   total = exp_count;
1483   limit = macro->exp.tokens + exp_count;
1484
1485   for (src = macro->exp.tokens; src < limit; src++)
1486     if (src->type == CPP_MACRO_ARG)
1487       {
1488         /* Leading and trailing padding tokens.  */
1489         total += 2;
1490         /* Account for leading and padding tokens in exp_count too.
1491            This is going to be important later down this function,
1492            when we want to handle the case of (track_macro_exp <
1493            2).  */
1494         exp_count += 2;
1495
1496         /* We have an argument.  If it is not being stringified or
1497            pasted it is macro-replaced before insertion.  */
1498         arg = &args[src->val.macro_arg.arg_no - 1];
1499
1500         if (src->flags & STRINGIFY_ARG)
1501           {
1502             if (!arg->stringified)
1503               arg->stringified = stringify_arg (pfile, arg);
1504           }
1505         else if ((src->flags & PASTE_LEFT)
1506                  || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1507           total += arg->count - 1;
1508         else
1509           {
1510             if (!arg->expanded)
1511               expand_arg (pfile, arg);
1512             total += arg->expanded_count - 1;
1513           }
1514       }
1515
1516   /* When the compiler is called with the -ftrack-macro-expansion
1517      flag, we need to keep track of the location of each token that
1518      results from macro expansion.
1519
1520      A token resulting from macro expansion is not a new token. It is
1521      simply the same token as the token coming from the macro
1522      definition.  The new things that are allocated are the buffer
1523      that holds the tokens resulting from macro expansion and a new
1524      location that records many things like the locus of the expansion
1525      point as well as the original locus inside the definition of the
1526      macro.  This location is called a virtual location.
1527      
1528      So the buffer BUFF holds a set of cpp_token*, and the buffer
1529      VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1530
1531      Both of these two buffers are going to be hung off of the macro
1532      context, when the latter is pushed.  The memory allocated to
1533      store the tokens and their locations is going to be freed once
1534      the context of macro expansion is popped.
1535      
1536      As far as tokens are concerned, the memory overhead of
1537      -ftrack-macro-expansion is proportional to the number of
1538      macros that get expanded multiplied by sizeof (source_location).
1539      The good news is that extra memory gets freed when the macro
1540      context is freed, i.e shortly after the macro got expanded.  */
1541
1542   /* Is the -ftrack-macro-expansion flag in effect?  */
1543   track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1544
1545   /* Now allocate memory space for tokens and locations resulting from
1546      the macro expansion, copy the tokens and replace the arguments.
1547      This memory must be freed when the context of the macro MACRO is
1548      popped.  */
1549   buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1550
1551   first = (const cpp_token **) buff->base;
1552
1553   /* Create a macro map to record the locations of the tokens that are
1554      involved in the expansion.  Note that the expansion point is set
1555      to the location of the closing parenthesis.  Otherwise, the
1556      subsequent map created for the first token that comes after the
1557      macro map might have a wrong line number.  That would lead to
1558      tokens with wrong line numbers after the macro expansion.  This
1559      adds up to the memory overhead of the -ftrack-macro-expansion
1560      flag; for every macro that is expanded, a "macro map" is
1561      created.  */
1562   if (track_macro_exp)
1563     {
1564       int num_macro_tokens = total;
1565       if (track_macro_exp < 2)
1566         /* Then the number of macro tokens won't take in account the
1567            fact that function-like macro arguments can expand to
1568            multiple tokens. This is to save memory at the expense of
1569            accuracy.
1570
1571            Suppose we have #define SQARE(A) A * A
1572
1573            And then we do SQARE(2+3)
1574
1575            Then the tokens 2, +, 3, will have the same location,
1576            saying they come from the expansion of the argument A.  */
1577         num_macro_tokens = exp_count;
1578       map = linemap_enter_macro (pfile->line_table, node,
1579                                  expansion_point_loc,
1580                                  num_macro_tokens);
1581     }
1582   i = 0;
1583   for (src = macro->exp.tokens; src < limit; src++)
1584     {
1585       unsigned int arg_tokens_count;
1586       macro_arg_token_iter from;
1587       const cpp_token **paste_flag = NULL;
1588       const cpp_token **tmp_token_ptr;
1589
1590       if (src->type != CPP_MACRO_ARG)
1591         {
1592           /* Allocate a virtual location for token SRC, and add that
1593              token and its virtual location into the buffers BUFF and
1594              VIRT_LOCS.  */
1595           unsigned index = expanded_token_index (pfile, macro, src, i);
1596           tokens_buff_add_token (buff, virt_locs, src,
1597                                  src->src_loc, src->src_loc,
1598                                  map, index);
1599           i += 1;
1600           continue;
1601         }
1602
1603       paste_flag = 0;
1604       arg = &args[src->val.macro_arg.arg_no - 1];
1605       /* SRC is a macro parameter that we need to replace with its
1606          corresponding argument.  So at some point we'll need to
1607          iterate over the tokens of the macro argument and copy them
1608          into the "place" now holding the correspondig macro
1609          parameter.  We are going to use the iterator type
1610          macro_argo_token_iter to handle that iterating.  The 'if'
1611          below is to initialize the iterator depending on the type of
1612          tokens the macro argument has.  It also does some adjustment
1613          related to padding tokens and some pasting corner cases.  */
1614       if (src->flags & STRINGIFY_ARG)
1615         {
1616           arg_tokens_count = 1;
1617           macro_arg_token_iter_init (&from,
1618                                      CPP_OPTION (pfile,
1619                                                  track_macro_expansion),
1620                                      MACRO_ARG_TOKEN_STRINGIFIED,
1621                                      arg, &arg->stringified);
1622         }
1623       else if (src->flags & PASTE_LEFT)
1624         {
1625           arg_tokens_count = arg->count;
1626           macro_arg_token_iter_init (&from,
1627                                      CPP_OPTION (pfile,
1628                                                  track_macro_expansion),
1629                                      MACRO_ARG_TOKEN_NORMAL,
1630                                      arg, arg->first);
1631         }
1632       else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1633         {
1634           int num_toks;
1635           arg_tokens_count = arg->count;
1636           macro_arg_token_iter_init (&from,
1637                                      CPP_OPTION (pfile,
1638                                                  track_macro_expansion),
1639                                      MACRO_ARG_TOKEN_NORMAL,
1640                                      arg, arg->first);
1641
1642           num_toks = tokens_buff_count (buff);
1643
1644           if (num_toks != 0)
1645             {
1646               /* So the current parameter token is pasted to the previous
1647                  token in the replacement list.  Let's look at what
1648                  we have as previous and current arguments.  */
1649
1650               /* This is the previous argument's token ...  */
1651               tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1652
1653               if ((*tmp_token_ptr)->type == CPP_COMMA
1654                   && macro->variadic
1655                   && src->val.macro_arg.arg_no == macro->paramc)
1656                 {
1657                   /* ... which is a comma; and the current parameter
1658                      is the last parameter of a variadic function-like
1659                      macro.  If the argument to the current last
1660                      parameter is NULL, then swallow the comma,
1661                      otherwise drop the paste flag.  */
1662                   if (macro_arg_token_iter_get_token (&from) == NULL)
1663                     tokens_buff_remove_last_token (buff);
1664                   else
1665                     paste_flag = tmp_token_ptr;
1666                 }
1667               /* Remove the paste flag if the RHS is a placemarker.  */
1668               else if (arg_tokens_count == 0)
1669                 paste_flag = tmp_token_ptr;
1670             }
1671         }
1672       else
1673         {
1674           arg_tokens_count = arg->expanded_count;
1675           macro_arg_token_iter_init (&from,
1676                                      CPP_OPTION (pfile,
1677                                                  track_macro_expansion),
1678                                      MACRO_ARG_TOKEN_EXPANDED,
1679                                      arg, arg->expanded);
1680         }
1681
1682       /* Padding on the left of an argument (unless RHS of ##).  */
1683       if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
1684           && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1685         {
1686           const cpp_token *t = padding_token (pfile, src);
1687           unsigned index = expanded_token_index (pfile, macro, src, i);
1688           /* Allocate a virtual location for the padding token and
1689              append the token and its location to BUFF and
1690              VIRT_LOCS.   */
1691           tokens_buff_add_token (buff, virt_locs, t,
1692                                  t->src_loc, t->src_loc,
1693                                  map, index);
1694         }
1695
1696       if (arg_tokens_count)
1697         {
1698           /* So now we've got the number of tokens that make up the
1699              argument that is going to replace the current parameter
1700              in the macro's replacement list.  */
1701           unsigned int j;
1702           for (j = 0; j < arg_tokens_count; ++j)
1703             {
1704               /* So if track_macro_exp is < 2, the user wants to
1705                  save extra memory while tracking macro expansion
1706                  locations.  So in that case here is what we do:
1707
1708                  Suppose we have #define SQARE(A) A * A
1709
1710                  And then we do SQARE(2+3)
1711
1712                  Then the tokens 2, +, 3, will have the same location,
1713                  saying they come from the expansion of the argument
1714                  A.
1715
1716               So that means we are going to ignore the COUNT tokens
1717               resulting from the expansion of the current macro
1718               arugment. In other words all the ARG_TOKENS_COUNT tokens
1719               resulting from the expansion of the macro argument will
1720               have the index I. Normally, each of those token should
1721               have index I+J.  */
1722               unsigned token_index = i;
1723               unsigned index;
1724               if (track_macro_exp > 1)
1725                 token_index += j;
1726
1727               index = expanded_token_index (pfile, macro, src, token_index);
1728               tokens_buff_add_token (buff, virt_locs,
1729                                      macro_arg_token_iter_get_token (&from),
1730                                      macro_arg_token_iter_get_location (&from),
1731                                      src->src_loc, map, index);
1732               macro_arg_token_iter_forward (&from);
1733             }
1734
1735           /* With a non-empty argument on the LHS of ##, the last
1736              token should be flagged PASTE_LEFT.  */
1737           if (src->flags & PASTE_LEFT)
1738             paste_flag =
1739               (const cpp_token **) tokens_buff_last_token_ptr (buff);
1740         }
1741       else if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1742                && ! CPP_OPTION (pfile, c99)
1743                && ! cpp_in_system_header (pfile))
1744         {
1745           cpp_error (pfile, CPP_DL_PEDWARN,
1746                      "invoking macro %s argument %d: "
1747                      "empty macro arguments are undefined"
1748                      " in ISO C90 and ISO C++98",
1749                      NODE_NAME (node),
1750                      src->val.macro_arg.arg_no);
1751         }
1752
1753       /* Avoid paste on RHS (even case count == 0).  */
1754       if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1755         {
1756           const cpp_token *t = &pfile->avoid_paste;
1757           tokens_buff_add_token (buff, virt_locs,
1758                                  t, t->src_loc, t->src_loc,
1759                                  NULL, 0);
1760         }
1761
1762       /* Add a new paste flag, or remove an unwanted one.  */
1763       if (paste_flag)
1764         {
1765           cpp_token *token = _cpp_temp_token (pfile);
1766           token->type = (*paste_flag)->type;
1767           token->val = (*paste_flag)->val;
1768           if (src->flags & PASTE_LEFT)
1769             token->flags = (*paste_flag)->flags | PASTE_LEFT;
1770           else
1771             token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1772           *paste_flag = token;
1773         }
1774
1775       i += arg_tokens_count;
1776     }
1777
1778   if (track_macro_exp)
1779     push_extended_tokens_context (pfile, node, buff, virt_locs, first,
1780                                   tokens_buff_count (buff));
1781   else
1782     push_ptoken_context (pfile, node, buff, first,
1783                          tokens_buff_count (buff));
1784
1785   num_macro_tokens_counter += tokens_buff_count (buff);
1786 }
1787
1788 /* Return a special padding token, with padding inherited from SOURCE.  */
1789 static const cpp_token *
1790 padding_token (cpp_reader *pfile, const cpp_token *source)
1791 {
1792   cpp_token *result = _cpp_temp_token (pfile);
1793
1794   result->type = CPP_PADDING;
1795
1796   /* Data in GCed data structures cannot be made const so far, so we
1797      need a cast here.  */
1798   result->val.source = (cpp_token *) source;
1799   result->flags = 0;
1800   return result;
1801 }
1802
1803 /* Get a new uninitialized context.  Create a new one if we cannot
1804    re-use an old one.  */
1805 static cpp_context *
1806 next_context (cpp_reader *pfile)
1807 {
1808   cpp_context *result = pfile->context->next;
1809
1810   if (result == 0)
1811     {
1812       result = XNEW (cpp_context);
1813       memset (result, 0, sizeof (cpp_context));
1814       result->prev = pfile->context;
1815       result->next = 0;
1816       pfile->context->next = result;
1817     }
1818
1819   pfile->context = result;
1820   return result;
1821 }
1822
1823 /* Push a list of pointers to tokens.  */
1824 static void
1825 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1826                      const cpp_token **first, unsigned int count)
1827 {
1828   cpp_context *context = next_context (pfile);
1829
1830   context->tokens_kind = TOKENS_KIND_INDIRECT;
1831   context->c.macro = macro;
1832   context->buff = buff;
1833   FIRST (context).ptoken = first;
1834   LAST (context).ptoken = first + count;
1835 }
1836
1837 /* Push a list of tokens.
1838
1839    A NULL macro means that we should continue the current macro
1840    expansion, in essence.  That means that if we are currently in a
1841    macro expansion context, we'll make the new pfile->context refer to
1842    the current macro.  */
1843 void
1844 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1845                          const cpp_token *first, unsigned int count)
1846 {
1847   cpp_context *context;
1848
1849    if (macro == NULL)
1850      macro = macro_of_context (pfile->context);
1851
1852    context = next_context (pfile);
1853    context->tokens_kind = TOKENS_KIND_DIRECT;
1854    context->c.macro = macro;
1855    context->buff = NULL;
1856    FIRST (context).token = first;
1857    LAST (context).token = first + count;
1858 }
1859
1860 /* Build a context containing a list of tokens as well as their
1861    virtual locations and push it.  TOKENS_BUFF is the buffer that
1862    contains the tokens pointed to by FIRST.  If TOKENS_BUFF is
1863    non-NULL, it means that the context owns it, meaning that
1864    _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
1865    contains the virtual locations.
1866
1867    A NULL macro means that we should continue the current macro
1868    expansion, in essence.  That means that if we are currently in a
1869    macro expansion context, we'll make the new pfile->context refer to
1870    the current macro.  */
1871 static void
1872 push_extended_tokens_context (cpp_reader *pfile,
1873                               cpp_hashnode *macro,
1874                               _cpp_buff *token_buff,
1875                               source_location *virt_locs,
1876                               const cpp_token **first,
1877                               unsigned int count)
1878 {
1879   cpp_context *context;
1880   macro_context *m;
1881
1882   if (macro == NULL)
1883     macro = macro_of_context (pfile->context);
1884
1885   context = next_context (pfile);
1886   context->tokens_kind = TOKENS_KIND_EXTENDED;
1887   context->buff = token_buff;
1888
1889   m = XNEW (macro_context);
1890   m->macro_node = macro;
1891   m->virt_locs = virt_locs;
1892   m->cur_virt_loc = virt_locs;
1893   context->c.mc = m;
1894   FIRST (context).ptoken = first;
1895   LAST (context).ptoken = first + count;
1896 }
1897
1898 /* Push a traditional macro's replacement text.  */
1899 void
1900 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1901                         const uchar *start, size_t len)
1902 {
1903   cpp_context *context = next_context (pfile);
1904
1905   context->tokens_kind = TOKENS_KIND_DIRECT;
1906   context->c.macro = macro;
1907   context->buff = NULL;
1908   CUR (context) = start;
1909   RLIMIT (context) = start + len;
1910   macro->flags |= NODE_DISABLED;
1911 }
1912
1913 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
1914    for the purpose of storing them on a cpp_context. If VIRT_LOCS is
1915    non-null (which means that -ftrack-macro-expansion is on),
1916    *VIRT_LOCS is set to a newly allocated buffer that is supposed to
1917    hold the virtual locations of the tokens resulting from macro
1918    expansion.  */
1919 static _cpp_buff*
1920 tokens_buff_new (cpp_reader *pfile, size_t len,
1921                  source_location **virt_locs)
1922 {
1923   size_t tokens_size = len * sizeof (cpp_token *);
1924   size_t locs_size = len * sizeof (source_location);
1925
1926   if (virt_locs != NULL)
1927     *virt_locs = XNEWVEC (source_location, locs_size);
1928   return _cpp_get_buff (pfile, tokens_size);
1929 }
1930
1931 /* Returns the number of tokens contained in a token buffer.  The
1932    buffer holds a set of cpp_token*.  */
1933 static size_t
1934 tokens_buff_count (_cpp_buff *buff)
1935 {
1936   return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
1937 }
1938
1939 /* Return a pointer to the last token contained in the token buffer
1940    BUFF.  */
1941 static const cpp_token **
1942 tokens_buff_last_token_ptr (_cpp_buff *buff)
1943 {
1944   return &((const cpp_token **) BUFF_FRONT (buff))[-1];
1945 }
1946
1947 /* Remove the last token contained in the token buffer TOKENS_BUFF.
1948    If VIRT_LOCS_BUFF is non-NULL,  it should point at the buffer
1949    containing the virtual locations of the tokens in TOKENS_BUFF; in
1950    which case the function updates that buffer as well.   */
1951 static inline void
1952 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
1953
1954 {
1955   if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
1956     BUFF_FRONT (tokens_buff) =
1957       (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
1958 }
1959
1960 /* Insert a token into the token buffer at the position pointed to by
1961    DEST.  Note that the buffer is not enlarged so the previous token
1962    that was at *DEST is overwritten.  VIRT_LOC_DEST, if non-null,
1963    means -ftrack-macro-expansion is effect; it then points to where to
1964    insert the virtual location of TOKEN.  TOKEN is the token to
1965    insert.  VIRT_LOC is the virtual location of the token, i.e, the
1966    location possibly encoding its locus across macro expansion.  If
1967    TOKEN is an argument of a function-like macro (inside a macro
1968    replacement list), PARM_DEF_LOC is the spelling location of the
1969    macro parameter that TOKEN is replacing, in the replacement list of
1970    the macro.  If TOKEN is not an argument of a function-like macro or
1971    if it doesn't come from a macro expansion, then VIRT_LOC can just
1972    be set to the same value as PARM_DEF_LOC.  If MAP is non null, it
1973    means TOKEN comes from a macro expansion and MAP is the macro map
1974    associated to the macro.  MACRO_TOKEN_INDEX points to the index of
1975    the token in the macro map; it is not considered if MAP is NULL.
1976
1977    Upon successful completion this function returns the a pointer to
1978    the position of the token coming right after the insertion
1979    point.  */
1980 static inline const cpp_token **
1981 tokens_buff_put_token_to (const cpp_token **dest,
1982                           source_location *virt_loc_dest,
1983                           const cpp_token *token,
1984                           source_location virt_loc,
1985                           source_location parm_def_loc,                   
1986                           const struct line_map *map,
1987                           unsigned int macro_token_index)
1988 {
1989   source_location macro_loc = virt_loc;
1990   const cpp_token **result;
1991
1992   if (virt_loc_dest)
1993     {
1994       /* -ftrack-macro-expansion is on.  */
1995       if (map)
1996         macro_loc = linemap_add_macro_token (map, macro_token_index,
1997                                              virt_loc, parm_def_loc);
1998       *virt_loc_dest = macro_loc;
1999     }
2000   *dest = token;
2001   result = &dest[1];
2002
2003   return result;
2004 }
2005
2006 /* Adds a token at the end of the tokens contained in BUFFER.  Note
2007    that this function doesn't enlarge BUFFER when the number of tokens
2008    reaches BUFFER's size; it aborts in that situation.
2009
2010    TOKEN is the token to append. VIRT_LOC is the virtual location of
2011    the token, i.e, the location possibly encoding its locus across
2012    macro expansion. If TOKEN is an argument of a function-like macro
2013    (inside a macro replacement list), PARM_DEF_LOC is the location of
2014    the macro parameter that TOKEN is replacing.  If TOKEN doesn't come
2015    from a macro expansion, then VIRT_LOC can just be set to the same
2016    value as PARM_DEF_LOC.  If MAP is non null, it means TOKEN comes
2017    from a macro expansion and MAP is the macro map associated to the
2018    macro.  MACRO_TOKEN_INDEX points to the index of the token in the
2019    macro map; It is not considered if MAP is NULL.  If VIRT_LOCS is
2020    non-null, it means -ftrack-macro-expansion is on; in which case
2021    this function adds the virtual location DEF_LOC to the VIRT_LOCS
2022    array, at the same index as the one of TOKEN in BUFFER.  Upon
2023    successful completion this function returns the a pointer to the
2024    position of the token coming right after the insertion point.  */
2025 static const cpp_token **
2026 tokens_buff_add_token (_cpp_buff *buffer,
2027                        source_location *virt_locs,
2028                        const cpp_token *token,
2029                        source_location virt_loc,
2030                        source_location parm_def_loc,
2031                        const struct line_map *map,
2032                        unsigned int macro_token_index)
2033 {
2034   const cpp_token **result;
2035   source_location *virt_loc_dest = NULL;
2036   unsigned token_index = 
2037     (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2038
2039   /* Abort if we pass the end the buffer.  */
2040   if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2041     abort ();
2042
2043   if (virt_locs != NULL)
2044     virt_loc_dest = &virt_locs[token_index];
2045
2046   result =
2047     tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2048                               virt_loc_dest, token, virt_loc, parm_def_loc,
2049                               map, macro_token_index);
2050
2051   BUFF_FRONT (buffer) = (unsigned char *) result;
2052   return result;
2053 }
2054
2055 /* Allocate space for the function-like macro argument ARG to store
2056    the tokens resulting from the macro-expansion of the tokens that
2057    make up ARG itself. That space is allocated in ARG->expanded and
2058    needs to be freed using free.  */
2059 static void
2060 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2061 {
2062 #ifdef ENABLE_CHECKING
2063   if (arg->expanded != NULL
2064       || arg->expanded_virt_locs != NULL)
2065     abort ();
2066 #endif
2067   arg->expanded = XNEWVEC (const cpp_token *, capacity);
2068   if (CPP_OPTION (pfile, track_macro_expansion))
2069     arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2070
2071 }
2072
2073 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2074    tokens.  */
2075 static void
2076 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2077                           size_t size, size_t *expanded_capacity)
2078 {
2079   if (size <= *expanded_capacity)
2080     return;
2081
2082   size *= 2;
2083
2084   arg->expanded =
2085     XRESIZEVEC (const cpp_token *, arg->expanded, size);
2086   *expanded_capacity = size;
2087
2088   if (CPP_OPTION (pfile, track_macro_expansion))
2089     {
2090       if (arg->expanded_virt_locs == NULL)
2091         arg->expanded_virt_locs = XNEWVEC (source_location, size);
2092       else
2093         arg->expanded_virt_locs = XRESIZEVEC (source_location,
2094                                               arg->expanded_virt_locs,
2095                                               size);
2096     }
2097 }
2098
2099 /* Expand an argument ARG before replacing parameters in a
2100    function-like macro.  This works by pushing a context with the
2101    argument's tokens, and then expanding that into a temporary buffer
2102    as if it were a normal part of the token stream.  collect_args()
2103    has terminated the argument's tokens with a CPP_EOF so that we know
2104    when we have fully expanded the argument.  */
2105 static void
2106 expand_arg (cpp_reader *pfile, macro_arg *arg)
2107 {
2108   size_t capacity;
2109   bool saved_warn_trad;
2110   bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2111
2112   if (arg->count == 0
2113       || arg->expanded != NULL)
2114     return;
2115
2116   /* Don't warn about funlike macros when pre-expanding.  */
2117   saved_warn_trad = CPP_WTRADITIONAL (pfile);
2118   CPP_WTRADITIONAL (pfile) = 0;
2119
2120   /* Loop, reading in the tokens of the argument.  */
2121   capacity = 256;
2122   alloc_expanded_arg_mem (pfile, arg, capacity);
2123
2124   if (track_macro_exp_p)
2125     push_extended_tokens_context (pfile, NULL, NULL,
2126                                   arg->virt_locs,
2127                                   arg->first,
2128                                   arg->count + 1);
2129   else
2130     push_ptoken_context (pfile, NULL, NULL,
2131                          arg->first, arg->count + 1);
2132
2133   for (;;)
2134     {
2135       const cpp_token *token;
2136       source_location location;
2137
2138       ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2139                                 &capacity);
2140
2141       token = cpp_get_token_1 (pfile, &location);
2142
2143       if (token->type == CPP_EOF)
2144         break;
2145
2146       set_arg_token (arg, token, location,
2147                      arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2148                      CPP_OPTION (pfile, track_macro_expansion));
2149       arg->expanded_count++;
2150     }
2151
2152   _cpp_pop_context (pfile);
2153
2154   CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2155 }
2156
2157 /* Returns the macro associated to the current context if we are in
2158    the context a macro expansion, NULL otherwise.  */
2159 static cpp_hashnode*
2160 macro_of_context (cpp_context *context)
2161 {
2162   if (context == NULL)
2163     return NULL;
2164
2165   return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2166     ? context->c.mc->macro_node
2167     : context->c.macro;
2168 }
2169
2170 /* Return TRUE iff we are expanding a macro or are about to start
2171    expanding one.  If we are effectively expanding a macro, the
2172    function macro_of_context returns a pointer to the macro being
2173    expanded.  */
2174 static bool
2175 in_macro_expansion_p (cpp_reader *pfile)
2176 {
2177   if (pfile == NULL)
2178     return false;
2179
2180   return (pfile->about_to_expand_macro_p 
2181           || macro_of_context (pfile->context));
2182 }
2183
2184 /* Pop the current context off the stack, re-enabling the macro if the
2185    context represented a macro's replacement list.  Initially the
2186    context structure was not freed so that we can re-use it later, but
2187    now we do free it to reduce peak memory consumption.  */
2188 void
2189 _cpp_pop_context (cpp_reader *pfile)
2190 {
2191   cpp_context *context = pfile->context;
2192
2193   /* We should not be popping the base context.  */
2194   if (context == &pfile->base_context)
2195     abort ();
2196
2197   if (context->c.macro)
2198     {
2199       cpp_hashnode *macro;
2200       if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2201         {
2202           macro_context *mc = context->c.mc;
2203           macro = mc->macro_node;
2204           /* If context->buff is set, it means the life time of tokens
2205              is bound to the life time of this context; so we must
2206              free the tokens; that means we must free the virtual
2207              locations of these tokens too.  */
2208           if (context->buff && mc->virt_locs)
2209             {
2210               free (mc->virt_locs);
2211               mc->virt_locs = NULL;
2212             }
2213           free (mc);
2214           context->c.mc = NULL;
2215         }
2216       else
2217         macro = context->c.macro;
2218
2219       /* Beware that MACRO can be NULL in cases like when we are
2220          called from expand_arg.  In those cases, a dummy context with
2221          tokens is pushed just for the purpose of walking them using
2222          cpp_get_token_1.  In that case, no 'macro' field is set into
2223          the dummy context.  */
2224       if (macro != NULL
2225           /* Several contiguous macro expansion contexts can be
2226              associated to the same macro; that means it's the same
2227              macro expansion that spans across all these (sub)
2228              contexts.  So we should re-enable an expansion-disabled
2229              macro only when we are sure we are really out of that
2230              macro expansion.  */
2231           && macro_of_context (context->prev) != macro)
2232         macro->flags &= ~NODE_DISABLED;
2233     }
2234
2235   if (context->buff)
2236     {
2237       /* Decrease memory peak consumption by freeing the memory used
2238          by the context.  */
2239       _cpp_free_buff (context->buff);
2240     }
2241
2242   pfile->context = context->prev;
2243   /* decrease peak memory consumption by feeing the context.  */
2244   pfile->context->next = NULL;
2245   free (context);
2246 }
2247
2248 /* Return TRUE if we reached the end of the set of tokens stored in
2249    CONTEXT, FALSE otherwise.  */
2250 static inline bool
2251 reached_end_of_context (cpp_context *context)
2252 {
2253   if (context->tokens_kind == TOKENS_KIND_DIRECT)
2254       return FIRST (context).token == LAST (context).token;
2255   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2256            || context->tokens_kind == TOKENS_KIND_EXTENDED)
2257     return FIRST (context).ptoken == LAST (context).ptoken;
2258   else
2259     abort ();
2260 }
2261
2262 /* Consume the next token contained in the current context of PFILE,
2263    and return it in *TOKEN. It's "full location" is returned in
2264    *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2265    means the location encoding the locus of the token across macro
2266    expansion; otherwise it's just is the "normal" location of the
2267    token which (*TOKEN)->src_loc.  */
2268 static inline void
2269 consume_next_token_from_context (cpp_reader *pfile,
2270                                  const cpp_token ** token,
2271                                  source_location *location)
2272 {
2273   cpp_context *c = pfile->context;
2274
2275   if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2276     {
2277       *token = FIRST (c).token;
2278       *location = (*token)->src_loc;
2279       FIRST (c).token++;
2280     }
2281   else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)            
2282     {
2283       *token = *FIRST (c).ptoken;
2284       *location = (*token)->src_loc;
2285       FIRST (c).ptoken++;
2286     }
2287   else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2288     {
2289       macro_context *m = c->c.mc;
2290       *token = *FIRST (c).ptoken;
2291       if (m->virt_locs)
2292         {
2293           *location = *m->cur_virt_loc;
2294           m->cur_virt_loc++;
2295         }
2296       else
2297         *location = (*token)->src_loc;
2298       FIRST (c).ptoken++;
2299     }
2300   else
2301     abort ();
2302 }
2303
2304 /* In the traditional mode of the preprocessor, if we are currently in
2305    a directive, the location of a token must be the location of the
2306    start of the directive line.  This function returns the proper
2307    location if we are in the traditional mode, and just returns
2308    LOCATION otherwise.  */
2309
2310 static inline source_location
2311 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2312 {
2313   if (CPP_OPTION (pfile, traditional))
2314     {
2315       if (pfile->state.in_directive)
2316         return pfile->directive_line;
2317     }
2318   return location;
2319 }
2320
2321 /* Routine to get a token as well as its location.
2322
2323    Macro expansions and directives are transparently handled,
2324    including entering included files.  Thus tokens are post-macro
2325    expansion, and after any intervening directives.  External callers
2326    see CPP_EOF only at EOF.  Internal callers also see it when meeting
2327    a directive inside a macro call, when at the end of a directive and
2328    state.in_directive is still 1, and at the end of argument
2329    pre-expansion.
2330
2331    LOC is an out parameter; *LOC is set to the location "as expected
2332    by the user".  Please read the comment of
2333    cpp_get_token_with_location to learn more about the meaning of this
2334    location.  */
2335 static const cpp_token*
2336 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2337 {
2338   const cpp_token *result;
2339   /* This token is a virtual token that either encodes a location
2340      related to macro expansion or a spelling location.  */
2341   source_location virt_loc = 0;
2342   /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2343      to functions that push macro contexts.  So let's save it so that
2344      we can restore it when we are about to leave this routine.  */
2345   bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2346
2347   for (;;)
2348     {
2349       cpp_hashnode *node;
2350       cpp_context *context = pfile->context;
2351
2352       /* Context->prev == 0 <=> base context.  */
2353       if (!context->prev)
2354         {
2355           result = _cpp_lex_token (pfile);
2356           virt_loc = result->src_loc;
2357         }
2358       else if (!reached_end_of_context (context))
2359         {
2360           consume_next_token_from_context (pfile, &result,
2361                                            &virt_loc);
2362           if (result->flags & PASTE_LEFT)
2363             {
2364               paste_all_tokens (pfile, result);
2365               if (pfile->state.in_directive)
2366                 continue;
2367               result = padding_token (pfile, result);
2368               goto out;
2369             }
2370         }
2371       else
2372         {
2373           if (pfile->context->c.macro)
2374             ++num_expanded_macros_counter;
2375           _cpp_pop_context (pfile);
2376           if (pfile->state.in_directive)
2377             continue;
2378           result = &pfile->avoid_paste;
2379           goto out;
2380         }
2381
2382       if (pfile->state.in_directive && result->type == CPP_COMMENT)
2383         continue;
2384
2385       if (result->type != CPP_NAME)
2386         break;
2387
2388       node = result->val.node.node;
2389
2390       if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
2391         break;
2392
2393       if (!(node->flags & NODE_DISABLED))
2394         {
2395           int ret = 0;
2396           /* If not in a macro context, and we're going to start an
2397              expansion, record the location.  */
2398           if (!in_macro_expansion_p (pfile))
2399             pfile->invocation_location = result->src_loc;
2400           if (pfile->state.prevent_expansion)
2401             break;
2402
2403           /* Conditional macros require that a predicate be evaluated
2404              first.  */
2405           if ((node->flags & NODE_CONDITIONAL) != 0)
2406             {
2407               if (pfile->cb.macro_to_expand)
2408                 {
2409                   bool whitespace_after;
2410                   const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2411
2412                   whitespace_after = (peek_tok->type == CPP_PADDING
2413                                       || (peek_tok->flags & PREV_WHITE));
2414                   node = pfile->cb.macro_to_expand (pfile, result);
2415                   if (node)
2416                     ret = enter_macro_context (pfile, node, result,
2417                                                virt_loc);
2418                   else if (whitespace_after)
2419                     {
2420                       /* If macro_to_expand hook returned NULL and it
2421                          ate some tokens, see if we don't need to add
2422                          a padding token in between this and the
2423                          next token.  */
2424                       peek_tok = cpp_peek_token (pfile, 0);
2425                       if (peek_tok->type != CPP_PADDING
2426                           && (peek_tok->flags & PREV_WHITE) == 0)
2427                         _cpp_push_token_context (pfile, NULL,
2428                                                  padding_token (pfile,
2429                                                                 peek_tok), 1);
2430                     }
2431                 }
2432             }
2433           else
2434             ret = enter_macro_context (pfile, node, result, 
2435                                        virt_loc);
2436           if (ret)
2437             {
2438               if (pfile->state.in_directive || ret == 2)
2439                 continue;
2440               result = padding_token (pfile, result);
2441               goto out;
2442             }
2443         }
2444       else
2445         {
2446           /* Flag this token as always unexpandable.  FIXME: move this
2447              to collect_args()?.  */
2448           cpp_token *t = _cpp_temp_token (pfile);
2449           t->type = result->type;
2450           t->flags = result->flags | NO_EXPAND;
2451           t->val = result->val;
2452           result = t;
2453         }
2454
2455       break;
2456     }
2457
2458  out:
2459   if (location != NULL)
2460     {
2461       if (virt_loc == 0)
2462         virt_loc = result->src_loc;
2463       *location = virt_loc;
2464
2465       if (!CPP_OPTION (pfile, track_macro_expansion)
2466           && macro_of_context (pfile->context) != NULL)
2467         /* We are in a macro expansion context, are not tracking
2468            virtual location, but were asked to report the location
2469            of the expansion point of the macro being expanded.  */
2470         *location = pfile->invocation_location;
2471
2472       *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2473     }
2474
2475   pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2476   return result;
2477 }
2478
2479 /* External routine to get a token.  Also used nearly everywhere
2480    internally, except for places where we know we can safely call
2481    _cpp_lex_token directly, such as lexing a directive name.
2482
2483    Macro expansions and directives are transparently handled,
2484    including entering included files.  Thus tokens are post-macro
2485    expansion, and after any intervening directives.  External callers
2486    see CPP_EOF only at EOF.  Internal callers also see it when meeting
2487    a directive inside a macro call, when at the end of a directive and
2488    state.in_directive is still 1, and at the end of argument
2489    pre-expansion.  */
2490 const cpp_token *
2491 cpp_get_token (cpp_reader *pfile)
2492 {
2493   return cpp_get_token_1 (pfile, NULL);
2494 }
2495
2496 /* Like cpp_get_token, but also returns a virtual token location
2497    separate from the spelling location carried by the returned token.
2498
2499    LOC is an out parameter; *LOC is set to the location "as expected
2500    by the user".  This matters when a token results from macro
2501    expansion; in that case the token's spelling location indicates the
2502    locus of the token in the definition of the macro but *LOC
2503    virtually encodes all the other meaningful locuses associated to
2504    the token.
2505
2506    What? virtual location? Yes, virtual location.
2507
2508    If the token results from macro expansion and if macro expansion
2509    location tracking is enabled its virtual location encodes (at the
2510    same time):
2511
2512    - the spelling location of the token
2513
2514    - the locus of the macro expansion point
2515
2516    - the locus of the point where the token got instantiated as part
2517      of the macro expansion process.
2518
2519    You have to use the linemap API to get the locus you are interested
2520    in from a given virtual location.
2521
2522    Note however that virtual locations are not necessarily ordered for
2523    relations '<' and '>'.  One must use the function
2524    linemap_location_before_p instead of using the relational operator
2525    '<'.
2526
2527    If macro expansion tracking is off and if the token results from
2528    macro expansion the virtual location is the expansion point of the
2529    macro that got expanded.
2530
2531    When the token doesn't result from macro expansion, the virtual
2532    location is just the same thing as its spelling location.  */
2533
2534 const cpp_token *
2535 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2536 {
2537   return cpp_get_token_1 (pfile, loc);
2538 }
2539
2540 /* Returns true if we're expanding an object-like macro that was
2541    defined in a system header.  Just checks the macro at the top of
2542    the stack.  Used for diagnostic suppression.  */
2543 int
2544 cpp_sys_macro_p (cpp_reader *pfile)
2545 {
2546   cpp_hashnode *node = NULL;
2547
2548   if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2549     node = pfile->context->c.mc->macro_node;
2550   else
2551     node = pfile->context->c.macro;
2552
2553   return node && node->value.macro && node->value.macro->syshdr;
2554 }
2555
2556 /* Read each token in, until end of the current file.  Directives are
2557    transparently processed.  */
2558 void
2559 cpp_scan_nooutput (cpp_reader *pfile)
2560 {
2561   /* Request a CPP_EOF token at the end of this file, rather than
2562      transparently continuing with the including file.  */
2563   pfile->buffer->return_at_eof = true;
2564
2565   pfile->state.discarding_output++;
2566   pfile->state.prevent_expansion++;
2567
2568   if (CPP_OPTION (pfile, traditional))
2569     while (_cpp_read_logical_line_trad (pfile))
2570       ;
2571   else
2572     while (cpp_get_token (pfile)->type != CPP_EOF)
2573       ;
2574
2575   pfile->state.discarding_output--;
2576   pfile->state.prevent_expansion--;
2577 }
2578
2579 /* Step back one or more tokens obtained from the lexer.  */
2580 void
2581 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2582 {
2583   pfile->lookaheads += count;
2584   while (count--)
2585     {
2586       pfile->cur_token--;
2587       if (pfile->cur_token == pfile->cur_run->base
2588           /* Possible with -fpreprocessed and no leading #line.  */
2589           && pfile->cur_run->prev != NULL)
2590         {
2591           pfile->cur_run = pfile->cur_run->prev;
2592           pfile->cur_token = pfile->cur_run->limit;
2593         }
2594     }
2595 }
2596
2597 /* Step back one (or more) tokens.  Can only step back more than 1 if
2598    they are from the lexer, and not from macro expansion.  */
2599 void
2600 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2601 {
2602   if (pfile->context->prev == NULL)
2603     _cpp_backup_tokens_direct (pfile, count);
2604   else
2605     {
2606       if (count != 1)
2607         abort ();
2608       if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2609         FIRST (pfile->context).token--;
2610       else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2611         FIRST (pfile->context).ptoken--;
2612       else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2613         {
2614           FIRST (pfile->context).ptoken--;
2615           if (pfile->context->c.macro)
2616             {
2617               macro_context *m = pfile->context->c.mc;
2618               m->cur_virt_loc--;
2619 #ifdef ENABLE_CHECKING
2620               if (m->cur_virt_loc < m->virt_locs)
2621                 abort ();
2622 #endif
2623             }
2624           else
2625             abort ();
2626         }
2627       else
2628         abort ();
2629     }
2630 }
2631
2632 /* #define directive parsing and handling.  */
2633
2634 /* Returns nonzero if a macro redefinition warning is required.  */
2635 static bool
2636 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2637                       const cpp_macro *macro2)
2638 {
2639   const cpp_macro *macro1;
2640   unsigned int i;
2641
2642   /* Some redefinitions need to be warned about regardless.  */
2643   if (node->flags & NODE_WARN)
2644     return true;
2645
2646   /* Suppress warnings for builtins that lack the NODE_WARN flag.  */
2647   if (node->flags & NODE_BUILTIN)
2648     {
2649       if (!pfile->cb.user_builtin_macro
2650           || !pfile->cb.user_builtin_macro (pfile, node))
2651         return false;
2652     }
2653
2654   /* Redefinitions of conditional (context-sensitive) macros, on
2655      the other hand, must be allowed silently.  */
2656   if (node->flags & NODE_CONDITIONAL)
2657     return false;
2658
2659   /* Redefinition of a macro is allowed if and only if the old and new
2660      definitions are the same.  (6.10.3 paragraph 2).  */
2661   macro1 = node->value.macro;
2662
2663   /* Don't check count here as it can be different in valid
2664      traditional redefinitions with just whitespace differences.  */
2665   if (macro1->paramc != macro2->paramc
2666       || macro1->fun_like != macro2->fun_like
2667       || macro1->variadic != macro2->variadic)
2668     return true;
2669
2670   /* Check parameter spellings.  */
2671   for (i = 0; i < macro1->paramc; i++)
2672     if (macro1->params[i] != macro2->params[i])
2673       return true;
2674
2675   /* Check the replacement text or tokens.  */
2676   if (CPP_OPTION (pfile, traditional))
2677     return _cpp_expansions_different_trad (macro1, macro2);
2678
2679   if (macro1->count != macro2->count)
2680     return true;
2681
2682   for (i = 0; i < macro1->count; i++)
2683     if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
2684       return true;
2685
2686   return false;
2687 }
2688
2689 /* Free the definition of hashnode H.  */
2690 void
2691 _cpp_free_definition (cpp_hashnode *h)
2692 {
2693   /* Macros and assertions no longer have anything to free.  */
2694   h->type = NT_VOID;
2695   /* Clear builtin flag in case of redefinition.  */
2696   h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
2697 }
2698
2699 /* Save parameter NODE to the parameter list of macro MACRO.  Returns
2700    zero on success, nonzero if the parameter is a duplicate.  */
2701 bool
2702 _cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
2703 {
2704   unsigned int len;
2705   /* Constraint 6.10.3.6 - duplicate parameter names.  */
2706   if (node->flags & NODE_MACRO_ARG)
2707     {
2708       cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
2709                  NODE_NAME (node));
2710       return true;
2711     }
2712
2713   if (BUFF_ROOM (pfile->a_buff)
2714       < (macro->paramc + 1) * sizeof (cpp_hashnode *))
2715     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
2716
2717   ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
2718   node->flags |= NODE_MACRO_ARG;
2719   len = macro->paramc * sizeof (union _cpp_hashnode_value);
2720   if (len > pfile->macro_buffer_len)
2721     {
2722       pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
2723                                         len);
2724       pfile->macro_buffer_len = len;
2725     }
2726   ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
2727     = node->value;
2728   
2729   node->value.arg_index  = macro->paramc;
2730   return false;
2731 }
2732
2733 /* Check the syntax of the parameters in a MACRO definition.  Returns
2734    false if an error occurs.  */
2735 static bool
2736 parse_params (cpp_reader *pfile, cpp_macro *macro)
2737 {
2738   unsigned int prev_ident = 0;
2739
2740   for (;;)
2741     {
2742       const cpp_token *token = _cpp_lex_token (pfile);
2743
2744       switch (token->type)
2745         {
2746         default:
2747           /* Allow/ignore comments in parameter lists if we are
2748              preserving comments in macro expansions.  */
2749           if (token->type == CPP_COMMENT
2750               && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
2751             continue;
2752
2753           cpp_error (pfile, CPP_DL_ERROR,
2754                      "\"%s\" may not appear in macro parameter list",
2755                      cpp_token_as_text (pfile, token));
2756           return false;
2757
2758         case CPP_NAME:
2759           if (prev_ident)
2760             {
2761               cpp_error (pfile, CPP_DL_ERROR,
2762                          "macro parameters must be comma-separated");
2763               return false;
2764             }
2765           prev_ident = 1;
2766
2767           if (_cpp_save_parameter (pfile, macro, token->val.node.node))
2768             return false;
2769           continue;
2770
2771         case CPP_CLOSE_PAREN:
2772           if (prev_ident || macro->paramc == 0)
2773             return true;
2774
2775           /* Fall through to pick up the error.  */
2776         case CPP_COMMA:
2777           if (!prev_ident)
2778             {
2779               cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
2780               return false;
2781             }
2782           prev_ident = 0;
2783           continue;
2784
2785         case CPP_ELLIPSIS:
2786           macro->variadic = 1;
2787           if (!prev_ident)
2788             {
2789               _cpp_save_parameter (pfile, macro,
2790                                    pfile->spec_nodes.n__VA_ARGS__);
2791               pfile->state.va_args_ok = 1;
2792               if (! CPP_OPTION (pfile, c99)
2793                   && CPP_OPTION (pfile, cpp_pedantic)
2794                   && CPP_OPTION (pfile, warn_variadic_macros))
2795                 cpp_pedwarning
2796                   (pfile, CPP_W_VARIADIC_MACROS,
2797                    "anonymous variadic macros were introduced in C99");
2798             }
2799           else if (CPP_OPTION (pfile, cpp_pedantic)
2800                    && CPP_OPTION (pfile, warn_variadic_macros))
2801             cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
2802                             "ISO C does not permit named variadic macros");
2803
2804           /* We're at the end, and just expect a closing parenthesis.  */
2805           token = _cpp_lex_token (pfile);
2806           if (token->type == CPP_CLOSE_PAREN)
2807             return true;
2808           /* Fall through.  */
2809
2810         case CPP_EOF:
2811           cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
2812           return false;
2813         }
2814     }
2815 }
2816
2817 /* Allocate room for a token from a macro's replacement list.  */
2818 static cpp_token *
2819 alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2820 {
2821   if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
2822     _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
2823
2824   return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
2825 }
2826
2827 /* Lex a token from the expansion of MACRO, but mark parameters as we
2828    find them and warn of traditional stringification.  */
2829 static cpp_token *
2830 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
2831 {
2832   cpp_token *token, *saved_cur_token;
2833
2834   saved_cur_token = pfile->cur_token;
2835   pfile->cur_token = alloc_expansion_token (pfile, macro);
2836   token = _cpp_lex_direct (pfile);
2837   pfile->cur_token = saved_cur_token;
2838
2839   /* Is this a parameter?  */
2840   if (token->type == CPP_NAME
2841       && (token->val.node.node->flags & NODE_MACRO_ARG) != 0)
2842     {
2843       token->type = CPP_MACRO_ARG;
2844       token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
2845     }
2846   else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
2847            && (token->type == CPP_STRING || token->type == CPP_CHAR))
2848     check_trad_stringification (pfile, macro, &token->val.str);
2849
2850   return token;
2851 }
2852
2853 static bool
2854 create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
2855 {
2856   cpp_token *token;
2857   const cpp_token *ctoken;
2858   bool following_paste_op = false;
2859   const char *paste_op_error_msg =
2860     N_("'##' cannot appear at either end of a macro expansion");
2861   unsigned int num_extra_tokens = 0;
2862
2863   /* Get the first token of the expansion (or the '(' of a
2864      function-like macro).  */
2865   ctoken = _cpp_lex_token (pfile);
2866
2867   if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
2868     {
2869       bool ok = parse_params (pfile, macro);
2870       macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
2871       if (!ok)
2872         return false;
2873
2874       /* Success.  Commit or allocate the parameter array.  */
2875       if (pfile->hash_table->alloc_subobject)
2876         {
2877           cpp_hashnode **params =
2878             (cpp_hashnode **) pfile->hash_table->alloc_subobject
2879             (sizeof (cpp_hashnode *) * macro->paramc);
2880           memcpy (params, macro->params,
2881                   sizeof (cpp_hashnode *) * macro->paramc);
2882           macro->params = params;
2883         }
2884       else
2885         BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
2886       macro->fun_like = 1;
2887     }
2888   else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
2889     {
2890       /* While ISO C99 requires whitespace before replacement text
2891          in a macro definition, ISO C90 with TC1 allows there characters
2892          from the basic source character set.  */
2893       if (CPP_OPTION (pfile, c99))
2894         cpp_error (pfile, CPP_DL_PEDWARN,
2895                    "ISO C99 requires whitespace after the macro name");
2896       else
2897         {
2898           int warntype = CPP_DL_WARNING;
2899           switch (ctoken->type)
2900             {
2901             case CPP_ATSIGN:
2902             case CPP_AT_NAME:
2903             case CPP_OBJC_STRING:
2904               /* '@' is not in basic character set.  */
2905               warntype = CPP_DL_PEDWARN;
2906               break;
2907             case CPP_OTHER:
2908               /* Basic character set sans letters, digits and _.  */
2909               if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
2910                           ctoken->val.str.text[0]) == NULL)
2911                 warntype = CPP_DL_PEDWARN;
2912               break;
2913             default:
2914               /* All other tokens start with a character from basic
2915                  character set.  */
2916               break;
2917             }
2918           cpp_error (pfile, warntype,
2919                      "missing whitespace after the macro name");
2920         }
2921     }
2922
2923   if (macro->fun_like)
2924     token = lex_expansion_token (pfile, macro);
2925   else
2926     {
2927       token = alloc_expansion_token (pfile, macro);
2928       *token = *ctoken;
2929     }
2930
2931   for (;;)
2932     {
2933       /* Check the stringifying # constraint 6.10.3.2.1 of
2934          function-like macros when lexing the subsequent token.  */
2935       if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
2936         {
2937           if (token->type == CPP_MACRO_ARG)
2938             {
2939               if (token->flags & PREV_WHITE)
2940                 token->flags |= SP_PREV_WHITE;
2941               if (token[-1].flags & DIGRAPH)
2942                 token->flags |= SP_DIGRAPH;
2943               token->flags &= ~PREV_WHITE;
2944               token->flags |= STRINGIFY_ARG;
2945               token->flags |= token[-1].flags & PREV_WHITE;
2946               token[-1] = token[0];
2947               macro->count--;
2948             }
2949           /* Let assembler get away with murder.  */
2950           else if (CPP_OPTION (pfile, lang) != CLK_ASM)
2951             {
2952               cpp_error (pfile, CPP_DL_ERROR,
2953                          "'#' is not followed by a macro parameter");
2954               return false;
2955             }
2956         }
2957
2958       if (token->type == CPP_EOF)
2959         {
2960           /* Paste operator constraint 6.10.3.3.1:
2961              Token-paste ##, can appear in both object-like and
2962              function-like macros, but not at the end.  */
2963           if (following_paste_op)
2964             {
2965               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2966               return false;
2967             }
2968           break;
2969         }
2970
2971       /* Paste operator constraint 6.10.3.3.1.  */
2972       if (token->type == CPP_PASTE)
2973         {
2974           /* Token-paste ##, can appear in both object-like and
2975              function-like macros, but not at the beginning.  */
2976           if (macro->count == 1)
2977             {
2978               cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
2979               return false;
2980             }
2981
2982           if (token[-1].flags & PASTE_LEFT)
2983             {
2984               macro->extra_tokens = 1;
2985               num_extra_tokens++;
2986               token->val.token_no = macro->count - 1;
2987             }
2988           else
2989             {
2990               --macro->count;
2991               token[-1].flags |= PASTE_LEFT;
2992               if (token->flags & DIGRAPH)
2993                 token[-1].flags |= SP_DIGRAPH;
2994               if (token->flags & PREV_WHITE)
2995                 token[-1].flags |= SP_PREV_WHITE;
2996             }
2997         }
2998
2999       following_paste_op = (token->type == CPP_PASTE);
3000       token = lex_expansion_token (pfile, macro);
3001     }
3002
3003   macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
3004   macro->traditional = 0;
3005
3006   /* Don't count the CPP_EOF.  */
3007   macro->count--;
3008
3009   /* Clear whitespace on first token for warn_of_redefinition().  */
3010   if (macro->count)
3011     macro->exp.tokens[0].flags &= ~PREV_WHITE;
3012
3013   /* Commit or allocate the memory.  */
3014   if (pfile->hash_table->alloc_subobject)
3015     {
3016       cpp_token *tokns =
3017         (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
3018                                                           * macro->count);
3019       if (num_extra_tokens)
3020         {
3021           /* Place second and subsequent ## or %:%: tokens in
3022              sequences of consecutive such tokens at the end of the
3023              list to preserve information about where they appear, how
3024              they are spelt and whether they are preceded by
3025              whitespace without otherwise interfering with macro
3026              expansion.  */
3027           cpp_token *normal_dest = tokns;
3028           cpp_token *extra_dest = tokns + macro->count - num_extra_tokens;
3029           unsigned int i;
3030           for (i = 0; i < macro->count; i++)
3031             {
3032               if (macro->exp.tokens[i].type == CPP_PASTE)
3033                 *extra_dest++ = macro->exp.tokens[i];
3034               else
3035                 *normal_dest++ = macro->exp.tokens[i];
3036             }
3037         }
3038       else
3039         memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
3040       macro->exp.tokens = tokns;
3041     }
3042   else
3043     BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
3044
3045   return true;
3046 }
3047
3048 /* Parse a macro and save its expansion.  Returns nonzero on success.  */
3049 bool
3050 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3051 {
3052   cpp_macro *macro;
3053   unsigned int i;
3054   bool ok;
3055
3056   if (pfile->hash_table->alloc_subobject)
3057     macro = (cpp_macro *) pfile->hash_table->alloc_subobject
3058       (sizeof (cpp_macro));
3059   else
3060     macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
3061   macro->line = pfile->directive_line;
3062   macro->params = 0;
3063   macro->paramc = 0;
3064   macro->variadic = 0;
3065   macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3066   macro->count = 0;
3067   macro->fun_like = 0;
3068   macro->extra_tokens = 0;
3069   /* To suppress some diagnostics.  */
3070   macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3071
3072   if (CPP_OPTION (pfile, traditional))
3073     ok = _cpp_create_trad_definition (pfile, macro);
3074   else
3075     {
3076       ok = create_iso_definition (pfile, macro);
3077
3078       /* We set the type for SEEN_EOL() in directives.c.
3079
3080          Longer term we should lex the whole line before coming here,
3081          and just copy the expansion.  */
3082
3083       /* Stop the lexer accepting __VA_ARGS__.  */
3084       pfile->state.va_args_ok = 0;
3085     }
3086
3087   /* Clear the fast argument lookup indices.  */
3088   for (i = macro->paramc; i-- > 0; )
3089     {
3090       struct cpp_hashnode *node = macro->params[i];
3091       node->flags &= ~ NODE_MACRO_ARG;
3092       node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
3093     }
3094
3095   if (!ok)
3096     return ok;
3097
3098   if (node->type == NT_MACRO)
3099     {
3100       if (CPP_OPTION (pfile, warn_unused_macros))
3101         _cpp_warn_if_unused_macro (pfile, node, NULL);
3102
3103       if (warn_of_redefinition (pfile, node, macro))
3104         {
3105           const int reason = (node->flags & NODE_BUILTIN)
3106                              ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3107           bool warned;
3108
3109           warned = cpp_pedwarning_with_line (pfile, reason,
3110                                              pfile->directive_line, 0,
3111                                              "\"%s\" redefined",
3112                                              NODE_NAME (node));
3113
3114           if (warned && node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
3115             cpp_error_with_line (pfile, CPP_DL_NOTE,
3116                                  node->value.macro->line, 0,
3117                          "this is the location of the previous definition");
3118         }
3119     }
3120
3121   if (node->type != NT_VOID)
3122     _cpp_free_definition (node);
3123
3124   /* Enter definition in hash table.  */
3125   node->type = NT_MACRO;
3126   node->value.macro = macro;
3127   if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3128       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3129       /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3130          in the C standard, as something that one must use in C++.
3131          However DR#593 indicates that these aren't actually mentioned
3132          in the C++ standard.  We special-case them anyway.  */
3133       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3134       && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3135     node->flags |= NODE_WARN;
3136
3137   /* If user defines one of the conditional macros, remove the
3138      conditional flag */
3139   node->flags &= ~NODE_CONDITIONAL;
3140
3141   return ok;
3142 }
3143
3144 /* Warn if a token in STRING matches one of a function-like MACRO's
3145    parameters.  */
3146 static void
3147 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3148                             const cpp_string *string)
3149 {
3150   unsigned int i, len;
3151   const uchar *p, *q, *limit;
3152
3153   /* Loop over the string.  */
3154   limit = string->text + string->len - 1;
3155   for (p = string->text + 1; p < limit; p = q)
3156     {
3157       /* Find the start of an identifier.  */
3158       while (p < limit && !is_idstart (*p))
3159         p++;
3160
3161       /* Find the end of the identifier.  */
3162       q = p;
3163       while (q < limit && is_idchar (*q))
3164         q++;
3165
3166       len = q - p;
3167
3168       /* Loop over the function macro arguments to see if the
3169          identifier inside the string matches one of them.  */
3170       for (i = 0; i < macro->paramc; i++)
3171         {
3172           const cpp_hashnode *node = macro->params[i];
3173
3174           if (NODE_LEN (node) == len
3175               && !memcmp (p, NODE_NAME (node), len))
3176             {
3177               cpp_error (pfile, CPP_DL_WARNING,
3178            "macro argument \"%s\" would be stringified in traditional C",
3179                          NODE_NAME (node));
3180               break;
3181             }
3182         }
3183     }
3184 }
3185
3186 /* Returns the name, arguments and expansion of a macro, in a format
3187    suitable to be read back in again, and therefore also for DWARF 2
3188    debugging info.  e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3189    Caller is expected to generate the "#define" bit if needed.  The
3190    returned text is temporary, and automatically freed later.  */
3191 const unsigned char *
3192 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3193 {
3194   unsigned int i, len;
3195   const cpp_macro *macro;
3196   unsigned char *buffer;
3197
3198   if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
3199     {
3200       if (node->type != NT_MACRO
3201           || !pfile->cb.user_builtin_macro
3202           || !pfile->cb.user_builtin_macro (pfile, node))
3203         {
3204           cpp_error (pfile, CPP_DL_ICE,
3205                      "invalid hash type %d in cpp_macro_definition",
3206                      node->type);
3207           return 0;
3208         }
3209     }
3210
3211   macro = node->value.macro;
3212   /* Calculate length.  */
3213   len = NODE_LEN (node) + 2;                    /* ' ' and NUL.  */
3214   if (macro->fun_like)
3215     {
3216       len += 4;         /* "()" plus possible final ".." of named
3217                            varargs (we have + 1 below).  */
3218       for (i = 0; i < macro->paramc; i++)
3219         len += NODE_LEN (macro->params[i]) + 1; /* "," */
3220     }
3221
3222   /* This should match below where we fill in the buffer.  */
3223   if (CPP_OPTION (pfile, traditional))
3224     len += _cpp_replacement_text_len (macro);
3225   else
3226     {
3227       unsigned int count = macro_real_token_count (macro);
3228       for (i = 0; i < count; i++)
3229         {
3230           cpp_token *token = &macro->exp.tokens[i];
3231
3232           if (token->type == CPP_MACRO_ARG)
3233             len += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3234           else
3235             len += cpp_token_len (token);
3236
3237           if (token->flags & STRINGIFY_ARG)
3238             len++;                      /* "#" */
3239           if (token->flags & PASTE_LEFT)
3240             len += 3;           /* " ##" */
3241           if (token->flags & PREV_WHITE)
3242             len++;              /* " " */
3243         }
3244     }
3245
3246   if (len > pfile->macro_buffer_len)
3247     {
3248       pfile->macro_buffer = XRESIZEVEC (unsigned char,
3249                                         pfile->macro_buffer, len);
3250       pfile->macro_buffer_len = len;
3251     }
3252
3253   /* Fill in the buffer.  Start with the macro name.  */
3254   buffer = pfile->macro_buffer;
3255   memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
3256   buffer += NODE_LEN (node);
3257
3258   /* Parameter names.  */
3259   if (macro->fun_like)
3260     {
3261       *buffer++ = '(';
3262       for (i = 0; i < macro->paramc; i++)
3263         {
3264           cpp_hashnode *param = macro->params[i];
3265
3266           if (param != pfile->spec_nodes.n__VA_ARGS__)
3267             {
3268               memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3269               buffer += NODE_LEN (param);
3270             }
3271
3272           if (i + 1 < macro->paramc)
3273             /* Don't emit a space after the comma here; we're trying
3274                to emit a Dwarf-friendly definition, and the Dwarf spec
3275                forbids spaces in the argument list.  */
3276             *buffer++ = ',';
3277           else if (macro->variadic)
3278             *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3279         }
3280       *buffer++ = ')';
3281     }
3282
3283   /* The Dwarf spec requires a space after the macro name, even if the
3284      definition is the empty string.  */
3285   *buffer++ = ' ';
3286
3287   if (CPP_OPTION (pfile, traditional))
3288     buffer = _cpp_copy_replacement_text (macro, buffer);
3289   else if (macro->count)
3290   /* Expansion tokens.  */
3291     {
3292       unsigned int count = macro_real_token_count (macro);
3293       for (i = 0; i < count; i++)
3294         {
3295           cpp_token *token = &macro->exp.tokens[i];
3296
3297           if (token->flags & PREV_WHITE)
3298             *buffer++ = ' ';
3299           if (token->flags & STRINGIFY_ARG)
3300             *buffer++ = '#';
3301
3302           if (token->type == CPP_MACRO_ARG)
3303             {
3304               memcpy (buffer,
3305                       NODE_NAME (macro->params[token->val.macro_arg.arg_no - 1]),
3306                       NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]));
3307               buffer += NODE_LEN (macro->params[token->val.macro_arg.arg_no - 1]);
3308             }
3309           else
3310             buffer = cpp_spell_token (pfile, token, buffer, false);
3311
3312           if (token->flags & PASTE_LEFT)
3313             {
3314               *buffer++ = ' ';
3315               *buffer++ = '#';
3316               *buffer++ = '#';
3317               /* Next has PREV_WHITE; see _cpp_create_definition.  */
3318             }
3319         }
3320     }
3321
3322   *buffer = '\0';
3323   return pfile->macro_buffer;
3324 }