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