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