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