c-ada-spec.c (get_underlying_decl): Get to the main type variant.
[official-gcc.git] / libcpp / macro.c
blob3629e83cecfdba8f842fe44dbe7c649f1c48a9ae
1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2018 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
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.
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.
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/>.
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! */
25 #include "config.h"
26 #include "system.h"
27 #include "cpplib.h"
28 #include "internal.h"
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
37 const cpp_token **first; /* First token in unexpanded argument. */
38 const cpp_token **expanded; /* Macro-expanded argument. */
39 const cpp_token *stringified; /* Stringified argument. */
40 unsigned int count; /* # of tokens in argument. */
41 unsigned int expanded_count; /* # of tokens in expanded argument. */
42 source_location *virt_locs; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 source_location *expanded_virt_locs; /* Where virtual locations for
45 expanded tokens are
46 stored. */
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
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
66 /* Whether or not -ftrack-macro-expansion is used. */
67 bool track_macro_exp_p;
68 /* The kind of token over which we are supposed to iterate. */
69 enum macro_arg_token_kind kind;
70 /* A pointer to the current token pointed to by the iterator. */
71 const cpp_token **token_ptr;
72 /* A pointer to the "full" location of the current token. If
73 -ftrack-macro-expansion is used this location tracks loci across
74 macro expansion. */
75 const source_location *location_ptr;
76 #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
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;
93 static const char *vaopt_paste_error =
94 N_("'##' cannot appear at either end of __VA_OPT__");
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 {
101 public:
103 /* Initialize the state tracker. ANY_ARGS is true if variable
104 arguments were provided to the macro invocation. */
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)
116 enum update_type
118 ERROR,
119 DROP,
120 INCLUDE,
121 BEGIN,
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. */
128 update_type update (const cpp_token *token)
130 /* If the macro isn't variadic, just don't bother. */
131 if (!m_variadic)
132 return INCLUDE;
134 if (token->type == CPP_NAME
135 && token->val.node.node == m_pfile->spec_nodes.n__VA_OPT__)
137 if (m_state > 0)
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;
143 ++m_state;
144 m_location = token->src_loc;
145 return BEGIN;
147 else if (m_state == 1)
149 if (token->type != CPP_OPEN_PAREN)
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;
156 ++m_state;
157 return DROP;
159 else if (m_state >= 2)
161 if (m_state == 2 && token->type == CPP_PASTE)
163 cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
164 vaopt_paste_error);
165 return ERROR;
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;
173 bool was_paste = m_last_was_paste;
174 m_last_was_paste = false;
175 if (token->type == CPP_PASTE)
177 m_last_was_paste = true;
178 m_paste_location = token->src_loc;
180 else if (token->type == CPP_OPEN_PAREN)
181 ++m_state;
182 else if (token->type == CPP_CLOSE_PAREN)
184 --m_state;
185 if (m_state == 2)
187 /* Saw the final paren. */
188 m_state = 0;
190 if (was_paste)
192 cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
193 vaopt_paste_error);
194 return ERROR;
197 return END;
200 return m_allowed ? INCLUDE : DROP;
203 /* Nothing to do with __VA_OPT__. */
204 return INCLUDE;
207 /* Ensure that any __VA_OPT__ was completed. If ok, return true.
208 Otherwise, issue an error and return false. */
209 bool completed ()
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;
217 private:
219 /* The cpp_reader. */
220 cpp_reader *m_pfile;
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;
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;
237 /* The location of the paste token. */
238 source_location m_paste_location;
240 /* Location of the __VA_OPT__ token. */
241 source_location m_location;
244 /* Macro expansion. */
246 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
247 const cpp_token *, source_location);
248 static int builtin_macro (cpp_reader *, cpp_hashnode *,
249 source_location, source_location);
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 *, source_location *,
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 *, source_location,
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 source_location, size_t,
270 enum macro_arg_token_kind,
271 bool);
272 static const source_location *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 source_location **virt_location);
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 source_location 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 source_location **);
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 source_location *,
294 const cpp_token *,
295 source_location,
296 source_location,
297 const line_map_macro *,
298 unsigned int);
300 static const cpp_token **tokens_buff_add_token (_cpp_buff *,
301 source_location *,
302 const cpp_token *,
303 source_location,
304 source_location,
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 *, source_location);
310 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
311 _cpp_buff **, unsigned *);
312 static cpp_macro *create_iso_definition (cpp_reader *);
314 /* #define directive parsing and handling. */
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 source_location *);
326 static const cpp_token* cpp_get_token_1 (cpp_reader *, source_location *);
328 static cpp_hashnode* macro_of_context (cpp_context *context);
330 static bool in_macro_expansion_p (cpp_reader *pfile);
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;
339 /* Emits a warning if NODE is a macro defined in the main file that
340 has not been used. */
342 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
343 void *v ATTRIBUTE_UNUSED)
345 if (cpp_user_macro_p (node))
347 cpp_macro *macro = node->value.macro;
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));
357 return 1;
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 *
363 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
365 cpp_token *token = _cpp_temp_token (pfile);
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;
375 static const char * const monthnames[] =
377 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
378 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
381 /* Helper function for builtin_macro. Returns the text generated by
382 a builtin macro. */
383 const uchar *
384 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
385 source_location loc)
387 const uchar *result = NULL;
388 linenum_type number = 1;
390 switch (node->value.builtin)
392 default:
393 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
394 NODE_NAME (node));
395 break;
397 case BT_TIMESTAMP:
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));
403 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
404 if (pbuffer->timestamp == NULL)
406 /* Initialize timestamp value of the assotiated file. */
407 struct _cpp_file *file = cpp_get_file (pbuffer);
408 if (file)
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)
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;
428 else
430 cpp_errno (pfile, CPP_DL_WARNING,
431 "could not determine file timestamp");
432 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
436 result = pbuffer->timestamp;
438 break;
439 case BT_FILE:
440 case BT_BASE_FILE:
442 unsigned int len;
443 const char *name;
444 uchar *buf;
446 if (node->value.builtin == BT_FILE)
447 name = linemap_get_expansion_filename (pfile->line_table,
448 pfile->line_table->highest_line);
449 else
451 name = _cpp_get_file_name (pfile->main_file);
452 if (!name)
453 abort ();
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';
465 break;
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;
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;
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;
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)
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;
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);
519 if (pfile->source_date_epoch >= (time_t) 0)
520 tb = gmtime (&pfile->source_date_epoch);
521 else
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);
532 if (tb)
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);
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);
545 else
547 cpp_errno (pfile, CPP_DL_WARNING,
548 "could not determine date and time");
550 pfile->date = UC"\"??? ?? ????\"";
551 pfile->time = UC"\"??:??:??\"";
555 if (node->value.builtin == BT_DATE)
556 result = pfile->date;
557 else
558 result = pfile->time;
559 break;
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;
568 case BT_HAS_ATTRIBUTE:
569 number = pfile->cb.has_attribute (pfile);
570 break;
573 if (result == NULL)
575 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
576 result = _cpp_unaligned_alloc (pfile, 21);
577 sprintf ((char *) result, "%u", number);
580 return result;
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
589 builtin_macro (cpp_reader *pfile, cpp_hashnode *node,
590 source_location loc, source_location expand_loc)
592 const uchar *buf;
593 size_t len;
594 char *nbuf;
596 if (node->value.builtin == BT_PRAGMA)
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;
603 return _cpp_do__Pragma (pfile, loc);
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';
612 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
613 _cpp_clean_line (pfile);
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)
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 source_location *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,
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);
645 return 1;
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 *
652 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
654 while (len--)
656 uchar c = *src++;
658 switch (c)
660 case '\n':
661 /* Naked LF can appear in raw string literals */
662 c = 'n';
663 /* FALLTHROUGH */
665 case '\\':
666 case '"':
667 *dest++ = '\\';
668 /* FALLTHROUGH */
670 default:
671 *dest++ = c;
675 return dest;
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 *
681 stringify_arg (cpp_reader *pfile, macro_arg *arg)
683 unsigned char *dest;
684 unsigned int i, escape_it, backslash_count = 0;
685 const cpp_token *source = NULL;
686 size_t len;
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++ = '"';
693 /* Loop, reading in the argument's tokens. */
694 for (i = 0; i < arg->count; i++)
696 const cpp_token *token = arg->first[i];
698 if (token->type == CPP_PADDING)
700 if (source == NULL
701 || (!(source->flags & PREV_WHITE)
702 && token->val.source == NULL))
703 source = token->val.source;
704 continue;
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));
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;
722 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
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;
729 /* Leading white space? */
730 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
732 if (source == NULL)
733 source = token;
734 if (source->flags & PREV_WHITE)
735 *dest++ = ' ';
737 source = NULL;
739 if (escape_it)
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);
747 else
748 dest = cpp_spell_token (pfile, token, dest, true);
750 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
751 backslash_count++;
752 else
753 backslash_count = 0;
756 /* Ignore the final \ of invalid string literals. */
757 if (backslash_count & 1)
759 cpp_error (pfile, CPP_DL_WARNING,
760 "invalid string literal, ignoring final '\\'");
761 dest--;
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);
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
776 paste_tokens (cpp_reader *pfile, source_location location,
777 const cpp_token **plhs, const cpp_token *rhs)
779 unsigned char *buf, *end, *lhsend;
780 cpp_token *lhs;
781 unsigned int len;
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);
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';
798 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
799 _cpp_clean_line (pfile);
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)
806 source_location saved_loc = lhs->src_loc;
808 _cpp_pop_buffer (pfile);
809 _cpp_backup_tokens (pfile, 1);
810 *lhsend = '\0';
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;
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;
827 *plhs = lhs;
828 _cpp_pop_buffer (pfile);
829 return true;
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
840 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
842 const cpp_token *rhs = NULL;
843 cpp_context *context = pfile->context;
844 source_location virt_loc = 0;
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 ();
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;
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)
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 */
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++;
893 if (rhs->type == CPP_PADDING)
895 if (rhs->flags & PASTE_LEFT)
896 abort ();
898 if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
899 break;
901 while (rhs->flags & PASTE_LEFT);
903 /* Put the resulting token in its own context. */
904 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
906 source_location *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);
914 else
915 _cpp_push_token_context (pfile, NULL, lhs, 1);
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.
922 Note that MACRO cannot necessarily be deduced from NODE, in case
923 NODE was redefined whilst collecting arguments. */
924 bool
925 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
927 if (argc == macro->paramc)
928 return true;
930 if (argc < macro->paramc)
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");
938 This is exactly the same as if an empty variadic list had been
939 supplied - debug("string", ). */
941 if (argc + 1 == macro->paramc && macro->variadic)
943 if (CPP_PEDANTIC (pfile) && ! macro->syshdr
944 && ! CPP_OPTION (pfile, va_opt))
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");
955 return true;
958 cpp_error (pfile, CPP_DL_ERROR,
959 "macro \"%s\" requires %u arguments, but only %u given",
960 NODE_NAME (node), macro->paramc, argc);
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);
967 return false;
970 /* Reads and returns the arguments to a function-like macro
971 invocation. Assumes the opening parenthesis has been processed.
972 If there is an error, emits an appropriate diagnostic and returns
973 NULL. Each argument is terminated by a CPP_EOF token, for the
974 future benefit of expand_arg(). If there are any deferred
975 #pragma directives among macro arguments, store pointers to the
976 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
978 What is returned is the buffer that contains the memory allocated
979 to hold the macro arguments. NODE is the name of the macro this
980 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
981 set to the actual number of macro arguments allocated in the
982 returned buffer. */
983 static _cpp_buff *
984 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
985 _cpp_buff **pragma_buff, unsigned *num_args)
987 _cpp_buff *buff, *base_buff;
988 cpp_macro *macro;
989 macro_arg *args, *arg;
990 const cpp_token *token;
991 unsigned int argc;
992 source_location virt_loc;
993 bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
994 unsigned num_args_alloced = 0;
996 macro = node->value.macro;
997 if (macro->paramc)
998 argc = macro->paramc;
999 else
1000 argc = 1;
1002 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
1003 #define ARG_TOKENS_EXTENT 1000
1005 buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
1006 * sizeof (cpp_token *)
1007 + sizeof (macro_arg)));
1008 base_buff = buff;
1009 args = (macro_arg *) buff->base;
1010 memset (args, 0, argc * sizeof (macro_arg));
1011 buff->cur = (unsigned char *) &args[argc];
1012 arg = args, argc = 0;
1014 /* Collect the tokens making up each argument. We don't yet know
1015 how many arguments have been supplied, whether too many or too
1016 few. Hence the slightly bizarre usage of "argc" and "arg". */
1019 unsigned int paren_depth = 0;
1020 unsigned int ntokens = 0;
1021 unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
1022 num_args_alloced++;
1024 argc++;
1025 arg->first = (const cpp_token **) buff->cur;
1026 if (track_macro_expansion_p)
1028 virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
1029 arg->virt_locs = XNEWVEC (source_location,
1030 virt_locs_capacity);
1033 for (;;)
1035 /* Require space for 2 new tokens (including a CPP_EOF). */
1036 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
1038 buff = _cpp_append_extend_buff (pfile, buff,
1039 ARG_TOKENS_EXTENT
1040 * sizeof (cpp_token *));
1041 arg->first = (const cpp_token **) buff->cur;
1043 if (track_macro_expansion_p
1044 && (ntokens + 2 > virt_locs_capacity))
1046 virt_locs_capacity += ARG_TOKENS_EXTENT;
1047 arg->virt_locs = XRESIZEVEC (source_location,
1048 arg->virt_locs,
1049 virt_locs_capacity);
1052 token = cpp_get_token_1 (pfile, &virt_loc);
1054 if (token->type == CPP_PADDING)
1056 /* Drop leading padding. */
1057 if (ntokens == 0)
1058 continue;
1060 else if (token->type == CPP_OPEN_PAREN)
1061 paren_depth++;
1062 else if (token->type == CPP_CLOSE_PAREN)
1064 if (paren_depth-- == 0)
1065 break;
1067 else if (token->type == CPP_COMMA)
1069 /* A comma does not terminate an argument within
1070 parentheses or as part of a variable argument. */
1071 if (paren_depth == 0
1072 && ! (macro->variadic && argc == macro->paramc))
1073 break;
1075 else if (token->type == CPP_EOF
1076 || (token->type == CPP_HASH && token->flags & BOL))
1077 break;
1078 else if (token->type == CPP_PRAGMA)
1080 cpp_token *newtok = _cpp_temp_token (pfile);
1082 /* CPP_PRAGMA token lives in directive_result, which will
1083 be overwritten on the next directive. */
1084 *newtok = *token;
1085 token = newtok;
1088 if (*pragma_buff == NULL
1089 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
1091 _cpp_buff *next;
1092 if (*pragma_buff == NULL)
1093 *pragma_buff
1094 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
1095 else
1097 next = *pragma_buff;
1098 *pragma_buff
1099 = _cpp_get_buff (pfile,
1100 (BUFF_FRONT (*pragma_buff)
1101 - (*pragma_buff)->base) * 2);
1102 (*pragma_buff)->next = next;
1105 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
1106 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
1107 if (token->type == CPP_PRAGMA_EOL)
1108 break;
1109 token = cpp_get_token_1 (pfile, &virt_loc);
1111 while (token->type != CPP_EOF);
1113 /* In deferred pragmas parsing_args and prevent_expansion
1114 had been changed, reset it. */
1115 pfile->state.parsing_args = 2;
1116 pfile->state.prevent_expansion = 1;
1118 if (token->type == CPP_EOF)
1119 break;
1120 else
1121 continue;
1123 set_arg_token (arg, token, virt_loc,
1124 ntokens, MACRO_ARG_TOKEN_NORMAL,
1125 CPP_OPTION (pfile, track_macro_expansion));
1126 ntokens++;
1129 /* Drop trailing padding. */
1130 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
1131 ntokens--;
1133 arg->count = ntokens;
1134 set_arg_token (arg, &pfile->eof, pfile->eof.src_loc,
1135 ntokens, MACRO_ARG_TOKEN_NORMAL,
1136 CPP_OPTION (pfile, track_macro_expansion));
1138 /* Terminate the argument. Excess arguments loop back and
1139 overwrite the final legitimate argument, before failing. */
1140 if (argc <= macro->paramc)
1142 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
1143 if (argc != macro->paramc)
1144 arg++;
1147 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
1149 if (token->type == CPP_EOF)
1151 /* We still need the CPP_EOF to end directives, and to end
1152 pre-expansion of a macro argument. Step back is not
1153 unconditional, since we don't want to return a CPP_EOF to our
1154 callers at the end of an -include-d file. */
1155 if (pfile->context->prev || pfile->state.in_directive)
1156 _cpp_backup_tokens (pfile, 1);
1157 cpp_error (pfile, CPP_DL_ERROR,
1158 "unterminated argument list invoking macro \"%s\"",
1159 NODE_NAME (node));
1161 else
1163 /* A single empty argument is counted as no argument. */
1164 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
1165 argc = 0;
1166 if (_cpp_arguments_ok (pfile, macro, node, argc))
1168 /* GCC has special semantics for , ## b where b is a varargs
1169 parameter: we remove the comma if b was omitted entirely.
1170 If b was merely an empty argument, the comma is retained.
1171 If the macro takes just one (varargs) parameter, then we
1172 retain the comma only if we are standards conforming.
1174 If FIRST is NULL replace_args () swallows the comma. */
1175 if (macro->variadic && (argc < macro->paramc
1176 || (argc == 1 && args[0].count == 0
1177 && !CPP_OPTION (pfile, std))))
1178 args[macro->paramc - 1].first = NULL;
1179 if (num_args)
1180 *num_args = num_args_alloced;
1181 return base_buff;
1185 /* An error occurred. */
1186 _cpp_release_buff (pfile, base_buff);
1187 return NULL;
1190 /* Search for an opening parenthesis to the macro of NODE, in such a
1191 way that, if none is found, we don't lose the information in any
1192 intervening padding tokens. If we find the parenthesis, collect
1193 the arguments and return the buffer containing them. PRAGMA_BUFF
1194 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
1195 *NUM_ARGS is set to the number of arguments contained in the
1196 returned buffer. */
1197 static _cpp_buff *
1198 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
1199 _cpp_buff **pragma_buff, unsigned *num_args)
1201 const cpp_token *token, *padding = NULL;
1203 for (;;)
1205 token = cpp_get_token (pfile);
1206 if (token->type != CPP_PADDING)
1207 break;
1208 if (padding == NULL
1209 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
1210 padding = token;
1213 if (token->type == CPP_OPEN_PAREN)
1215 pfile->state.parsing_args = 2;
1216 return collect_args (pfile, node, pragma_buff, num_args);
1219 /* CPP_EOF can be the end of macro arguments, or the end of the
1220 file. We mustn't back up over the latter. Ugh. */
1221 if (token->type != CPP_EOF || token == &pfile->eof)
1223 /* Back up. We may have skipped padding, in which case backing
1224 up more than one token when expanding macros is in general
1225 too difficult. We re-insert it in its own context. */
1226 _cpp_backup_tokens (pfile, 1);
1227 if (padding)
1228 _cpp_push_token_context (pfile, NULL, padding, 1);
1231 return NULL;
1234 /* Return the real number of tokens in the expansion of MACRO. */
1235 static inline unsigned int
1236 macro_real_token_count (const cpp_macro *macro)
1238 if (__builtin_expect (!macro->extra_tokens, true))
1239 return macro->count;
1241 for (unsigned i = macro->count; i--;)
1242 if (macro->exp.tokens[i].type != CPP_PASTE)
1243 return i + 1;
1245 return 0;
1248 /* Push the context of a macro with hash entry NODE onto the context
1249 stack. If we can successfully expand the macro, we push a context
1250 containing its yet-to-be-rescanned replacement list and return one.
1251 If there were additionally any unexpanded deferred #pragma
1252 directives among macro arguments, push another context containing
1253 the pragma tokens before the yet-to-be-rescanned replacement list
1254 and return two. Otherwise, we don't push a context and return
1255 zero. LOCATION is the location of the expansion point of the
1256 macro. */
1257 static int
1258 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
1259 const cpp_token *result, source_location location)
1261 /* The presence of a macro invalidates a file's controlling macro. */
1262 pfile->mi_valid = false;
1264 pfile->state.angled_headers = false;
1266 /* From here to when we push the context for the macro later down
1267 this function, we need to flag the fact that we are about to
1268 expand a macro. This is useful when -ftrack-macro-expansion is
1269 turned off. In that case, we need to record the location of the
1270 expansion point of the top-most macro we are about to to expand,
1271 into pfile->invocation_location. But we must not record any such
1272 location once the process of expanding the macro starts; that is,
1273 we must not do that recording between now and later down this
1274 function where set this flag to FALSE. */
1275 pfile->about_to_expand_macro_p = true;
1277 if (cpp_user_macro_p (node))
1279 cpp_macro *macro = node->value.macro;
1280 _cpp_buff *pragma_buff = NULL;
1282 if (macro->fun_like)
1284 _cpp_buff *buff;
1285 unsigned num_args = 0;
1287 pfile->state.prevent_expansion++;
1288 pfile->keep_tokens++;
1289 pfile->state.parsing_args = 1;
1290 buff = funlike_invocation_p (pfile, node, &pragma_buff,
1291 &num_args);
1292 pfile->state.parsing_args = 0;
1293 pfile->keep_tokens--;
1294 pfile->state.prevent_expansion--;
1296 if (buff == NULL)
1298 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1299 cpp_warning (pfile, CPP_W_TRADITIONAL,
1300 "function-like macro \"%s\" must be used with arguments in traditional C",
1301 NODE_NAME (node));
1303 if (pragma_buff)
1304 _cpp_release_buff (pfile, pragma_buff);
1306 pfile->about_to_expand_macro_p = false;
1307 return 0;
1310 if (macro->paramc > 0)
1311 replace_args (pfile, node, macro,
1312 (macro_arg *) buff->base,
1313 location);
1314 /* Free the memory used by the arguments of this
1315 function-like macro. This memory has been allocated by
1316 funlike_invocation_p and by replace_args. */
1317 delete_macro_args (buff, num_args);
1320 /* Disable the macro within its expansion. */
1321 node->flags |= NODE_DISABLED;
1323 /* Laziness can only affect the expansion tokens of the macro,
1324 not its fun-likeness or parameters. */
1325 _cpp_maybe_notify_macro_use (pfile, node);
1326 if (pfile->cb.used)
1327 pfile->cb.used (pfile, location, node);
1329 macro->used = 1;
1331 if (macro->paramc == 0)
1333 unsigned tokens_count = macro_real_token_count (macro);
1334 if (CPP_OPTION (pfile, track_macro_expansion))
1336 unsigned int i;
1337 const cpp_token *src = macro->exp.tokens;
1338 const line_map_macro *map;
1339 source_location *virt_locs = NULL;
1340 _cpp_buff *macro_tokens
1341 = tokens_buff_new (pfile, tokens_count, &virt_locs);
1343 /* Create a macro map to record the locations of the
1344 tokens that are involved in the expansion. LOCATION
1345 is the location of the macro expansion point. */
1346 map = linemap_enter_macro (pfile->line_table,
1347 node, location, tokens_count);
1348 for (i = 0; i < tokens_count; ++i)
1350 tokens_buff_add_token (macro_tokens, virt_locs,
1351 src, src->src_loc,
1352 src->src_loc, map, i);
1353 ++src;
1355 push_extended_tokens_context (pfile, node,
1356 macro_tokens,
1357 virt_locs,
1358 (const cpp_token **)
1359 macro_tokens->base,
1360 tokens_count);
1362 else
1363 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1364 tokens_count);
1365 num_macro_tokens_counter += tokens_count;
1368 if (pragma_buff)
1370 if (!pfile->state.in_directive)
1371 _cpp_push_token_context (pfile, NULL,
1372 padding_token (pfile, result), 1);
1375 unsigned tokens_count;
1376 _cpp_buff *tail = pragma_buff->next;
1377 pragma_buff->next = NULL;
1378 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1379 - (const cpp_token **) pragma_buff->base);
1380 push_ptoken_context (pfile, NULL, pragma_buff,
1381 (const cpp_token **) pragma_buff->base,
1382 tokens_count);
1383 pragma_buff = tail;
1384 if (!CPP_OPTION (pfile, track_macro_expansion))
1385 num_macro_tokens_counter += tokens_count;
1388 while (pragma_buff != NULL);
1389 pfile->about_to_expand_macro_p = false;
1390 return 2;
1393 pfile->about_to_expand_macro_p = false;
1394 return 1;
1397 pfile->about_to_expand_macro_p = false;
1398 /* Handle built-in macros and the _Pragma operator. */
1400 source_location expand_loc;
1402 if (/* The top-level macro invocation that triggered the expansion
1403 we are looking at is with a function-like user macro ... */
1404 cpp_fun_like_macro_p (pfile->top_most_macro_node)
1405 /* ... and we are tracking the macro expansion. */
1406 && CPP_OPTION (pfile, track_macro_expansion))
1407 /* Then the location of the end of the macro invocation is the
1408 location of the expansion point of this macro. */
1409 expand_loc = location;
1410 else
1411 /* Otherwise, the location of the end of the macro invocation is
1412 the location of the expansion point of that top-level macro
1413 invocation. */
1414 expand_loc = pfile->invocation_location;
1416 return builtin_macro (pfile, node, location, expand_loc);
1420 /* De-allocate the memory used by BUFF which is an array of instances
1421 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1422 present in BUFF. */
1423 static void
1424 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1426 macro_arg *macro_args;
1427 unsigned i;
1429 if (buff == NULL)
1430 return;
1432 macro_args = (macro_arg *) buff->base;
1434 /* Walk instances of macro_arg to free their expanded tokens as well
1435 as their macro_arg::virt_locs members. */
1436 for (i = 0; i < num_args; ++i)
1438 if (macro_args[i].expanded)
1440 free (macro_args[i].expanded);
1441 macro_args[i].expanded = NULL;
1443 if (macro_args[i].virt_locs)
1445 free (macro_args[i].virt_locs);
1446 macro_args[i].virt_locs = NULL;
1448 if (macro_args[i].expanded_virt_locs)
1450 free (macro_args[i].expanded_virt_locs);
1451 macro_args[i].expanded_virt_locs = NULL;
1454 _cpp_free_buff (buff);
1457 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1458 to set, LOCATION is its virtual location. "Virtual" location means
1459 the location that encodes loci across macro expansion. Otherwise
1460 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1461 argument ARG is supposed to contain. Note that ARG must be
1462 tailored so that it has enough room to contain INDEX + 1 numbers of
1463 tokens, at least. */
1464 static void
1465 set_arg_token (macro_arg *arg, const cpp_token *token,
1466 source_location location, size_t index,
1467 enum macro_arg_token_kind kind,
1468 bool track_macro_exp_p)
1470 const cpp_token **token_ptr;
1471 source_location *loc = NULL;
1473 token_ptr =
1474 arg_token_ptr_at (arg, index, kind,
1475 track_macro_exp_p ? &loc : NULL);
1476 *token_ptr = token;
1478 if (loc != NULL)
1480 /* We can't set the location of a stringified argument
1481 token and we can't set any location if we aren't tracking
1482 macro expansion locations. */
1483 gcc_checking_assert (kind != MACRO_ARG_TOKEN_STRINGIFIED
1484 && track_macro_exp_p);
1485 *loc = location;
1489 /* Get the pointer to the location of the argument token of the
1490 function-like macro argument ARG. This function must be called
1491 only when we -ftrack-macro-expansion is on. */
1492 static const source_location *
1493 get_arg_token_location (const macro_arg *arg,
1494 enum macro_arg_token_kind kind)
1496 const source_location *loc = NULL;
1497 const cpp_token **token_ptr =
1498 arg_token_ptr_at (arg, 0, kind, (source_location **) &loc);
1500 if (token_ptr == NULL)
1501 return NULL;
1503 return loc;
1506 /* Return the pointer to the INDEXth token of the macro argument ARG.
1507 KIND specifies the kind of token the macro argument ARG contains.
1508 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1509 of the virtual location of the returned token if the
1510 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1511 spelling location of the returned token. */
1512 static const cpp_token **
1513 arg_token_ptr_at (const macro_arg *arg, size_t index,
1514 enum macro_arg_token_kind kind,
1515 source_location **virt_location)
1517 const cpp_token **tokens_ptr = NULL;
1519 switch (kind)
1521 case MACRO_ARG_TOKEN_NORMAL:
1522 tokens_ptr = arg->first;
1523 break;
1524 case MACRO_ARG_TOKEN_STRINGIFIED:
1525 tokens_ptr = (const cpp_token **) &arg->stringified;
1526 break;
1527 case MACRO_ARG_TOKEN_EXPANDED:
1528 tokens_ptr = arg->expanded;
1529 break;
1532 if (tokens_ptr == NULL)
1533 /* This can happen for e.g, an empty token argument to a
1534 funtion-like macro. */
1535 return tokens_ptr;
1537 if (virt_location)
1539 if (kind == MACRO_ARG_TOKEN_NORMAL)
1540 *virt_location = &arg->virt_locs[index];
1541 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1542 *virt_location = &arg->expanded_virt_locs[index];
1543 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1544 *virt_location =
1545 (source_location *) &tokens_ptr[index]->src_loc;
1547 return &tokens_ptr[index];
1550 /* Initialize an iterator so that it iterates over the tokens of a
1551 function-like macro argument. KIND is the kind of tokens we want
1552 ITER to iterate over. TOKEN_PTR points the first token ITER will
1553 iterate over. */
1554 static void
1555 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1556 bool track_macro_exp_p,
1557 enum macro_arg_token_kind kind,
1558 const macro_arg *arg,
1559 const cpp_token **token_ptr)
1561 iter->track_macro_exp_p = track_macro_exp_p;
1562 iter->kind = kind;
1563 iter->token_ptr = token_ptr;
1564 /* Unconditionally initialize this so that the compiler doesn't warn
1565 about iter->location_ptr being possibly uninitialized later after
1566 this code has been inlined somewhere. */
1567 iter->location_ptr = NULL;
1568 if (track_macro_exp_p)
1569 iter->location_ptr = get_arg_token_location (arg, kind);
1570 #if CHECKING_P
1571 iter->num_forwards = 0;
1572 if (track_macro_exp_p
1573 && token_ptr != NULL
1574 && iter->location_ptr == NULL)
1575 abort ();
1576 #endif
1579 /* Move the iterator one token forward. Note that if IT was
1580 initialized on an argument that has a stringified token, moving it
1581 forward doesn't make sense as a stringified token is essentially one
1582 string. */
1583 static void
1584 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1586 switch (it->kind)
1588 case MACRO_ARG_TOKEN_NORMAL:
1589 case MACRO_ARG_TOKEN_EXPANDED:
1590 it->token_ptr++;
1591 if (it->track_macro_exp_p)
1592 it->location_ptr++;
1593 break;
1594 case MACRO_ARG_TOKEN_STRINGIFIED:
1595 #if CHECKING_P
1596 if (it->num_forwards > 0)
1597 abort ();
1598 #endif
1599 break;
1602 #if CHECKING_P
1603 it->num_forwards++;
1604 #endif
1607 /* Return the token pointed to by the iterator. */
1608 static const cpp_token *
1609 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1611 #if CHECKING_P
1612 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1613 && it->num_forwards > 0)
1614 abort ();
1615 #endif
1616 if (it->token_ptr == NULL)
1617 return NULL;
1618 return *it->token_ptr;
1621 /* Return the location of the token pointed to by the iterator.*/
1622 static source_location
1623 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1625 #if CHECKING_P
1626 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1627 && it->num_forwards > 0)
1628 abort ();
1629 #endif
1630 if (it->track_macro_exp_p)
1631 return *it->location_ptr;
1632 else
1633 return (*it->token_ptr)->src_loc;
1636 /* Return the index of a token [resulting from macro expansion] inside
1637 the total list of tokens resulting from a given macro
1638 expansion. The index can be different depending on whether if we
1639 want each tokens resulting from function-like macro arguments
1640 expansion to have a different location or not.
1642 E.g, consider this function-like macro:
1644 #define M(x) x - 3
1646 Then consider us "calling" it (and thus expanding it) like:
1648 M(1+4)
1650 It will be expanded into:
1652 1+4-3
1654 Let's consider the case of the token '4'.
1656 Its index can be 2 (it's the third token of the set of tokens
1657 resulting from the expansion) or it can be 0 if we consider that
1658 all tokens resulting from the expansion of the argument "1+2" have
1659 the same index, which is 0. In this later case, the index of token
1660 '-' would then be 1 and the index of token '3' would be 2.
1662 The later case is useful to use less memory e.g, for the case of
1663 the user using the option -ftrack-macro-expansion=1.
1665 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1666 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1667 parameter (inside the macro replacement list) that corresponds to
1668 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1671 If we refer to the example above, for the '4' argument token,
1672 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1673 would be set to the token 'x', in the replacement list "x - 3" of
1674 macro M.
1676 This is a subroutine of replace_args. */
1677 inline static unsigned
1678 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1679 const cpp_token *cur_replacement_token,
1680 unsigned absolute_token_index)
1682 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1683 return absolute_token_index;
1684 return cur_replacement_token - macro->exp.tokens;
1687 /* Copy whether PASTE_LEFT is set from SRC to *PASTE_FLAG. */
1689 static void
1690 copy_paste_flag (cpp_reader *pfile, const cpp_token **paste_flag,
1691 const cpp_token *src)
1693 cpp_token *token = _cpp_temp_token (pfile);
1694 token->type = (*paste_flag)->type;
1695 token->val = (*paste_flag)->val;
1696 if (src->flags & PASTE_LEFT)
1697 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1698 else
1699 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1700 *paste_flag = token;
1703 /* True IFF the last token emitted into BUFF (if any) is PTR. */
1705 static bool
1706 last_token_is (_cpp_buff *buff, const cpp_token **ptr)
1708 return (ptr && tokens_buff_last_token_ptr (buff) == ptr);
1711 /* Replace the parameters in a function-like macro of NODE with the
1712 actual ARGS, and place the result in a newly pushed token context.
1713 Expand each argument before replacing, unless it is operated upon
1714 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1715 the expansion point of the macro. E.g, the location of the
1716 function-like macro invocation. */
1717 static void
1718 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1719 macro_arg *args, source_location expansion_point_loc)
1721 unsigned int i, total;
1722 const cpp_token *src, *limit;
1723 const cpp_token **first = NULL;
1724 macro_arg *arg;
1725 _cpp_buff *buff = NULL;
1726 source_location *virt_locs = NULL;
1727 unsigned int exp_count;
1728 const line_map_macro *map = NULL;
1729 int track_macro_exp;
1731 /* First, fully macro-expand arguments, calculating the number of
1732 tokens in the final expansion as we go. The ordering of the if
1733 statements below is subtle; we must handle stringification before
1734 pasting. */
1736 /* EXP_COUNT is the number of tokens in the macro replacement
1737 list. TOTAL is the number of tokens /after/ macro parameters
1738 have been replaced by their arguments. */
1739 exp_count = macro_real_token_count (macro);
1740 total = exp_count;
1741 limit = macro->exp.tokens + exp_count;
1743 for (src = macro->exp.tokens; src < limit; src++)
1744 if (src->type == CPP_MACRO_ARG)
1746 /* Leading and trailing padding tokens. */
1747 total += 2;
1748 /* Account for leading and padding tokens in exp_count too.
1749 This is going to be important later down this function,
1750 when we want to handle the case of (track_macro_exp <
1751 2). */
1752 exp_count += 2;
1754 /* We have an argument. If it is not being stringified or
1755 pasted it is macro-replaced before insertion. */
1756 arg = &args[src->val.macro_arg.arg_no - 1];
1758 if (src->flags & STRINGIFY_ARG)
1760 if (!arg->stringified)
1761 arg->stringified = stringify_arg (pfile, arg);
1763 else if ((src->flags & PASTE_LEFT)
1764 || (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1765 total += arg->count - 1;
1766 else
1768 if (!arg->expanded)
1769 expand_arg (pfile, arg);
1770 total += arg->expanded_count - 1;
1774 /* When the compiler is called with the -ftrack-macro-expansion
1775 flag, we need to keep track of the location of each token that
1776 results from macro expansion.
1778 A token resulting from macro expansion is not a new token. It is
1779 simply the same token as the token coming from the macro
1780 definition. The new things that are allocated are the buffer
1781 that holds the tokens resulting from macro expansion and a new
1782 location that records many things like the locus of the expansion
1783 point as well as the original locus inside the definition of the
1784 macro. This location is called a virtual location.
1786 So the buffer BUFF holds a set of cpp_token*, and the buffer
1787 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1789 Both of these two buffers are going to be hung off of the macro
1790 context, when the latter is pushed. The memory allocated to
1791 store the tokens and their locations is going to be freed once
1792 the context of macro expansion is popped.
1794 As far as tokens are concerned, the memory overhead of
1795 -ftrack-macro-expansion is proportional to the number of
1796 macros that get expanded multiplied by sizeof (source_location).
1797 The good news is that extra memory gets freed when the macro
1798 context is freed, i.e shortly after the macro got expanded. */
1800 /* Is the -ftrack-macro-expansion flag in effect? */
1801 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1803 /* Now allocate memory space for tokens and locations resulting from
1804 the macro expansion, copy the tokens and replace the arguments.
1805 This memory must be freed when the context of the macro MACRO is
1806 popped. */
1807 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1809 first = (const cpp_token **) buff->base;
1811 /* Create a macro map to record the locations of the tokens that are
1812 involved in the expansion. Note that the expansion point is set
1813 to the location of the closing parenthesis. Otherwise, the
1814 subsequent map created for the first token that comes after the
1815 macro map might have a wrong line number. That would lead to
1816 tokens with wrong line numbers after the macro expansion. This
1817 adds up to the memory overhead of the -ftrack-macro-expansion
1818 flag; for every macro that is expanded, a "macro map" is
1819 created. */
1820 if (track_macro_exp)
1822 int num_macro_tokens = total;
1823 if (track_macro_exp < 2)
1824 /* Then the number of macro tokens won't take in account the
1825 fact that function-like macro arguments can expand to
1826 multiple tokens. This is to save memory at the expense of
1827 accuracy.
1829 Suppose we have #define SQUARE(A) A * A
1831 And then we do SQUARE(2+3)
1833 Then the tokens 2, +, 3, will have the same location,
1834 saying they come from the expansion of the argument A. */
1835 num_macro_tokens = exp_count;
1836 map = linemap_enter_macro (pfile->line_table, node,
1837 expansion_point_loc,
1838 num_macro_tokens);
1840 i = 0;
1841 vaopt_state vaopt_tracker (pfile, macro->variadic,
1842 args[macro->paramc - 1].count > 0);
1843 const cpp_token **vaopt_start = NULL;
1844 for (src = macro->exp.tokens; src < limit; src++)
1846 unsigned int arg_tokens_count;
1847 macro_arg_token_iter from;
1848 const cpp_token **paste_flag = NULL;
1849 const cpp_token **tmp_token_ptr;
1851 /* __VA_OPT__ handling. */
1852 vaopt_state::update_type vostate = vaopt_tracker.update (src);
1853 if (vostate != vaopt_state::INCLUDE)
1855 if (vostate == vaopt_state::BEGIN)
1857 /* Padding on the left of __VA_OPT__ (unless RHS of ##). */
1858 if (src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
1860 const cpp_token *t = padding_token (pfile, src);
1861 unsigned index = expanded_token_index (pfile, macro, src, i);
1862 /* Allocate a virtual location for the padding token and
1863 append the token and its location to BUFF and
1864 VIRT_LOCS. */
1865 tokens_buff_add_token (buff, virt_locs, t,
1866 t->src_loc, t->src_loc,
1867 map, index);
1869 vaopt_start = tokens_buff_last_token_ptr (buff);
1871 else if (vostate == vaopt_state::END)
1873 const cpp_token **start = vaopt_start;
1874 vaopt_start = NULL;
1876 /* Remove any tail padding from inside the __VA_OPT__. */
1877 paste_flag = tokens_buff_last_token_ptr (buff);
1878 while (paste_flag && paste_flag != start
1879 && (*paste_flag)->type == CPP_PADDING)
1881 tokens_buff_remove_last_token (buff);
1882 paste_flag = tokens_buff_last_token_ptr (buff);
1885 if (src->flags & PASTE_LEFT)
1887 /* With a non-empty __VA_OPT__ on the LHS of ##, the last
1888 token should be flagged PASTE_LEFT. */
1889 if (paste_flag && (*paste_flag)->type != CPP_PADDING)
1890 copy_paste_flag (pfile, paste_flag, src);
1892 else
1894 /* Otherwise, avoid paste on RHS, __VA_OPT__(c)d or
1895 __VA_OPT__(c)__VA_OPT__(d). */
1896 const cpp_token *t = &pfile->avoid_paste;
1897 tokens_buff_add_token (buff, virt_locs,
1898 t, t->src_loc, t->src_loc,
1899 NULL, 0);
1902 continue;
1905 if (src->type != CPP_MACRO_ARG)
1907 /* Allocate a virtual location for token SRC, and add that
1908 token and its virtual location into the buffers BUFF and
1909 VIRT_LOCS. */
1910 unsigned index = expanded_token_index (pfile, macro, src, i);
1911 tokens_buff_add_token (buff, virt_locs, src,
1912 src->src_loc, src->src_loc,
1913 map, index);
1914 i += 1;
1915 continue;
1918 paste_flag = 0;
1919 arg = &args[src->val.macro_arg.arg_no - 1];
1920 /* SRC is a macro parameter that we need to replace with its
1921 corresponding argument. So at some point we'll need to
1922 iterate over the tokens of the macro argument and copy them
1923 into the "place" now holding the correspondig macro
1924 parameter. We are going to use the iterator type
1925 macro_argo_token_iter to handle that iterating. The 'if'
1926 below is to initialize the iterator depending on the type of
1927 tokens the macro argument has. It also does some adjustment
1928 related to padding tokens and some pasting corner cases. */
1929 if (src->flags & STRINGIFY_ARG)
1931 arg_tokens_count = 1;
1932 macro_arg_token_iter_init (&from,
1933 CPP_OPTION (pfile,
1934 track_macro_expansion),
1935 MACRO_ARG_TOKEN_STRINGIFIED,
1936 arg, &arg->stringified);
1938 else if (src->flags & PASTE_LEFT)
1940 arg_tokens_count = arg->count;
1941 macro_arg_token_iter_init (&from,
1942 CPP_OPTION (pfile,
1943 track_macro_expansion),
1944 MACRO_ARG_TOKEN_NORMAL,
1945 arg, arg->first);
1947 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
1949 int num_toks;
1950 arg_tokens_count = arg->count;
1951 macro_arg_token_iter_init (&from,
1952 CPP_OPTION (pfile,
1953 track_macro_expansion),
1954 MACRO_ARG_TOKEN_NORMAL,
1955 arg, arg->first);
1957 num_toks = tokens_buff_count (buff);
1959 if (num_toks != 0)
1961 /* So the current parameter token is pasted to the previous
1962 token in the replacement list. Let's look at what
1963 we have as previous and current arguments. */
1965 /* This is the previous argument's token ... */
1966 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
1968 if ((*tmp_token_ptr)->type == CPP_COMMA
1969 && macro->variadic
1970 && src->val.macro_arg.arg_no == macro->paramc)
1972 /* ... which is a comma; and the current parameter
1973 is the last parameter of a variadic function-like
1974 macro. If the argument to the current last
1975 parameter is NULL, then swallow the comma,
1976 otherwise drop the paste flag. */
1977 if (macro_arg_token_iter_get_token (&from) == NULL)
1978 tokens_buff_remove_last_token (buff);
1979 else
1980 paste_flag = tmp_token_ptr;
1982 /* Remove the paste flag if the RHS is a placemarker, unless the
1983 previous emitted token is at the beginning of __VA_OPT__;
1984 placemarkers within __VA_OPT__ are ignored in that case. */
1985 else if (arg_tokens_count == 0
1986 && tmp_token_ptr != vaopt_start)
1987 paste_flag = tmp_token_ptr;
1990 else
1992 arg_tokens_count = arg->expanded_count;
1993 macro_arg_token_iter_init (&from,
1994 CPP_OPTION (pfile,
1995 track_macro_expansion),
1996 MACRO_ARG_TOKEN_EXPANDED,
1997 arg, arg->expanded);
1999 if (last_token_is (buff, vaopt_start))
2001 /* We're expanding an arg at the beginning of __VA_OPT__.
2002 Skip padding. */
2003 while (arg_tokens_count)
2005 const cpp_token *t = macro_arg_token_iter_get_token (&from);
2006 if (t->type != CPP_PADDING)
2007 break;
2008 macro_arg_token_iter_forward (&from);
2009 --arg_tokens_count;
2014 /* Padding on the left of an argument (unless RHS of ##). */
2015 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
2016 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT)
2017 && !last_token_is (buff, vaopt_start))
2019 const cpp_token *t = padding_token (pfile, src);
2020 unsigned index = expanded_token_index (pfile, macro, src, i);
2021 /* Allocate a virtual location for the padding token and
2022 append the token and its location to BUFF and
2023 VIRT_LOCS. */
2024 tokens_buff_add_token (buff, virt_locs, t,
2025 t->src_loc, t->src_loc,
2026 map, index);
2029 if (arg_tokens_count)
2031 /* So now we've got the number of tokens that make up the
2032 argument that is going to replace the current parameter
2033 in the macro's replacement list. */
2034 unsigned int j;
2035 for (j = 0; j < arg_tokens_count; ++j)
2037 /* So if track_macro_exp is < 2, the user wants to
2038 save extra memory while tracking macro expansion
2039 locations. So in that case here is what we do:
2041 Suppose we have #define SQUARE(A) A * A
2043 And then we do SQUARE(2+3)
2045 Then the tokens 2, +, 3, will have the same location,
2046 saying they come from the expansion of the argument
2049 So that means we are going to ignore the COUNT tokens
2050 resulting from the expansion of the current macro
2051 argument. In other words all the ARG_TOKENS_COUNT tokens
2052 resulting from the expansion of the macro argument will
2053 have the index I. Normally, each of those tokens should
2054 have index I+J. */
2055 unsigned token_index = i;
2056 unsigned index;
2057 if (track_macro_exp > 1)
2058 token_index += j;
2060 index = expanded_token_index (pfile, macro, src, token_index);
2061 tokens_buff_add_token (buff, virt_locs,
2062 macro_arg_token_iter_get_token (&from),
2063 macro_arg_token_iter_get_location (&from),
2064 src->src_loc, map, index);
2065 macro_arg_token_iter_forward (&from);
2068 /* With a non-empty argument on the LHS of ##, the last
2069 token should be flagged PASTE_LEFT. */
2070 if (src->flags & PASTE_LEFT)
2071 paste_flag
2072 = (const cpp_token **) tokens_buff_last_token_ptr (buff);
2074 else if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, c99)
2075 && ! macro->syshdr && ! cpp_in_system_header (pfile))
2077 if (CPP_OPTION (pfile, cplusplus))
2078 cpp_pedwarning (pfile, CPP_W_PEDANTIC,
2079 "invoking macro %s argument %d: "
2080 "empty macro arguments are undefined"
2081 " in ISO C++98",
2082 NODE_NAME (node), src->val.macro_arg.arg_no);
2083 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat))
2084 cpp_pedwarning (pfile,
2085 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
2086 ? CPP_W_C90_C99_COMPAT : CPP_W_PEDANTIC,
2087 "invoking macro %s argument %d: "
2088 "empty macro arguments are undefined"
2089 " in ISO C90",
2090 NODE_NAME (node), src->val.macro_arg.arg_no);
2092 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
2093 && ! CPP_OPTION (pfile, cplusplus)
2094 && ! macro->syshdr && ! cpp_in_system_header (pfile))
2095 cpp_warning (pfile, CPP_W_C90_C99_COMPAT,
2096 "invoking macro %s argument %d: "
2097 "empty macro arguments are undefined"
2098 " in ISO C90",
2099 NODE_NAME (node), src->val.macro_arg.arg_no);
2101 /* Avoid paste on RHS (even case count == 0). */
2102 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT)
2103 && !last_token_is (buff, vaopt_start))
2105 const cpp_token *t = &pfile->avoid_paste;
2106 tokens_buff_add_token (buff, virt_locs,
2107 t, t->src_loc, t->src_loc,
2108 NULL, 0);
2111 /* Add a new paste flag, or remove an unwanted one. */
2112 if (paste_flag)
2113 copy_paste_flag (pfile, paste_flag, src);
2115 i += arg_tokens_count;
2118 if (track_macro_exp)
2119 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
2120 tokens_buff_count (buff));
2121 else
2122 push_ptoken_context (pfile, node, buff, first,
2123 tokens_buff_count (buff));
2125 num_macro_tokens_counter += tokens_buff_count (buff);
2128 /* Return a special padding token, with padding inherited from SOURCE. */
2129 static const cpp_token *
2130 padding_token (cpp_reader *pfile, const cpp_token *source)
2132 cpp_token *result = _cpp_temp_token (pfile);
2134 result->type = CPP_PADDING;
2136 /* Data in GCed data structures cannot be made const so far, so we
2137 need a cast here. */
2138 result->val.source = (cpp_token *) source;
2139 result->flags = 0;
2140 return result;
2143 /* Get a new uninitialized context. Create a new one if we cannot
2144 re-use an old one. */
2145 static cpp_context *
2146 next_context (cpp_reader *pfile)
2148 cpp_context *result = pfile->context->next;
2150 if (result == 0)
2152 result = XNEW (cpp_context);
2153 memset (result, 0, sizeof (cpp_context));
2154 result->prev = pfile->context;
2155 result->next = 0;
2156 pfile->context->next = result;
2159 pfile->context = result;
2160 return result;
2163 /* Push a list of pointers to tokens. */
2164 static void
2165 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
2166 const cpp_token **first, unsigned int count)
2168 cpp_context *context = next_context (pfile);
2170 context->tokens_kind = TOKENS_KIND_INDIRECT;
2171 context->c.macro = macro;
2172 context->buff = buff;
2173 FIRST (context).ptoken = first;
2174 LAST (context).ptoken = first + count;
2177 /* Push a list of tokens.
2179 A NULL macro means that we should continue the current macro
2180 expansion, in essence. That means that if we are currently in a
2181 macro expansion context, we'll make the new pfile->context refer to
2182 the current macro. */
2183 void
2184 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
2185 const cpp_token *first, unsigned int count)
2187 cpp_context *context;
2189 if (macro == NULL)
2190 macro = macro_of_context (pfile->context);
2192 context = next_context (pfile);
2193 context->tokens_kind = TOKENS_KIND_DIRECT;
2194 context->c.macro = macro;
2195 context->buff = NULL;
2196 FIRST (context).token = first;
2197 LAST (context).token = first + count;
2200 /* Build a context containing a list of tokens as well as their
2201 virtual locations and push it. TOKENS_BUFF is the buffer that
2202 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
2203 non-NULL, it means that the context owns it, meaning that
2204 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
2205 contains the virtual locations.
2207 A NULL macro means that we should continue the current macro
2208 expansion, in essence. That means that if we are currently in a
2209 macro expansion context, we'll make the new pfile->context refer to
2210 the current macro. */
2211 static void
2212 push_extended_tokens_context (cpp_reader *pfile,
2213 cpp_hashnode *macro,
2214 _cpp_buff *token_buff,
2215 source_location *virt_locs,
2216 const cpp_token **first,
2217 unsigned int count)
2219 cpp_context *context;
2220 macro_context *m;
2222 if (macro == NULL)
2223 macro = macro_of_context (pfile->context);
2225 context = next_context (pfile);
2226 context->tokens_kind = TOKENS_KIND_EXTENDED;
2227 context->buff = token_buff;
2229 m = XNEW (macro_context);
2230 m->macro_node = macro;
2231 m->virt_locs = virt_locs;
2232 m->cur_virt_loc = virt_locs;
2233 context->c.mc = m;
2234 FIRST (context).ptoken = first;
2235 LAST (context).ptoken = first + count;
2238 /* Push a traditional macro's replacement text. */
2239 void
2240 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
2241 const uchar *start, size_t len)
2243 cpp_context *context = next_context (pfile);
2245 context->tokens_kind = TOKENS_KIND_DIRECT;
2246 context->c.macro = macro;
2247 context->buff = NULL;
2248 CUR (context) = start;
2249 RLIMIT (context) = start + len;
2250 macro->flags |= NODE_DISABLED;
2253 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
2254 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
2255 non-null (which means that -ftrack-macro-expansion is on),
2256 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
2257 hold the virtual locations of the tokens resulting from macro
2258 expansion. */
2259 static _cpp_buff*
2260 tokens_buff_new (cpp_reader *pfile, size_t len,
2261 source_location **virt_locs)
2263 size_t tokens_size = len * sizeof (cpp_token *);
2264 size_t locs_size = len * sizeof (source_location);
2266 if (virt_locs != NULL)
2267 *virt_locs = XNEWVEC (source_location, locs_size);
2268 return _cpp_get_buff (pfile, tokens_size);
2271 /* Returns the number of tokens contained in a token buffer. The
2272 buffer holds a set of cpp_token*. */
2273 static size_t
2274 tokens_buff_count (_cpp_buff *buff)
2276 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
2279 /* Return a pointer to the last token contained in the token buffer
2280 BUFF. */
2281 static const cpp_token **
2282 tokens_buff_last_token_ptr (_cpp_buff *buff)
2284 if (BUFF_FRONT (buff) == buff->base)
2285 return NULL;
2286 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
2289 /* Remove the last token contained in the token buffer TOKENS_BUFF.
2290 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
2291 containing the virtual locations of the tokens in TOKENS_BUFF; in
2292 which case the function updates that buffer as well. */
2293 static inline void
2294 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
2297 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
2298 BUFF_FRONT (tokens_buff) =
2299 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
2302 /* Insert a token into the token buffer at the position pointed to by
2303 DEST. Note that the buffer is not enlarged so the previous token
2304 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
2305 means -ftrack-macro-expansion is effect; it then points to where to
2306 insert the virtual location of TOKEN. TOKEN is the token to
2307 insert. VIRT_LOC is the virtual location of the token, i.e, the
2308 location possibly encoding its locus across macro expansion. If
2309 TOKEN is an argument of a function-like macro (inside a macro
2310 replacement list), PARM_DEF_LOC is the spelling location of the
2311 macro parameter that TOKEN is replacing, in the replacement list of
2312 the macro. If TOKEN is not an argument of a function-like macro or
2313 if it doesn't come from a macro expansion, then VIRT_LOC can just
2314 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
2315 means TOKEN comes from a macro expansion and MAP is the macro map
2316 associated to the macro. MACRO_TOKEN_INDEX points to the index of
2317 the token in the macro map; it is not considered if MAP is NULL.
2319 Upon successful completion this function returns the a pointer to
2320 the position of the token coming right after the insertion
2321 point. */
2322 static inline const cpp_token **
2323 tokens_buff_put_token_to (const cpp_token **dest,
2324 source_location *virt_loc_dest,
2325 const cpp_token *token,
2326 source_location virt_loc,
2327 source_location parm_def_loc,
2328 const line_map_macro *map,
2329 unsigned int macro_token_index)
2331 source_location macro_loc = virt_loc;
2332 const cpp_token **result;
2334 if (virt_loc_dest)
2336 /* -ftrack-macro-expansion is on. */
2337 if (map)
2338 macro_loc = linemap_add_macro_token (map, macro_token_index,
2339 virt_loc, parm_def_loc);
2340 *virt_loc_dest = macro_loc;
2342 *dest = token;
2343 result = &dest[1];
2345 return result;
2348 /* Adds a token at the end of the tokens contained in BUFFER. Note
2349 that this function doesn't enlarge BUFFER when the number of tokens
2350 reaches BUFFER's size; it aborts in that situation.
2352 TOKEN is the token to append. VIRT_LOC is the virtual location of
2353 the token, i.e, the location possibly encoding its locus across
2354 macro expansion. If TOKEN is an argument of a function-like macro
2355 (inside a macro replacement list), PARM_DEF_LOC is the location of
2356 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2357 from a macro expansion, then VIRT_LOC can just be set to the same
2358 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2359 from a macro expansion and MAP is the macro map associated to the
2360 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2361 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2362 non-null, it means -ftrack-macro-expansion is on; in which case
2363 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2364 array, at the same index as the one of TOKEN in BUFFER. Upon
2365 successful completion this function returns the a pointer to the
2366 position of the token coming right after the insertion point. */
2367 static const cpp_token **
2368 tokens_buff_add_token (_cpp_buff *buffer,
2369 source_location *virt_locs,
2370 const cpp_token *token,
2371 source_location virt_loc,
2372 source_location parm_def_loc,
2373 const line_map_macro *map,
2374 unsigned int macro_token_index)
2376 const cpp_token **result;
2377 source_location *virt_loc_dest = NULL;
2378 unsigned token_index =
2379 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2381 /* Abort if we pass the end the buffer. */
2382 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2383 abort ();
2385 if (virt_locs != NULL)
2386 virt_loc_dest = &virt_locs[token_index];
2388 result =
2389 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2390 virt_loc_dest, token, virt_loc, parm_def_loc,
2391 map, macro_token_index);
2393 BUFF_FRONT (buffer) = (unsigned char *) result;
2394 return result;
2397 /* Allocate space for the function-like macro argument ARG to store
2398 the tokens resulting from the macro-expansion of the tokens that
2399 make up ARG itself. That space is allocated in ARG->expanded and
2400 needs to be freed using free. */
2401 static void
2402 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2404 gcc_checking_assert (arg->expanded == NULL
2405 && arg->expanded_virt_locs == NULL);
2407 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2408 if (CPP_OPTION (pfile, track_macro_expansion))
2409 arg->expanded_virt_locs = XNEWVEC (source_location, capacity);
2413 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2414 tokens. */
2415 static void
2416 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2417 size_t size, size_t *expanded_capacity)
2419 if (size <= *expanded_capacity)
2420 return;
2422 size *= 2;
2424 arg->expanded =
2425 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2426 *expanded_capacity = size;
2428 if (CPP_OPTION (pfile, track_macro_expansion))
2430 if (arg->expanded_virt_locs == NULL)
2431 arg->expanded_virt_locs = XNEWVEC (source_location, size);
2432 else
2433 arg->expanded_virt_locs = XRESIZEVEC (source_location,
2434 arg->expanded_virt_locs,
2435 size);
2439 /* Expand an argument ARG before replacing parameters in a
2440 function-like macro. This works by pushing a context with the
2441 argument's tokens, and then expanding that into a temporary buffer
2442 as if it were a normal part of the token stream. collect_args()
2443 has terminated the argument's tokens with a CPP_EOF so that we know
2444 when we have fully expanded the argument. */
2445 static void
2446 expand_arg (cpp_reader *pfile, macro_arg *arg)
2448 size_t capacity;
2449 bool saved_warn_trad;
2450 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2452 if (arg->count == 0
2453 || arg->expanded != NULL)
2454 return;
2456 /* Don't warn about funlike macros when pre-expanding. */
2457 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2458 CPP_WTRADITIONAL (pfile) = 0;
2460 /* Loop, reading in the tokens of the argument. */
2461 capacity = 256;
2462 alloc_expanded_arg_mem (pfile, arg, capacity);
2464 if (track_macro_exp_p)
2465 push_extended_tokens_context (pfile, NULL, NULL,
2466 arg->virt_locs,
2467 arg->first,
2468 arg->count + 1);
2469 else
2470 push_ptoken_context (pfile, NULL, NULL,
2471 arg->first, arg->count + 1);
2473 for (;;)
2475 const cpp_token *token;
2476 source_location location;
2478 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2479 &capacity);
2481 token = cpp_get_token_1 (pfile, &location);
2483 if (token->type == CPP_EOF)
2484 break;
2486 set_arg_token (arg, token, location,
2487 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2488 CPP_OPTION (pfile, track_macro_expansion));
2489 arg->expanded_count++;
2492 _cpp_pop_context (pfile);
2494 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2497 /* Returns the macro associated to the current context if we are in
2498 the context a macro expansion, NULL otherwise. */
2499 static cpp_hashnode*
2500 macro_of_context (cpp_context *context)
2502 if (context == NULL)
2503 return NULL;
2505 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2506 ? context->c.mc->macro_node
2507 : context->c.macro;
2510 /* Return TRUE iff we are expanding a macro or are about to start
2511 expanding one. If we are effectively expanding a macro, the
2512 function macro_of_context returns a pointer to the macro being
2513 expanded. */
2514 static bool
2515 in_macro_expansion_p (cpp_reader *pfile)
2517 if (pfile == NULL)
2518 return false;
2520 return (pfile->about_to_expand_macro_p
2521 || macro_of_context (pfile->context));
2524 /* Pop the current context off the stack, re-enabling the macro if the
2525 context represented a macro's replacement list. Initially the
2526 context structure was not freed so that we can re-use it later, but
2527 now we do free it to reduce peak memory consumption. */
2528 void
2529 _cpp_pop_context (cpp_reader *pfile)
2531 cpp_context *context = pfile->context;
2533 /* We should not be popping the base context. */
2534 if (context == &pfile->base_context)
2535 abort ();
2537 if (context->c.macro)
2539 cpp_hashnode *macro;
2540 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2542 macro_context *mc = context->c.mc;
2543 macro = mc->macro_node;
2544 /* If context->buff is set, it means the life time of tokens
2545 is bound to the life time of this context; so we must
2546 free the tokens; that means we must free the virtual
2547 locations of these tokens too. */
2548 if (context->buff && mc->virt_locs)
2550 free (mc->virt_locs);
2551 mc->virt_locs = NULL;
2553 free (mc);
2554 context->c.mc = NULL;
2556 else
2557 macro = context->c.macro;
2559 /* Beware that MACRO can be NULL in cases like when we are
2560 called from expand_arg. In those cases, a dummy context with
2561 tokens is pushed just for the purpose of walking them using
2562 cpp_get_token_1. In that case, no 'macro' field is set into
2563 the dummy context. */
2564 if (macro != NULL
2565 /* Several contiguous macro expansion contexts can be
2566 associated to the same macro; that means it's the same
2567 macro expansion that spans across all these (sub)
2568 contexts. So we should re-enable an expansion-disabled
2569 macro only when we are sure we are really out of that
2570 macro expansion. */
2571 && macro_of_context (context->prev) != macro)
2572 macro->flags &= ~NODE_DISABLED;
2574 if (macro == pfile->top_most_macro_node && context->prev == NULL)
2575 /* We are popping the context of the top-most macro node. */
2576 pfile->top_most_macro_node = NULL;
2579 if (context->buff)
2581 /* Decrease memory peak consumption by freeing the memory used
2582 by the context. */
2583 _cpp_free_buff (context->buff);
2586 pfile->context = context->prev;
2587 /* decrease peak memory consumption by feeing the context. */
2588 pfile->context->next = NULL;
2589 free (context);
2592 /* Return TRUE if we reached the end of the set of tokens stored in
2593 CONTEXT, FALSE otherwise. */
2594 static inline bool
2595 reached_end_of_context (cpp_context *context)
2597 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2598 return FIRST (context).token == LAST (context).token;
2599 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2600 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2601 return FIRST (context).ptoken == LAST (context).ptoken;
2602 else
2603 abort ();
2606 /* Consume the next token contained in the current context of PFILE,
2607 and return it in *TOKEN. It's "full location" is returned in
2608 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2609 means the location encoding the locus of the token across macro
2610 expansion; otherwise it's just is the "normal" location of the
2611 token which (*TOKEN)->src_loc. */
2612 static inline void
2613 consume_next_token_from_context (cpp_reader *pfile,
2614 const cpp_token ** token,
2615 source_location *location)
2617 cpp_context *c = pfile->context;
2619 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2621 *token = FIRST (c).token;
2622 *location = (*token)->src_loc;
2623 FIRST (c).token++;
2625 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2627 *token = *FIRST (c).ptoken;
2628 *location = (*token)->src_loc;
2629 FIRST (c).ptoken++;
2631 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2633 macro_context *m = c->c.mc;
2634 *token = *FIRST (c).ptoken;
2635 if (m->virt_locs)
2637 *location = *m->cur_virt_loc;
2638 m->cur_virt_loc++;
2640 else
2641 *location = (*token)->src_loc;
2642 FIRST (c).ptoken++;
2644 else
2645 abort ();
2648 /* In the traditional mode of the preprocessor, if we are currently in
2649 a directive, the location of a token must be the location of the
2650 start of the directive line. This function returns the proper
2651 location if we are in the traditional mode, and just returns
2652 LOCATION otherwise. */
2654 static inline source_location
2655 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, source_location location)
2657 if (CPP_OPTION (pfile, traditional))
2659 if (pfile->state.in_directive)
2660 return pfile->directive_line;
2662 return location;
2665 /* Routine to get a token as well as its location.
2667 Macro expansions and directives are transparently handled,
2668 including entering included files. Thus tokens are post-macro
2669 expansion, and after any intervening directives. External callers
2670 see CPP_EOF only at EOF. Internal callers also see it when meeting
2671 a directive inside a macro call, when at the end of a directive and
2672 state.in_directive is still 1, and at the end of argument
2673 pre-expansion.
2675 LOC is an out parameter; *LOC is set to the location "as expected
2676 by the user". Please read the comment of
2677 cpp_get_token_with_location to learn more about the meaning of this
2678 location. */
2679 static const cpp_token*
2680 cpp_get_token_1 (cpp_reader *pfile, source_location *location)
2682 const cpp_token *result;
2683 /* This token is a virtual token that either encodes a location
2684 related to macro expansion or a spelling location. */
2685 source_location virt_loc = 0;
2686 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2687 to functions that push macro contexts. So let's save it so that
2688 we can restore it when we are about to leave this routine. */
2689 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2691 for (;;)
2693 cpp_hashnode *node;
2694 cpp_context *context = pfile->context;
2696 /* Context->prev == 0 <=> base context. */
2697 if (!context->prev)
2699 result = _cpp_lex_token (pfile);
2700 virt_loc = result->src_loc;
2702 else if (!reached_end_of_context (context))
2704 consume_next_token_from_context (pfile, &result,
2705 &virt_loc);
2706 if (result->flags & PASTE_LEFT)
2708 paste_all_tokens (pfile, result);
2709 if (pfile->state.in_directive)
2710 continue;
2711 result = padding_token (pfile, result);
2712 goto out;
2715 else
2717 if (pfile->context->c.macro)
2718 ++num_expanded_macros_counter;
2719 _cpp_pop_context (pfile);
2720 if (pfile->state.in_directive)
2721 continue;
2722 result = &pfile->avoid_paste;
2723 goto out;
2726 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2727 continue;
2729 if (result->type != CPP_NAME)
2730 break;
2732 node = result->val.node.node;
2734 if (node->type == NT_VOID || (result->flags & NO_EXPAND))
2735 break;
2737 if (!(node->flags & NODE_DISABLED))
2739 int ret = 0;
2740 /* If not in a macro context, and we're going to start an
2741 expansion, record the location and the top level macro
2742 about to be expanded. */
2743 if (!in_macro_expansion_p (pfile))
2745 pfile->invocation_location = result->src_loc;
2746 pfile->top_most_macro_node = node;
2748 if (pfile->state.prevent_expansion)
2749 break;
2751 /* Conditional macros require that a predicate be evaluated
2752 first. */
2753 if ((node->flags & NODE_CONDITIONAL) != 0)
2755 if (pfile->cb.macro_to_expand)
2757 bool whitespace_after;
2758 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2760 whitespace_after = (peek_tok->type == CPP_PADDING
2761 || (peek_tok->flags & PREV_WHITE));
2762 node = pfile->cb.macro_to_expand (pfile, result);
2763 if (node)
2764 ret = enter_macro_context (pfile, node, result,
2765 virt_loc);
2766 else if (whitespace_after)
2768 /* If macro_to_expand hook returned NULL and it
2769 ate some tokens, see if we don't need to add
2770 a padding token in between this and the
2771 next token. */
2772 peek_tok = cpp_peek_token (pfile, 0);
2773 if (peek_tok->type != CPP_PADDING
2774 && (peek_tok->flags & PREV_WHITE) == 0)
2775 _cpp_push_token_context (pfile, NULL,
2776 padding_token (pfile,
2777 peek_tok), 1);
2781 else
2782 ret = enter_macro_context (pfile, node, result,
2783 virt_loc);
2784 if (ret)
2786 if (pfile->state.in_directive || ret == 2)
2787 continue;
2788 result = padding_token (pfile, result);
2789 goto out;
2792 else
2794 /* Flag this token as always unexpandable. FIXME: move this
2795 to collect_args()?. */
2796 cpp_token *t = _cpp_temp_token (pfile);
2797 t->type = result->type;
2798 t->flags = result->flags | NO_EXPAND;
2799 t->val = result->val;
2800 result = t;
2803 break;
2806 out:
2807 if (location != NULL)
2809 if (virt_loc == 0)
2810 virt_loc = result->src_loc;
2811 *location = virt_loc;
2813 if (!CPP_OPTION (pfile, track_macro_expansion)
2814 && macro_of_context (pfile->context) != NULL)
2815 /* We are in a macro expansion context, are not tracking
2816 virtual location, but were asked to report the location
2817 of the expansion point of the macro being expanded. */
2818 *location = pfile->invocation_location;
2820 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2823 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2824 return result;
2827 /* External routine to get a token. Also used nearly everywhere
2828 internally, except for places where we know we can safely call
2829 _cpp_lex_token directly, such as lexing a directive name.
2831 Macro expansions and directives are transparently handled,
2832 including entering included files. Thus tokens are post-macro
2833 expansion, and after any intervening directives. External callers
2834 see CPP_EOF only at EOF. Internal callers also see it when meeting
2835 a directive inside a macro call, when at the end of a directive and
2836 state.in_directive is still 1, and at the end of argument
2837 pre-expansion. */
2838 const cpp_token *
2839 cpp_get_token (cpp_reader *pfile)
2841 return cpp_get_token_1 (pfile, NULL);
2844 /* Like cpp_get_token, but also returns a virtual token location
2845 separate from the spelling location carried by the returned token.
2847 LOC is an out parameter; *LOC is set to the location "as expected
2848 by the user". This matters when a token results from macro
2849 expansion; in that case the token's spelling location indicates the
2850 locus of the token in the definition of the macro but *LOC
2851 virtually encodes all the other meaningful locuses associated to
2852 the token.
2854 What? virtual location? Yes, virtual location.
2856 If the token results from macro expansion and if macro expansion
2857 location tracking is enabled its virtual location encodes (at the
2858 same time):
2860 - the spelling location of the token
2862 - the locus of the macro expansion point
2864 - the locus of the point where the token got instantiated as part
2865 of the macro expansion process.
2867 You have to use the linemap API to get the locus you are interested
2868 in from a given virtual location.
2870 Note however that virtual locations are not necessarily ordered for
2871 relations '<' and '>'. One must use the function
2872 linemap_location_before_p instead of using the relational operator
2873 '<'.
2875 If macro expansion tracking is off and if the token results from
2876 macro expansion the virtual location is the expansion point of the
2877 macro that got expanded.
2879 When the token doesn't result from macro expansion, the virtual
2880 location is just the same thing as its spelling location. */
2882 const cpp_token *
2883 cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
2885 return cpp_get_token_1 (pfile, loc);
2888 /* Returns true if we're expanding an object-like macro that was
2889 defined in a system header. Just checks the macro at the top of
2890 the stack. Used for diagnostic suppression. */
2892 cpp_sys_macro_p (cpp_reader *pfile)
2894 cpp_hashnode *node = NULL;
2896 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2897 node = pfile->context->c.mc->macro_node;
2898 else
2899 node = pfile->context->c.macro;
2901 return node && node->value.macro && node->value.macro->syshdr;
2904 /* Read each token in, until end of the current file. Directives are
2905 transparently processed. */
2906 void
2907 cpp_scan_nooutput (cpp_reader *pfile)
2909 /* Request a CPP_EOF token at the end of this file, rather than
2910 transparently continuing with the including file. */
2911 pfile->buffer->return_at_eof = true;
2913 pfile->state.discarding_output++;
2914 pfile->state.prevent_expansion++;
2916 if (CPP_OPTION (pfile, traditional))
2917 while (_cpp_read_logical_line_trad (pfile))
2919 else
2920 while (cpp_get_token (pfile)->type != CPP_EOF)
2923 pfile->state.discarding_output--;
2924 pfile->state.prevent_expansion--;
2927 /* Step back one or more tokens obtained from the lexer. */
2928 void
2929 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
2931 pfile->lookaheads += count;
2932 while (count--)
2934 pfile->cur_token--;
2935 if (pfile->cur_token == pfile->cur_run->base
2936 /* Possible with -fpreprocessed and no leading #line. */
2937 && pfile->cur_run->prev != NULL)
2939 pfile->cur_run = pfile->cur_run->prev;
2940 pfile->cur_token = pfile->cur_run->limit;
2945 /* Step back one (or more) tokens. Can only step back more than 1 if
2946 they are from the lexer, and not from macro expansion. */
2947 void
2948 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
2950 if (pfile->context->prev == NULL)
2951 _cpp_backup_tokens_direct (pfile, count);
2952 else
2954 if (count != 1)
2955 abort ();
2956 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
2957 FIRST (pfile->context).token--;
2958 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
2959 FIRST (pfile->context).ptoken--;
2960 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
2962 FIRST (pfile->context).ptoken--;
2963 if (pfile->context->c.macro)
2965 macro_context *m = pfile->context->c.mc;
2966 m->cur_virt_loc--;
2967 gcc_checking_assert (m->cur_virt_loc >= m->virt_locs);
2969 else
2970 abort ();
2972 else
2973 abort ();
2977 /* #define directive parsing and handling. */
2979 /* Returns nonzero if a macro redefinition warning is required. */
2980 static bool
2981 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
2982 const cpp_macro *macro2)
2984 unsigned int i;
2986 /* Some redefinitions need to be warned about regardless. */
2987 if (node->flags & NODE_WARN)
2988 return true;
2990 /* Suppress warnings for builtins that lack the NODE_WARN flag,
2991 unless Wbuiltin-macro-redefined. */
2992 if (cpp_builtin_macro_p (node))
2993 return CPP_OPTION (pfile, warn_builtin_macro_redefined);
2995 /* Redefinitions of conditional (context-sensitive) macros, on
2996 the other hand, must be allowed silently. */
2997 if (node->flags & NODE_CONDITIONAL)
2998 return false;
3000 cpp_macro *macro1 = node->value.macro;
3001 if (macro1->lazy)
3003 /* We don't want to mark MACRO as used, but do need to finalize
3004 its laziness. */
3005 pfile->cb.user_lazy_macro (pfile, macro1, macro1->lazy - 1);
3006 macro1->lazy = 0;
3009 /* Redefinition of a macro is allowed if and only if the old and new
3010 definitions are the same. (6.10.3 paragraph 2). */
3012 /* Don't check count here as it can be different in valid
3013 traditional redefinitions with just whitespace differences. */
3014 if (macro1->paramc != macro2->paramc
3015 || macro1->fun_like != macro2->fun_like
3016 || macro1->variadic != macro2->variadic)
3017 return true;
3019 /* Check parameter spellings. */
3020 for (i = 0; i < macro1->paramc; i++)
3021 if (macro1->parm.params[i] != macro2->parm.params[i])
3022 return true;
3024 /* Check the replacement text or tokens. */
3025 if (CPP_OPTION (pfile, traditional))
3026 return _cpp_expansions_different_trad (macro1, macro2);
3028 if (macro1->count != macro2->count)
3029 return true;
3031 for (i = 0; i < macro1->count; i++)
3032 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
3033 return true;
3035 return false;
3038 /* Free the definition of hashnode H. */
3039 void
3040 _cpp_free_definition (cpp_hashnode *h)
3042 /* Macros and assertions no longer have anything to free. */
3043 h->type = NT_VOID;
3044 h->value.answers = NULL;
3045 h->flags &= ~(NODE_DISABLED | NODE_USED);
3048 /* Save parameter NODE (spelling SPELLING) to the parameter list of
3049 macro MACRO. Returns true on success, false on failure. */
3050 bool
3051 _cpp_save_parameter (cpp_reader *pfile, unsigned n, cpp_hashnode *node,
3052 cpp_hashnode *spelling)
3054 /* Constraint 6.10.3.6 - duplicate parameter names. */
3055 if (node->type == NT_MACRO_ARG)
3057 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
3058 NODE_NAME (node));
3059 return false;
3062 unsigned len = (n + 1) * sizeof (struct macro_arg_saved_data);
3063 if (len > pfile->macro_buffer_len)
3065 pfile->macro_buffer
3066 = XRESIZEVEC (unsigned char, pfile->macro_buffer, len);
3067 pfile->macro_buffer_len = len;
3070 macro_arg_saved_data *saved = (macro_arg_saved_data *)pfile->macro_buffer;
3071 saved[n].canonical_node = node;
3072 saved[n].value = node->value;
3073 saved[n].type = node->type;
3075 void *base = _cpp_reserve_room (pfile, n * sizeof (cpp_hashnode *),
3076 sizeof (cpp_hashnode *));
3077 ((cpp_hashnode **)base)[n] = spelling;
3079 /* Morph into a macro arg. */
3080 node->type = NT_MACRO_ARG;
3081 /* Index is 1 based. */
3082 node->value.arg_index = n + 1;
3084 return true;
3087 /* Restore the parameters to their previous state. */
3088 void
3089 _cpp_unsave_parameters (cpp_reader *pfile, unsigned n)
3091 /* Clear the fast argument lookup indices. */
3092 while (n--)
3094 struct macro_arg_saved_data *save =
3095 &((struct macro_arg_saved_data *) pfile->macro_buffer)[n];
3097 struct cpp_hashnode *node = save->canonical_node;
3098 node->type = save->type;
3099 node->value = save->value;
3103 /* Check the syntax of the parameters in a MACRO definition. Return
3104 false on failure. Set *N_PTR and *VARADIC_PTR as appropriate.
3105 '(' ')'
3106 '(' parm-list ',' last-parm ')'
3107 '(' last-parm ')'
3108 parm-list: name
3109 | parm-list, name
3110 last-parm: name
3111 | name '...'
3112 | '...'
3115 static bool
3116 parse_params (cpp_reader *pfile, unsigned *n_ptr, bool *varadic_ptr)
3118 unsigned nparms = 0;
3119 bool ok = false;
3121 for (bool prev_ident = false;;)
3123 const cpp_token *token = _cpp_lex_token (pfile);
3125 switch (token->type)
3127 case CPP_COMMENT:
3128 /* Allow/ignore comments in parameter lists if we are
3129 preserving comments in macro expansions. */
3130 if (!CPP_OPTION (pfile, discard_comments_in_macro_exp))
3131 break;
3133 /* FALLTHRU */
3134 default:
3135 bad:
3137 const char *const msgs[5] =
3139 N_("expected parameter name, found \"%s\""),
3140 N_("expected ',' or ')', found \"%s\""),
3141 N_("expected parameter name before end of line"),
3142 N_("expected ')' before end of line"),
3143 N_("expected ')' after \"...\"")
3145 unsigned ix = prev_ident;
3146 const unsigned char *as_text = NULL;
3147 if (*varadic_ptr)
3148 ix = 4;
3149 else if (token->type == CPP_EOF)
3150 ix += 2;
3151 else
3152 as_text = cpp_token_as_text (pfile, token);
3153 cpp_error (pfile, CPP_DL_ERROR, msgs[ix], as_text);
3155 goto out;
3157 case CPP_NAME:
3158 if (prev_ident || *varadic_ptr)
3159 goto bad;
3160 prev_ident = true;
3162 if (!_cpp_save_parameter (pfile, nparms, token->val.node.node,
3163 token->val.node.spelling))
3164 goto out;
3165 nparms++;
3166 break;
3168 case CPP_CLOSE_PAREN:
3169 if (prev_ident || !nparms || *varadic_ptr)
3171 ok = true;
3172 goto out;
3175 /* FALLTHRU */
3176 case CPP_COMMA:
3177 if (!prev_ident || *varadic_ptr)
3178 goto bad;
3179 prev_ident = false;
3180 break;
3182 case CPP_ELLIPSIS:
3183 if (*varadic_ptr)
3184 goto bad;
3185 *varadic_ptr = true;
3186 if (!prev_ident)
3188 /* An ISO bare ellipsis. */
3189 _cpp_save_parameter (pfile, nparms,
3190 pfile->spec_nodes.n__VA_ARGS__,
3191 pfile->spec_nodes.n__VA_ARGS__);
3192 nparms++;
3193 pfile->state.va_args_ok = 1;
3194 if (! CPP_OPTION (pfile, c99)
3195 && CPP_OPTION (pfile, cpp_pedantic)
3196 && CPP_OPTION (pfile, warn_variadic_macros))
3197 cpp_pedwarning
3198 (pfile, CPP_W_VARIADIC_MACROS,
3199 CPP_OPTION (pfile, cplusplus)
3200 ? N_("anonymous variadic macros were introduced in C++11")
3201 : N_("anonymous variadic macros were introduced in C99"));
3202 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
3203 && ! CPP_OPTION (pfile, cplusplus))
3204 cpp_error (pfile, CPP_DL_WARNING,
3205 "anonymous variadic macros were introduced in C99");
3207 else if (CPP_OPTION (pfile, cpp_pedantic)
3208 && CPP_OPTION (pfile, warn_variadic_macros))
3209 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
3210 CPP_OPTION (pfile, cplusplus)
3211 ? N_("ISO C++ does not permit named variadic macros")
3212 : N_("ISO C does not permit named variadic macros"));
3213 break;
3217 out:
3218 *n_ptr = nparms;
3220 return ok;
3223 /* Lex a token from the expansion of MACRO, but mark parameters as we
3224 find them and warn of traditional stringification. */
3225 static cpp_macro *
3226 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
3228 macro = (cpp_macro *)_cpp_reserve_room (pfile,
3229 sizeof (cpp_macro) - sizeof (cpp_token)
3230 + macro->count * sizeof (cpp_token),
3231 sizeof (cpp_token));
3232 cpp_token *saved_cur_token = pfile->cur_token;
3233 pfile->cur_token = &macro->exp.tokens[macro->count];
3234 cpp_token *token = _cpp_lex_direct (pfile);
3235 pfile->cur_token = saved_cur_token;
3237 /* Is this a parameter? */
3238 if (token->type == CPP_NAME && token->val.node.node->type == NT_MACRO_ARG)
3240 /* Morph into a parameter reference. */
3241 cpp_hashnode *spelling = token->val.node.spelling;
3242 token->type = CPP_MACRO_ARG;
3243 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
3244 token->val.macro_arg.spelling = spelling;
3246 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
3247 && (token->type == CPP_STRING || token->type == CPP_CHAR))
3248 check_trad_stringification (pfile, macro, &token->val.str);
3250 return macro;
3253 static cpp_macro *
3254 create_iso_definition (cpp_reader *pfile)
3256 bool following_paste_op = false;
3257 const char *paste_op_error_msg =
3258 N_("'##' cannot appear at either end of a macro expansion");
3259 unsigned int num_extra_tokens = 0;
3260 unsigned nparms = 0;
3261 cpp_hashnode **params = NULL;
3262 bool varadic = false;
3263 bool ok = false;
3264 cpp_macro *macro = NULL;
3266 /* Look at the first token, to see if this is a function-like
3267 macro. */
3268 cpp_token first;
3269 cpp_token *saved_cur_token = pfile->cur_token;
3270 pfile->cur_token = &first;
3271 cpp_token *token = _cpp_lex_direct (pfile);
3272 pfile->cur_token = saved_cur_token;
3274 if (token->flags & PREV_WHITE)
3275 /* Preceeded by space, must be part of expansion. */;
3276 else if (token->type == CPP_OPEN_PAREN)
3278 /* An open-paren, get a parameter list. */
3279 if (!parse_params (pfile, &nparms, &varadic))
3280 goto out;
3282 params = (cpp_hashnode **)_cpp_commit_buff
3283 (pfile, sizeof (cpp_hashnode *) * nparms);
3284 token = NULL;
3286 else if (token->type != CPP_EOF
3287 && !(token->type == CPP_COMMENT
3288 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp)))
3290 /* While ISO C99 requires whitespace before replacement text
3291 in a macro definition, ISO C90 with TC1 allows characters
3292 from the basic source character set there. */
3293 if (CPP_OPTION (pfile, c99))
3294 cpp_error (pfile, CPP_DL_PEDWARN,
3295 CPP_OPTION (pfile, cplusplus)
3296 ? N_("ISO C++11 requires whitespace after the macro name")
3297 : N_("ISO C99 requires whitespace after the macro name"));
3298 else
3300 int warntype = CPP_DL_WARNING;
3301 switch (token->type)
3303 case CPP_ATSIGN:
3304 case CPP_AT_NAME:
3305 case CPP_OBJC_STRING:
3306 /* '@' is not in basic character set. */
3307 warntype = CPP_DL_PEDWARN;
3308 break;
3309 case CPP_OTHER:
3310 /* Basic character set sans letters, digits and _. */
3311 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
3312 token->val.str.text[0]) == NULL)
3313 warntype = CPP_DL_PEDWARN;
3314 break;
3315 default:
3316 /* All other tokens start with a character from basic
3317 character set. */
3318 break;
3320 cpp_error (pfile, warntype,
3321 "missing whitespace after the macro name");
3325 macro = _cpp_new_macro (pfile, cmk_macro,
3326 _cpp_reserve_room (pfile, 0, sizeof (cpp_macro)));
3328 if (!token)
3330 macro->variadic = varadic;
3331 macro->paramc = nparms;
3332 macro->parm.params = params;
3333 macro->fun_like = true;
3335 else
3337 /* Preserve the token we peeked, there is already a single slot for it. */
3338 macro->exp.tokens[0] = *token;
3339 token = &macro->exp.tokens[0];
3340 macro->count = 1;
3343 for (vaopt_state vaopt_tracker (pfile, macro->variadic, true);; token = NULL)
3345 if (!token)
3347 macro = lex_expansion_token (pfile, macro);
3348 token = &macro->exp.tokens[macro->count++];
3351 /* Check the stringifying # constraint 6.10.3.2.1 of
3352 function-like macros when lexing the subsequent token. */
3353 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
3355 if (token->type == CPP_MACRO_ARG)
3357 if (token->flags & PREV_WHITE)
3358 token->flags |= SP_PREV_WHITE;
3359 if (token[-1].flags & DIGRAPH)
3360 token->flags |= SP_DIGRAPH;
3361 token->flags &= ~PREV_WHITE;
3362 token->flags |= STRINGIFY_ARG;
3363 token->flags |= token[-1].flags & PREV_WHITE;
3364 token[-1] = token[0];
3365 macro->count--;
3367 /* Let assembler get away with murder. */
3368 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
3370 cpp_error (pfile, CPP_DL_ERROR,
3371 "'#' is not followed by a macro parameter");
3372 goto out;
3376 if (token->type == CPP_EOF)
3378 /* Paste operator constraint 6.10.3.3.1:
3379 Token-paste ##, can appear in both object-like and
3380 function-like macros, but not at the end. */
3381 if (following_paste_op)
3383 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
3384 goto out;
3386 if (!vaopt_tracker.completed ())
3387 goto out;
3388 break;
3391 /* Paste operator constraint 6.10.3.3.1. */
3392 if (token->type == CPP_PASTE)
3394 /* Token-paste ##, can appear in both object-like and
3395 function-like macros, but not at the beginning. */
3396 if (macro->count == 1)
3398 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
3399 goto out;
3402 if (following_paste_op)
3404 /* Consecutive paste operators. This one will be moved
3405 to the end. */
3406 num_extra_tokens++;
3407 token->val.token_no = macro->count - 1;
3409 else
3411 /* Drop the paste operator. */
3412 --macro->count;
3413 token[-1].flags |= PASTE_LEFT;
3414 if (token->flags & DIGRAPH)
3415 token[-1].flags |= SP_DIGRAPH;
3416 if (token->flags & PREV_WHITE)
3417 token[-1].flags |= SP_PREV_WHITE;
3419 following_paste_op = true;
3421 else
3422 following_paste_op = false;
3424 if (vaopt_tracker.update (token) == vaopt_state::ERROR)
3425 goto out;
3428 /* We're committed to winning now. */
3429 ok = true;
3431 /* Don't count the CPP_EOF. */
3432 macro->count--;
3434 macro = (cpp_macro *)_cpp_commit_buff
3435 (pfile, sizeof (cpp_macro) - sizeof (cpp_token)
3436 + sizeof (cpp_token) * macro->count);
3438 /* Clear whitespace on first token for warn_of_redefinition(). */
3439 if (macro->count)
3440 macro->exp.tokens[0].flags &= ~PREV_WHITE;
3442 if (num_extra_tokens)
3444 /* Place second and subsequent ## or %:%: tokens in sequences of
3445 consecutive such tokens at the end of the list to preserve
3446 information about where they appear, how they are spelt and
3447 whether they are preceded by whitespace without otherwise
3448 interfering with macro expansion. Remember, this is
3449 extremely rare, so efficiency is not a priority. */
3450 cpp_token *temp = (cpp_token *)_cpp_reserve_room
3451 (pfile, 0, num_extra_tokens * sizeof (cpp_token));
3452 unsigned extra_ix = 0, norm_ix = 0;
3453 cpp_token *exp = macro->exp.tokens;
3454 for (unsigned ix = 0; ix != macro->count; ix++)
3455 if (exp[ix].type == CPP_PASTE)
3456 temp[extra_ix++] = exp[ix];
3457 else
3458 exp[norm_ix++] = exp[ix];
3459 memcpy (&exp[norm_ix], temp, num_extra_tokens * sizeof (cpp_token));
3461 /* Record there are extra tokens. */
3462 macro->extra_tokens = 1;
3465 out:
3466 pfile->state.va_args_ok = 0;
3467 _cpp_unsave_parameters (pfile, nparms);
3469 return ok ? macro : NULL;
3472 cpp_macro *
3473 _cpp_new_macro (cpp_reader *pfile, cpp_macro_kind kind, void *placement)
3475 cpp_macro *macro = (cpp_macro *) placement;
3477 macro->line = pfile->directive_line;
3478 macro->parm.params = 0;
3479 macro->lazy = 0;
3480 macro->paramc = 0;
3481 macro->variadic = 0;
3482 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3483 macro->count = 0;
3484 macro->fun_like = 0;
3485 macro->extra_tokens = 0;
3486 /* To suppress some diagnostics. */
3487 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3489 macro->kind = kind;
3491 return macro;
3494 /* Parse a macro and save its expansion. Returns nonzero on success. */
3495 bool
3496 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3498 cpp_macro *macro;
3500 if (CPP_OPTION (pfile, traditional))
3501 macro = _cpp_create_trad_definition (pfile);
3502 else
3503 macro = create_iso_definition (pfile);
3505 if (!macro)
3506 return false;
3508 if (cpp_macro_p (node))
3510 if (CPP_OPTION (pfile, warn_unused_macros))
3511 _cpp_warn_if_unused_macro (pfile, node, NULL);
3513 if (warn_of_redefinition (pfile, node, macro))
3515 const int reason
3516 = (cpp_builtin_macro_p (node) && !(node->flags & NODE_WARN))
3517 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3519 bool warned =
3520 cpp_pedwarning_with_line (pfile, reason,
3521 pfile->directive_line, 0,
3522 "\"%s\" redefined", NODE_NAME (node));
3524 if (warned && cpp_user_macro_p (node))
3525 cpp_error_with_line (pfile, CPP_DL_NOTE,
3526 node->value.macro->line, 0,
3527 "this is the location of the previous definition");
3529 _cpp_free_definition (node);
3532 /* Enter definition in hash table. */
3533 node->type = NT_USER_MACRO;
3534 node->value.macro = macro;
3535 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3536 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3537 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3538 in the C standard, as something that one must use in C++.
3539 However DR#593 and C++11 indicate that they play no role in C++.
3540 We special-case them anyway. */
3541 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3542 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3543 node->flags |= NODE_WARN;
3545 /* If user defines one of the conditional macros, remove the
3546 conditional flag */
3547 node->flags &= ~NODE_CONDITIONAL;
3549 return true;
3552 extern void
3553 cpp_define_lazily (cpp_reader *pfile, cpp_hashnode *node, unsigned num)
3555 cpp_macro *macro = node->value.macro;
3557 gcc_checking_assert (pfile->cb.user_lazy_macro && macro && num < UCHAR_MAX);
3559 macro->lazy = num + 1;
3562 /* Notify the use of NODE in a macro-aware context (i.e. expanding it,
3563 or testing its existance). Also applies any lazy definition. */
3565 extern void
3566 _cpp_notify_macro_use (cpp_reader *pfile, cpp_hashnode *node)
3568 node->flags |= NODE_USED;
3569 switch (node->type)
3571 case NT_USER_MACRO:
3573 cpp_macro *macro = node->value.macro;
3574 if (macro->lazy)
3576 pfile->cb.user_lazy_macro (pfile, macro, macro->lazy - 1);
3577 macro->lazy = 0;
3580 /* FALLTHROUGH. */
3582 case NT_BUILTIN_MACRO:
3583 if (pfile->cb.used_define)
3584 pfile->cb.used_define (pfile, pfile->directive_line, node);
3585 break;
3587 case NT_VOID:
3588 if (pfile->cb.used_undef)
3589 pfile->cb.used_undef (pfile, pfile->directive_line, node);
3590 break;
3592 default:
3593 abort ();
3597 /* Warn if a token in STRING matches one of a function-like MACRO's
3598 parameters. */
3599 static void
3600 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3601 const cpp_string *string)
3603 unsigned int i, len;
3604 const uchar *p, *q, *limit;
3606 /* Loop over the string. */
3607 limit = string->text + string->len - 1;
3608 for (p = string->text + 1; p < limit; p = q)
3610 /* Find the start of an identifier. */
3611 while (p < limit && !is_idstart (*p))
3612 p++;
3614 /* Find the end of the identifier. */
3615 q = p;
3616 while (q < limit && is_idchar (*q))
3617 q++;
3619 len = q - p;
3621 /* Loop over the function macro arguments to see if the
3622 identifier inside the string matches one of them. */
3623 for (i = 0; i < macro->paramc; i++)
3625 const cpp_hashnode *node = macro->parm.params[i];
3627 if (NODE_LEN (node) == len
3628 && !memcmp (p, NODE_NAME (node), len))
3630 cpp_warning (pfile, CPP_W_TRADITIONAL,
3631 "macro argument \"%s\" would be stringified in traditional C",
3632 NODE_NAME (node));
3633 break;
3639 /* Returns the name, arguments and expansion of a macro, in a format
3640 suitable to be read back in again, and therefore also for DWARF 2
3641 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3642 Caller is expected to generate the "#define" bit if needed. The
3643 returned text is temporary, and automatically freed later. */
3644 const unsigned char *
3645 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3647 unsigned int i, len;
3648 unsigned char *buffer;
3650 gcc_checking_assert (cpp_user_macro_p (node));
3652 const cpp_macro *macro = node->value.macro;
3654 /* Calculate length. */
3655 len = NODE_LEN (node) * 10 + 2; /* ' ' and NUL. */
3656 if (macro->fun_like)
3658 len += 4; /* "()" plus possible final ".." of named
3659 varargs (we have + 1 below). */
3660 for (i = 0; i < macro->paramc; i++)
3661 len += NODE_LEN (macro->parm.params[i]) + 1; /* "," */
3664 /* This should match below where we fill in the buffer. */
3665 if (CPP_OPTION (pfile, traditional))
3666 len += _cpp_replacement_text_len (macro);
3667 else
3669 unsigned int count = macro_real_token_count (macro);
3670 for (i = 0; i < count; i++)
3672 const cpp_token *token = &macro->exp.tokens[i];
3674 if (token->type == CPP_MACRO_ARG)
3675 len += NODE_LEN (token->val.macro_arg.spelling);
3676 else
3677 len += cpp_token_len (token);
3679 if (token->flags & STRINGIFY_ARG)
3680 len++; /* "#" */
3681 if (token->flags & PASTE_LEFT)
3682 len += 3; /* " ##" */
3683 if (token->flags & PREV_WHITE)
3684 len++; /* " " */
3688 if (len > pfile->macro_buffer_len)
3690 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3691 pfile->macro_buffer, len);
3692 pfile->macro_buffer_len = len;
3695 /* Fill in the buffer. Start with the macro name. */
3696 buffer = pfile->macro_buffer;
3697 buffer = _cpp_spell_ident_ucns (buffer, node);
3699 /* Parameter names. */
3700 if (macro->fun_like)
3702 *buffer++ = '(';
3703 for (i = 0; i < macro->paramc; i++)
3705 cpp_hashnode *param = macro->parm.params[i];
3707 if (param != pfile->spec_nodes.n__VA_ARGS__)
3709 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3710 buffer += NODE_LEN (param);
3713 if (i + 1 < macro->paramc)
3714 /* Don't emit a space after the comma here; we're trying
3715 to emit a Dwarf-friendly definition, and the Dwarf spec
3716 forbids spaces in the argument list. */
3717 *buffer++ = ',';
3718 else if (macro->variadic)
3719 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3721 *buffer++ = ')';
3724 /* The Dwarf spec requires a space after the macro name, even if the
3725 definition is the empty string. */
3726 *buffer++ = ' ';
3728 if (CPP_OPTION (pfile, traditional))
3729 buffer = _cpp_copy_replacement_text (macro, buffer);
3730 else if (macro->count)
3731 /* Expansion tokens. */
3733 unsigned int count = macro_real_token_count (macro);
3734 for (i = 0; i < count; i++)
3736 const cpp_token *token = &macro->exp.tokens[i];
3738 if (token->flags & PREV_WHITE)
3739 *buffer++ = ' ';
3740 if (token->flags & STRINGIFY_ARG)
3741 *buffer++ = '#';
3743 if (token->type == CPP_MACRO_ARG)
3745 memcpy (buffer,
3746 NODE_NAME (token->val.macro_arg.spelling),
3747 NODE_LEN (token->val.macro_arg.spelling));
3748 buffer += NODE_LEN (token->val.macro_arg.spelling);
3750 else
3751 buffer = cpp_spell_token (pfile, token, buffer, true);
3753 if (token->flags & PASTE_LEFT)
3755 *buffer++ = ' ';
3756 *buffer++ = '#';
3757 *buffer++ = '#';
3758 /* Next has PREV_WHITE; see _cpp_create_definition. */
3763 *buffer = '\0';
3764 return pfile->macro_buffer;
3767 /* Get the line at which the macro was defined. */
3769 source_location
3770 cpp_macro_definition_location (cpp_hashnode *node)
3772 return node->value.macro->line;