Add mi_thunk support for vcalls on hppa.
[official-gcc.git] / libcpp / macro.c
blobdff7c98a4df50a0e103a7bd7cecb9354cd41513f
1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2021 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 location_t *virt_locs; /* Where virtual locations for
43 unexpanded tokens are stored. */
44 location_t *expanded_virt_locs; /* Where virtual locations for
45 expanded tokens are
46 stored. */
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 location_t *location_ptr;
76 #if CHECKING_P
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
79 size_t num_forwards;
80 #endif
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 static void expand_arg (cpp_reader *, macro_arg *);
98 /* A class for tracking __VA_OPT__ state while iterating over a
99 sequence of tokens. This is used during both macro definition and
100 expansion. */
101 class vaopt_state {
103 public:
105 enum update_type
107 ERROR,
108 DROP,
109 INCLUDE,
110 BEGIN,
114 /* Initialize the state tracker. ANY_ARGS is true if variable
115 arguments were provided to the macro invocation. */
116 vaopt_state (cpp_reader *pfile, bool is_variadic, macro_arg *arg)
117 : m_pfile (pfile),
118 m_arg (arg),
119 m_variadic (is_variadic),
120 m_last_was_paste (false),
121 m_state (0),
122 m_paste_location (0),
123 m_location (0),
124 m_update (ERROR)
128 /* Given a token, update the state of this tracker and return a
129 boolean indicating whether the token should be be included in the
130 expansion. */
131 update_type update (const cpp_token *token)
133 /* If the macro isn't variadic, just don't bother. */
134 if (!m_variadic)
135 return INCLUDE;
137 if (token->type == CPP_NAME
138 && token->val.node.node == m_pfile->spec_nodes.n__VA_OPT__)
140 if (m_state > 0)
142 cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
143 "__VA_OPT__ may not appear in a __VA_OPT__");
144 return ERROR;
146 ++m_state;
147 m_location = token->src_loc;
148 return BEGIN;
150 else if (m_state == 1)
152 if (token->type != CPP_OPEN_PAREN)
154 cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
155 "__VA_OPT__ must be followed by an "
156 "open parenthesis");
157 return ERROR;
159 ++m_state;
160 if (m_update == ERROR)
162 if (m_arg == NULL)
163 m_update = INCLUDE;
164 else
166 m_update = DROP;
167 if (!m_arg->expanded)
168 expand_arg (m_pfile, m_arg);
169 for (unsigned idx = 0; idx < m_arg->expanded_count; ++idx)
170 if (m_arg->expanded[idx]->type != CPP_PADDING)
172 m_update = INCLUDE;
173 break;
177 return DROP;
179 else if (m_state >= 2)
181 if (m_state == 2 && token->type == CPP_PASTE)
183 cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
184 vaopt_paste_error);
185 return ERROR;
187 /* Advance states before further considering this token, in
188 case we see a close paren immediately after the open
189 paren. */
190 if (m_state == 2)
191 ++m_state;
193 bool was_paste = m_last_was_paste;
194 m_last_was_paste = false;
195 if (token->type == CPP_PASTE)
197 m_last_was_paste = true;
198 m_paste_location = token->src_loc;
200 else if (token->type == CPP_OPEN_PAREN)
201 ++m_state;
202 else if (token->type == CPP_CLOSE_PAREN)
204 --m_state;
205 if (m_state == 2)
207 /* Saw the final paren. */
208 m_state = 0;
210 if (was_paste)
212 cpp_error_at (m_pfile, CPP_DL_ERROR, token->src_loc,
213 vaopt_paste_error);
214 return ERROR;
217 return END;
220 return m_update;
223 /* Nothing to do with __VA_OPT__. */
224 return INCLUDE;
227 /* Ensure that any __VA_OPT__ was completed. If ok, return true.
228 Otherwise, issue an error and return false. */
229 bool completed ()
231 if (m_variadic && m_state != 0)
232 cpp_error_at (m_pfile, CPP_DL_ERROR, m_location,
233 "unterminated __VA_OPT__");
234 return m_state == 0;
237 private:
239 /* The cpp_reader. */
240 cpp_reader *m_pfile;
242 /* The __VA_ARGS__ argument. */
243 macro_arg *m_arg;
245 /* True if the macro is variadic. */
246 bool m_variadic;
247 /* If true, the previous token was ##. This is used to detect when
248 a paste occurs at the end of the sequence. */
249 bool m_last_was_paste;
251 /* The state variable:
252 0 means not parsing
253 1 means __VA_OPT__ seen, looking for "("
254 2 means "(" seen (so the next token can't be "##")
255 >= 3 means looking for ")", the number encodes the paren depth. */
256 int m_state;
258 /* The location of the paste token. */
259 location_t m_paste_location;
261 /* Location of the __VA_OPT__ token. */
262 location_t m_location;
264 /* If __VA_ARGS__ substitutes to no preprocessing tokens,
265 INCLUDE, otherwise DROP. ERROR when unknown yet. */
266 update_type m_update;
269 /* Macro expansion. */
271 static cpp_macro *get_deferred_or_lazy_macro (cpp_reader *, cpp_hashnode *,
272 location_t);
273 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
274 const cpp_token *, location_t);
275 static int builtin_macro (cpp_reader *, cpp_hashnode *,
276 location_t, location_t);
277 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
278 const cpp_token **, unsigned int);
279 static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
280 _cpp_buff *, location_t *,
281 const cpp_token **, unsigned int);
282 static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
283 _cpp_buff **, unsigned *);
284 static cpp_context *next_context (cpp_reader *);
285 static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
286 static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
287 static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
288 static void paste_all_tokens (cpp_reader *, const cpp_token *);
289 static bool paste_tokens (cpp_reader *, location_t,
290 const cpp_token **, const cpp_token *);
291 static void alloc_expanded_arg_mem (cpp_reader *, macro_arg *, size_t);
292 static void ensure_expanded_arg_room (cpp_reader *, macro_arg *, size_t, size_t *);
293 static void delete_macro_args (_cpp_buff*, unsigned num_args);
294 static void set_arg_token (macro_arg *, const cpp_token *,
295 location_t, size_t,
296 enum macro_arg_token_kind,
297 bool);
298 static const location_t *get_arg_token_location (const macro_arg *,
299 enum macro_arg_token_kind);
300 static const cpp_token **arg_token_ptr_at (const macro_arg *,
301 size_t,
302 enum macro_arg_token_kind,
303 location_t **virt_location);
305 static void macro_arg_token_iter_init (macro_arg_token_iter *, bool,
306 enum macro_arg_token_kind,
307 const macro_arg *,
308 const cpp_token **);
309 static const cpp_token *macro_arg_token_iter_get_token
310 (const macro_arg_token_iter *it);
311 static location_t macro_arg_token_iter_get_location
312 (const macro_arg_token_iter *);
313 static void macro_arg_token_iter_forward (macro_arg_token_iter *);
314 static _cpp_buff *tokens_buff_new (cpp_reader *, size_t,
315 location_t **);
316 static size_t tokens_buff_count (_cpp_buff *);
317 static const cpp_token **tokens_buff_last_token_ptr (_cpp_buff *);
318 static inline const cpp_token **tokens_buff_put_token_to (const cpp_token **,
319 location_t *,
320 const cpp_token *,
321 location_t,
322 location_t,
323 const line_map_macro *,
324 unsigned int);
326 static const cpp_token **tokens_buff_add_token (_cpp_buff *,
327 location_t *,
328 const cpp_token *,
329 location_t,
330 location_t,
331 const line_map_macro *,
332 unsigned int);
333 static inline void tokens_buff_remove_last_token (_cpp_buff *);
334 static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
335 macro_arg *, location_t);
336 static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
337 _cpp_buff **, unsigned *);
338 static cpp_macro *create_iso_definition (cpp_reader *);
340 /* #define directive parsing and handling. */
342 static cpp_macro *lex_expansion_token (cpp_reader *, cpp_macro *);
343 static bool parse_params (cpp_reader *, unsigned *, bool *);
344 static void check_trad_stringification (cpp_reader *, const cpp_macro *,
345 const cpp_string *);
346 static bool reached_end_of_context (cpp_context *);
347 static void consume_next_token_from_context (cpp_reader *pfile,
348 const cpp_token **,
349 location_t *);
350 static const cpp_token* cpp_get_token_1 (cpp_reader *, location_t *);
352 static cpp_hashnode* macro_of_context (cpp_context *context);
354 /* Statistical counter tracking the number of macros that got
355 expanded. */
356 unsigned num_expanded_macros_counter = 0;
357 /* Statistical counter tracking the total number tokens resulting
358 from macro expansion. */
359 unsigned num_macro_tokens_counter = 0;
361 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
362 and not consume CPP_EOF. */
363 static const cpp_token *
364 cpp_get_token_no_padding (cpp_reader *pfile)
366 for (;;)
368 const cpp_token *ret = cpp_peek_token (pfile, 0);
369 if (ret->type == CPP_EOF)
370 return ret;
371 ret = cpp_get_token (pfile);
372 if (ret->type != CPP_PADDING)
373 return ret;
377 /* Handle meeting "__has_include" builtin macro. */
379 static int
380 builtin_has_include (cpp_reader *pfile, cpp_hashnode *op, bool has_next)
382 int result = 0;
384 if (!pfile->state.in_directive)
385 cpp_error (pfile, CPP_DL_ERROR,
386 "\"%s\" used outside of preprocessing directive",
387 NODE_NAME (op));
389 pfile->state.angled_headers = true;
390 const cpp_token *token = cpp_get_token_no_padding (pfile);
391 bool paren = token->type == CPP_OPEN_PAREN;
392 if (paren)
393 token = cpp_get_token_no_padding (pfile);
394 else
395 cpp_error (pfile, CPP_DL_ERROR,
396 "missing '(' before \"%s\" operand", NODE_NAME (op));
397 pfile->state.angled_headers = false;
399 bool bracket = token->type != CPP_STRING;
400 char *fname = NULL;
401 if (token->type == CPP_STRING || token->type == CPP_HEADER_NAME)
403 fname = XNEWVEC (char, token->val.str.len - 1);
404 memcpy (fname, token->val.str.text + 1, token->val.str.len - 2);
405 fname[token->val.str.len - 2] = '\0';
407 else if (token->type == CPP_LESS)
408 fname = _cpp_bracket_include (pfile);
409 else
410 cpp_error (pfile, CPP_DL_ERROR,
411 "operator \"%s\" requires a header-name", NODE_NAME (op));
413 if (fname)
415 /* Do not do the lookup if we're skipping, that's unnecessary
416 IO. */
417 if (!pfile->state.skip_eval
418 && _cpp_has_header (pfile, fname, bracket,
419 has_next ? IT_INCLUDE_NEXT : IT_INCLUDE))
420 result = 1;
422 XDELETEVEC (fname);
425 if (paren
426 && cpp_get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
427 cpp_error (pfile, CPP_DL_ERROR,
428 "missing ')' after \"%s\" operand", NODE_NAME (op));
430 return result;
433 /* Emits a warning if NODE is a macro defined in the main file that
434 has not been used. */
436 _cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
437 void *v ATTRIBUTE_UNUSED)
439 if (cpp_user_macro_p (node))
441 cpp_macro *macro = node->value.macro;
443 if (!macro->used
444 && MAIN_FILE_P (linemap_check_ordinary
445 (linemap_lookup (pfile->line_table,
446 macro->line))))
447 cpp_warning_with_line (pfile, CPP_W_UNUSED_MACROS, macro->line, 0,
448 "macro \"%s\" is not used", NODE_NAME (node));
451 return 1;
454 /* Allocates and returns a CPP_STRING token, containing TEXT of length
455 LEN, after null-terminating it. TEXT must be in permanent storage. */
456 static const cpp_token *
457 new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
459 cpp_token *token = _cpp_temp_token (pfile);
461 text[len] = '\0';
462 token->type = CPP_STRING;
463 token->val.str.len = len;
464 token->val.str.text = text;
465 token->flags = 0;
466 return token;
469 static const char * const monthnames[] =
471 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
472 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
475 /* Helper function for builtin_macro. Returns the text generated by
476 a builtin macro. */
477 const uchar *
478 _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node,
479 location_t loc)
481 const uchar *result = NULL;
482 linenum_type number = 1;
484 switch (node->value.builtin)
486 default:
487 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
488 NODE_NAME (node));
489 break;
491 case BT_TIMESTAMP:
493 if (CPP_OPTION (pfile, warn_date_time))
494 cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
495 "reproducible builds", NODE_NAME (node));
497 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
498 if (pbuffer->timestamp == NULL)
500 /* Initialize timestamp value of the assotiated file. */
501 struct _cpp_file *file = cpp_get_file (pbuffer);
502 if (file)
504 /* Generate __TIMESTAMP__ string, that represents
505 the date and time of the last modification
506 of the current source file. The string constant
507 looks like "Sun Sep 16 01:03:52 1973". */
508 struct tm *tb = NULL;
509 struct stat *st = _cpp_get_file_stat (file);
510 if (st)
511 tb = localtime (&st->st_mtime);
512 if (tb)
514 char *str = asctime (tb);
515 size_t len = strlen (str);
516 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
517 buf[0] = '"';
518 strcpy ((char *) buf + 1, str);
519 buf[len] = '"';
520 pbuffer->timestamp = buf;
522 else
524 cpp_errno (pfile, CPP_DL_WARNING,
525 "could not determine file timestamp");
526 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
530 result = pbuffer->timestamp;
532 break;
533 case BT_FILE:
534 case BT_BASE_FILE:
536 unsigned int len;
537 const char *name;
538 uchar *buf;
540 if (node->value.builtin == BT_FILE)
541 name = linemap_get_expansion_filename (pfile->line_table,
542 pfile->line_table->highest_line);
543 else
545 name = _cpp_get_file_name (pfile->main_file);
546 if (!name)
547 abort ();
549 if (pfile->cb.remap_filename)
550 name = pfile->cb.remap_filename (name);
551 len = strlen (name);
552 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
553 result = buf;
554 *buf = '"';
555 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
556 *buf++ = '"';
557 *buf = '\0';
559 break;
561 case BT_INCLUDE_LEVEL:
562 /* The line map depth counts the primary source as level 1, but
563 historically __INCLUDE_DEPTH__ has called the primary source
564 level 0. */
565 number = pfile->line_table->depth - 1;
566 break;
568 case BT_SPECLINE:
569 /* If __LINE__ is embedded in a macro, it must expand to the
570 line of the macro's invocation, not its definition.
571 Otherwise things like assert() will not work properly.
572 See WG14 N1911, WG21 N4220 sec 6.5, and PR 61861. */
573 if (CPP_OPTION (pfile, traditional))
574 loc = pfile->line_table->highest_line;
575 else
576 loc = linemap_resolve_location (pfile->line_table, loc,
577 LRK_MACRO_EXPANSION_POINT, NULL);
578 number = linemap_get_expansion_line (pfile->line_table, loc);
579 break;
581 /* __STDC__ has the value 1 under normal circumstances.
582 However, if (a) we are in a system header, (b) the option
583 stdc_0_in_system_headers is true (set by target config), and
584 (c) we are not in strictly conforming mode, then it has the
585 value 0. (b) and (c) are already checked in cpp_init_builtins. */
586 case BT_STDC:
587 if (_cpp_in_system_header (pfile))
588 number = 0;
589 else
590 number = 1;
591 break;
593 case BT_DATE:
594 case BT_TIME:
595 if (CPP_OPTION (pfile, warn_date_time))
596 cpp_warning (pfile, CPP_W_DATE_TIME, "macro \"%s\" might prevent "
597 "reproducible builds", NODE_NAME (node));
598 if (pfile->date == NULL)
600 /* Allocate __DATE__ and __TIME__ strings from permanent
601 storage. We only do this once, and don't generate them
602 at init time, because time() and localtime() are very
603 slow on some systems. */
604 time_t tt;
605 auto kind = cpp_get_date (pfile, &tt);
607 if (kind == CPP_time_kind::UNKNOWN)
609 cpp_errno (pfile, CPP_DL_WARNING,
610 "could not determine date and time");
612 pfile->date = UC"\"??? ?? ????\"";
613 pfile->time = UC"\"??:??:??\"";
615 else
617 struct tm *tb = (kind == CPP_time_kind::FIXED
618 ? gmtime : localtime) (&tt);
620 pfile->date = _cpp_unaligned_alloc (pfile,
621 sizeof ("\"Oct 11 1347\""));
622 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
623 monthnames[tb->tm_mon], tb->tm_mday,
624 tb->tm_year + 1900);
626 pfile->time = _cpp_unaligned_alloc (pfile,
627 sizeof ("\"12:34:56\""));
628 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
629 tb->tm_hour, tb->tm_min, tb->tm_sec);
633 if (node->value.builtin == BT_DATE)
634 result = pfile->date;
635 else
636 result = pfile->time;
637 break;
639 case BT_COUNTER:
640 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
641 cpp_error (pfile, CPP_DL_ERROR,
642 "__COUNTER__ expanded inside directive with -fdirectives-only");
643 number = pfile->counter++;
644 break;
646 case BT_HAS_ATTRIBUTE:
647 number = pfile->cb.has_attribute (pfile, false);
648 break;
650 case BT_HAS_STD_ATTRIBUTE:
651 number = pfile->cb.has_attribute (pfile, true);
652 break;
654 case BT_HAS_BUILTIN:
655 number = pfile->cb.has_builtin (pfile);
656 break;
658 case BT_HAS_INCLUDE:
659 case BT_HAS_INCLUDE_NEXT:
660 number = builtin_has_include (pfile, node,
661 node->value.builtin == BT_HAS_INCLUDE_NEXT);
662 break;
665 if (result == NULL)
667 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
668 result = _cpp_unaligned_alloc (pfile, 21);
669 sprintf ((char *) result, "%u", number);
672 return result;
675 /* Get an idempotent date. Either the cached value, the value from
676 source epoch, or failing that, the value from time(2). Use this
677 during compilation so that every time stamp is the same. */
678 CPP_time_kind
679 cpp_get_date (cpp_reader *pfile, time_t *result)
681 if (!pfile->time_stamp_kind)
683 int kind = 0;
684 if (pfile->cb.get_source_date_epoch)
686 /* Try reading the fixed epoch. */
687 pfile->time_stamp = pfile->cb.get_source_date_epoch (pfile);
688 if (pfile->time_stamp != time_t (-1))
689 kind = int (CPP_time_kind::FIXED);
692 if (!kind)
694 /* Pedantically time_t (-1) is a legitimate value for
695 "number of seconds since the Epoch". It is a silly
696 time. */
697 errno = 0;
698 pfile->time_stamp = time (nullptr);
699 /* Annoyingly a library could legally set errno and return a
700 valid time! Bad library! */
701 if (pfile->time_stamp == time_t (-1) && errno)
702 kind = errno;
703 else
704 kind = int (CPP_time_kind::DYNAMIC);
707 pfile->time_stamp_kind = kind;
710 *result = pfile->time_stamp;
711 if (pfile->time_stamp_kind >= 0)
713 errno = pfile->time_stamp_kind;
714 return CPP_time_kind::UNKNOWN;
717 return CPP_time_kind (pfile->time_stamp_kind);
720 /* Convert builtin macros like __FILE__ to a token and push it on the
721 context stack. Also handles _Pragma, for which a new token may not
722 be created. Returns 1 if it generates a new token context, 0 to
723 return the token to the caller. LOC is the location of the expansion
724 point of the macro. */
725 static int
726 builtin_macro (cpp_reader *pfile, cpp_hashnode *node,
727 location_t loc, location_t expand_loc)
729 const uchar *buf;
730 size_t len;
731 char *nbuf;
733 if (node->value.builtin == BT_PRAGMA)
735 /* Don't interpret _Pragma within directives. The standard is
736 not clear on this, but to me this makes most sense. */
737 if (pfile->state.in_directive)
738 return 0;
740 return _cpp_do__Pragma (pfile, loc);
743 buf = _cpp_builtin_macro_text (pfile, node, expand_loc);
744 len = ustrlen (buf);
745 nbuf = (char *) alloca (len + 1);
746 memcpy (nbuf, buf, len);
747 nbuf[len]='\n';
749 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
750 _cpp_clean_line (pfile);
752 /* Set pfile->cur_token as required by _cpp_lex_direct. */
753 pfile->cur_token = _cpp_temp_token (pfile);
754 cpp_token *token = _cpp_lex_direct (pfile);
755 /* We should point to the expansion point of the builtin macro. */
756 token->src_loc = loc;
757 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
759 /* We are tracking tokens resulting from macro expansion.
760 Create a macro line map and generate a virtual location for
761 the token resulting from the expansion of the built-in
762 macro. */
763 location_t *virt_locs = NULL;
764 _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
765 const line_map_macro * map =
766 linemap_enter_macro (pfile->line_table, node, loc, 1);
767 tokens_buff_add_token (token_buf, virt_locs, token,
768 pfile->line_table->builtin_location,
769 pfile->line_table->builtin_location,
770 map, /*macro_token_index=*/0);
771 push_extended_tokens_context (pfile, node, token_buf, virt_locs,
772 (const cpp_token **)token_buf->base,
775 else
776 _cpp_push_token_context (pfile, NULL, token, 1);
777 if (pfile->buffer->cur != pfile->buffer->rlimit)
778 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
779 NODE_NAME (node));
780 _cpp_pop_buffer (pfile);
782 return 1;
785 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
786 backslashes and double quotes. DEST must be of sufficient size.
787 Returns a pointer to the end of the string. */
788 uchar *
789 cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
791 while (len--)
793 uchar c = *src++;
795 switch (c)
797 case '\n':
798 /* Naked LF can appear in raw string literals */
799 c = 'n';
800 /* FALLTHROUGH */
802 case '\\':
803 case '"':
804 *dest++ = '\\';
805 /* FALLTHROUGH */
807 default:
808 *dest++ = c;
812 return dest;
815 /* Convert a token sequence ARG to a single string token according to
816 the rules of the ISO C #-operator. */
817 static const cpp_token *
818 stringify_arg (cpp_reader *pfile, macro_arg *arg)
820 unsigned char *dest;
821 unsigned int i, escape_it, backslash_count = 0;
822 const cpp_token *source = NULL;
823 size_t len;
825 if (BUFF_ROOM (pfile->u_buff) < 3)
826 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
827 dest = BUFF_FRONT (pfile->u_buff);
828 *dest++ = '"';
830 /* Loop, reading in the argument's tokens. */
831 for (i = 0; i < arg->count; i++)
833 const cpp_token *token = arg->first[i];
835 if (token->type == CPP_PADDING)
837 if (source == NULL
838 || (!(source->flags & PREV_WHITE)
839 && token->val.source == NULL))
840 source = token->val.source;
841 continue;
844 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
845 || token->type == CPP_WSTRING || token->type == CPP_WCHAR
846 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
847 || token->type == CPP_STRING16 || token->type == CPP_CHAR16
848 || token->type == CPP_UTF8STRING || token->type == CPP_UTF8CHAR
849 || cpp_userdef_string_p (token->type)
850 || cpp_userdef_char_p (token->type));
852 /* Room for each char being written in octal, initial space and
853 final quote and NUL. */
854 len = cpp_token_len (token);
855 if (escape_it)
856 len *= 4;
857 len += 3;
859 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
861 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
862 _cpp_extend_buff (pfile, &pfile->u_buff, len);
863 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
866 /* Leading white space? */
867 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
869 if (source == NULL)
870 source = token;
871 if (source->flags & PREV_WHITE)
872 *dest++ = ' ';
874 source = NULL;
876 if (escape_it)
878 _cpp_buff *buff = _cpp_get_buff (pfile, len);
879 unsigned char *buf = BUFF_FRONT (buff);
880 len = cpp_spell_token (pfile, token, buf, true) - buf;
881 dest = cpp_quote_string (dest, buf, len);
882 _cpp_release_buff (pfile, buff);
884 else
885 dest = cpp_spell_token (pfile, token, dest, true);
887 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
888 backslash_count++;
889 else
890 backslash_count = 0;
893 /* Ignore the final \ of invalid string literals. */
894 if (backslash_count & 1)
896 cpp_error (pfile, CPP_DL_WARNING,
897 "invalid string literal, ignoring final '\\'");
898 dest--;
901 /* Commit the memory, including NUL, and return the token. */
902 *dest++ = '"';
903 len = dest - BUFF_FRONT (pfile->u_buff);
904 BUFF_FRONT (pfile->u_buff) = dest + 1;
905 return new_string_token (pfile, dest - len, len);
908 /* Try to paste two tokens. On success, return nonzero. In any
909 case, PLHS is updated to point to the pasted token, which is
910 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
911 the virtual location used for error reporting. */
912 static bool
913 paste_tokens (cpp_reader *pfile, location_t location,
914 const cpp_token **plhs, const cpp_token *rhs)
916 unsigned char *buf, *end, *lhsend;
917 cpp_token *lhs;
918 unsigned int len;
920 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
921 buf = (unsigned char *) alloca (len);
922 end = lhsend = cpp_spell_token (pfile, *plhs, buf, true);
924 /* Avoid comment headers, since they are still processed in stage 3.
925 It is simpler to insert a space here, rather than modifying the
926 lexer to ignore comments in some circumstances. Simply returning
927 false doesn't work, since we want to clear the PASTE_LEFT flag. */
928 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
929 *end++ = ' ';
930 /* In one obscure case we might see padding here. */
931 if (rhs->type != CPP_PADDING)
932 end = cpp_spell_token (pfile, rhs, end, true);
933 *end = '\n';
935 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
936 _cpp_clean_line (pfile);
938 /* Set pfile->cur_token as required by _cpp_lex_direct. */
939 pfile->cur_token = _cpp_temp_token (pfile);
940 lhs = _cpp_lex_direct (pfile);
941 if (pfile->buffer->cur != pfile->buffer->rlimit)
943 location_t saved_loc = lhs->src_loc;
945 _cpp_pop_buffer (pfile);
946 _cpp_backup_tokens (pfile, 1);
947 *lhsend = '\0';
949 /* We have to remove the PASTE_LEFT flag from the old lhs, but
950 we want to keep the new location. */
951 *lhs = **plhs;
952 *plhs = lhs;
953 lhs->src_loc = saved_loc;
954 lhs->flags &= ~PASTE_LEFT;
956 /* Mandatory error for all apart from assembler. */
957 if (CPP_OPTION (pfile, lang) != CLK_ASM)
958 cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
959 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
960 buf, cpp_token_as_text (pfile, rhs));
961 return false;
964 *plhs = lhs;
965 _cpp_pop_buffer (pfile);
966 return true;
969 /* Handles an arbitrarily long sequence of ## operators, with initial
970 operand LHS. This implementation is left-associative,
971 non-recursive, and finishes a paste before handling succeeding
972 ones. If a paste fails, we back up to the RHS of the failing ##
973 operator before pushing the context containing the result of prior
974 successful pastes, with the effect that the RHS appears in the
975 output stream after the pasted LHS normally. */
976 static void
977 paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
979 const cpp_token *rhs = NULL;
980 cpp_context *context = pfile->context;
981 location_t virt_loc = 0;
983 /* We are expanding a macro and we must have been called on a token
984 that appears at the left hand side of a ## operator. */
985 if (macro_of_context (pfile->context) == NULL
986 || (!(lhs->flags & PASTE_LEFT)))
987 abort ();
989 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
990 /* The caller must have called consume_next_token_from_context
991 right before calling us. That has incremented the pointer to
992 the current virtual location. So it now points to the location
993 of the token that comes right after *LHS. We want the
994 resulting pasted token to have the location of the current
995 *LHS, though. */
996 virt_loc = context->c.mc->cur_virt_loc[-1];
997 else
998 /* We are not tracking macro expansion. So the best virtual
999 location we can get here is the expansion point of the macro we
1000 are currently expanding. */
1001 virt_loc = pfile->invocation_location;
1005 /* Take the token directly from the current context. We can do
1006 this, because we are in the replacement list of either an
1007 object-like macro, or a function-like macro with arguments
1008 inserted. In either case, the constraints to #define
1009 guarantee we have at least one more token. */
1010 if (context->tokens_kind == TOKENS_KIND_DIRECT)
1011 rhs = FIRST (context).token++;
1012 else if (context->tokens_kind == TOKENS_KIND_INDIRECT)
1013 rhs = *FIRST (context).ptoken++;
1014 else if (context->tokens_kind == TOKENS_KIND_EXTENDED)
1016 /* So we are in presence of an extended token context, which
1017 means that each token in this context has a virtual
1018 location attached to it. So let's not forget to update
1019 the pointer to the current virtual location of the
1020 current token when we update the pointer to the current
1021 token */
1023 rhs = *FIRST (context).ptoken++;
1024 /* context->c.mc must be non-null, as if we were not in a
1025 macro context, context->tokens_kind could not be equal to
1026 TOKENS_KIND_EXTENDED. */
1027 context->c.mc->cur_virt_loc++;
1030 if (rhs->type == CPP_PADDING)
1032 if (rhs->flags & PASTE_LEFT)
1033 abort ();
1035 if (!paste_tokens (pfile, virt_loc, &lhs, rhs))
1036 break;
1038 while (rhs->flags & PASTE_LEFT);
1040 /* Put the resulting token in its own context. */
1041 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
1043 location_t *virt_locs = NULL;
1044 _cpp_buff *token_buf = tokens_buff_new (pfile, 1, &virt_locs);
1045 tokens_buff_add_token (token_buf, virt_locs, lhs,
1046 virt_loc, 0, NULL, 0);
1047 push_extended_tokens_context (pfile, context->c.mc->macro_node,
1048 token_buf, virt_locs,
1049 (const cpp_token **)token_buf->base, 1);
1051 else
1052 _cpp_push_token_context (pfile, NULL, lhs, 1);
1055 /* Returns TRUE if the number of arguments ARGC supplied in an
1056 invocation of the MACRO referenced by NODE is valid. An empty
1057 invocation to a macro with no parameters should pass ARGC as zero.
1059 Note that MACRO cannot necessarily be deduced from NODE, in case
1060 NODE was redefined whilst collecting arguments. */
1061 bool
1062 _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
1064 if (argc == macro->paramc)
1065 return true;
1067 if (argc < macro->paramc)
1069 /* In C++20 (here the va_opt flag is used), and also as a GNU
1070 extension, variadic arguments are allowed to not appear in
1071 the invocation at all.
1072 e.g. #define debug(format, args...) something
1073 debug("string");
1075 This is exactly the same as if an empty variadic list had been
1076 supplied - debug("string", ). */
1078 if (argc + 1 == macro->paramc && macro->variadic)
1080 if (CPP_PEDANTIC (pfile) && ! macro->syshdr
1081 && ! CPP_OPTION (pfile, va_opt))
1083 if (CPP_OPTION (pfile, cplusplus))
1084 cpp_error (pfile, CPP_DL_PEDWARN,
1085 "ISO C++11 requires at least one argument "
1086 "for the \"...\" in a variadic macro");
1087 else
1088 cpp_error (pfile, CPP_DL_PEDWARN,
1089 "ISO C99 requires at least one argument "
1090 "for the \"...\" in a variadic macro");
1092 return true;
1095 cpp_error (pfile, CPP_DL_ERROR,
1096 "macro \"%s\" requires %u arguments, but only %u given",
1097 NODE_NAME (node), macro->paramc, argc);
1099 else
1100 cpp_error (pfile, CPP_DL_ERROR,
1101 "macro \"%s\" passed %u arguments, but takes just %u",
1102 NODE_NAME (node), argc, macro->paramc);
1104 if (macro->line > RESERVED_LOCATION_COUNT)
1105 cpp_error_at (pfile, CPP_DL_NOTE, macro->line, "macro \"%s\" defined here",
1106 NODE_NAME (node));
1108 return false;
1111 /* Reads and returns the arguments to a function-like macro
1112 invocation. Assumes the opening parenthesis has been processed.
1113 If there is an error, emits an appropriate diagnostic and returns
1114 NULL. Each argument is terminated by a CPP_EOF token, for the
1115 future benefit of expand_arg(). If there are any deferred
1116 #pragma directives among macro arguments, store pointers to the
1117 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
1119 What is returned is the buffer that contains the memory allocated
1120 to hold the macro arguments. NODE is the name of the macro this
1121 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
1122 set to the actual number of macro arguments allocated in the
1123 returned buffer. */
1124 static _cpp_buff *
1125 collect_args (cpp_reader *pfile, const cpp_hashnode *node,
1126 _cpp_buff **pragma_buff, unsigned *num_args)
1128 _cpp_buff *buff, *base_buff;
1129 cpp_macro *macro;
1130 macro_arg *args, *arg;
1131 const cpp_token *token;
1132 unsigned int argc;
1133 location_t virt_loc;
1134 bool track_macro_expansion_p = CPP_OPTION (pfile, track_macro_expansion);
1135 unsigned num_args_alloced = 0;
1137 macro = node->value.macro;
1138 if (macro->paramc)
1139 argc = macro->paramc;
1140 else
1141 argc = 1;
1143 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
1144 #define ARG_TOKENS_EXTENT 1000
1146 buff = _cpp_get_buff (pfile, argc * (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
1147 * sizeof (cpp_token *)
1148 + sizeof (macro_arg)));
1149 base_buff = buff;
1150 args = (macro_arg *) buff->base;
1151 memset (args, 0, argc * sizeof (macro_arg));
1152 buff->cur = (unsigned char *) &args[argc];
1153 arg = args, argc = 0;
1155 /* Collect the tokens making up each argument. We don't yet know
1156 how many arguments have been supplied, whether too many or too
1157 few. Hence the slightly bizarre usage of "argc" and "arg". */
1160 unsigned int paren_depth = 0;
1161 unsigned int ntokens = 0;
1162 unsigned virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
1163 num_args_alloced++;
1165 argc++;
1166 arg->first = (const cpp_token **) buff->cur;
1167 if (track_macro_expansion_p)
1169 virt_locs_capacity = DEFAULT_NUM_TOKENS_PER_MACRO_ARG;
1170 arg->virt_locs = XNEWVEC (location_t,
1171 virt_locs_capacity);
1174 for (;;)
1176 /* Require space for 2 new tokens (including a CPP_EOF). */
1177 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
1179 buff = _cpp_append_extend_buff (pfile, buff,
1180 ARG_TOKENS_EXTENT
1181 * sizeof (cpp_token *));
1182 arg->first = (const cpp_token **) buff->cur;
1184 if (track_macro_expansion_p
1185 && (ntokens + 2 > virt_locs_capacity))
1187 virt_locs_capacity += ARG_TOKENS_EXTENT;
1188 arg->virt_locs = XRESIZEVEC (location_t,
1189 arg->virt_locs,
1190 virt_locs_capacity);
1193 token = cpp_get_token_1 (pfile, &virt_loc);
1195 if (token->type == CPP_PADDING)
1197 /* Drop leading padding. */
1198 if (ntokens == 0)
1199 continue;
1201 else if (token->type == CPP_OPEN_PAREN)
1202 paren_depth++;
1203 else if (token->type == CPP_CLOSE_PAREN)
1205 if (paren_depth-- == 0)
1206 break;
1208 else if (token->type == CPP_COMMA)
1210 /* A comma does not terminate an argument within
1211 parentheses or as part of a variable argument. */
1212 if (paren_depth == 0
1213 && ! (macro->variadic && argc == macro->paramc))
1214 break;
1216 else if (token->type == CPP_EOF
1217 || (token->type == CPP_HASH && token->flags & BOL))
1218 break;
1219 else if (token->type == CPP_PRAGMA)
1221 cpp_token *newtok = _cpp_temp_token (pfile);
1223 /* CPP_PRAGMA token lives in directive_result, which will
1224 be overwritten on the next directive. */
1225 *newtok = *token;
1226 token = newtok;
1229 if (*pragma_buff == NULL
1230 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
1232 _cpp_buff *next;
1233 if (*pragma_buff == NULL)
1234 *pragma_buff
1235 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
1236 else
1238 next = *pragma_buff;
1239 *pragma_buff
1240 = _cpp_get_buff (pfile,
1241 (BUFF_FRONT (*pragma_buff)
1242 - (*pragma_buff)->base) * 2);
1243 (*pragma_buff)->next = next;
1246 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
1247 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
1248 if (token->type == CPP_PRAGMA_EOL)
1249 break;
1250 token = cpp_get_token_1 (pfile, &virt_loc);
1252 while (token->type != CPP_EOF);
1254 /* In deferred pragmas parsing_args and prevent_expansion
1255 had been changed, reset it. */
1256 pfile->state.parsing_args = 2;
1257 pfile->state.prevent_expansion = 1;
1259 if (token->type == CPP_EOF)
1260 break;
1261 else
1262 continue;
1264 set_arg_token (arg, token, virt_loc,
1265 ntokens, MACRO_ARG_TOKEN_NORMAL,
1266 CPP_OPTION (pfile, track_macro_expansion));
1267 ntokens++;
1270 /* Drop trailing padding. */
1271 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
1272 ntokens--;
1274 arg->count = ntokens;
1275 /* Append an EOF to mark end-of-argument. */
1276 set_arg_token (arg, &pfile->endarg, token->src_loc,
1277 ntokens, MACRO_ARG_TOKEN_NORMAL,
1278 CPP_OPTION (pfile, track_macro_expansion));
1280 /* Terminate the argument. Excess arguments loop back and
1281 overwrite the final legitimate argument, before failing. */
1282 if (argc <= macro->paramc)
1284 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
1285 if (argc != macro->paramc)
1286 arg++;
1289 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
1291 if (token->type == CPP_EOF)
1293 /* Unless the EOF is marking the end of an argument, it's a fake
1294 one from the end of a file that _cpp_clean_line will not have
1295 advanced past. */
1296 if (token == &pfile->endarg)
1297 _cpp_backup_tokens (pfile, 1);
1298 cpp_error (pfile, CPP_DL_ERROR,
1299 "unterminated argument list invoking macro \"%s\"",
1300 NODE_NAME (node));
1302 else
1304 /* A single empty argument is counted as no argument. */
1305 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
1306 argc = 0;
1307 if (_cpp_arguments_ok (pfile, macro, node, argc))
1309 /* GCC has special semantics for , ## b where b is a varargs
1310 parameter: we remove the comma if b was omitted entirely.
1311 If b was merely an empty argument, the comma is retained.
1312 If the macro takes just one (varargs) parameter, then we
1313 retain the comma only if we are standards conforming.
1315 If FIRST is NULL replace_args () swallows the comma. */
1316 if (macro->variadic && (argc < macro->paramc
1317 || (argc == 1 && args[0].count == 0
1318 && !CPP_OPTION (pfile, std))))
1319 args[macro->paramc - 1].first = NULL;
1320 if (num_args)
1321 *num_args = num_args_alloced;
1322 return base_buff;
1326 /* An error occurred. */
1327 _cpp_release_buff (pfile, base_buff);
1328 return NULL;
1331 /* Search for an opening parenthesis to the macro of NODE, in such a
1332 way that, if none is found, we don't lose the information in any
1333 intervening padding tokens. If we find the parenthesis, collect
1334 the arguments and return the buffer containing them. PRAGMA_BUFF
1335 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
1336 *NUM_ARGS is set to the number of arguments contained in the
1337 returned buffer. */
1338 static _cpp_buff *
1339 funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
1340 _cpp_buff **pragma_buff, unsigned *num_args)
1342 const cpp_token *token, *padding = NULL;
1344 for (;;)
1346 token = cpp_get_token (pfile);
1347 if (token->type != CPP_PADDING)
1348 break;
1349 if (padding == NULL
1350 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
1351 padding = token;
1354 if (token->type == CPP_OPEN_PAREN)
1356 pfile->state.parsing_args = 2;
1357 return collect_args (pfile, node, pragma_buff, num_args);
1360 /* Back up. A CPP_EOF is either an EOF from an argument we're
1361 expanding, or a fake one from lex_direct. We want to backup the
1362 former, but not the latter. We may have skipped padding, in
1363 which case backing up more than one token when expanding macros
1364 is in general too difficult. We re-insert it in its own
1365 context. */
1366 if (token->type != CPP_EOF || token == &pfile->endarg)
1368 _cpp_backup_tokens (pfile, 1);
1369 if (padding)
1370 _cpp_push_token_context (pfile, NULL, padding, 1);
1373 return NULL;
1376 /* Return the real number of tokens in the expansion of MACRO. */
1377 static inline unsigned int
1378 macro_real_token_count (const cpp_macro *macro)
1380 if (__builtin_expect (!macro->extra_tokens, true))
1381 return macro->count;
1383 for (unsigned i = macro->count; i--;)
1384 if (macro->exp.tokens[i].type != CPP_PASTE)
1385 return i + 1;
1387 return 0;
1390 /* Push the context of a macro with hash entry NODE onto the context
1391 stack. If we can successfully expand the macro, we push a context
1392 containing its yet-to-be-rescanned replacement list and return one.
1393 If there were additionally any unexpanded deferred #pragma
1394 directives among macro arguments, push another context containing
1395 the pragma tokens before the yet-to-be-rescanned replacement list
1396 and return two. Otherwise, we don't push a context and return
1397 zero. LOCATION is the location of the expansion point of the
1398 macro. */
1399 static int
1400 enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
1401 const cpp_token *result, location_t location)
1403 /* The presence of a macro invalidates a file's controlling macro. */
1404 pfile->mi_valid = false;
1406 pfile->state.angled_headers = false;
1408 /* From here to when we push the context for the macro later down
1409 this function, we need to flag the fact that we are about to
1410 expand a macro. This is useful when -ftrack-macro-expansion is
1411 turned off. In that case, we need to record the location of the
1412 expansion point of the top-most macro we are about to to expand,
1413 into pfile->invocation_location. But we must not record any such
1414 location once the process of expanding the macro starts; that is,
1415 we must not do that recording between now and later down this
1416 function where set this flag to FALSE. */
1417 pfile->about_to_expand_macro_p = true;
1419 if (cpp_user_macro_p (node))
1421 cpp_macro *macro = node->value.macro;
1422 _cpp_buff *pragma_buff = NULL;
1424 if (macro->fun_like)
1426 _cpp_buff *buff;
1427 unsigned num_args = 0;
1429 pfile->state.prevent_expansion++;
1430 pfile->keep_tokens++;
1431 pfile->state.parsing_args = 1;
1432 buff = funlike_invocation_p (pfile, node, &pragma_buff,
1433 &num_args);
1434 pfile->state.parsing_args = 0;
1435 pfile->keep_tokens--;
1436 pfile->state.prevent_expansion--;
1438 if (buff == NULL)
1440 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
1441 cpp_warning (pfile, CPP_W_TRADITIONAL,
1442 "function-like macro \"%s\" must be used with arguments in traditional C",
1443 NODE_NAME (node));
1445 if (pragma_buff)
1446 _cpp_release_buff (pfile, pragma_buff);
1448 pfile->about_to_expand_macro_p = false;
1449 return 0;
1452 if (macro->paramc > 0)
1453 replace_args (pfile, node, macro,
1454 (macro_arg *) buff->base,
1455 location);
1456 /* Free the memory used by the arguments of this
1457 function-like macro. This memory has been allocated by
1458 funlike_invocation_p and by replace_args. */
1459 delete_macro_args (buff, num_args);
1462 /* Disable the macro within its expansion. */
1463 node->flags |= NODE_DISABLED;
1465 /* Laziness can only affect the expansion tokens of the macro,
1466 not its fun-likeness or parameters. */
1467 _cpp_maybe_notify_macro_use (pfile, node, location);
1468 if (pfile->cb.used)
1469 pfile->cb.used (pfile, location, node);
1471 macro->used = 1;
1473 if (macro->paramc == 0)
1475 unsigned tokens_count = macro_real_token_count (macro);
1476 if (CPP_OPTION (pfile, track_macro_expansion))
1478 unsigned int i;
1479 const cpp_token *src = macro->exp.tokens;
1480 const line_map_macro *map;
1481 location_t *virt_locs = NULL;
1482 _cpp_buff *macro_tokens
1483 = tokens_buff_new (pfile, tokens_count, &virt_locs);
1485 /* Create a macro map to record the locations of the
1486 tokens that are involved in the expansion. LOCATION
1487 is the location of the macro expansion point. */
1488 map = linemap_enter_macro (pfile->line_table,
1489 node, location, tokens_count);
1490 for (i = 0; i < tokens_count; ++i)
1492 tokens_buff_add_token (macro_tokens, virt_locs,
1493 src, src->src_loc,
1494 src->src_loc, map, i);
1495 ++src;
1497 push_extended_tokens_context (pfile, node,
1498 macro_tokens,
1499 virt_locs,
1500 (const cpp_token **)
1501 macro_tokens->base,
1502 tokens_count);
1504 else
1505 _cpp_push_token_context (pfile, node, macro->exp.tokens,
1506 tokens_count);
1507 num_macro_tokens_counter += tokens_count;
1510 if (pragma_buff)
1512 if (!pfile->state.in_directive)
1513 _cpp_push_token_context (pfile, NULL,
1514 padding_token (pfile, result), 1);
1517 unsigned tokens_count;
1518 _cpp_buff *tail = pragma_buff->next;
1519 pragma_buff->next = NULL;
1520 tokens_count = ((const cpp_token **) BUFF_FRONT (pragma_buff)
1521 - (const cpp_token **) pragma_buff->base);
1522 push_ptoken_context (pfile, NULL, pragma_buff,
1523 (const cpp_token **) pragma_buff->base,
1524 tokens_count);
1525 pragma_buff = tail;
1526 if (!CPP_OPTION (pfile, track_macro_expansion))
1527 num_macro_tokens_counter += tokens_count;
1530 while (pragma_buff != NULL);
1531 pfile->about_to_expand_macro_p = false;
1532 return 2;
1535 pfile->about_to_expand_macro_p = false;
1536 return 1;
1539 pfile->about_to_expand_macro_p = false;
1540 /* Handle built-in macros and the _Pragma operator. */
1542 location_t expand_loc;
1544 if (/* The top-level macro invocation that triggered the expansion
1545 we are looking at is with a function-like user macro ... */
1546 cpp_fun_like_macro_p (pfile->top_most_macro_node)
1547 /* ... and we are tracking the macro expansion. */
1548 && CPP_OPTION (pfile, track_macro_expansion))
1549 /* Then the location of the end of the macro invocation is the
1550 location of the expansion point of this macro. */
1551 expand_loc = location;
1552 else
1553 /* Otherwise, the location of the end of the macro invocation is
1554 the location of the expansion point of that top-level macro
1555 invocation. */
1556 expand_loc = pfile->invocation_location;
1558 return builtin_macro (pfile, node, location, expand_loc);
1562 /* De-allocate the memory used by BUFF which is an array of instances
1563 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1564 present in BUFF. */
1565 static void
1566 delete_macro_args (_cpp_buff *buff, unsigned num_args)
1568 macro_arg *macro_args;
1569 unsigned i;
1571 if (buff == NULL)
1572 return;
1574 macro_args = (macro_arg *) buff->base;
1576 /* Walk instances of macro_arg to free their expanded tokens as well
1577 as their macro_arg::virt_locs members. */
1578 for (i = 0; i < num_args; ++i)
1580 if (macro_args[i].expanded)
1582 free (macro_args[i].expanded);
1583 macro_args[i].expanded = NULL;
1585 if (macro_args[i].virt_locs)
1587 free (macro_args[i].virt_locs);
1588 macro_args[i].virt_locs = NULL;
1590 if (macro_args[i].expanded_virt_locs)
1592 free (macro_args[i].expanded_virt_locs);
1593 macro_args[i].expanded_virt_locs = NULL;
1596 _cpp_free_buff (buff);
1599 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1600 to set, LOCATION is its virtual location. "Virtual" location means
1601 the location that encodes loci across macro expansion. Otherwise
1602 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1603 argument ARG is supposed to contain. Note that ARG must be
1604 tailored so that it has enough room to contain INDEX + 1 numbers of
1605 tokens, at least. */
1606 static void
1607 set_arg_token (macro_arg *arg, const cpp_token *token,
1608 location_t location, size_t index,
1609 enum macro_arg_token_kind kind,
1610 bool track_macro_exp_p)
1612 const cpp_token **token_ptr;
1613 location_t *loc = NULL;
1615 token_ptr =
1616 arg_token_ptr_at (arg, index, kind,
1617 track_macro_exp_p ? &loc : NULL);
1618 *token_ptr = token;
1620 if (loc != NULL)
1622 /* We can't set the location of a stringified argument
1623 token and we can't set any location if we aren't tracking
1624 macro expansion locations. */
1625 gcc_checking_assert (kind != MACRO_ARG_TOKEN_STRINGIFIED
1626 && track_macro_exp_p);
1627 *loc = location;
1631 /* Get the pointer to the location of the argument token of the
1632 function-like macro argument ARG. This function must be called
1633 only when we -ftrack-macro-expansion is on. */
1634 static const location_t *
1635 get_arg_token_location (const macro_arg *arg,
1636 enum macro_arg_token_kind kind)
1638 const location_t *loc = NULL;
1639 const cpp_token **token_ptr =
1640 arg_token_ptr_at (arg, 0, kind, (location_t **) &loc);
1642 if (token_ptr == NULL)
1643 return NULL;
1645 return loc;
1648 /* Return the pointer to the INDEXth token of the macro argument ARG.
1649 KIND specifies the kind of token the macro argument ARG contains.
1650 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1651 of the virtual location of the returned token if the
1652 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1653 spelling location of the returned token. */
1654 static const cpp_token **
1655 arg_token_ptr_at (const macro_arg *arg, size_t index,
1656 enum macro_arg_token_kind kind,
1657 location_t **virt_location)
1659 const cpp_token **tokens_ptr = NULL;
1661 switch (kind)
1663 case MACRO_ARG_TOKEN_NORMAL:
1664 tokens_ptr = arg->first;
1665 break;
1666 case MACRO_ARG_TOKEN_STRINGIFIED:
1667 tokens_ptr = (const cpp_token **) &arg->stringified;
1668 break;
1669 case MACRO_ARG_TOKEN_EXPANDED:
1670 tokens_ptr = arg->expanded;
1671 break;
1674 if (tokens_ptr == NULL)
1675 /* This can happen for e.g, an empty token argument to a
1676 funtion-like macro. */
1677 return tokens_ptr;
1679 if (virt_location)
1681 if (kind == MACRO_ARG_TOKEN_NORMAL)
1682 *virt_location = &arg->virt_locs[index];
1683 else if (kind == MACRO_ARG_TOKEN_EXPANDED)
1684 *virt_location = &arg->expanded_virt_locs[index];
1685 else if (kind == MACRO_ARG_TOKEN_STRINGIFIED)
1686 *virt_location =
1687 (location_t *) &tokens_ptr[index]->src_loc;
1689 return &tokens_ptr[index];
1692 /* Initialize an iterator so that it iterates over the tokens of a
1693 function-like macro argument. KIND is the kind of tokens we want
1694 ITER to iterate over. TOKEN_PTR points the first token ITER will
1695 iterate over. */
1696 static void
1697 macro_arg_token_iter_init (macro_arg_token_iter *iter,
1698 bool track_macro_exp_p,
1699 enum macro_arg_token_kind kind,
1700 const macro_arg *arg,
1701 const cpp_token **token_ptr)
1703 iter->track_macro_exp_p = track_macro_exp_p;
1704 iter->kind = kind;
1705 iter->token_ptr = token_ptr;
1706 /* Unconditionally initialize this so that the compiler doesn't warn
1707 about iter->location_ptr being possibly uninitialized later after
1708 this code has been inlined somewhere. */
1709 iter->location_ptr = NULL;
1710 if (track_macro_exp_p)
1711 iter->location_ptr = get_arg_token_location (arg, kind);
1712 #if CHECKING_P
1713 iter->num_forwards = 0;
1714 if (track_macro_exp_p
1715 && token_ptr != NULL
1716 && iter->location_ptr == NULL)
1717 abort ();
1718 #endif
1721 /* Move the iterator one token forward. Note that if IT was
1722 initialized on an argument that has a stringified token, moving it
1723 forward doesn't make sense as a stringified token is essentially one
1724 string. */
1725 static void
1726 macro_arg_token_iter_forward (macro_arg_token_iter *it)
1728 switch (it->kind)
1730 case MACRO_ARG_TOKEN_NORMAL:
1731 case MACRO_ARG_TOKEN_EXPANDED:
1732 it->token_ptr++;
1733 if (it->track_macro_exp_p)
1734 it->location_ptr++;
1735 break;
1736 case MACRO_ARG_TOKEN_STRINGIFIED:
1737 #if CHECKING_P
1738 if (it->num_forwards > 0)
1739 abort ();
1740 #endif
1741 break;
1744 #if CHECKING_P
1745 it->num_forwards++;
1746 #endif
1749 /* Return the token pointed to by the iterator. */
1750 static const cpp_token *
1751 macro_arg_token_iter_get_token (const macro_arg_token_iter *it)
1753 #if CHECKING_P
1754 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1755 && it->num_forwards > 0)
1756 abort ();
1757 #endif
1758 if (it->token_ptr == NULL)
1759 return NULL;
1760 return *it->token_ptr;
1763 /* Return the location of the token pointed to by the iterator.*/
1764 static location_t
1765 macro_arg_token_iter_get_location (const macro_arg_token_iter *it)
1767 #if CHECKING_P
1768 if (it->kind == MACRO_ARG_TOKEN_STRINGIFIED
1769 && it->num_forwards > 0)
1770 abort ();
1771 #endif
1772 if (it->track_macro_exp_p)
1773 return *it->location_ptr;
1774 else
1775 return (*it->token_ptr)->src_loc;
1778 /* Return the index of a token [resulting from macro expansion] inside
1779 the total list of tokens resulting from a given macro
1780 expansion. The index can be different depending on whether if we
1781 want each tokens resulting from function-like macro arguments
1782 expansion to have a different location or not.
1784 E.g, consider this function-like macro:
1786 #define M(x) x - 3
1788 Then consider us "calling" it (and thus expanding it) like:
1790 M(1+4)
1792 It will be expanded into:
1794 1+4-3
1796 Let's consider the case of the token '4'.
1798 Its index can be 2 (it's the third token of the set of tokens
1799 resulting from the expansion) or it can be 0 if we consider that
1800 all tokens resulting from the expansion of the argument "1+2" have
1801 the same index, which is 0. In this later case, the index of token
1802 '-' would then be 1 and the index of token '3' would be 2.
1804 The later case is useful to use less memory e.g, for the case of
1805 the user using the option -ftrack-macro-expansion=1.
1807 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1808 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1809 parameter (inside the macro replacement list) that corresponds to
1810 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1813 If we refer to the example above, for the '4' argument token,
1814 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1815 would be set to the token 'x', in the replacement list "x - 3" of
1816 macro M.
1818 This is a subroutine of replace_args. */
1819 inline static unsigned
1820 expanded_token_index (cpp_reader *pfile, cpp_macro *macro,
1821 const cpp_token *cur_replacement_token,
1822 unsigned absolute_token_index)
1824 if (CPP_OPTION (pfile, track_macro_expansion) > 1)
1825 return absolute_token_index;
1826 return cur_replacement_token - macro->exp.tokens;
1829 /* Copy whether PASTE_LEFT is set from SRC to *PASTE_FLAG. */
1831 static void
1832 copy_paste_flag (cpp_reader *pfile, const cpp_token **paste_flag,
1833 const cpp_token *src)
1835 cpp_token *token = _cpp_temp_token (pfile);
1836 token->type = (*paste_flag)->type;
1837 token->val = (*paste_flag)->val;
1838 if (src->flags & PASTE_LEFT)
1839 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1840 else
1841 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1842 *paste_flag = token;
1845 /* True IFF the last token emitted into BUFF (if any) is PTR. */
1847 static bool
1848 last_token_is (_cpp_buff *buff, const cpp_token **ptr)
1850 return (ptr && tokens_buff_last_token_ptr (buff) == ptr);
1853 /* Replace the parameters in a function-like macro of NODE with the
1854 actual ARGS, and place the result in a newly pushed token context.
1855 Expand each argument before replacing, unless it is operated upon
1856 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1857 the expansion point of the macro. E.g, the location of the
1858 function-like macro invocation. */
1859 static void
1860 replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro,
1861 macro_arg *args, location_t expansion_point_loc)
1863 unsigned int i, total;
1864 const cpp_token *src, *limit;
1865 const cpp_token **first = NULL;
1866 macro_arg *arg;
1867 _cpp_buff *buff = NULL;
1868 location_t *virt_locs = NULL;
1869 unsigned int exp_count;
1870 const line_map_macro *map = NULL;
1871 int track_macro_exp;
1873 /* First, fully macro-expand arguments, calculating the number of
1874 tokens in the final expansion as we go. The ordering of the if
1875 statements below is subtle; we must handle stringification before
1876 pasting. */
1878 /* EXP_COUNT is the number of tokens in the macro replacement
1879 list. TOTAL is the number of tokens /after/ macro parameters
1880 have been replaced by their arguments. */
1881 exp_count = macro_real_token_count (macro);
1882 total = exp_count;
1883 limit = macro->exp.tokens + exp_count;
1885 for (src = macro->exp.tokens; src < limit; src++)
1886 if (src->type == CPP_MACRO_ARG)
1888 /* Leading and trailing padding tokens. */
1889 total += 2;
1890 /* Account for leading and padding tokens in exp_count too.
1891 This is going to be important later down this function,
1892 when we want to handle the case of (track_macro_exp <
1893 2). */
1894 exp_count += 2;
1896 /* We have an argument. If it is not being stringified or
1897 pasted it is macro-replaced before insertion. */
1898 arg = &args[src->val.macro_arg.arg_no - 1];
1900 if (src->flags & STRINGIFY_ARG)
1902 if (!arg->stringified)
1903 arg->stringified = stringify_arg (pfile, arg);
1905 else if ((src->flags & PASTE_LEFT)
1906 || (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
1907 total += arg->count - 1;
1908 else
1910 if (!arg->expanded)
1911 expand_arg (pfile, arg);
1912 total += arg->expanded_count - 1;
1916 /* When the compiler is called with the -ftrack-macro-expansion
1917 flag, we need to keep track of the location of each token that
1918 results from macro expansion.
1920 A token resulting from macro expansion is not a new token. It is
1921 simply the same token as the token coming from the macro
1922 definition. The new things that are allocated are the buffer
1923 that holds the tokens resulting from macro expansion and a new
1924 location that records many things like the locus of the expansion
1925 point as well as the original locus inside the definition of the
1926 macro. This location is called a virtual location.
1928 So the buffer BUFF holds a set of cpp_token*, and the buffer
1929 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1931 Both of these two buffers are going to be hung off of the macro
1932 context, when the latter is pushed. The memory allocated to
1933 store the tokens and their locations is going to be freed once
1934 the context of macro expansion is popped.
1936 As far as tokens are concerned, the memory overhead of
1937 -ftrack-macro-expansion is proportional to the number of
1938 macros that get expanded multiplied by sizeof (location_t).
1939 The good news is that extra memory gets freed when the macro
1940 context is freed, i.e shortly after the macro got expanded. */
1942 /* Is the -ftrack-macro-expansion flag in effect? */
1943 track_macro_exp = CPP_OPTION (pfile, track_macro_expansion);
1945 /* Now allocate memory space for tokens and locations resulting from
1946 the macro expansion, copy the tokens and replace the arguments.
1947 This memory must be freed when the context of the macro MACRO is
1948 popped. */
1949 buff = tokens_buff_new (pfile, total, track_macro_exp ? &virt_locs : NULL);
1951 first = (const cpp_token **) buff->base;
1953 /* Create a macro map to record the locations of the tokens that are
1954 involved in the expansion. Note that the expansion point is set
1955 to the location of the closing parenthesis. Otherwise, the
1956 subsequent map created for the first token that comes after the
1957 macro map might have a wrong line number. That would lead to
1958 tokens with wrong line numbers after the macro expansion. This
1959 adds up to the memory overhead of the -ftrack-macro-expansion
1960 flag; for every macro that is expanded, a "macro map" is
1961 created. */
1962 if (track_macro_exp)
1964 int num_macro_tokens = total;
1965 if (track_macro_exp < 2)
1966 /* Then the number of macro tokens won't take in account the
1967 fact that function-like macro arguments can expand to
1968 multiple tokens. This is to save memory at the expense of
1969 accuracy.
1971 Suppose we have #define SQUARE(A) A * A
1973 And then we do SQUARE(2+3)
1975 Then the tokens 2, +, 3, will have the same location,
1976 saying they come from the expansion of the argument A. */
1977 num_macro_tokens = exp_count;
1978 map = linemap_enter_macro (pfile->line_table, node,
1979 expansion_point_loc,
1980 num_macro_tokens);
1982 i = 0;
1983 vaopt_state vaopt_tracker (pfile, macro->variadic, &args[macro->paramc - 1]);
1984 const cpp_token **vaopt_start = NULL;
1985 for (src = macro->exp.tokens; src < limit; src++)
1987 unsigned int arg_tokens_count;
1988 macro_arg_token_iter from;
1989 const cpp_token **paste_flag = NULL;
1990 const cpp_token **tmp_token_ptr;
1992 /* __VA_OPT__ handling. */
1993 vaopt_state::update_type vostate = vaopt_tracker.update (src);
1994 if (vostate != vaopt_state::INCLUDE)
1996 if (vostate == vaopt_state::BEGIN)
1998 /* Padding on the left of __VA_OPT__ (unless RHS of ##). */
1999 if (src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
2001 const cpp_token *t = padding_token (pfile, src);
2002 unsigned index = expanded_token_index (pfile, macro, src, i);
2003 /* Allocate a virtual location for the padding token and
2004 append the token and its location to BUFF and
2005 VIRT_LOCS. */
2006 tokens_buff_add_token (buff, virt_locs, t,
2007 t->src_loc, t->src_loc,
2008 map, index);
2010 vaopt_start = tokens_buff_last_token_ptr (buff);
2012 else if (vostate == vaopt_state::END)
2014 const cpp_token **start = vaopt_start;
2015 vaopt_start = NULL;
2017 /* Remove any tail padding from inside the __VA_OPT__. */
2018 paste_flag = tokens_buff_last_token_ptr (buff);
2019 while (paste_flag && paste_flag != start
2020 && (*paste_flag)->type == CPP_PADDING)
2022 tokens_buff_remove_last_token (buff);
2023 paste_flag = tokens_buff_last_token_ptr (buff);
2026 if (src->flags & PASTE_LEFT)
2028 /* With a non-empty __VA_OPT__ on the LHS of ##, the last
2029 token should be flagged PASTE_LEFT. */
2030 if (paste_flag && (*paste_flag)->type != CPP_PADDING)
2031 copy_paste_flag (pfile, paste_flag, src);
2033 else
2035 /* Otherwise, avoid paste on RHS, __VA_OPT__(c)d or
2036 __VA_OPT__(c)__VA_OPT__(d). */
2037 const cpp_token *t = &pfile->avoid_paste;
2038 tokens_buff_add_token (buff, virt_locs,
2039 t, t->src_loc, t->src_loc,
2040 NULL, 0);
2043 continue;
2046 if (src->type != CPP_MACRO_ARG)
2048 /* Allocate a virtual location for token SRC, and add that
2049 token and its virtual location into the buffers BUFF and
2050 VIRT_LOCS. */
2051 unsigned index = expanded_token_index (pfile, macro, src, i);
2052 tokens_buff_add_token (buff, virt_locs, src,
2053 src->src_loc, src->src_loc,
2054 map, index);
2055 i += 1;
2056 continue;
2059 paste_flag = 0;
2060 arg = &args[src->val.macro_arg.arg_no - 1];
2061 /* SRC is a macro parameter that we need to replace with its
2062 corresponding argument. So at some point we'll need to
2063 iterate over the tokens of the macro argument and copy them
2064 into the "place" now holding the correspondig macro
2065 parameter. We are going to use the iterator type
2066 macro_argo_token_iter to handle that iterating. The 'if'
2067 below is to initialize the iterator depending on the type of
2068 tokens the macro argument has. It also does some adjustment
2069 related to padding tokens and some pasting corner cases. */
2070 if (src->flags & STRINGIFY_ARG)
2072 arg_tokens_count = 1;
2073 macro_arg_token_iter_init (&from,
2074 CPP_OPTION (pfile,
2075 track_macro_expansion),
2076 MACRO_ARG_TOKEN_STRINGIFIED,
2077 arg, &arg->stringified);
2079 else if (src->flags & PASTE_LEFT)
2081 arg_tokens_count = arg->count;
2082 macro_arg_token_iter_init (&from,
2083 CPP_OPTION (pfile,
2084 track_macro_expansion),
2085 MACRO_ARG_TOKEN_NORMAL,
2086 arg, arg->first);
2088 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
2090 int num_toks;
2091 arg_tokens_count = arg->count;
2092 macro_arg_token_iter_init (&from,
2093 CPP_OPTION (pfile,
2094 track_macro_expansion),
2095 MACRO_ARG_TOKEN_NORMAL,
2096 arg, arg->first);
2098 num_toks = tokens_buff_count (buff);
2100 if (num_toks != 0)
2102 /* So the current parameter token is pasted to the previous
2103 token in the replacement list. Let's look at what
2104 we have as previous and current arguments. */
2106 /* This is the previous argument's token ... */
2107 tmp_token_ptr = tokens_buff_last_token_ptr (buff);
2109 if ((*tmp_token_ptr)->type == CPP_COMMA
2110 && macro->variadic
2111 && src->val.macro_arg.arg_no == macro->paramc)
2113 /* ... which is a comma; and the current parameter
2114 is the last parameter of a variadic function-like
2115 macro. If the argument to the current last
2116 parameter is NULL, then swallow the comma,
2117 otherwise drop the paste flag. */
2118 if (macro_arg_token_iter_get_token (&from) == NULL)
2119 tokens_buff_remove_last_token (buff);
2120 else
2121 paste_flag = tmp_token_ptr;
2123 /* Remove the paste flag if the RHS is a placemarker, unless the
2124 previous emitted token is at the beginning of __VA_OPT__;
2125 placemarkers within __VA_OPT__ are ignored in that case. */
2126 else if (arg_tokens_count == 0
2127 && tmp_token_ptr != vaopt_start)
2128 paste_flag = tmp_token_ptr;
2131 else
2133 arg_tokens_count = arg->expanded_count;
2134 macro_arg_token_iter_init (&from,
2135 CPP_OPTION (pfile,
2136 track_macro_expansion),
2137 MACRO_ARG_TOKEN_EXPANDED,
2138 arg, arg->expanded);
2140 if (last_token_is (buff, vaopt_start))
2142 /* We're expanding an arg at the beginning of __VA_OPT__.
2143 Skip padding. */
2144 while (arg_tokens_count)
2146 const cpp_token *t = macro_arg_token_iter_get_token (&from);
2147 if (t->type != CPP_PADDING)
2148 break;
2149 macro_arg_token_iter_forward (&from);
2150 --arg_tokens_count;
2155 /* Padding on the left of an argument (unless RHS of ##). */
2156 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
2157 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT)
2158 && !last_token_is (buff, vaopt_start))
2160 const cpp_token *t = padding_token (pfile, src);
2161 unsigned index = expanded_token_index (pfile, macro, src, i);
2162 /* Allocate a virtual location for the padding token and
2163 append the token and its location to BUFF and
2164 VIRT_LOCS. */
2165 tokens_buff_add_token (buff, virt_locs, t,
2166 t->src_loc, t->src_loc,
2167 map, index);
2170 if (arg_tokens_count)
2172 /* So now we've got the number of tokens that make up the
2173 argument that is going to replace the current parameter
2174 in the macro's replacement list. */
2175 unsigned int j;
2176 for (j = 0; j < arg_tokens_count; ++j)
2178 /* So if track_macro_exp is < 2, the user wants to
2179 save extra memory while tracking macro expansion
2180 locations. So in that case here is what we do:
2182 Suppose we have #define SQUARE(A) A * A
2184 And then we do SQUARE(2+3)
2186 Then the tokens 2, +, 3, will have the same location,
2187 saying they come from the expansion of the argument
2190 So that means we are going to ignore the COUNT tokens
2191 resulting from the expansion of the current macro
2192 argument. In other words all the ARG_TOKENS_COUNT tokens
2193 resulting from the expansion of the macro argument will
2194 have the index I. Normally, each of those tokens should
2195 have index I+J. */
2196 unsigned token_index = i;
2197 unsigned index;
2198 if (track_macro_exp > 1)
2199 token_index += j;
2201 index = expanded_token_index (pfile, macro, src, token_index);
2202 tokens_buff_add_token (buff, virt_locs,
2203 macro_arg_token_iter_get_token (&from),
2204 macro_arg_token_iter_get_location (&from),
2205 src->src_loc, map, index);
2206 macro_arg_token_iter_forward (&from);
2209 /* With a non-empty argument on the LHS of ##, the last
2210 token should be flagged PASTE_LEFT. */
2211 if (src->flags & PASTE_LEFT)
2212 paste_flag
2213 = (const cpp_token **) tokens_buff_last_token_ptr (buff);
2215 else if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, c99)
2216 && ! macro->syshdr && ! _cpp_in_system_header (pfile))
2218 if (CPP_OPTION (pfile, cplusplus))
2219 cpp_pedwarning (pfile, CPP_W_PEDANTIC,
2220 "invoking macro %s argument %d: "
2221 "empty macro arguments are undefined"
2222 " in ISO C++98",
2223 NODE_NAME (node), src->val.macro_arg.arg_no);
2224 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat))
2225 cpp_pedwarning (pfile,
2226 CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
2227 ? CPP_W_C90_C99_COMPAT : CPP_W_PEDANTIC,
2228 "invoking macro %s argument %d: "
2229 "empty macro arguments are undefined"
2230 " in ISO C90",
2231 NODE_NAME (node), src->val.macro_arg.arg_no);
2233 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
2234 && ! CPP_OPTION (pfile, cplusplus)
2235 && ! macro->syshdr && ! _cpp_in_system_header (pfile))
2236 cpp_warning (pfile, CPP_W_C90_C99_COMPAT,
2237 "invoking macro %s argument %d: "
2238 "empty macro arguments are undefined"
2239 " in ISO C90",
2240 NODE_NAME (node), src->val.macro_arg.arg_no);
2242 /* Avoid paste on RHS (even case count == 0). */
2243 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT)
2244 && !last_token_is (buff, vaopt_start))
2246 const cpp_token *t = &pfile->avoid_paste;
2247 tokens_buff_add_token (buff, virt_locs,
2248 t, t->src_loc, t->src_loc,
2249 NULL, 0);
2252 /* Add a new paste flag, or remove an unwanted one. */
2253 if (paste_flag)
2254 copy_paste_flag (pfile, paste_flag, src);
2256 i += arg_tokens_count;
2259 if (track_macro_exp)
2260 push_extended_tokens_context (pfile, node, buff, virt_locs, first,
2261 tokens_buff_count (buff));
2262 else
2263 push_ptoken_context (pfile, node, buff, first,
2264 tokens_buff_count (buff));
2266 num_macro_tokens_counter += tokens_buff_count (buff);
2269 /* Return a special padding token, with padding inherited from SOURCE. */
2270 static const cpp_token *
2271 padding_token (cpp_reader *pfile, const cpp_token *source)
2273 cpp_token *result = _cpp_temp_token (pfile);
2275 result->type = CPP_PADDING;
2277 /* Data in GCed data structures cannot be made const so far, so we
2278 need a cast here. */
2279 result->val.source = (cpp_token *) source;
2280 result->flags = 0;
2281 return result;
2284 /* Get a new uninitialized context. Create a new one if we cannot
2285 re-use an old one. */
2286 static cpp_context *
2287 next_context (cpp_reader *pfile)
2289 cpp_context *result = pfile->context->next;
2291 if (result == 0)
2293 result = XNEW (cpp_context);
2294 memset (result, 0, sizeof (cpp_context));
2295 result->prev = pfile->context;
2296 result->next = 0;
2297 pfile->context->next = result;
2300 pfile->context = result;
2301 return result;
2304 /* Push a list of pointers to tokens. */
2305 static void
2306 push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
2307 const cpp_token **first, unsigned int count)
2309 cpp_context *context = next_context (pfile);
2311 context->tokens_kind = TOKENS_KIND_INDIRECT;
2312 context->c.macro = macro;
2313 context->buff = buff;
2314 FIRST (context).ptoken = first;
2315 LAST (context).ptoken = first + count;
2318 /* Push a list of tokens.
2320 A NULL macro means that we should continue the current macro
2321 expansion, in essence. That means that if we are currently in a
2322 macro expansion context, we'll make the new pfile->context refer to
2323 the current macro. */
2324 void
2325 _cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
2326 const cpp_token *first, unsigned int count)
2328 cpp_context *context;
2330 if (macro == NULL)
2331 macro = macro_of_context (pfile->context);
2333 context = next_context (pfile);
2334 context->tokens_kind = TOKENS_KIND_DIRECT;
2335 context->c.macro = macro;
2336 context->buff = NULL;
2337 FIRST (context).token = first;
2338 LAST (context).token = first + count;
2341 /* Build a context containing a list of tokens as well as their
2342 virtual locations and push it. TOKENS_BUFF is the buffer that
2343 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
2344 non-NULL, it means that the context owns it, meaning that
2345 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
2346 contains the virtual locations.
2348 A NULL macro means that we should continue the current macro
2349 expansion, in essence. That means that if we are currently in a
2350 macro expansion context, we'll make the new pfile->context refer to
2351 the current macro. */
2352 static void
2353 push_extended_tokens_context (cpp_reader *pfile,
2354 cpp_hashnode *macro,
2355 _cpp_buff *token_buff,
2356 location_t *virt_locs,
2357 const cpp_token **first,
2358 unsigned int count)
2360 cpp_context *context;
2361 macro_context *m;
2363 if (macro == NULL)
2364 macro = macro_of_context (pfile->context);
2366 context = next_context (pfile);
2367 context->tokens_kind = TOKENS_KIND_EXTENDED;
2368 context->buff = token_buff;
2370 m = XNEW (macro_context);
2371 m->macro_node = macro;
2372 m->virt_locs = virt_locs;
2373 m->cur_virt_loc = virt_locs;
2374 context->c.mc = m;
2375 FIRST (context).ptoken = first;
2376 LAST (context).ptoken = first + count;
2379 /* Push a traditional macro's replacement text. */
2380 void
2381 _cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
2382 const uchar *start, size_t len)
2384 cpp_context *context = next_context (pfile);
2386 context->tokens_kind = TOKENS_KIND_DIRECT;
2387 context->c.macro = macro;
2388 context->buff = NULL;
2389 CUR (context) = start;
2390 RLIMIT (context) = start + len;
2391 macro->flags |= NODE_DISABLED;
2394 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
2395 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
2396 non-null (which means that -ftrack-macro-expansion is on),
2397 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
2398 hold the virtual locations of the tokens resulting from macro
2399 expansion. */
2400 static _cpp_buff*
2401 tokens_buff_new (cpp_reader *pfile, size_t len,
2402 location_t **virt_locs)
2404 size_t tokens_size = len * sizeof (cpp_token *);
2405 size_t locs_size = len * sizeof (location_t);
2407 if (virt_locs != NULL)
2408 *virt_locs = XNEWVEC (location_t, locs_size);
2409 return _cpp_get_buff (pfile, tokens_size);
2412 /* Returns the number of tokens contained in a token buffer. The
2413 buffer holds a set of cpp_token*. */
2414 static size_t
2415 tokens_buff_count (_cpp_buff *buff)
2417 return (BUFF_FRONT (buff) - buff->base) / sizeof (cpp_token *);
2420 /* Return a pointer to the last token contained in the token buffer
2421 BUFF. */
2422 static const cpp_token **
2423 tokens_buff_last_token_ptr (_cpp_buff *buff)
2425 if (BUFF_FRONT (buff) == buff->base)
2426 return NULL;
2427 return &((const cpp_token **) BUFF_FRONT (buff))[-1];
2430 /* Remove the last token contained in the token buffer TOKENS_BUFF.
2431 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
2432 containing the virtual locations of the tokens in TOKENS_BUFF; in
2433 which case the function updates that buffer as well. */
2434 static inline void
2435 tokens_buff_remove_last_token (_cpp_buff *tokens_buff)
2438 if (BUFF_FRONT (tokens_buff) > tokens_buff->base)
2439 BUFF_FRONT (tokens_buff) =
2440 (unsigned char *) &((cpp_token **) BUFF_FRONT (tokens_buff))[-1];
2443 /* Insert a token into the token buffer at the position pointed to by
2444 DEST. Note that the buffer is not enlarged so the previous token
2445 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
2446 means -ftrack-macro-expansion is effect; it then points to where to
2447 insert the virtual location of TOKEN. TOKEN is the token to
2448 insert. VIRT_LOC is the virtual location of the token, i.e, the
2449 location possibly encoding its locus across macro expansion. If
2450 TOKEN is an argument of a function-like macro (inside a macro
2451 replacement list), PARM_DEF_LOC is the spelling location of the
2452 macro parameter that TOKEN is replacing, in the replacement list of
2453 the macro. If TOKEN is not an argument of a function-like macro or
2454 if it doesn't come from a macro expansion, then VIRT_LOC can just
2455 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
2456 means TOKEN comes from a macro expansion and MAP is the macro map
2457 associated to the macro. MACRO_TOKEN_INDEX points to the index of
2458 the token in the macro map; it is not considered if MAP is NULL.
2460 Upon successful completion this function returns the a pointer to
2461 the position of the token coming right after the insertion
2462 point. */
2463 static inline const cpp_token **
2464 tokens_buff_put_token_to (const cpp_token **dest,
2465 location_t *virt_loc_dest,
2466 const cpp_token *token,
2467 location_t virt_loc,
2468 location_t parm_def_loc,
2469 const line_map_macro *map,
2470 unsigned int macro_token_index)
2472 location_t macro_loc = virt_loc;
2473 const cpp_token **result;
2475 if (virt_loc_dest)
2477 /* -ftrack-macro-expansion is on. */
2478 if (map)
2479 macro_loc = linemap_add_macro_token (map, macro_token_index,
2480 virt_loc, parm_def_loc);
2481 *virt_loc_dest = macro_loc;
2483 *dest = token;
2484 result = &dest[1];
2486 return result;
2489 /* Adds a token at the end of the tokens contained in BUFFER. Note
2490 that this function doesn't enlarge BUFFER when the number of tokens
2491 reaches BUFFER's size; it aborts in that situation.
2493 TOKEN is the token to append. VIRT_LOC is the virtual location of
2494 the token, i.e, the location possibly encoding its locus across
2495 macro expansion. If TOKEN is an argument of a function-like macro
2496 (inside a macro replacement list), PARM_DEF_LOC is the location of
2497 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2498 from a macro expansion, then VIRT_LOC can just be set to the same
2499 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2500 from a macro expansion and MAP is the macro map associated to the
2501 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2502 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2503 non-null, it means -ftrack-macro-expansion is on; in which case
2504 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2505 array, at the same index as the one of TOKEN in BUFFER. Upon
2506 successful completion this function returns the a pointer to the
2507 position of the token coming right after the insertion point. */
2508 static const cpp_token **
2509 tokens_buff_add_token (_cpp_buff *buffer,
2510 location_t *virt_locs,
2511 const cpp_token *token,
2512 location_t virt_loc,
2513 location_t parm_def_loc,
2514 const line_map_macro *map,
2515 unsigned int macro_token_index)
2517 const cpp_token **result;
2518 location_t *virt_loc_dest = NULL;
2519 unsigned token_index =
2520 (BUFF_FRONT (buffer) - buffer->base) / sizeof (cpp_token *);
2522 /* Abort if we pass the end the buffer. */
2523 if (BUFF_FRONT (buffer) > BUFF_LIMIT (buffer))
2524 abort ();
2526 if (virt_locs != NULL)
2527 virt_loc_dest = &virt_locs[token_index];
2529 result =
2530 tokens_buff_put_token_to ((const cpp_token **) BUFF_FRONT (buffer),
2531 virt_loc_dest, token, virt_loc, parm_def_loc,
2532 map, macro_token_index);
2534 BUFF_FRONT (buffer) = (unsigned char *) result;
2535 return result;
2538 /* Allocate space for the function-like macro argument ARG to store
2539 the tokens resulting from the macro-expansion of the tokens that
2540 make up ARG itself. That space is allocated in ARG->expanded and
2541 needs to be freed using free. */
2542 static void
2543 alloc_expanded_arg_mem (cpp_reader *pfile, macro_arg *arg, size_t capacity)
2545 gcc_checking_assert (arg->expanded == NULL
2546 && arg->expanded_virt_locs == NULL);
2548 arg->expanded = XNEWVEC (const cpp_token *, capacity);
2549 if (CPP_OPTION (pfile, track_macro_expansion))
2550 arg->expanded_virt_locs = XNEWVEC (location_t, capacity);
2554 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2555 tokens. */
2556 static void
2557 ensure_expanded_arg_room (cpp_reader *pfile, macro_arg *arg,
2558 size_t size, size_t *expanded_capacity)
2560 if (size <= *expanded_capacity)
2561 return;
2563 size *= 2;
2565 arg->expanded =
2566 XRESIZEVEC (const cpp_token *, arg->expanded, size);
2567 *expanded_capacity = size;
2569 if (CPP_OPTION (pfile, track_macro_expansion))
2571 if (arg->expanded_virt_locs == NULL)
2572 arg->expanded_virt_locs = XNEWVEC (location_t, size);
2573 else
2574 arg->expanded_virt_locs = XRESIZEVEC (location_t,
2575 arg->expanded_virt_locs,
2576 size);
2580 /* Expand an argument ARG before replacing parameters in a
2581 function-like macro. This works by pushing a context with the
2582 argument's tokens, and then expanding that into a temporary buffer
2583 as if it were a normal part of the token stream. collect_args()
2584 has terminated the argument's tokens with a CPP_EOF so that we know
2585 when we have fully expanded the argument. */
2586 static void
2587 expand_arg (cpp_reader *pfile, macro_arg *arg)
2589 size_t capacity;
2590 bool saved_warn_trad;
2591 bool track_macro_exp_p = CPP_OPTION (pfile, track_macro_expansion);
2593 if (arg->count == 0
2594 || arg->expanded != NULL)
2595 return;
2597 /* Don't warn about funlike macros when pre-expanding. */
2598 saved_warn_trad = CPP_WTRADITIONAL (pfile);
2599 CPP_WTRADITIONAL (pfile) = 0;
2601 /* Loop, reading in the tokens of the argument. */
2602 capacity = 256;
2603 alloc_expanded_arg_mem (pfile, arg, capacity);
2605 if (track_macro_exp_p)
2606 push_extended_tokens_context (pfile, NULL, NULL,
2607 arg->virt_locs,
2608 arg->first,
2609 arg->count + 1);
2610 else
2611 push_ptoken_context (pfile, NULL, NULL,
2612 arg->first, arg->count + 1);
2614 for (;;)
2616 const cpp_token *token;
2617 location_t location;
2619 ensure_expanded_arg_room (pfile, arg, arg->expanded_count + 1,
2620 &capacity);
2622 token = cpp_get_token_1 (pfile, &location);
2624 if (token->type == CPP_EOF)
2625 break;
2627 set_arg_token (arg, token, location,
2628 arg->expanded_count, MACRO_ARG_TOKEN_EXPANDED,
2629 CPP_OPTION (pfile, track_macro_expansion));
2630 arg->expanded_count++;
2633 _cpp_pop_context (pfile);
2635 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
2638 /* Returns the macro associated to the current context if we are in
2639 the context a macro expansion, NULL otherwise. */
2640 static cpp_hashnode*
2641 macro_of_context (cpp_context *context)
2643 if (context == NULL)
2644 return NULL;
2646 return (context->tokens_kind == TOKENS_KIND_EXTENDED)
2647 ? context->c.mc->macro_node
2648 : context->c.macro;
2651 /* Return TRUE iff we are expanding a macro or are about to start
2652 expanding one. If we are effectively expanding a macro, the
2653 function macro_of_context returns a pointer to the macro being
2654 expanded. */
2655 static bool
2656 in_macro_expansion_p (cpp_reader *pfile)
2658 if (pfile == NULL)
2659 return false;
2661 return (pfile->about_to_expand_macro_p
2662 || macro_of_context (pfile->context));
2665 /* Pop the current context off the stack, re-enabling the macro if the
2666 context represented a macro's replacement list. Initially the
2667 context structure was not freed so that we can re-use it later, but
2668 now we do free it to reduce peak memory consumption. */
2669 void
2670 _cpp_pop_context (cpp_reader *pfile)
2672 cpp_context *context = pfile->context;
2674 /* We should not be popping the base context. */
2675 gcc_assert (context != &pfile->base_context);
2677 if (context->c.macro)
2679 cpp_hashnode *macro;
2680 if (context->tokens_kind == TOKENS_KIND_EXTENDED)
2682 macro_context *mc = context->c.mc;
2683 macro = mc->macro_node;
2684 /* If context->buff is set, it means the life time of tokens
2685 is bound to the life time of this context; so we must
2686 free the tokens; that means we must free the virtual
2687 locations of these tokens too. */
2688 if (context->buff && mc->virt_locs)
2690 free (mc->virt_locs);
2691 mc->virt_locs = NULL;
2693 free (mc);
2694 context->c.mc = NULL;
2696 else
2697 macro = context->c.macro;
2699 /* Beware that MACRO can be NULL in cases like when we are
2700 called from expand_arg. In those cases, a dummy context with
2701 tokens is pushed just for the purpose of walking them using
2702 cpp_get_token_1. In that case, no 'macro' field is set into
2703 the dummy context. */
2704 if (macro != NULL
2705 /* Several contiguous macro expansion contexts can be
2706 associated to the same macro; that means it's the same
2707 macro expansion that spans across all these (sub)
2708 contexts. So we should re-enable an expansion-disabled
2709 macro only when we are sure we are really out of that
2710 macro expansion. */
2711 && macro_of_context (context->prev) != macro)
2712 macro->flags &= ~NODE_DISABLED;
2714 if (macro == pfile->top_most_macro_node && context->prev == NULL)
2715 /* We are popping the context of the top-most macro node. */
2716 pfile->top_most_macro_node = NULL;
2719 if (context->buff)
2721 /* Decrease memory peak consumption by freeing the memory used
2722 by the context. */
2723 _cpp_free_buff (context->buff);
2726 pfile->context = context->prev;
2727 /* decrease peak memory consumption by feeing the context. */
2728 pfile->context->next = NULL;
2729 free (context);
2732 /* Return TRUE if we reached the end of the set of tokens stored in
2733 CONTEXT, FALSE otherwise. */
2734 static inline bool
2735 reached_end_of_context (cpp_context *context)
2737 if (context->tokens_kind == TOKENS_KIND_DIRECT)
2738 return FIRST (context).token == LAST (context).token;
2739 else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2740 || context->tokens_kind == TOKENS_KIND_EXTENDED)
2741 return FIRST (context).ptoken == LAST (context).ptoken;
2742 else
2743 abort ();
2746 /* Consume the next token contained in the current context of PFILE,
2747 and return it in *TOKEN. It's "full location" is returned in
2748 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2749 means the location encoding the locus of the token across macro
2750 expansion; otherwise it's just is the "normal" location of the
2751 token which (*TOKEN)->src_loc. */
2752 static inline void
2753 consume_next_token_from_context (cpp_reader *pfile,
2754 const cpp_token ** token,
2755 location_t *location)
2757 cpp_context *c = pfile->context;
2759 if ((c)->tokens_kind == TOKENS_KIND_DIRECT)
2761 *token = FIRST (c).token;
2762 *location = (*token)->src_loc;
2763 FIRST (c).token++;
2765 else if ((c)->tokens_kind == TOKENS_KIND_INDIRECT)
2767 *token = *FIRST (c).ptoken;
2768 *location = (*token)->src_loc;
2769 FIRST (c).ptoken++;
2771 else if ((c)->tokens_kind == TOKENS_KIND_EXTENDED)
2773 macro_context *m = c->c.mc;
2774 *token = *FIRST (c).ptoken;
2775 if (m->virt_locs)
2777 *location = *m->cur_virt_loc;
2778 m->cur_virt_loc++;
2780 else
2781 *location = (*token)->src_loc;
2782 FIRST (c).ptoken++;
2784 else
2785 abort ();
2788 /* In the traditional mode of the preprocessor, if we are currently in
2789 a directive, the location of a token must be the location of the
2790 start of the directive line. This function returns the proper
2791 location if we are in the traditional mode, and just returns
2792 LOCATION otherwise. */
2794 static inline location_t
2795 maybe_adjust_loc_for_trad_cpp (cpp_reader *pfile, location_t location)
2797 if (CPP_OPTION (pfile, traditional))
2799 if (pfile->state.in_directive)
2800 return pfile->directive_line;
2802 return location;
2805 /* Routine to get a token as well as its location.
2807 Macro expansions and directives are transparently handled,
2808 including entering included files. Thus tokens are post-macro
2809 expansion, and after any intervening directives. External callers
2810 see CPP_EOF only at EOF. Internal callers also see it when meeting
2811 a directive inside a macro call, when at the end of a directive and
2812 state.in_directive is still 1, and at the end of argument
2813 pre-expansion.
2815 LOC is an out parameter; *LOC is set to the location "as expected
2816 by the user". Please read the comment of
2817 cpp_get_token_with_location to learn more about the meaning of this
2818 location. */
2819 static const cpp_token*
2820 cpp_get_token_1 (cpp_reader *pfile, location_t *location)
2822 const cpp_token *result;
2823 /* This token is a virtual token that either encodes a location
2824 related to macro expansion or a spelling location. */
2825 location_t virt_loc = 0;
2826 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2827 to functions that push macro contexts. So let's save it so that
2828 we can restore it when we are about to leave this routine. */
2829 bool saved_about_to_expand_macro = pfile->about_to_expand_macro_p;
2831 for (;;)
2833 cpp_hashnode *node;
2834 cpp_context *context = pfile->context;
2836 /* Context->prev == 0 <=> base context. */
2837 if (!context->prev)
2839 result = _cpp_lex_token (pfile);
2840 virt_loc = result->src_loc;
2842 else if (!reached_end_of_context (context))
2844 consume_next_token_from_context (pfile, &result,
2845 &virt_loc);
2846 if (result->flags & PASTE_LEFT)
2848 paste_all_tokens (pfile, result);
2849 if (pfile->state.in_directive)
2850 continue;
2851 result = padding_token (pfile, result);
2852 goto out;
2855 else
2857 if (pfile->context->c.macro)
2858 ++num_expanded_macros_counter;
2859 _cpp_pop_context (pfile);
2860 if (pfile->state.in_directive)
2861 continue;
2862 result = &pfile->avoid_paste;
2863 goto out;
2866 if (pfile->state.in_directive && result->type == CPP_COMMENT)
2867 continue;
2869 if (result->type != CPP_NAME)
2870 break;
2872 node = result->val.node.node;
2874 if (node->type == NT_VOID || (result->flags & NO_EXPAND))
2875 break;
2877 if (!(node->flags & NODE_USED)
2878 && node->type == NT_USER_MACRO
2879 && !node->value.macro
2880 && !cpp_get_deferred_macro (pfile, node, result->src_loc))
2881 break;
2883 if (!(node->flags & NODE_DISABLED))
2885 int ret = 0;
2886 /* If not in a macro context, and we're going to start an
2887 expansion, record the location and the top level macro
2888 about to be expanded. */
2889 if (!in_macro_expansion_p (pfile))
2891 pfile->invocation_location = result->src_loc;
2892 pfile->top_most_macro_node = node;
2894 if (pfile->state.prevent_expansion)
2895 break;
2897 /* Conditional macros require that a predicate be evaluated
2898 first. */
2899 if ((node->flags & NODE_CONDITIONAL) != 0)
2901 if (pfile->cb.macro_to_expand)
2903 bool whitespace_after;
2904 const cpp_token *peek_tok = cpp_peek_token (pfile, 0);
2906 whitespace_after = (peek_tok->type == CPP_PADDING
2907 || (peek_tok->flags & PREV_WHITE));
2908 node = pfile->cb.macro_to_expand (pfile, result);
2909 if (node)
2910 ret = enter_macro_context (pfile, node, result, virt_loc);
2911 else if (whitespace_after)
2913 /* If macro_to_expand hook returned NULL and it
2914 ate some tokens, see if we don't need to add
2915 a padding token in between this and the
2916 next token. */
2917 peek_tok = cpp_peek_token (pfile, 0);
2918 if (peek_tok->type != CPP_PADDING
2919 && (peek_tok->flags & PREV_WHITE) == 0)
2920 _cpp_push_token_context (pfile, NULL,
2921 padding_token (pfile,
2922 peek_tok), 1);
2926 else
2927 ret = enter_macro_context (pfile, node, result, virt_loc);
2928 if (ret)
2930 if (pfile->state.in_directive || ret == 2)
2931 continue;
2932 result = padding_token (pfile, result);
2933 goto out;
2936 else
2938 /* Flag this token as always unexpandable. FIXME: move this
2939 to collect_args()?. */
2940 cpp_token *t = _cpp_temp_token (pfile);
2941 t->type = result->type;
2942 t->flags = result->flags | NO_EXPAND;
2943 t->val = result->val;
2944 result = t;
2947 break;
2950 out:
2951 if (location != NULL)
2953 if (virt_loc == 0)
2954 virt_loc = result->src_loc;
2955 *location = virt_loc;
2957 if (!CPP_OPTION (pfile, track_macro_expansion)
2958 && macro_of_context (pfile->context) != NULL)
2959 /* We are in a macro expansion context, are not tracking
2960 virtual location, but were asked to report the location
2961 of the expansion point of the macro being expanded. */
2962 *location = pfile->invocation_location;
2964 *location = maybe_adjust_loc_for_trad_cpp (pfile, *location);
2967 pfile->about_to_expand_macro_p = saved_about_to_expand_macro;
2969 if (pfile->state.directive_file_token
2970 && !pfile->state.parsing_args
2971 && !(result->type == CPP_PADDING || result->type == CPP_COMMENT)
2972 && !(15 & --pfile->state.directive_file_token))
2974 /* Do header-name frobbery. Concatenate < ... > as approprate.
2975 Do header search if needed, and finally drop the outer <> or
2976 "". */
2977 pfile->state.angled_headers = false;
2979 /* Do angle-header reconstitution. Then do include searching.
2980 We'll always end up with a ""-quoted header-name in that
2981 case. If searching finds nothing, we emit a diagnostic and
2982 an empty string. */
2983 size_t len = 0;
2984 char *fname = NULL;
2986 cpp_token *tmp = _cpp_temp_token (pfile);
2987 *tmp = *result;
2989 tmp->type = CPP_HEADER_NAME;
2990 bool need_search = !pfile->state.directive_file_token;
2991 pfile->state.directive_file_token = 0;
2993 bool angle = result->type != CPP_STRING;
2994 if (result->type == CPP_HEADER_NAME
2995 || (result->type == CPP_STRING && result->val.str.text[0] != 'R'))
2997 len = result->val.str.len - 2;
2998 fname = XNEWVEC (char, len + 1);
2999 memcpy (fname, result->val.str.text + 1, len);
3000 fname[len] = 0;
3002 else if (result->type == CPP_LESS)
3003 fname = _cpp_bracket_include (pfile);
3005 if (fname)
3007 /* We have a header-name. Look it up. This will emit an
3008 unfound diagnostic. Canonicalize the found name. */
3009 const char *found = fname;
3011 if (need_search)
3013 found = _cpp_find_header_unit (pfile, fname, angle, tmp->src_loc);
3014 if (!found)
3015 found = "";
3016 len = strlen (found);
3018 /* Force a leading './' if it's not absolute. */
3019 bool dotme = (found[0] == '.' ? !IS_DIR_SEPARATOR (found[1])
3020 : found[0] && !IS_ABSOLUTE_PATH (found));
3022 if (BUFF_ROOM (pfile->u_buff) < len + 1 + dotme * 2)
3023 _cpp_extend_buff (pfile, &pfile->u_buff, len + 1 + dotme * 2);
3024 unsigned char *buf = BUFF_FRONT (pfile->u_buff);
3025 size_t pos = 0;
3027 if (dotme)
3029 buf[pos++] = '.';
3030 /* Apparently '/' is unconditional. */
3031 buf[pos++] = '/';
3033 memcpy (&buf[pos], found, len);
3034 pos += len;
3035 buf[pos] = 0;
3037 tmp->val.str.len = pos;
3038 tmp->val.str.text = buf;
3040 tmp->type = CPP_HEADER_NAME;
3041 XDELETEVEC (fname);
3043 result = tmp;
3047 return result;
3050 /* External routine to get a token. Also used nearly everywhere
3051 internally, except for places where we know we can safely call
3052 _cpp_lex_token directly, such as lexing a directive name.
3054 Macro expansions and directives are transparently handled,
3055 including entering included files. Thus tokens are post-macro
3056 expansion, and after any intervening directives. External callers
3057 see CPP_EOF only at EOF. Internal callers also see it when meeting
3058 a directive inside a macro call, when at the end of a directive and
3059 state.in_directive is still 1, and at the end of argument
3060 pre-expansion. */
3061 const cpp_token *
3062 cpp_get_token (cpp_reader *pfile)
3064 return cpp_get_token_1 (pfile, NULL);
3067 /* Like cpp_get_token, but also returns a virtual token location
3068 separate from the spelling location carried by the returned token.
3070 LOC is an out parameter; *LOC is set to the location "as expected
3071 by the user". This matters when a token results from macro
3072 expansion; in that case the token's spelling location indicates the
3073 locus of the token in the definition of the macro but *LOC
3074 virtually encodes all the other meaningful locuses associated to
3075 the token.
3077 What? virtual location? Yes, virtual location.
3079 If the token results from macro expansion and if macro expansion
3080 location tracking is enabled its virtual location encodes (at the
3081 same time):
3083 - the spelling location of the token
3085 - the locus of the macro expansion point
3087 - the locus of the point where the token got instantiated as part
3088 of the macro expansion process.
3090 You have to use the linemap API to get the locus you are interested
3091 in from a given virtual location.
3093 Note however that virtual locations are not necessarily ordered for
3094 relations '<' and '>'. One must use the function
3095 linemap_location_before_p instead of using the relational operator
3096 '<'.
3098 If macro expansion tracking is off and if the token results from
3099 macro expansion the virtual location is the expansion point of the
3100 macro that got expanded.
3102 When the token doesn't result from macro expansion, the virtual
3103 location is just the same thing as its spelling location. */
3105 const cpp_token *
3106 cpp_get_token_with_location (cpp_reader *pfile, location_t *loc)
3108 return cpp_get_token_1 (pfile, loc);
3111 /* Returns true if we're expanding an object-like macro that was
3112 defined in a system header. Just checks the macro at the top of
3113 the stack. Used for diagnostic suppression. */
3115 cpp_sys_macro_p (cpp_reader *pfile)
3117 cpp_hashnode *node = NULL;
3119 if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
3120 node = pfile->context->c.mc->macro_node;
3121 else
3122 node = pfile->context->c.macro;
3124 return node && node->value.macro && node->value.macro->syshdr;
3127 /* Read each token in, until end of the current file. Directives are
3128 transparently processed. */
3129 void
3130 cpp_scan_nooutput (cpp_reader *pfile)
3132 /* Request a CPP_EOF token at the end of this file, rather than
3133 transparently continuing with the including file. */
3134 pfile->buffer->return_at_eof = true;
3136 pfile->state.discarding_output++;
3137 pfile->state.prevent_expansion++;
3139 if (CPP_OPTION (pfile, traditional))
3140 while (_cpp_read_logical_line_trad (pfile))
3142 else
3143 while (cpp_get_token (pfile)->type != CPP_EOF)
3146 pfile->state.discarding_output--;
3147 pfile->state.prevent_expansion--;
3150 /* Step back one or more tokens obtained from the lexer. */
3151 void
3152 _cpp_backup_tokens_direct (cpp_reader *pfile, unsigned int count)
3154 pfile->lookaheads += count;
3155 while (count--)
3157 pfile->cur_token--;
3158 if (pfile->cur_token == pfile->cur_run->base
3159 /* Possible with -fpreprocessed and no leading #line. */
3160 && pfile->cur_run->prev != NULL)
3162 pfile->cur_run = pfile->cur_run->prev;
3163 pfile->cur_token = pfile->cur_run->limit;
3168 /* Step back one (or more) tokens. Can only step back more than 1 if
3169 they are from the lexer, and not from macro expansion. */
3170 void
3171 _cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
3173 if (pfile->context->prev == NULL)
3174 _cpp_backup_tokens_direct (pfile, count);
3175 else
3177 if (count != 1)
3178 abort ();
3179 if (pfile->context->tokens_kind == TOKENS_KIND_DIRECT)
3180 FIRST (pfile->context).token--;
3181 else if (pfile->context->tokens_kind == TOKENS_KIND_INDIRECT)
3182 FIRST (pfile->context).ptoken--;
3183 else if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
3185 FIRST (pfile->context).ptoken--;
3186 if (pfile->context->c.macro)
3188 macro_context *m = pfile->context->c.mc;
3189 m->cur_virt_loc--;
3190 gcc_checking_assert (m->cur_virt_loc >= m->virt_locs);
3192 else
3193 abort ();
3195 else
3196 abort ();
3200 /* #define directive parsing and handling. */
3202 /* Returns true if a macro redefinition warning is required. */
3203 static bool
3204 warn_of_redefinition (cpp_reader *pfile, cpp_hashnode *node,
3205 const cpp_macro *macro2)
3207 /* Some redefinitions need to be warned about regardless. */
3208 if (node->flags & NODE_WARN)
3209 return true;
3211 /* Suppress warnings for builtins that lack the NODE_WARN flag,
3212 unless Wbuiltin-macro-redefined. */
3213 if (cpp_builtin_macro_p (node))
3214 return CPP_OPTION (pfile, warn_builtin_macro_redefined);
3216 /* Redefinitions of conditional (context-sensitive) macros, on
3217 the other hand, must be allowed silently. */
3218 if (node->flags & NODE_CONDITIONAL)
3219 return false;
3221 if (cpp_macro *macro1 = get_deferred_or_lazy_macro (pfile, node, macro2->line))
3222 return cpp_compare_macros (macro1, macro2);
3223 return false;
3226 /* Return TRUE if MACRO1 and MACRO2 differ. */
3228 bool
3229 cpp_compare_macros (const cpp_macro *macro1, const cpp_macro *macro2)
3231 /* Redefinition of a macro is allowed if and only if the old and new
3232 definitions are the same. (6.10.3 paragraph 2). */
3234 /* Don't check count here as it can be different in valid
3235 traditional redefinitions with just whitespace differences. */
3236 if (macro1->paramc != macro2->paramc
3237 || macro1->fun_like != macro2->fun_like
3238 || macro1->variadic != macro2->variadic)
3239 return true;
3241 /* Check parameter spellings. */
3242 for (unsigned i = macro1->paramc; i--; )
3243 if (macro1->parm.params[i] != macro2->parm.params[i])
3244 return true;
3246 /* Check the replacement text or tokens. */
3247 if (macro1->kind == cmk_traditional)
3248 return _cpp_expansions_different_trad (macro1, macro2);
3250 if (macro1->count != macro2->count)
3251 return true;
3253 for (unsigned i= macro1->count; i--; )
3254 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
3255 return true;
3257 return false;
3260 /* Free the definition of hashnode H. */
3261 void
3262 _cpp_free_definition (cpp_hashnode *h)
3264 /* Macros and assertions no longer have anything to free. */
3265 h->type = NT_VOID;
3266 h->value.answers = NULL;
3267 h->flags &= ~(NODE_DISABLED | NODE_USED);
3270 /* Save parameter NODE (spelling SPELLING) to the parameter list of
3271 macro MACRO. Returns true on success, false on failure. */
3272 bool
3273 _cpp_save_parameter (cpp_reader *pfile, unsigned n, cpp_hashnode *node,
3274 cpp_hashnode *spelling)
3276 /* Constraint 6.10.3.6 - duplicate parameter names. */
3277 if (node->type == NT_MACRO_ARG)
3279 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
3280 NODE_NAME (node));
3281 return false;
3284 unsigned len = (n + 1) * sizeof (struct macro_arg_saved_data);
3285 if (len > pfile->macro_buffer_len)
3287 pfile->macro_buffer
3288 = XRESIZEVEC (unsigned char, pfile->macro_buffer, len);
3289 pfile->macro_buffer_len = len;
3292 macro_arg_saved_data *saved = (macro_arg_saved_data *)pfile->macro_buffer;
3293 saved[n].canonical_node = node;
3294 saved[n].value = node->value;
3295 saved[n].type = node->type;
3297 void *base = _cpp_reserve_room (pfile, n * sizeof (cpp_hashnode *),
3298 sizeof (cpp_hashnode *));
3299 ((cpp_hashnode **)base)[n] = spelling;
3301 /* Morph into a macro arg. */
3302 node->type = NT_MACRO_ARG;
3303 /* Index is 1 based. */
3304 node->value.arg_index = n + 1;
3306 return true;
3309 /* Restore the parameters to their previous state. */
3310 void
3311 _cpp_unsave_parameters (cpp_reader *pfile, unsigned n)
3313 /* Clear the fast argument lookup indices. */
3314 while (n--)
3316 struct macro_arg_saved_data *save =
3317 &((struct macro_arg_saved_data *) pfile->macro_buffer)[n];
3319 struct cpp_hashnode *node = save->canonical_node;
3320 node->type = save->type;
3321 node->value = save->value;
3325 /* Check the syntax of the parameters in a MACRO definition. Return
3326 false on failure. Set *N_PTR and *VARADIC_PTR as appropriate.
3327 '(' ')'
3328 '(' parm-list ',' last-parm ')'
3329 '(' last-parm ')'
3330 parm-list: name
3331 | parm-list, name
3332 last-parm: name
3333 | name '...'
3334 | '...'
3337 static bool
3338 parse_params (cpp_reader *pfile, unsigned *n_ptr, bool *varadic_ptr)
3340 unsigned nparms = 0;
3341 bool ok = false;
3343 for (bool prev_ident = false;;)
3345 const cpp_token *token = _cpp_lex_token (pfile);
3347 switch (token->type)
3349 case CPP_COMMENT:
3350 /* Allow/ignore comments in parameter lists if we are
3351 preserving comments in macro expansions. */
3352 if (!CPP_OPTION (pfile, discard_comments_in_macro_exp))
3353 break;
3355 /* FALLTHRU */
3356 default:
3357 bad:
3359 const char *const msgs[5] =
3361 N_("expected parameter name, found \"%s\""),
3362 N_("expected ',' or ')', found \"%s\""),
3363 N_("expected parameter name before end of line"),
3364 N_("expected ')' before end of line"),
3365 N_("expected ')' after \"...\"")
3367 unsigned ix = prev_ident;
3368 const unsigned char *as_text = NULL;
3369 if (*varadic_ptr)
3370 ix = 4;
3371 else if (token->type == CPP_EOF)
3372 ix += 2;
3373 else
3374 as_text = cpp_token_as_text (pfile, token);
3375 cpp_error (pfile, CPP_DL_ERROR, msgs[ix], as_text);
3377 goto out;
3379 case CPP_NAME:
3380 if (prev_ident || *varadic_ptr)
3381 goto bad;
3382 prev_ident = true;
3384 if (!_cpp_save_parameter (pfile, nparms, token->val.node.node,
3385 token->val.node.spelling))
3386 goto out;
3387 nparms++;
3388 break;
3390 case CPP_CLOSE_PAREN:
3391 if (prev_ident || !nparms || *varadic_ptr)
3393 ok = true;
3394 goto out;
3397 /* FALLTHRU */
3398 case CPP_COMMA:
3399 if (!prev_ident || *varadic_ptr)
3400 goto bad;
3401 prev_ident = false;
3402 break;
3404 case CPP_ELLIPSIS:
3405 if (*varadic_ptr)
3406 goto bad;
3407 *varadic_ptr = true;
3408 if (!prev_ident)
3410 /* An ISO bare ellipsis. */
3411 _cpp_save_parameter (pfile, nparms,
3412 pfile->spec_nodes.n__VA_ARGS__,
3413 pfile->spec_nodes.n__VA_ARGS__);
3414 nparms++;
3415 pfile->state.va_args_ok = 1;
3416 if (! CPP_OPTION (pfile, c99)
3417 && CPP_OPTION (pfile, cpp_pedantic)
3418 && CPP_OPTION (pfile, warn_variadic_macros))
3419 cpp_pedwarning
3420 (pfile, CPP_W_VARIADIC_MACROS,
3421 CPP_OPTION (pfile, cplusplus)
3422 ? N_("anonymous variadic macros were introduced in C++11")
3423 : N_("anonymous variadic macros were introduced in C99"));
3424 else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
3425 && ! CPP_OPTION (pfile, cplusplus))
3426 cpp_error (pfile, CPP_DL_WARNING,
3427 "anonymous variadic macros were introduced in C99");
3429 else if (CPP_OPTION (pfile, cpp_pedantic)
3430 && CPP_OPTION (pfile, warn_variadic_macros))
3431 cpp_pedwarning (pfile, CPP_W_VARIADIC_MACROS,
3432 CPP_OPTION (pfile, cplusplus)
3433 ? N_("ISO C++ does not permit named variadic macros")
3434 : N_("ISO C does not permit named variadic macros"));
3435 break;
3439 out:
3440 *n_ptr = nparms;
3442 return ok;
3445 /* Lex a token from the expansion of MACRO, but mark parameters as we
3446 find them and warn of traditional stringification. */
3447 static cpp_macro *
3448 lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
3450 macro = (cpp_macro *)_cpp_reserve_room (pfile,
3451 sizeof (cpp_macro) - sizeof (cpp_token)
3452 + macro->count * sizeof (cpp_token),
3453 sizeof (cpp_token));
3454 cpp_token *saved_cur_token = pfile->cur_token;
3455 pfile->cur_token = &macro->exp.tokens[macro->count];
3456 cpp_token *token = _cpp_lex_direct (pfile);
3457 pfile->cur_token = saved_cur_token;
3459 /* Is this a parameter? */
3460 if (token->type == CPP_NAME && token->val.node.node->type == NT_MACRO_ARG)
3462 /* Morph into a parameter reference. */
3463 cpp_hashnode *spelling = token->val.node.spelling;
3464 token->type = CPP_MACRO_ARG;
3465 token->val.macro_arg.arg_no = token->val.node.node->value.arg_index;
3466 token->val.macro_arg.spelling = spelling;
3468 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
3469 && (token->type == CPP_STRING || token->type == CPP_CHAR))
3470 check_trad_stringification (pfile, macro, &token->val.str);
3472 return macro;
3475 static cpp_macro *
3476 create_iso_definition (cpp_reader *pfile)
3478 bool following_paste_op = false;
3479 const char *paste_op_error_msg =
3480 N_("'##' cannot appear at either end of a macro expansion");
3481 unsigned int num_extra_tokens = 0;
3482 unsigned nparms = 0;
3483 cpp_hashnode **params = NULL;
3484 bool varadic = false;
3485 bool ok = false;
3486 cpp_macro *macro = NULL;
3488 /* Look at the first token, to see if this is a function-like
3489 macro. */
3490 cpp_token first;
3491 cpp_token *saved_cur_token = pfile->cur_token;
3492 pfile->cur_token = &first;
3493 cpp_token *token = _cpp_lex_direct (pfile);
3494 pfile->cur_token = saved_cur_token;
3496 if (token->flags & PREV_WHITE)
3497 /* Preceeded by space, must be part of expansion. */;
3498 else if (token->type == CPP_OPEN_PAREN)
3500 /* An open-paren, get a parameter list. */
3501 if (!parse_params (pfile, &nparms, &varadic))
3502 goto out;
3504 params = (cpp_hashnode **)_cpp_commit_buff
3505 (pfile, sizeof (cpp_hashnode *) * nparms);
3506 token = NULL;
3508 else if (token->type != CPP_EOF
3509 && !(token->type == CPP_COMMENT
3510 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp)))
3512 /* While ISO C99 requires whitespace before replacement text
3513 in a macro definition, ISO C90 with TC1 allows characters
3514 from the basic source character set there. */
3515 if (CPP_OPTION (pfile, c99))
3516 cpp_error (pfile, CPP_DL_PEDWARN,
3517 CPP_OPTION (pfile, cplusplus)
3518 ? N_("ISO C++11 requires whitespace after the macro name")
3519 : N_("ISO C99 requires whitespace after the macro name"));
3520 else
3522 enum cpp_diagnostic_level warntype = CPP_DL_WARNING;
3523 switch (token->type)
3525 case CPP_ATSIGN:
3526 case CPP_AT_NAME:
3527 case CPP_OBJC_STRING:
3528 /* '@' is not in basic character set. */
3529 warntype = CPP_DL_PEDWARN;
3530 break;
3531 case CPP_OTHER:
3532 /* Basic character set sans letters, digits and _. */
3533 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
3534 token->val.str.text[0]) == NULL)
3535 warntype = CPP_DL_PEDWARN;
3536 break;
3537 default:
3538 /* All other tokens start with a character from basic
3539 character set. */
3540 break;
3542 cpp_error (pfile, warntype,
3543 "missing whitespace after the macro name");
3547 macro = _cpp_new_macro (pfile, cmk_macro,
3548 _cpp_reserve_room (pfile, 0, sizeof (cpp_macro)));
3550 if (!token)
3552 macro->variadic = varadic;
3553 macro->paramc = nparms;
3554 macro->parm.params = params;
3555 macro->fun_like = true;
3557 else
3559 /* Preserve the token we peeked, there is already a single slot for it. */
3560 macro->exp.tokens[0] = *token;
3561 token = &macro->exp.tokens[0];
3562 macro->count = 1;
3565 for (vaopt_state vaopt_tracker (pfile, macro->variadic, NULL);; token = NULL)
3567 if (!token)
3569 macro = lex_expansion_token (pfile, macro);
3570 token = &macro->exp.tokens[macro->count++];
3573 /* Check the stringifying # constraint 6.10.3.2.1 of
3574 function-like macros when lexing the subsequent token. */
3575 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
3577 if (token->type == CPP_MACRO_ARG)
3579 if (token->flags & PREV_WHITE)
3580 token->flags |= SP_PREV_WHITE;
3581 if (token[-1].flags & DIGRAPH)
3582 token->flags |= SP_DIGRAPH;
3583 token->flags &= ~PREV_WHITE;
3584 token->flags |= STRINGIFY_ARG;
3585 token->flags |= token[-1].flags & PREV_WHITE;
3586 token[-1] = token[0];
3587 macro->count--;
3589 /* Let assembler get away with murder. */
3590 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
3592 cpp_error (pfile, CPP_DL_ERROR,
3593 "'#' is not followed by a macro parameter");
3594 goto out;
3598 if (token->type == CPP_EOF)
3600 /* Paste operator constraint 6.10.3.3.1:
3601 Token-paste ##, can appear in both object-like and
3602 function-like macros, but not at the end. */
3603 if (following_paste_op)
3605 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
3606 goto out;
3608 if (!vaopt_tracker.completed ())
3609 goto out;
3610 break;
3613 /* Paste operator constraint 6.10.3.3.1. */
3614 if (token->type == CPP_PASTE)
3616 /* Token-paste ##, can appear in both object-like and
3617 function-like macros, but not at the beginning. */
3618 if (macro->count == 1)
3620 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
3621 goto out;
3624 if (following_paste_op)
3626 /* Consecutive paste operators. This one will be moved
3627 to the end. */
3628 num_extra_tokens++;
3629 token->val.token_no = macro->count - 1;
3631 else
3633 /* Drop the paste operator. */
3634 --macro->count;
3635 token[-1].flags |= PASTE_LEFT;
3636 if (token->flags & DIGRAPH)
3637 token[-1].flags |= SP_DIGRAPH;
3638 if (token->flags & PREV_WHITE)
3639 token[-1].flags |= SP_PREV_WHITE;
3641 following_paste_op = true;
3643 else
3644 following_paste_op = false;
3646 if (vaopt_tracker.update (token) == vaopt_state::ERROR)
3647 goto out;
3650 /* We're committed to winning now. */
3651 ok = true;
3653 /* Don't count the CPP_EOF. */
3654 macro->count--;
3656 macro = (cpp_macro *)_cpp_commit_buff
3657 (pfile, sizeof (cpp_macro) - sizeof (cpp_token)
3658 + sizeof (cpp_token) * macro->count);
3660 /* Clear whitespace on first token. */
3661 if (macro->count)
3662 macro->exp.tokens[0].flags &= ~PREV_WHITE;
3664 if (num_extra_tokens)
3666 /* Place second and subsequent ## or %:%: tokens in sequences of
3667 consecutive such tokens at the end of the list to preserve
3668 information about where they appear, how they are spelt and
3669 whether they are preceded by whitespace without otherwise
3670 interfering with macro expansion. Remember, this is
3671 extremely rare, so efficiency is not a priority. */
3672 cpp_token *temp = (cpp_token *)_cpp_reserve_room
3673 (pfile, 0, num_extra_tokens * sizeof (cpp_token));
3674 unsigned extra_ix = 0, norm_ix = 0;
3675 cpp_token *exp = macro->exp.tokens;
3676 for (unsigned ix = 0; ix != macro->count; ix++)
3677 if (exp[ix].type == CPP_PASTE)
3678 temp[extra_ix++] = exp[ix];
3679 else
3680 exp[norm_ix++] = exp[ix];
3681 memcpy (&exp[norm_ix], temp, num_extra_tokens * sizeof (cpp_token));
3683 /* Record there are extra tokens. */
3684 macro->extra_tokens = 1;
3687 out:
3688 pfile->state.va_args_ok = 0;
3689 _cpp_unsave_parameters (pfile, nparms);
3691 return ok ? macro : NULL;
3694 cpp_macro *
3695 _cpp_new_macro (cpp_reader *pfile, cpp_macro_kind kind, void *placement)
3697 cpp_macro *macro = (cpp_macro *) placement;
3699 /* Zero init all the fields. This'll tell the compiler know all the
3700 following inits are writing a virgin object. */
3701 memset (macro, 0, offsetof (cpp_macro, exp));
3703 macro->line = pfile->directive_line;
3704 macro->parm.params = 0;
3705 macro->lazy = 0;
3706 macro->paramc = 0;
3707 macro->variadic = 0;
3708 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
3709 macro->count = 0;
3710 macro->fun_like = 0;
3711 macro->imported_p = false;
3712 macro->extra_tokens = 0;
3713 /* To suppress some diagnostics. */
3714 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
3716 macro->kind = kind;
3718 return macro;
3721 /* Parse a macro and save its expansion. Returns nonzero on success. */
3722 bool
3723 _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
3725 cpp_macro *macro;
3727 if (CPP_OPTION (pfile, traditional))
3728 macro = _cpp_create_trad_definition (pfile);
3729 else
3730 macro = create_iso_definition (pfile);
3732 if (!macro)
3733 return false;
3735 if (cpp_macro_p (node))
3737 if (CPP_OPTION (pfile, warn_unused_macros))
3738 _cpp_warn_if_unused_macro (pfile, node, NULL);
3740 if (warn_of_redefinition (pfile, node, macro))
3742 const enum cpp_warning_reason reason
3743 = (cpp_builtin_macro_p (node) && !(node->flags & NODE_WARN))
3744 ? CPP_W_BUILTIN_MACRO_REDEFINED : CPP_W_NONE;
3746 bool warned =
3747 cpp_pedwarning_with_line (pfile, reason,
3748 pfile->directive_line, 0,
3749 "\"%s\" redefined", NODE_NAME (node));
3751 if (warned && cpp_user_macro_p (node))
3752 cpp_error_with_line (pfile, CPP_DL_NOTE,
3753 node->value.macro->line, 0,
3754 "this is the location of the previous definition");
3756 _cpp_free_definition (node);
3759 /* Enter definition in hash table. */
3760 node->type = NT_USER_MACRO;
3761 node->value.macro = macro;
3762 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
3763 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
3764 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3765 in the C standard, as something that one must use in C++.
3766 However DR#593 and C++11 indicate that they play no role in C++.
3767 We special-case them anyway. */
3768 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
3769 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
3770 node->flags |= NODE_WARN;
3772 /* If user defines one of the conditional macros, remove the
3773 conditional flag */
3774 node->flags &= ~NODE_CONDITIONAL;
3776 return true;
3779 extern void
3780 cpp_define_lazily (cpp_reader *pfile, cpp_hashnode *node, unsigned num)
3782 cpp_macro *macro = node->value.macro;
3784 gcc_checking_assert (pfile->cb.user_lazy_macro && macro && num < UCHAR_MAX);
3786 macro->lazy = num + 1;
3789 /* NODE is a deferred macro, resolve it, returning the definition
3790 (which may be NULL). */
3791 cpp_macro *
3792 cpp_get_deferred_macro (cpp_reader *pfile, cpp_hashnode *node,
3793 location_t loc)
3795 gcc_checking_assert (node->type == NT_USER_MACRO);
3797 node->value.macro = pfile->cb.user_deferred_macro (pfile, loc, node);
3799 if (!node->value.macro)
3800 node->type = NT_VOID;
3802 return node->value.macro;
3805 static cpp_macro *
3806 get_deferred_or_lazy_macro (cpp_reader *pfile, cpp_hashnode *node,
3807 location_t loc)
3809 cpp_macro *macro = node->value.macro;
3810 if (!macro)
3812 macro = cpp_get_deferred_macro (pfile, node, loc);
3813 gcc_checking_assert (!macro || !macro->lazy);
3815 else if (macro->lazy)
3817 pfile->cb.user_lazy_macro (pfile, macro, macro->lazy - 1);
3818 macro->lazy = 0;
3821 return macro;
3824 /* Notify the use of NODE in a macro-aware context (i.e. expanding it,
3825 or testing its existance). Also applies any lazy definition.
3826 Return FALSE if the macro isn't really there. */
3828 extern bool
3829 _cpp_notify_macro_use (cpp_reader *pfile, cpp_hashnode *node,
3830 location_t loc)
3832 node->flags |= NODE_USED;
3833 switch (node->type)
3835 case NT_USER_MACRO:
3836 if (!get_deferred_or_lazy_macro (pfile, node, loc))
3837 return false;
3838 /* FALLTHROUGH. */
3840 case NT_BUILTIN_MACRO:
3841 if (pfile->cb.used_define)
3842 pfile->cb.used_define (pfile, loc, node);
3843 break;
3845 case NT_VOID:
3846 if (pfile->cb.used_undef)
3847 pfile->cb.used_undef (pfile, loc, node);
3848 break;
3850 default:
3851 abort ();
3854 return true;
3857 /* Warn if a token in STRING matches one of a function-like MACRO's
3858 parameters. */
3859 static void
3860 check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
3861 const cpp_string *string)
3863 unsigned int i, len;
3864 const uchar *p, *q, *limit;
3866 /* Loop over the string. */
3867 limit = string->text + string->len - 1;
3868 for (p = string->text + 1; p < limit; p = q)
3870 /* Find the start of an identifier. */
3871 while (p < limit && !is_idstart (*p))
3872 p++;
3874 /* Find the end of the identifier. */
3875 q = p;
3876 while (q < limit && is_idchar (*q))
3877 q++;
3879 len = q - p;
3881 /* Loop over the function macro arguments to see if the
3882 identifier inside the string matches one of them. */
3883 for (i = 0; i < macro->paramc; i++)
3885 const cpp_hashnode *node = macro->parm.params[i];
3887 if (NODE_LEN (node) == len
3888 && !memcmp (p, NODE_NAME (node), len))
3890 cpp_warning (pfile, CPP_W_TRADITIONAL,
3891 "macro argument \"%s\" would be stringified in traditional C",
3892 NODE_NAME (node));
3893 break;
3899 /* Returns the name, arguments and expansion of a macro, in a format
3900 suitable to be read back in again, and therefore also for DWARF 2
3901 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3902 Caller is expected to generate the "#define" bit if needed. The
3903 returned text is temporary, and automatically freed later. */
3904 const unsigned char *
3905 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node)
3907 gcc_checking_assert (cpp_user_macro_p (node));
3909 if (const cpp_macro *macro = get_deferred_or_lazy_macro (pfile, node, 0))
3910 return cpp_macro_definition (pfile, node, macro);
3911 return NULL;
3914 const unsigned char *
3915 cpp_macro_definition (cpp_reader *pfile, cpp_hashnode *node,
3916 const cpp_macro *macro)
3918 unsigned int i, len;
3919 unsigned char *buffer;
3921 /* Calculate length. */
3922 len = NODE_LEN (node) * 10 + 2; /* ' ' and NUL. */
3923 if (macro->fun_like)
3925 len += 4; /* "()" plus possible final ".." of named
3926 varargs (we have + 1 below). */
3927 for (i = 0; i < macro->paramc; i++)
3928 len += NODE_LEN (macro->parm.params[i]) + 1; /* "," */
3931 /* This should match below where we fill in the buffer. */
3932 if (CPP_OPTION (pfile, traditional))
3933 len += _cpp_replacement_text_len (macro);
3934 else
3936 unsigned int count = macro_real_token_count (macro);
3937 for (i = 0; i < count; i++)
3939 const cpp_token *token = &macro->exp.tokens[i];
3941 if (token->type == CPP_MACRO_ARG)
3942 len += NODE_LEN (token->val.macro_arg.spelling);
3943 else
3944 len += cpp_token_len (token);
3946 if (token->flags & STRINGIFY_ARG)
3947 len++; /* "#" */
3948 if (token->flags & PASTE_LEFT)
3949 len += 3; /* " ##" */
3950 if (token->flags & PREV_WHITE)
3951 len++; /* " " */
3955 if (len > pfile->macro_buffer_len)
3957 pfile->macro_buffer = XRESIZEVEC (unsigned char,
3958 pfile->macro_buffer, len);
3959 pfile->macro_buffer_len = len;
3962 /* Fill in the buffer. Start with the macro name. */
3963 buffer = pfile->macro_buffer;
3964 buffer = _cpp_spell_ident_ucns (buffer, node);
3966 /* Parameter names. */
3967 if (macro->fun_like)
3969 *buffer++ = '(';
3970 for (i = 0; i < macro->paramc; i++)
3972 cpp_hashnode *param = macro->parm.params[i];
3974 if (param != pfile->spec_nodes.n__VA_ARGS__)
3976 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
3977 buffer += NODE_LEN (param);
3980 if (i + 1 < macro->paramc)
3981 /* Don't emit a space after the comma here; we're trying
3982 to emit a Dwarf-friendly definition, and the Dwarf spec
3983 forbids spaces in the argument list. */
3984 *buffer++ = ',';
3985 else if (macro->variadic)
3986 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
3988 *buffer++ = ')';
3991 /* The Dwarf spec requires a space after the macro name, even if the
3992 definition is the empty string. */
3993 *buffer++ = ' ';
3995 if (CPP_OPTION (pfile, traditional))
3996 buffer = _cpp_copy_replacement_text (macro, buffer);
3997 else if (macro->count)
3998 /* Expansion tokens. */
4000 unsigned int count = macro_real_token_count (macro);
4001 for (i = 0; i < count; i++)
4003 const cpp_token *token = &macro->exp.tokens[i];
4005 if (token->flags & PREV_WHITE)
4006 *buffer++ = ' ';
4007 if (token->flags & STRINGIFY_ARG)
4008 *buffer++ = '#';
4010 if (token->type == CPP_MACRO_ARG)
4012 memcpy (buffer,
4013 NODE_NAME (token->val.macro_arg.spelling),
4014 NODE_LEN (token->val.macro_arg.spelling));
4015 buffer += NODE_LEN (token->val.macro_arg.spelling);
4017 else
4018 buffer = cpp_spell_token (pfile, token, buffer, true);
4020 if (token->flags & PASTE_LEFT)
4022 *buffer++ = ' ';
4023 *buffer++ = '#';
4024 *buffer++ = '#';
4025 /* Next has PREV_WHITE; see _cpp_create_definition. */
4030 *buffer = '\0';
4031 return pfile->macro_buffer;