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