1 /* Part of CPP library. (Macro and #define handling.)
2 Copyright (C) 1986-2021 Free Software Foundation, Inc.
3 Written by Per Bothner, 1994.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>.
21 In other words, you are welcome to use, share and improve this program.
22 You are forbidden to forbid anyone else to use, share and improve
23 what you give them. Help stamp out software-hoarding! */
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. */
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
49 /* The kind of macro tokens which the instance of
50 macro_arg_token_iter is supposed to iterate over. */
51 enum macro_arg_token_kind
{
52 MACRO_ARG_TOKEN_NORMAL
,
53 /* This is a macro argument token that got transformed into a string
54 literal, e.g. #foo. */
55 MACRO_ARG_TOKEN_STRINGIFIED
,
56 /* This is a token resulting from the expansion of a macro
57 argument that was itself a macro. */
58 MACRO_ARG_TOKEN_EXPANDED
61 /* An iterator over tokens coming from a function-like macro
63 typedef struct macro_arg_token_iter macro_arg_token_iter
;
64 struct macro_arg_token_iter
66 /* Whether or not -ftrack-macro-expansion is used. */
67 bool track_macro_exp_p
;
68 /* The kind of token over which we are supposed to iterate. */
69 enum macro_arg_token_kind kind
;
70 /* A pointer to the current token pointed to by the iterator. */
71 const cpp_token
**token_ptr
;
72 /* A pointer to the "full" location of the current token. If
73 -ftrack-macro-expansion is used this location tracks loci across
75 const location_t
*location_ptr
;
77 /* The number of times the iterator went forward. This useful only
78 when checking is enabled. */
83 /* Saved data about an identifier being used as a macro argument
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
;
93 static const char *vaopt_paste_error
=
94 N_("'##' cannot appear at either end of __VA_OPT__");
96 static void expand_arg (cpp_reader
*, macro_arg
*);
98 /* A class for tracking __VA_OPT__ state while iterating over a
99 sequence of tokens. This is used during both macro definition and
114 /* Initialize the state tracker. ANY_ARGS is true if variable
115 arguments were provided to the macro invocation. */
116 vaopt_state (cpp_reader
*pfile
, bool is_variadic
, macro_arg
*arg
)
119 m_variadic (is_variadic
),
120 m_last_was_paste (false),
123 m_paste_location (0),
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
132 update_type
update (const cpp_token
*token
)
134 /* If the macro isn't variadic, just don't bother. */
138 if (token
->type
== CPP_NAME
139 && token
->val
.node
.node
== m_pfile
->spec_nodes
.n__VA_OPT__
)
143 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
144 "__VA_OPT__ may not appear in a __VA_OPT__");
148 m_location
= token
->src_loc
;
149 m_stringify
= (token
->flags
& STRINGIFY_ARG
) != 0;
152 else if (m_state
== 1)
154 if (token
->type
!= CPP_OPEN_PAREN
)
156 cpp_error_at (m_pfile
, CPP_DL_ERROR
, m_location
,
157 "__VA_OPT__ must be followed by an "
162 if (m_update
== ERROR
)
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
)
181 else if (m_state
>= 2)
183 if (m_state
== 2 && token
->type
== CPP_PASTE
)
185 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
189 /* Advance states before further considering this token, in
190 case we see a close paren immediately after the open
195 bool was_paste
= m_last_was_paste
;
196 m_last_was_paste
= false;
197 if (token
->type
== CPP_PASTE
)
199 m_last_was_paste
= true;
200 m_paste_location
= token
->src_loc
;
202 else if (token
->type
== CPP_OPEN_PAREN
)
204 else if (token
->type
== CPP_CLOSE_PAREN
)
209 /* Saw the final paren. */
214 cpp_error_at (m_pfile
, CPP_DL_ERROR
, token
->src_loc
,
225 /* Nothing to do with __VA_OPT__. */
229 /* Ensure that any __VA_OPT__ was completed. If ok, return true.
230 Otherwise, issue an error and return false. */
233 if (m_variadic
&& m_state
!= 0)
234 cpp_error_at (m_pfile
, CPP_DL_ERROR
, m_location
,
235 "unterminated __VA_OPT__");
239 /* Return true for # __VA_OPT__. */
240 bool stringify () const
247 /* The cpp_reader. */
250 /* The __VA_ARGS__ argument. */
253 /* True if the macro is 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__. */
261 /* The state variable:
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. */
268 /* The location of the paste token. */
269 location_t m_paste_location
;
271 /* Location of the __VA_OPT__ token. */
272 location_t m_location
;
274 /* If __VA_ARGS__ substitutes to no preprocessing tokens,
275 INCLUDE, otherwise DROP. ERROR when unknown yet. */
276 update_type m_update
;
279 /* Macro expansion. */
281 static cpp_macro
*get_deferred_or_lazy_macro (cpp_reader
*, cpp_hashnode
*,
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
**,
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
*,
307 enum macro_arg_token_kind
,
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
*,
313 enum macro_arg_token_kind
,
314 location_t
**virt_location
);
316 static void macro_arg_token_iter_init (macro_arg_token_iter
*, bool,
317 enum macro_arg_token_kind
,
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,
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
**,
334 const line_map_macro
*,
337 static const cpp_token
**tokens_buff_add_token (_cpp_buff
*,
342 const line_map_macro
*,
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
*);
351 /* #define directive parsing and handling. */
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
*,
357 static bool reached_end_of_context (cpp_context
*);
358 static void consume_next_token_from_context (cpp_reader
*pfile
,
361 static const cpp_token
* cpp_get_token_1 (cpp_reader
*, location_t
*);
363 static cpp_hashnode
* macro_of_context (cpp_context
*context
);
365 /* Statistical counter tracking the number of macros that got
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;
372 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
373 and not consume CPP_EOF. */
374 static const cpp_token
*
375 cpp_get_token_no_padding (cpp_reader
*pfile
)
379 const cpp_token
*ret
= cpp_peek_token (pfile
, 0);
380 if (ret
->type
== CPP_EOF
)
382 ret
= cpp_get_token (pfile
);
383 if (ret
->type
!= CPP_PADDING
)
388 /* Handle meeting "__has_include" builtin macro. */
391 builtin_has_include (cpp_reader
*pfile
, cpp_hashnode
*op
, bool has_next
)
395 if (!pfile
->state
.in_directive
)
396 cpp_error (pfile
, CPP_DL_ERROR
,
397 "\"%s\" used outside of preprocessing directive",
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
;
404 token
= cpp_get_token_no_padding (pfile
);
406 cpp_error (pfile
, CPP_DL_ERROR
,
407 "missing '(' before \"%s\" operand", NODE_NAME (op
));
408 pfile
->state
.angled_headers
= false;
410 bool bracket
= token
->type
!= CPP_STRING
;
412 if (token
->type
== CPP_STRING
|| token
->type
== CPP_HEADER_NAME
)
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';
418 else if (token
->type
== CPP_LESS
)
419 fname
= _cpp_bracket_include (pfile
);
421 cpp_error (pfile
, CPP_DL_ERROR
,
422 "operator \"%s\" requires a header-name", NODE_NAME (op
));
426 /* Do not do the lookup if we're skipping, that's unnecessary
428 if (!pfile
->state
.skip_eval
429 && _cpp_has_header (pfile
, fname
, bracket
,
430 has_next
? IT_INCLUDE_NEXT
: IT_INCLUDE
))
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
));
444 /* Emits a warning if NODE is a macro defined in the main file that
445 has not been used. */
447 _cpp_warn_if_unused_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
448 void *v ATTRIBUTE_UNUSED
)
450 if (cpp_user_macro_p (node
))
452 cpp_macro
*macro
= node
->value
.macro
;
455 && MAIN_FILE_P (linemap_check_ordinary
456 (linemap_lookup (pfile
->line_table
,
458 cpp_warning_with_line (pfile
, CPP_W_UNUSED_MACROS
, macro
->line
, 0,
459 "macro \"%s\" is not used", NODE_NAME (node
));
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
*
468 new_string_token (cpp_reader
*pfile
, unsigned char *text
, unsigned int len
)
470 cpp_token
*token
= _cpp_temp_token (pfile
);
473 token
->type
= CPP_STRING
;
474 token
->val
.str
.len
= len
;
475 token
->val
.str
.text
= text
;
480 static const char * const monthnames
[] =
482 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
483 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
486 /* Helper function for builtin_macro. Returns the text generated by
489 _cpp_builtin_macro_text (cpp_reader
*pfile
, cpp_hashnode
*node
,
492 const uchar
*result
= NULL
;
493 linenum_type number
= 1;
495 switch (node
->value
.builtin
)
498 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
504 if (CPP_OPTION (pfile
, warn_date_time
))
505 cpp_warning (pfile
, CPP_W_DATE_TIME
, "macro \"%s\" might prevent "
506 "reproducible builds", NODE_NAME (node
));
508 cpp_buffer
*pbuffer
= cpp_get_buffer (pfile
);
509 if (pbuffer
->timestamp
== NULL
)
511 /* Initialize timestamp value of the assotiated file. */
512 struct _cpp_file
*file
= cpp_get_file (pbuffer
);
515 /* Generate __TIMESTAMP__ string, that represents
516 the date and time of the last modification
517 of the current source file. The string constant
518 looks like "Sun Sep 16 01:03:52 1973". */
519 struct tm
*tb
= NULL
;
520 struct stat
*st
= _cpp_get_file_stat (file
);
522 tb
= localtime (&st
->st_mtime
);
525 char *str
= asctime (tb
);
526 size_t len
= strlen (str
);
527 unsigned char *buf
= _cpp_unaligned_alloc (pfile
, len
+ 2);
529 strcpy ((char *) buf
+ 1, str
);
531 pbuffer
->timestamp
= buf
;
535 cpp_errno (pfile
, CPP_DL_WARNING
,
536 "could not determine file timestamp");
537 pbuffer
->timestamp
= UC
"\"??? ??? ?? ??:??:?? ????\"";
541 result
= pbuffer
->timestamp
;
552 if (node
->value
.builtin
== BT_FILE
553 || node
->value
.builtin
== BT_FILE_NAME
)
555 name
= linemap_get_expansion_filename (pfile
->line_table
,
556 pfile
->line_table
->highest_line
);
557 if ((node
->value
.builtin
== BT_FILE_NAME
) && name
)
558 name
= lbasename (name
);
562 name
= _cpp_get_file_name (pfile
->main_file
);
566 if (pfile
->cb
.remap_filename
)
567 name
= pfile
->cb
.remap_filename (name
);
569 buf
= _cpp_unaligned_alloc (pfile
, len
* 2 + 3);
572 buf
= cpp_quote_string (buf
+ 1, (const unsigned char *) name
, len
);
578 case BT_INCLUDE_LEVEL
:
579 /* The line map depth counts the primary source as level 1, but
580 historically __INCLUDE_DEPTH__ has called the primary source
582 number
= pfile
->line_table
->depth
- 1;
586 /* If __LINE__ is embedded in a macro, it must expand to the
587 line of the macro's invocation, not its definition.
588 Otherwise things like assert() will not work properly.
589 See WG14 N1911, WG21 N4220 sec 6.5, and PR 61861. */
590 if (CPP_OPTION (pfile
, traditional
))
591 loc
= pfile
->line_table
->highest_line
;
593 loc
= linemap_resolve_location (pfile
->line_table
, loc
,
594 LRK_MACRO_EXPANSION_POINT
, NULL
);
595 number
= linemap_get_expansion_line (pfile
->line_table
, loc
);
598 /* __STDC__ has the value 1 under normal circumstances.
599 However, if (a) we are in a system header, (b) the option
600 stdc_0_in_system_headers is true (set by target config), and
601 (c) we are not in strictly conforming mode, then it has the
602 value 0. (b) and (c) are already checked in cpp_init_builtins. */
604 if (_cpp_in_system_header (pfile
))
612 if (CPP_OPTION (pfile
, warn_date_time
))
613 cpp_warning (pfile
, CPP_W_DATE_TIME
, "macro \"%s\" might prevent "
614 "reproducible builds", NODE_NAME (node
));
615 if (pfile
->date
== NULL
)
617 /* Allocate __DATE__ and __TIME__ strings from permanent
618 storage. We only do this once, and don't generate them
619 at init time, because time() and localtime() are very
620 slow on some systems. */
622 auto kind
= cpp_get_date (pfile
, &tt
);
624 if (kind
== CPP_time_kind::UNKNOWN
)
626 cpp_errno (pfile
, CPP_DL_WARNING
,
627 "could not determine date and time");
629 pfile
->date
= UC
"\"??? ?? ????\"";
630 pfile
->time
= UC
"\"??:??:??\"";
634 struct tm
*tb
= (kind
== CPP_time_kind::FIXED
635 ? gmtime
: localtime
) (&tt
);
637 pfile
->date
= _cpp_unaligned_alloc (pfile
,
638 sizeof ("\"Oct 11 1347\""));
639 sprintf ((char *) pfile
->date
, "\"%s %2d %4d\"",
640 monthnames
[tb
->tm_mon
], tb
->tm_mday
,
643 pfile
->time
= _cpp_unaligned_alloc (pfile
,
644 sizeof ("\"12:34:56\""));
645 sprintf ((char *) pfile
->time
, "\"%02d:%02d:%02d\"",
646 tb
->tm_hour
, tb
->tm_min
, tb
->tm_sec
);
650 if (node
->value
.builtin
== BT_DATE
)
651 result
= pfile
->date
;
653 result
= pfile
->time
;
657 if (CPP_OPTION (pfile
, directives_only
) && pfile
->state
.in_directive
)
658 cpp_error (pfile
, CPP_DL_ERROR
,
659 "__COUNTER__ expanded inside directive with -fdirectives-only");
660 number
= pfile
->counter
++;
663 case BT_HAS_ATTRIBUTE
:
664 number
= pfile
->cb
.has_attribute (pfile
, false);
667 case BT_HAS_STD_ATTRIBUTE
:
668 number
= pfile
->cb
.has_attribute (pfile
, true);
672 number
= pfile
->cb
.has_builtin (pfile
);
676 case BT_HAS_INCLUDE_NEXT
:
677 number
= builtin_has_include (pfile
, node
,
678 node
->value
.builtin
== BT_HAS_INCLUDE_NEXT
);
684 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
685 result
= _cpp_unaligned_alloc (pfile
, 21);
686 sprintf ((char *) result
, "%u", number
);
692 /* Get an idempotent date. Either the cached value, the value from
693 source epoch, or failing that, the value from time(2). Use this
694 during compilation so that every time stamp is the same. */
696 cpp_get_date (cpp_reader
*pfile
, time_t *result
)
698 if (!pfile
->time_stamp_kind
)
701 if (pfile
->cb
.get_source_date_epoch
)
703 /* Try reading the fixed epoch. */
704 pfile
->time_stamp
= pfile
->cb
.get_source_date_epoch (pfile
);
705 if (pfile
->time_stamp
!= time_t (-1))
706 kind
= int (CPP_time_kind::FIXED
);
711 /* Pedantically time_t (-1) is a legitimate value for
712 "number of seconds since the Epoch". It is a silly
715 pfile
->time_stamp
= time (nullptr);
716 /* Annoyingly a library could legally set errno and return a
717 valid time! Bad library! */
718 if (pfile
->time_stamp
== time_t (-1) && errno
)
721 kind
= int (CPP_time_kind::DYNAMIC
);
724 pfile
->time_stamp_kind
= kind
;
727 *result
= pfile
->time_stamp
;
728 if (pfile
->time_stamp_kind
>= 0)
730 errno
= pfile
->time_stamp_kind
;
731 return CPP_time_kind::UNKNOWN
;
734 return CPP_time_kind (pfile
->time_stamp_kind
);
737 /* Convert builtin macros like __FILE__ to a token and push it on the
738 context stack. Also handles _Pragma, for which a new token may not
739 be created. Returns 1 if it generates a new token context, 0 to
740 return the token to the caller. LOC is the location of the expansion
741 point of the macro. */
743 builtin_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
744 location_t loc
, location_t expand_loc
)
750 if (node
->value
.builtin
== BT_PRAGMA
)
752 /* Don't interpret _Pragma within directives. The standard is
753 not clear on this, but to me this makes most sense. */
754 if (pfile
->state
.in_directive
)
757 return _cpp_do__Pragma (pfile
, loc
);
760 buf
= _cpp_builtin_macro_text (pfile
, node
, expand_loc
);
762 nbuf
= (char *) alloca (len
+ 1);
763 memcpy (nbuf
, buf
, len
);
766 cpp_push_buffer (pfile
, (uchar
*) nbuf
, len
, /* from_stage3 */ true);
767 _cpp_clean_line (pfile
);
769 /* Set pfile->cur_token as required by _cpp_lex_direct. */
770 pfile
->cur_token
= _cpp_temp_token (pfile
);
771 cpp_token
*token
= _cpp_lex_direct (pfile
);
772 /* We should point to the expansion point of the builtin macro. */
773 token
->src_loc
= loc
;
774 if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
776 /* We are tracking tokens resulting from macro expansion.
777 Create a macro line map and generate a virtual location for
778 the token resulting from the expansion of the built-in
780 location_t
*virt_locs
= NULL
;
781 _cpp_buff
*token_buf
= tokens_buff_new (pfile
, 1, &virt_locs
);
782 const line_map_macro
* map
=
783 linemap_enter_macro (pfile
->line_table
, node
, loc
, 1);
784 tokens_buff_add_token (token_buf
, virt_locs
, token
,
785 pfile
->line_table
->builtin_location
,
786 pfile
->line_table
->builtin_location
,
787 map
, /*macro_token_index=*/0);
788 push_extended_tokens_context (pfile
, node
, token_buf
, virt_locs
,
789 (const cpp_token
**)token_buf
->base
,
793 _cpp_push_token_context (pfile
, NULL
, token
, 1);
794 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
795 cpp_error (pfile
, CPP_DL_ICE
, "invalid built-in macro \"%s\"",
797 _cpp_pop_buffer (pfile
);
802 /* Copies SRC, of length LEN, to DEST, adding backslashes before all
803 backslashes and double quotes. DEST must be of sufficient size.
804 Returns a pointer to the end of the string. */
806 cpp_quote_string (uchar
*dest
, const uchar
*src
, unsigned int len
)
815 /* Naked LF can appear in raw string literals */
832 /* Convert a token sequence FIRST to FIRST+COUNT-1 to a single string token
833 according to the rules of the ISO C #-operator. */
834 static const cpp_token
*
835 stringify_arg (cpp_reader
*pfile
, const cpp_token
**first
, unsigned int count
,
839 unsigned int i
, escape_it
, backslash_count
= 0;
840 const cpp_token
*source
= NULL
;
843 if (BUFF_ROOM (pfile
->u_buff
) < 3)
844 _cpp_extend_buff (pfile
, &pfile
->u_buff
, 3);
845 dest
= BUFF_FRONT (pfile
->u_buff
);
848 /* Loop, reading in the argument's tokens. */
849 for (i
= 0; i
< count
; i
++)
851 const cpp_token
*token
= first
[i
];
853 if (va_opt
&& (token
->flags
& PASTE_LEFT
))
855 location_t virt_loc
= pfile
->invocation_location
;
856 const cpp_token
*rhs
;
862 if (!paste_tokens (pfile
, virt_loc
, &token
, rhs
))
868 while (rhs
->flags
& PASTE_LEFT
);
871 if (token
->type
== CPP_PADDING
)
874 || (!(source
->flags
& PREV_WHITE
)
875 && token
->val
.source
== NULL
))
876 source
= token
->val
.source
;
880 escape_it
= (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
881 || token
->type
== CPP_WSTRING
|| token
->type
== CPP_WCHAR
882 || token
->type
== CPP_STRING32
|| token
->type
== CPP_CHAR32
883 || token
->type
== CPP_STRING16
|| token
->type
== CPP_CHAR16
884 || token
->type
== CPP_UTF8STRING
|| token
->type
== CPP_UTF8CHAR
885 || cpp_userdef_string_p (token
->type
)
886 || cpp_userdef_char_p (token
->type
));
888 /* Room for each char being written in octal, initial space and
889 final quote and NUL. */
890 len
= cpp_token_len (token
);
895 if ((size_t) (BUFF_LIMIT (pfile
->u_buff
) - dest
) < len
)
897 size_t len_so_far
= dest
- BUFF_FRONT (pfile
->u_buff
);
898 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
);
899 dest
= BUFF_FRONT (pfile
->u_buff
) + len_so_far
;
902 /* Leading white space? */
903 if (dest
- 1 != BUFF_FRONT (pfile
->u_buff
))
907 if (source
->flags
& PREV_WHITE
)
914 _cpp_buff
*buff
= _cpp_get_buff (pfile
, len
);
915 unsigned char *buf
= BUFF_FRONT (buff
);
916 len
= cpp_spell_token (pfile
, token
, buf
, true) - buf
;
917 dest
= cpp_quote_string (dest
, buf
, len
);
918 _cpp_release_buff (pfile
, buff
);
921 dest
= cpp_spell_token (pfile
, token
, dest
, true);
923 if (token
->type
== CPP_OTHER
&& token
->val
.str
.text
[0] == '\\')
929 /* Ignore the final \ of invalid string literals. */
930 if (backslash_count
& 1)
932 cpp_error (pfile
, CPP_DL_WARNING
,
933 "invalid string literal, ignoring final '\\'");
937 /* Commit the memory, including NUL, and return the token. */
939 len
= dest
- BUFF_FRONT (pfile
->u_buff
);
940 BUFF_FRONT (pfile
->u_buff
) = dest
+ 1;
941 return new_string_token (pfile
, dest
- len
, len
);
944 /* Try to paste two tokens. On success, return nonzero. In any
945 case, PLHS is updated to point to the pasted token, which is
946 guaranteed to not have the PASTE_LEFT flag set. LOCATION is
947 the virtual location used for error reporting. */
949 paste_tokens (cpp_reader
*pfile
, location_t location
,
950 const cpp_token
**plhs
, const cpp_token
*rhs
)
952 unsigned char *buf
, *end
, *lhsend
;
956 len
= cpp_token_len (*plhs
) + cpp_token_len (rhs
) + 2;
957 buf
= (unsigned char *) alloca (len
);
958 end
= lhsend
= cpp_spell_token (pfile
, *plhs
, buf
, true);
960 /* Avoid comment headers, since they are still processed in stage 3.
961 It is simpler to insert a space here, rather than modifying the
962 lexer to ignore comments in some circumstances. Simply returning
963 false doesn't work, since we want to clear the PASTE_LEFT flag. */
964 if ((*plhs
)->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
966 /* In one obscure case we might see padding here. */
967 if (rhs
->type
!= CPP_PADDING
)
968 end
= cpp_spell_token (pfile
, rhs
, end
, true);
971 cpp_push_buffer (pfile
, buf
, end
- buf
, /* from_stage3 */ true);
972 _cpp_clean_line (pfile
);
974 /* Set pfile->cur_token as required by _cpp_lex_direct. */
975 pfile
->cur_token
= _cpp_temp_token (pfile
);
976 lhs
= _cpp_lex_direct (pfile
);
977 if (pfile
->buffer
->cur
!= pfile
->buffer
->rlimit
)
979 location_t saved_loc
= lhs
->src_loc
;
981 _cpp_pop_buffer (pfile
);
983 unsigned char *rhsstart
= lhsend
;
984 if ((*plhs
)->type
== CPP_DIV
&& rhs
->type
!= CPP_EQ
)
987 /* We have to remove the PASTE_LEFT flag from the old lhs, but
988 we want to keep the new location. */
991 lhs
->src_loc
= saved_loc
;
992 lhs
->flags
&= ~PASTE_LEFT
;
994 /* Mandatory error for all apart from assembler. */
995 if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
996 cpp_error_with_line (pfile
, CPP_DL_ERROR
, location
, 0,
997 "pasting \"%.*s\" and \"%.*s\" does not give "
998 "a valid preprocessing token",
999 (int) (lhsend
- buf
), buf
,
1000 (int) (end
- rhsstart
), rhsstart
);
1005 _cpp_pop_buffer (pfile
);
1009 /* Handles an arbitrarily long sequence of ## operators, with initial
1010 operand LHS. This implementation is left-associative,
1011 non-recursive, and finishes a paste before handling succeeding
1012 ones. If a paste fails, we back up to the RHS of the failing ##
1013 operator before pushing the context containing the result of prior
1014 successful pastes, with the effect that the RHS appears in the
1015 output stream after the pasted LHS normally. */
1017 paste_all_tokens (cpp_reader
*pfile
, const cpp_token
*lhs
)
1019 const cpp_token
*rhs
= NULL
;
1020 cpp_context
*context
= pfile
->context
;
1021 location_t virt_loc
= 0;
1023 /* We are expanding a macro and we must have been called on a token
1024 that appears at the left hand side of a ## operator. */
1025 if (macro_of_context (pfile
->context
) == NULL
1026 || (!(lhs
->flags
& PASTE_LEFT
)))
1029 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
1030 /* The caller must have called consume_next_token_from_context
1031 right before calling us. That has incremented the pointer to
1032 the current virtual location. So it now points to the location
1033 of the token that comes right after *LHS. We want the
1034 resulting pasted token to have the location of the current
1036 virt_loc
= context
->c
.mc
->cur_virt_loc
[-1];
1038 /* We are not tracking macro expansion. So the best virtual
1039 location we can get here is the expansion point of the macro we
1040 are currently expanding. */
1041 virt_loc
= pfile
->invocation_location
;
1045 /* Take the token directly from the current context. We can do
1046 this, because we are in the replacement list of either an
1047 object-like macro, or a function-like macro with arguments
1048 inserted. In either case, the constraints to #define
1049 guarantee we have at least one more token. */
1050 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
1051 rhs
= FIRST (context
).token
++;
1052 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
1053 rhs
= *FIRST (context
).ptoken
++;
1054 else if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
1056 /* So we are in presence of an extended token context, which
1057 means that each token in this context has a virtual
1058 location attached to it. So let's not forget to update
1059 the pointer to the current virtual location of the
1060 current token when we update the pointer to the current
1063 rhs
= *FIRST (context
).ptoken
++;
1064 /* context->c.mc must be non-null, as if we were not in a
1065 macro context, context->tokens_kind could not be equal to
1066 TOKENS_KIND_EXTENDED. */
1067 context
->c
.mc
->cur_virt_loc
++;
1070 if (rhs
->type
== CPP_PADDING
)
1072 if (rhs
->flags
& PASTE_LEFT
)
1075 if (!paste_tokens (pfile
, virt_loc
, &lhs
, rhs
))
1077 _cpp_backup_tokens (pfile
, 1);
1081 while (rhs
->flags
& PASTE_LEFT
);
1083 /* Put the resulting token in its own context. */
1084 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
1086 location_t
*virt_locs
= NULL
;
1087 _cpp_buff
*token_buf
= tokens_buff_new (pfile
, 1, &virt_locs
);
1088 tokens_buff_add_token (token_buf
, virt_locs
, lhs
,
1089 virt_loc
, 0, NULL
, 0);
1090 push_extended_tokens_context (pfile
, context
->c
.mc
->macro_node
,
1091 token_buf
, virt_locs
,
1092 (const cpp_token
**)token_buf
->base
, 1);
1095 _cpp_push_token_context (pfile
, NULL
, lhs
, 1);
1098 /* Returns TRUE if the number of arguments ARGC supplied in an
1099 invocation of the MACRO referenced by NODE is valid. An empty
1100 invocation to a macro with no parameters should pass ARGC as zero.
1102 Note that MACRO cannot necessarily be deduced from NODE, in case
1103 NODE was redefined whilst collecting arguments. */
1105 _cpp_arguments_ok (cpp_reader
*pfile
, cpp_macro
*macro
, const cpp_hashnode
*node
, unsigned int argc
)
1107 if (argc
== macro
->paramc
)
1110 if (argc
< macro
->paramc
)
1112 /* In C++20 (here the va_opt flag is used), and also as a GNU
1113 extension, variadic arguments are allowed to not appear in
1114 the invocation at all.
1115 e.g. #define debug(format, args...) something
1118 This is exactly the same as if an empty variadic list had been
1119 supplied - debug("string", ). */
1121 if (argc
+ 1 == macro
->paramc
&& macro
->variadic
)
1123 if (CPP_PEDANTIC (pfile
) && ! macro
->syshdr
1124 && ! CPP_OPTION (pfile
, va_opt
))
1126 if (CPP_OPTION (pfile
, cplusplus
))
1127 cpp_error (pfile
, CPP_DL_PEDWARN
,
1128 "ISO C++11 requires at least one argument "
1129 "for the \"...\" in a variadic macro");
1131 cpp_error (pfile
, CPP_DL_PEDWARN
,
1132 "ISO C99 requires at least one argument "
1133 "for the \"...\" in a variadic macro");
1138 cpp_error (pfile
, CPP_DL_ERROR
,
1139 "macro \"%s\" requires %u arguments, but only %u given",
1140 NODE_NAME (node
), macro
->paramc
, argc
);
1143 cpp_error (pfile
, CPP_DL_ERROR
,
1144 "macro \"%s\" passed %u arguments, but takes just %u",
1145 NODE_NAME (node
), argc
, macro
->paramc
);
1147 if (macro
->line
> RESERVED_LOCATION_COUNT
)
1148 cpp_error_at (pfile
, CPP_DL_NOTE
, macro
->line
, "macro \"%s\" defined here",
1154 /* Reads and returns the arguments to a function-like macro
1155 invocation. Assumes the opening parenthesis has been processed.
1156 If there is an error, emits an appropriate diagnostic and returns
1157 NULL. Each argument is terminated by a CPP_EOF token, for the
1158 future benefit of expand_arg(). If there are any deferred
1159 #pragma directives among macro arguments, store pointers to the
1160 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer.
1162 What is returned is the buffer that contains the memory allocated
1163 to hold the macro arguments. NODE is the name of the macro this
1164 function is dealing with. If NUM_ARGS is non-NULL, *NUM_ARGS is
1165 set to the actual number of macro arguments allocated in the
1168 collect_args (cpp_reader
*pfile
, const cpp_hashnode
*node
,
1169 _cpp_buff
**pragma_buff
, unsigned *num_args
)
1171 _cpp_buff
*buff
, *base_buff
;
1173 macro_arg
*args
, *arg
;
1174 const cpp_token
*token
;
1176 location_t virt_loc
;
1177 bool track_macro_expansion_p
= CPP_OPTION (pfile
, track_macro_expansion
);
1178 unsigned num_args_alloced
= 0;
1180 macro
= node
->value
.macro
;
1182 argc
= macro
->paramc
;
1186 #define DEFAULT_NUM_TOKENS_PER_MACRO_ARG 50
1187 #define ARG_TOKENS_EXTENT 1000
1189 buff
= _cpp_get_buff (pfile
, argc
* (DEFAULT_NUM_TOKENS_PER_MACRO_ARG
1190 * sizeof (cpp_token
*)
1191 + sizeof (macro_arg
)));
1193 args
= (macro_arg
*) buff
->base
;
1194 memset (args
, 0, argc
* sizeof (macro_arg
));
1195 buff
->cur
= (unsigned char *) &args
[argc
];
1196 arg
= args
, argc
= 0;
1198 /* Collect the tokens making up each argument. We don't yet know
1199 how many arguments have been supplied, whether too many or too
1200 few. Hence the slightly bizarre usage of "argc" and "arg". */
1203 unsigned int paren_depth
= 0;
1204 unsigned int ntokens
= 0;
1205 unsigned virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
1209 arg
->first
= (const cpp_token
**) buff
->cur
;
1210 if (track_macro_expansion_p
)
1212 virt_locs_capacity
= DEFAULT_NUM_TOKENS_PER_MACRO_ARG
;
1213 arg
->virt_locs
= XNEWVEC (location_t
,
1214 virt_locs_capacity
);
1219 /* Require space for 2 new tokens (including a CPP_EOF). */
1220 if ((unsigned char *) &arg
->first
[ntokens
+ 2] > buff
->limit
)
1222 buff
= _cpp_append_extend_buff (pfile
, buff
,
1224 * sizeof (cpp_token
*));
1225 arg
->first
= (const cpp_token
**) buff
->cur
;
1227 if (track_macro_expansion_p
1228 && (ntokens
+ 2 > virt_locs_capacity
))
1230 virt_locs_capacity
+= ARG_TOKENS_EXTENT
;
1231 arg
->virt_locs
= XRESIZEVEC (location_t
,
1233 virt_locs_capacity
);
1236 token
= cpp_get_token_1 (pfile
, &virt_loc
);
1238 if (token
->type
== CPP_PADDING
)
1240 /* Drop leading padding. */
1244 else if (token
->type
== CPP_OPEN_PAREN
)
1246 else if (token
->type
== CPP_CLOSE_PAREN
)
1248 if (paren_depth
-- == 0)
1251 else if (token
->type
== CPP_COMMA
)
1253 /* A comma does not terminate an argument within
1254 parentheses or as part of a variable argument. */
1255 if (paren_depth
== 0
1256 && ! (macro
->variadic
&& argc
== macro
->paramc
))
1259 else if (token
->type
== CPP_EOF
1260 || (token
->type
== CPP_HASH
&& token
->flags
& BOL
))
1262 else if (token
->type
== CPP_PRAGMA
&& !(token
->flags
& PRAGMA_OP
))
1264 cpp_token
*newtok
= _cpp_temp_token (pfile
);
1266 /* CPP_PRAGMA token lives in directive_result, which will
1267 be overwritten on the next directive. */
1272 if (*pragma_buff
== NULL
1273 || BUFF_ROOM (*pragma_buff
) < sizeof (cpp_token
*))
1276 if (*pragma_buff
== NULL
)
1278 = _cpp_get_buff (pfile
, 32 * sizeof (cpp_token
*));
1281 next
= *pragma_buff
;
1283 = _cpp_get_buff (pfile
,
1284 (BUFF_FRONT (*pragma_buff
)
1285 - (*pragma_buff
)->base
) * 2);
1286 (*pragma_buff
)->next
= next
;
1289 *(const cpp_token
**) BUFF_FRONT (*pragma_buff
) = token
;
1290 BUFF_FRONT (*pragma_buff
) += sizeof (cpp_token
*);
1291 if (token
->type
== CPP_PRAGMA_EOL
)
1293 token
= cpp_get_token_1 (pfile
, &virt_loc
);
1295 while (token
->type
!= CPP_EOF
);
1297 /* In deferred pragmas parsing_args and prevent_expansion
1298 had been changed, reset it. */
1299 pfile
->state
.parsing_args
= 2;
1300 pfile
->state
.prevent_expansion
= 1;
1302 if (token
->type
== CPP_EOF
)
1307 set_arg_token (arg
, token
, virt_loc
,
1308 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
1309 CPP_OPTION (pfile
, track_macro_expansion
));
1313 /* Drop trailing padding. */
1314 while (ntokens
> 0 && arg
->first
[ntokens
- 1]->type
== CPP_PADDING
)
1317 arg
->count
= ntokens
;
1318 /* Append an EOF to mark end-of-argument. */
1319 set_arg_token (arg
, &pfile
->endarg
, token
->src_loc
,
1320 ntokens
, MACRO_ARG_TOKEN_NORMAL
,
1321 CPP_OPTION (pfile
, track_macro_expansion
));
1323 /* Terminate the argument. Excess arguments loop back and
1324 overwrite the final legitimate argument, before failing. */
1325 if (argc
<= macro
->paramc
)
1327 buff
->cur
= (unsigned char *) &arg
->first
[ntokens
+ 1];
1328 if (argc
!= macro
->paramc
)
1332 while (token
->type
!= CPP_CLOSE_PAREN
&& token
->type
!= CPP_EOF
);
1334 if (token
->type
== CPP_EOF
)
1336 /* Unless the EOF is marking the end of an argument, it's a fake
1337 one from the end of a file that _cpp_clean_line will not have
1339 if (token
== &pfile
->endarg
)
1340 _cpp_backup_tokens (pfile
, 1);
1341 cpp_error (pfile
, CPP_DL_ERROR
,
1342 "unterminated argument list invoking macro \"%s\"",
1347 /* A single empty argument is counted as no argument. */
1348 if (argc
== 1 && macro
->paramc
== 0 && args
[0].count
== 0)
1350 if (_cpp_arguments_ok (pfile
, macro
, node
, argc
))
1352 /* GCC has special semantics for , ## b where b is a varargs
1353 parameter: we remove the comma if b was omitted entirely.
1354 If b was merely an empty argument, the comma is retained.
1355 If the macro takes just one (varargs) parameter, then we
1356 retain the comma only if we are standards conforming.
1358 If FIRST is NULL replace_args () swallows the comma. */
1359 if (macro
->variadic
&& (argc
< macro
->paramc
1360 || (argc
== 1 && args
[0].count
== 0
1361 && !CPP_OPTION (pfile
, std
))))
1362 args
[macro
->paramc
- 1].first
= NULL
;
1364 *num_args
= num_args_alloced
;
1369 /* An error occurred. */
1370 _cpp_release_buff (pfile
, base_buff
);
1374 /* Search for an opening parenthesis to the macro of NODE, in such a
1375 way that, if none is found, we don't lose the information in any
1376 intervening padding tokens. If we find the parenthesis, collect
1377 the arguments and return the buffer containing them. PRAGMA_BUFF
1378 argument is the same as in collect_args. If NUM_ARGS is non-NULL,
1379 *NUM_ARGS is set to the number of arguments contained in the
1382 funlike_invocation_p (cpp_reader
*pfile
, cpp_hashnode
*node
,
1383 _cpp_buff
**pragma_buff
, unsigned *num_args
)
1385 const cpp_token
*token
, *padding
= NULL
;
1389 token
= cpp_get_token (pfile
);
1390 if (token
->type
!= CPP_PADDING
)
1393 || (!(padding
->flags
& PREV_WHITE
) && token
->val
.source
== NULL
))
1397 if (token
->type
== CPP_OPEN_PAREN
)
1399 pfile
->state
.parsing_args
= 2;
1400 return collect_args (pfile
, node
, pragma_buff
, num_args
);
1403 /* Back up. A CPP_EOF is either an EOF from an argument we're
1404 expanding, or a fake one from lex_direct. We want to backup the
1405 former, but not the latter. We may have skipped padding, in
1406 which case backing up more than one token when expanding macros
1407 is in general too difficult. We re-insert it in its own
1409 if (token
->type
!= CPP_EOF
|| token
== &pfile
->endarg
)
1411 _cpp_backup_tokens (pfile
, 1);
1413 _cpp_push_token_context (pfile
, NULL
, padding
, 1);
1419 /* Return the real number of tokens in the expansion of MACRO. */
1420 static inline unsigned int
1421 macro_real_token_count (const cpp_macro
*macro
)
1423 if (__builtin_expect (!macro
->extra_tokens
, true))
1424 return macro
->count
;
1426 for (unsigned i
= macro
->count
; i
--;)
1427 if (macro
->exp
.tokens
[i
].type
!= CPP_PASTE
)
1433 /* Push the context of a macro with hash entry NODE onto the context
1434 stack. If we can successfully expand the macro, we push a context
1435 containing its yet-to-be-rescanned replacement list and return one.
1436 If there were additionally any unexpanded deferred #pragma
1437 directives among macro arguments, push another context containing
1438 the pragma tokens before the yet-to-be-rescanned replacement list
1439 and return two. Otherwise, we don't push a context and return
1440 zero. LOCATION is the location of the expansion point of the
1443 enter_macro_context (cpp_reader
*pfile
, cpp_hashnode
*node
,
1444 const cpp_token
*result
, location_t location
)
1446 /* The presence of a macro invalidates a file's controlling macro. */
1447 pfile
->mi_valid
= false;
1449 pfile
->state
.angled_headers
= false;
1451 /* From here to when we push the context for the macro later down
1452 this function, we need to flag the fact that we are about to
1453 expand a macro. This is useful when -ftrack-macro-expansion is
1454 turned off. In that case, we need to record the location of the
1455 expansion point of the top-most macro we are about to to expand,
1456 into pfile->invocation_location. But we must not record any such
1457 location once the process of expanding the macro starts; that is,
1458 we must not do that recording between now and later down this
1459 function where set this flag to FALSE. */
1460 pfile
->about_to_expand_macro_p
= true;
1462 if (cpp_user_macro_p (node
))
1464 cpp_macro
*macro
= node
->value
.macro
;
1465 _cpp_buff
*pragma_buff
= NULL
;
1467 if (macro
->fun_like
)
1470 unsigned num_args
= 0;
1472 pfile
->state
.prevent_expansion
++;
1473 pfile
->keep_tokens
++;
1474 pfile
->state
.parsing_args
= 1;
1475 buff
= funlike_invocation_p (pfile
, node
, &pragma_buff
,
1477 pfile
->state
.parsing_args
= 0;
1478 pfile
->keep_tokens
--;
1479 pfile
->state
.prevent_expansion
--;
1483 if (CPP_WTRADITIONAL (pfile
) && ! node
->value
.macro
->syshdr
)
1484 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
1485 "function-like macro \"%s\" must be used with arguments in traditional C",
1489 _cpp_release_buff (pfile
, pragma_buff
);
1491 pfile
->about_to_expand_macro_p
= false;
1495 if (macro
->paramc
> 0)
1496 replace_args (pfile
, node
, macro
,
1497 (macro_arg
*) buff
->base
,
1499 /* Free the memory used by the arguments of this
1500 function-like macro. This memory has been allocated by
1501 funlike_invocation_p and by replace_args. */
1502 delete_macro_args (buff
, num_args
);
1505 /* Disable the macro within its expansion. */
1506 node
->flags
|= NODE_DISABLED
;
1508 /* Laziness can only affect the expansion tokens of the macro,
1509 not its fun-likeness or parameters. */
1510 _cpp_maybe_notify_macro_use (pfile
, node
, location
);
1512 pfile
->cb
.used (pfile
, location
, node
);
1516 if (macro
->paramc
== 0)
1518 unsigned tokens_count
= macro_real_token_count (macro
);
1519 if (CPP_OPTION (pfile
, track_macro_expansion
))
1522 const cpp_token
*src
= macro
->exp
.tokens
;
1523 const line_map_macro
*map
;
1524 location_t
*virt_locs
= NULL
;
1525 _cpp_buff
*macro_tokens
1526 = tokens_buff_new (pfile
, tokens_count
, &virt_locs
);
1528 /* Create a macro map to record the locations of the
1529 tokens that are involved in the expansion. LOCATION
1530 is the location of the macro expansion point. */
1531 map
= linemap_enter_macro (pfile
->line_table
,
1532 node
, location
, tokens_count
);
1533 for (i
= 0; i
< tokens_count
; ++i
)
1535 tokens_buff_add_token (macro_tokens
, virt_locs
,
1537 src
->src_loc
, map
, i
);
1540 push_extended_tokens_context (pfile
, node
,
1543 (const cpp_token
**)
1548 _cpp_push_token_context (pfile
, node
, macro
->exp
.tokens
,
1550 num_macro_tokens_counter
+= tokens_count
;
1555 if (!pfile
->state
.in_directive
)
1556 _cpp_push_token_context (pfile
, NULL
,
1557 padding_token (pfile
, result
), 1);
1560 unsigned tokens_count
;
1561 _cpp_buff
*tail
= pragma_buff
->next
;
1562 pragma_buff
->next
= NULL
;
1563 tokens_count
= ((const cpp_token
**) BUFF_FRONT (pragma_buff
)
1564 - (const cpp_token
**) pragma_buff
->base
);
1565 push_ptoken_context (pfile
, NULL
, pragma_buff
,
1566 (const cpp_token
**) pragma_buff
->base
,
1569 if (!CPP_OPTION (pfile
, track_macro_expansion
))
1570 num_macro_tokens_counter
+= tokens_count
;
1573 while (pragma_buff
!= NULL
);
1574 pfile
->about_to_expand_macro_p
= false;
1578 pfile
->about_to_expand_macro_p
= false;
1582 pfile
->about_to_expand_macro_p
= false;
1583 /* Handle built-in macros and the _Pragma operator. */
1585 location_t expand_loc
;
1587 if (/* The top-level macro invocation that triggered the expansion
1588 we are looking at is with a function-like user macro ... */
1589 cpp_fun_like_macro_p (pfile
->top_most_macro_node
)
1590 /* ... and we are tracking the macro expansion. */
1591 && CPP_OPTION (pfile
, track_macro_expansion
))
1592 /* Then the location of the end of the macro invocation is the
1593 location of the expansion point of this macro. */
1594 expand_loc
= location
;
1596 /* Otherwise, the location of the end of the macro invocation is
1597 the location of the expansion point of that top-level macro
1599 expand_loc
= pfile
->invocation_location
;
1601 return builtin_macro (pfile
, node
, location
, expand_loc
);
1605 /* De-allocate the memory used by BUFF which is an array of instances
1606 of macro_arg. NUM_ARGS is the number of instances of macro_arg
1609 delete_macro_args (_cpp_buff
*buff
, unsigned num_args
)
1611 macro_arg
*macro_args
;
1617 macro_args
= (macro_arg
*) buff
->base
;
1619 /* Walk instances of macro_arg to free their expanded tokens as well
1620 as their macro_arg::virt_locs members. */
1621 for (i
= 0; i
< num_args
; ++i
)
1623 if (macro_args
[i
].expanded
)
1625 free (macro_args
[i
].expanded
);
1626 macro_args
[i
].expanded
= NULL
;
1628 if (macro_args
[i
].virt_locs
)
1630 free (macro_args
[i
].virt_locs
);
1631 macro_args
[i
].virt_locs
= NULL
;
1633 if (macro_args
[i
].expanded_virt_locs
)
1635 free (macro_args
[i
].expanded_virt_locs
);
1636 macro_args
[i
].expanded_virt_locs
= NULL
;
1639 _cpp_free_buff (buff
);
1642 /* Set the INDEXth token of the macro argument ARG. TOKEN is the token
1643 to set, LOCATION is its virtual location. "Virtual" location means
1644 the location that encodes loci across macro expansion. Otherwise
1645 it has to be TOKEN->SRC_LOC. KIND is the kind of tokens the
1646 argument ARG is supposed to contain. Note that ARG must be
1647 tailored so that it has enough room to contain INDEX + 1 numbers of
1648 tokens, at least. */
1650 set_arg_token (macro_arg
*arg
, const cpp_token
*token
,
1651 location_t location
, size_t index
,
1652 enum macro_arg_token_kind kind
,
1653 bool track_macro_exp_p
)
1655 const cpp_token
**token_ptr
;
1656 location_t
*loc
= NULL
;
1659 arg_token_ptr_at (arg
, index
, kind
,
1660 track_macro_exp_p
? &loc
: NULL
);
1665 /* We can't set the location of a stringified argument
1666 token and we can't set any location if we aren't tracking
1667 macro expansion locations. */
1668 gcc_checking_assert (kind
!= MACRO_ARG_TOKEN_STRINGIFIED
1669 && track_macro_exp_p
);
1674 /* Get the pointer to the location of the argument token of the
1675 function-like macro argument ARG. This function must be called
1676 only when we -ftrack-macro-expansion is on. */
1677 static const location_t
*
1678 get_arg_token_location (const macro_arg
*arg
,
1679 enum macro_arg_token_kind kind
)
1681 const location_t
*loc
= NULL
;
1682 const cpp_token
**token_ptr
=
1683 arg_token_ptr_at (arg
, 0, kind
, (location_t
**) &loc
);
1685 if (token_ptr
== NULL
)
1691 /* Return the pointer to the INDEXth token of the macro argument ARG.
1692 KIND specifies the kind of token the macro argument ARG contains.
1693 If VIRT_LOCATION is non NULL, *VIRT_LOCATION is set to the address
1694 of the virtual location of the returned token if the
1695 -ftrack-macro-expansion flag is on; otherwise, it's set to the
1696 spelling location of the returned token. */
1697 static const cpp_token
**
1698 arg_token_ptr_at (const macro_arg
*arg
, size_t index
,
1699 enum macro_arg_token_kind kind
,
1700 location_t
**virt_location
)
1702 const cpp_token
**tokens_ptr
= NULL
;
1706 case MACRO_ARG_TOKEN_NORMAL
:
1707 tokens_ptr
= arg
->first
;
1709 case MACRO_ARG_TOKEN_STRINGIFIED
:
1710 tokens_ptr
= (const cpp_token
**) &arg
->stringified
;
1712 case MACRO_ARG_TOKEN_EXPANDED
:
1713 tokens_ptr
= arg
->expanded
;
1717 if (tokens_ptr
== NULL
)
1718 /* This can happen for e.g, an empty token argument to a
1719 funtion-like macro. */
1724 if (kind
== MACRO_ARG_TOKEN_NORMAL
)
1725 *virt_location
= &arg
->virt_locs
[index
];
1726 else if (kind
== MACRO_ARG_TOKEN_EXPANDED
)
1727 *virt_location
= &arg
->expanded_virt_locs
[index
];
1728 else if (kind
== MACRO_ARG_TOKEN_STRINGIFIED
)
1730 (location_t
*) &tokens_ptr
[index
]->src_loc
;
1732 return &tokens_ptr
[index
];
1735 /* Initialize an iterator so that it iterates over the tokens of a
1736 function-like macro argument. KIND is the kind of tokens we want
1737 ITER to iterate over. TOKEN_PTR points the first token ITER will
1740 macro_arg_token_iter_init (macro_arg_token_iter
*iter
,
1741 bool track_macro_exp_p
,
1742 enum macro_arg_token_kind kind
,
1743 const macro_arg
*arg
,
1744 const cpp_token
**token_ptr
)
1746 iter
->track_macro_exp_p
= track_macro_exp_p
;
1748 iter
->token_ptr
= token_ptr
;
1749 /* Unconditionally initialize this so that the compiler doesn't warn
1750 about iter->location_ptr being possibly uninitialized later after
1751 this code has been inlined somewhere. */
1752 iter
->location_ptr
= NULL
;
1753 if (track_macro_exp_p
)
1754 iter
->location_ptr
= get_arg_token_location (arg
, kind
);
1756 iter
->num_forwards
= 0;
1757 if (track_macro_exp_p
1758 && token_ptr
!= NULL
1759 && iter
->location_ptr
== NULL
)
1764 /* Move the iterator one token forward. Note that if IT was
1765 initialized on an argument that has a stringified token, moving it
1766 forward doesn't make sense as a stringified token is essentially one
1769 macro_arg_token_iter_forward (macro_arg_token_iter
*it
)
1773 case MACRO_ARG_TOKEN_NORMAL
:
1774 case MACRO_ARG_TOKEN_EXPANDED
:
1776 if (it
->track_macro_exp_p
)
1779 case MACRO_ARG_TOKEN_STRINGIFIED
:
1781 if (it
->num_forwards
> 0)
1792 /* Return the token pointed to by the iterator. */
1793 static const cpp_token
*
1794 macro_arg_token_iter_get_token (const macro_arg_token_iter
*it
)
1797 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1798 && it
->num_forwards
> 0)
1801 if (it
->token_ptr
== NULL
)
1803 return *it
->token_ptr
;
1806 /* Return the location of the token pointed to by the iterator.*/
1808 macro_arg_token_iter_get_location (const macro_arg_token_iter
*it
)
1811 if (it
->kind
== MACRO_ARG_TOKEN_STRINGIFIED
1812 && it
->num_forwards
> 0)
1815 if (it
->track_macro_exp_p
)
1816 return *it
->location_ptr
;
1818 return (*it
->token_ptr
)->src_loc
;
1821 /* Return the index of a token [resulting from macro expansion] inside
1822 the total list of tokens resulting from a given macro
1823 expansion. The index can be different depending on whether if we
1824 want each tokens resulting from function-like macro arguments
1825 expansion to have a different location or not.
1827 E.g, consider this function-like macro:
1831 Then consider us "calling" it (and thus expanding it) like:
1835 It will be expanded into:
1839 Let's consider the case of the token '4'.
1841 Its index can be 2 (it's the third token of the set of tokens
1842 resulting from the expansion) or it can be 0 if we consider that
1843 all tokens resulting from the expansion of the argument "1+2" have
1844 the same index, which is 0. In this later case, the index of token
1845 '-' would then be 1 and the index of token '3' would be 2.
1847 The later case is useful to use less memory e.g, for the case of
1848 the user using the option -ftrack-macro-expansion=1.
1850 ABSOLUTE_TOKEN_INDEX is the index of the macro argument token we
1851 are interested in. CUR_REPLACEMENT_TOKEN is the token of the macro
1852 parameter (inside the macro replacement list) that corresponds to
1853 the macro argument for which ABSOLUTE_TOKEN_INDEX is a token index
1856 If we refer to the example above, for the '4' argument token,
1857 ABSOLUTE_TOKEN_INDEX would be set to 2, and CUR_REPLACEMENT_TOKEN
1858 would be set to the token 'x', in the replacement list "x - 3" of
1861 This is a subroutine of replace_args. */
1862 inline static unsigned
1863 expanded_token_index (cpp_reader
*pfile
, cpp_macro
*macro
,
1864 const cpp_token
*cur_replacement_token
,
1865 unsigned absolute_token_index
)
1867 if (CPP_OPTION (pfile
, track_macro_expansion
) > 1)
1868 return absolute_token_index
;
1869 return cur_replacement_token
- macro
->exp
.tokens
;
1872 /* Copy whether PASTE_LEFT is set from SRC to *PASTE_FLAG. */
1875 copy_paste_flag (cpp_reader
*pfile
, const cpp_token
**paste_flag
,
1876 const cpp_token
*src
)
1878 cpp_token
*token
= _cpp_temp_token (pfile
);
1879 token
->type
= (*paste_flag
)->type
;
1880 token
->val
= (*paste_flag
)->val
;
1881 if (src
->flags
& PASTE_LEFT
)
1882 token
->flags
= (*paste_flag
)->flags
| PASTE_LEFT
;
1884 token
->flags
= (*paste_flag
)->flags
& ~PASTE_LEFT
;
1885 *paste_flag
= token
;
1888 /* True IFF the last token emitted into BUFF (if any) is PTR. */
1891 last_token_is (_cpp_buff
*buff
, const cpp_token
**ptr
)
1893 return (ptr
&& tokens_buff_last_token_ptr (buff
) == ptr
);
1896 /* Replace the parameters in a function-like macro of NODE with the
1897 actual ARGS, and place the result in a newly pushed token context.
1898 Expand each argument before replacing, unless it is operated upon
1899 by the # or ## operators. EXPANSION_POINT_LOC is the location of
1900 the expansion point of the macro. E.g, the location of the
1901 function-like macro invocation. */
1903 replace_args (cpp_reader
*pfile
, cpp_hashnode
*node
, cpp_macro
*macro
,
1904 macro_arg
*args
, location_t expansion_point_loc
)
1906 unsigned int i
, total
;
1907 const cpp_token
*src
, *limit
;
1908 const cpp_token
**first
= NULL
;
1910 _cpp_buff
*buff
= NULL
;
1911 location_t
*virt_locs
= NULL
;
1912 unsigned int exp_count
;
1913 const line_map_macro
*map
= NULL
;
1914 int track_macro_exp
;
1916 /* First, fully macro-expand arguments, calculating the number of
1917 tokens in the final expansion as we go. The ordering of the if
1918 statements below is subtle; we must handle stringification before
1921 /* EXP_COUNT is the number of tokens in the macro replacement
1922 list. TOTAL is the number of tokens /after/ macro parameters
1923 have been replaced by their arguments. */
1924 exp_count
= macro_real_token_count (macro
);
1926 limit
= macro
->exp
.tokens
+ exp_count
;
1928 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
1929 if (src
->type
== CPP_MACRO_ARG
)
1931 /* Leading and trailing padding tokens. */
1933 /* Account for leading and padding tokens in exp_count too.
1934 This is going to be important later down this function,
1935 when we want to handle the case of (track_macro_exp <
1939 /* We have an argument. If it is not being stringified or
1940 pasted it is macro-replaced before insertion. */
1941 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
1943 if (src
->flags
& STRINGIFY_ARG
)
1945 if (!arg
->stringified
)
1946 arg
->stringified
= stringify_arg (pfile
, arg
->first
, arg
->count
,
1949 else if ((src
->flags
& PASTE_LEFT
)
1950 || (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
)))
1951 total
+= arg
->count
- 1;
1955 expand_arg (pfile
, arg
);
1956 total
+= arg
->expanded_count
- 1;
1960 /* When the compiler is called with the -ftrack-macro-expansion
1961 flag, we need to keep track of the location of each token that
1962 results from macro expansion.
1964 A token resulting from macro expansion is not a new token. It is
1965 simply the same token as the token coming from the macro
1966 definition. The new things that are allocated are the buffer
1967 that holds the tokens resulting from macro expansion and a new
1968 location that records many things like the locus of the expansion
1969 point as well as the original locus inside the definition of the
1970 macro. This location is called a virtual location.
1972 So the buffer BUFF holds a set of cpp_token*, and the buffer
1973 VIRT_LOCS holds the virtual locations of the tokens held by BUFF.
1975 Both of these two buffers are going to be hung off of the macro
1976 context, when the latter is pushed. The memory allocated to
1977 store the tokens and their locations is going to be freed once
1978 the context of macro expansion is popped.
1980 As far as tokens are concerned, the memory overhead of
1981 -ftrack-macro-expansion is proportional to the number of
1982 macros that get expanded multiplied by sizeof (location_t).
1983 The good news is that extra memory gets freed when the macro
1984 context is freed, i.e shortly after the macro got expanded. */
1986 /* Is the -ftrack-macro-expansion flag in effect? */
1987 track_macro_exp
= CPP_OPTION (pfile
, track_macro_expansion
);
1989 /* Now allocate memory space for tokens and locations resulting from
1990 the macro expansion, copy the tokens and replace the arguments.
1991 This memory must be freed when the context of the macro MACRO is
1993 buff
= tokens_buff_new (pfile
, total
, track_macro_exp
? &virt_locs
: NULL
);
1995 first
= (const cpp_token
**) buff
->base
;
1997 /* Create a macro map to record the locations of the tokens that are
1998 involved in the expansion. Note that the expansion point is set
1999 to the location of the closing parenthesis. Otherwise, the
2000 subsequent map created for the first token that comes after the
2001 macro map might have a wrong line number. That would lead to
2002 tokens with wrong line numbers after the macro expansion. This
2003 adds up to the memory overhead of the -ftrack-macro-expansion
2004 flag; for every macro that is expanded, a "macro map" is
2006 if (track_macro_exp
)
2008 int num_macro_tokens
= total
;
2009 if (track_macro_exp
< 2)
2010 /* Then the number of macro tokens won't take in account the
2011 fact that function-like macro arguments can expand to
2012 multiple tokens. This is to save memory at the expense of
2015 Suppose we have #define SQUARE(A) A * A
2017 And then we do SQUARE(2+3)
2019 Then the tokens 2, +, 3, will have the same location,
2020 saying they come from the expansion of the argument A. */
2021 num_macro_tokens
= exp_count
;
2022 map
= linemap_enter_macro (pfile
->line_table
, node
,
2023 expansion_point_loc
,
2027 vaopt_state
vaopt_tracker (pfile
, macro
->variadic
, &args
[macro
->paramc
- 1]);
2028 const cpp_token
**vaopt_start
= NULL
;
2029 for (src
= macro
->exp
.tokens
; src
< limit
; src
++)
2031 unsigned int arg_tokens_count
;
2032 macro_arg_token_iter from
;
2033 const cpp_token
**paste_flag
= NULL
;
2034 const cpp_token
**tmp_token_ptr
;
2036 /* __VA_OPT__ handling. */
2037 vaopt_state::update_type vostate
= vaopt_tracker
.update (src
);
2038 if (__builtin_expect (vostate
!= vaopt_state::INCLUDE
, false))
2040 if (vostate
== vaopt_state::BEGIN
)
2042 /* Padding on the left of __VA_OPT__ (unless RHS of ##). */
2043 if (src
!= macro
->exp
.tokens
&& !(src
[-1].flags
& PASTE_LEFT
))
2045 const cpp_token
*t
= padding_token (pfile
, src
);
2046 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
2047 /* Allocate a virtual location for the padding token and
2048 append the token and its location to BUFF and
2050 tokens_buff_add_token (buff
, virt_locs
, t
,
2051 t
->src_loc
, t
->src_loc
,
2054 vaopt_start
= tokens_buff_last_token_ptr (buff
);
2056 else if (vostate
== vaopt_state::END
)
2058 const cpp_token
**start
= vaopt_start
;
2061 paste_flag
= tokens_buff_last_token_ptr (buff
);
2063 if (vaopt_tracker
.stringify ())
2066 = start
? paste_flag
- start
: tokens_buff_count (buff
);
2068 = stringify_arg (pfile
,
2070 : (const cpp_token
**) (buff
->base
),
2073 tokens_buff_remove_last_token (buff
);
2074 if (src
->flags
& PASTE_LEFT
)
2075 copy_paste_flag (pfile
, &t
, src
);
2076 tokens_buff_add_token (buff
, virt_locs
,
2077 t
, t
->src_loc
, t
->src_loc
,
2080 else if (src
->flags
& PASTE_LEFT
)
2082 /* Don't avoid paste after all. */
2083 while (paste_flag
&& paste_flag
!= start
2084 && *paste_flag
== &pfile
->avoid_paste
)
2086 tokens_buff_remove_last_token (buff
);
2087 paste_flag
= tokens_buff_last_token_ptr (buff
);
2090 /* With a non-empty __VA_OPT__ on the LHS of ##, the last
2091 token should be flagged PASTE_LEFT. */
2092 if (paste_flag
&& (*paste_flag
)->type
!= CPP_PADDING
)
2093 copy_paste_flag (pfile
, paste_flag
, src
);
2097 /* Otherwise, avoid paste on RHS, __VA_OPT__(c)d or
2098 __VA_OPT__(c)__VA_OPT__(d). */
2099 const cpp_token
*t
= &pfile
->avoid_paste
;
2100 tokens_buff_add_token (buff
, virt_locs
,
2101 t
, t
->src_loc
, t
->src_loc
,
2108 if (src
->type
!= CPP_MACRO_ARG
)
2110 /* Allocate a virtual location for token SRC, and add that
2111 token and its virtual location into the buffers BUFF and
2113 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
2114 tokens_buff_add_token (buff
, virt_locs
, src
,
2115 src
->src_loc
, src
->src_loc
,
2122 arg
= &args
[src
->val
.macro_arg
.arg_no
- 1];
2123 /* SRC is a macro parameter that we need to replace with its
2124 corresponding argument. So at some point we'll need to
2125 iterate over the tokens of the macro argument and copy them
2126 into the "place" now holding the correspondig macro
2127 parameter. We are going to use the iterator type
2128 macro_argo_token_iter to handle that iterating. The 'if'
2129 below is to initialize the iterator depending on the type of
2130 tokens the macro argument has. It also does some adjustment
2131 related to padding tokens and some pasting corner cases. */
2132 if (src
->flags
& STRINGIFY_ARG
)
2134 arg_tokens_count
= 1;
2135 macro_arg_token_iter_init (&from
,
2137 track_macro_expansion
),
2138 MACRO_ARG_TOKEN_STRINGIFIED
,
2139 arg
, &arg
->stringified
);
2141 else if (src
->flags
& PASTE_LEFT
)
2143 arg_tokens_count
= arg
->count
;
2144 macro_arg_token_iter_init (&from
,
2146 track_macro_expansion
),
2147 MACRO_ARG_TOKEN_NORMAL
,
2150 else if (src
!= macro
->exp
.tokens
&& (src
[-1].flags
& PASTE_LEFT
))
2153 arg_tokens_count
= arg
->count
;
2154 macro_arg_token_iter_init (&from
,
2156 track_macro_expansion
),
2157 MACRO_ARG_TOKEN_NORMAL
,
2160 num_toks
= tokens_buff_count (buff
);
2164 /* So the current parameter token is pasted to the previous
2165 token in the replacement list. Let's look at what
2166 we have as previous and current arguments. */
2168 /* This is the previous argument's token ... */
2169 tmp_token_ptr
= tokens_buff_last_token_ptr (buff
);
2171 if ((*tmp_token_ptr
)->type
== CPP_COMMA
2173 && src
->val
.macro_arg
.arg_no
== macro
->paramc
)
2175 /* ... which is a comma; and the current parameter
2176 is the last parameter of a variadic function-like
2177 macro. If the argument to the current last
2178 parameter is NULL, then swallow the comma,
2179 otherwise drop the paste flag. */
2180 if (macro_arg_token_iter_get_token (&from
) == NULL
)
2181 tokens_buff_remove_last_token (buff
);
2183 paste_flag
= tmp_token_ptr
;
2185 /* Remove the paste flag if the RHS is a placemarker. */
2186 else if (arg_tokens_count
== 0)
2187 paste_flag
= tmp_token_ptr
;
2192 arg_tokens_count
= arg
->expanded_count
;
2193 macro_arg_token_iter_init (&from
,
2195 track_macro_expansion
),
2196 MACRO_ARG_TOKEN_EXPANDED
,
2197 arg
, arg
->expanded
);
2199 if (last_token_is (buff
, vaopt_start
))
2201 /* We're expanding an arg at the beginning of __VA_OPT__.
2203 while (arg_tokens_count
)
2205 const cpp_token
*t
= macro_arg_token_iter_get_token (&from
);
2206 if (t
->type
!= CPP_PADDING
)
2208 macro_arg_token_iter_forward (&from
);
2214 /* Padding on the left of an argument (unless RHS of ##). */
2215 if ((!pfile
->state
.in_directive
|| pfile
->state
.directive_wants_padding
)
2216 && src
!= macro
->exp
.tokens
2217 && !(src
[-1].flags
& PASTE_LEFT
)
2218 && !last_token_is (buff
, vaopt_start
))
2220 const cpp_token
*t
= padding_token (pfile
, src
);
2221 unsigned index
= expanded_token_index (pfile
, macro
, src
, i
);
2222 /* Allocate a virtual location for the padding token and
2223 append the token and its location to BUFF and
2225 tokens_buff_add_token (buff
, virt_locs
, t
,
2226 t
->src_loc
, t
->src_loc
,
2230 if (arg_tokens_count
)
2232 /* So now we've got the number of tokens that make up the
2233 argument that is going to replace the current parameter
2234 in the macro's replacement list. */
2236 for (j
= 0; j
< arg_tokens_count
; ++j
)
2238 /* So if track_macro_exp is < 2, the user wants to
2239 save extra memory while tracking macro expansion
2240 locations. So in that case here is what we do:
2242 Suppose we have #define SQUARE(A) A * A
2244 And then we do SQUARE(2+3)
2246 Then the tokens 2, +, 3, will have the same location,
2247 saying they come from the expansion of the argument
2250 So that means we are going to ignore the COUNT tokens
2251 resulting from the expansion of the current macro
2252 argument. In other words all the ARG_TOKENS_COUNT tokens
2253 resulting from the expansion of the macro argument will
2254 have the index I. Normally, each of those tokens should
2256 unsigned token_index
= i
;
2258 if (track_macro_exp
> 1)
2261 index
= expanded_token_index (pfile
, macro
, src
, token_index
);
2262 const cpp_token
*tok
= macro_arg_token_iter_get_token (&from
);
2263 tokens_buff_add_token (buff
, virt_locs
, tok
,
2264 macro_arg_token_iter_get_location (&from
),
2265 src
->src_loc
, map
, index
);
2266 macro_arg_token_iter_forward (&from
);
2269 /* With a non-empty argument on the LHS of ##, the last
2270 token should be flagged PASTE_LEFT. */
2271 if (src
->flags
& PASTE_LEFT
)
2273 = (const cpp_token
**) tokens_buff_last_token_ptr (buff
);
2275 else if (CPP_PEDANTIC (pfile
) && ! CPP_OPTION (pfile
, c99
)
2276 && ! macro
->syshdr
&& ! _cpp_in_system_header (pfile
))
2278 if (CPP_OPTION (pfile
, cplusplus
))
2279 cpp_pedwarning (pfile
, CPP_W_PEDANTIC
,
2280 "invoking macro %s argument %d: "
2281 "empty macro arguments are undefined"
2283 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2284 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
))
2285 cpp_pedwarning (pfile
,
2286 CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
2287 ? CPP_W_C90_C99_COMPAT
: CPP_W_PEDANTIC
,
2288 "invoking macro %s argument %d: "
2289 "empty macro arguments are undefined"
2291 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2293 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
2294 && ! CPP_OPTION (pfile
, cplusplus
)
2295 && ! macro
->syshdr
&& ! _cpp_in_system_header (pfile
))
2296 cpp_warning (pfile
, CPP_W_C90_C99_COMPAT
,
2297 "invoking macro %s argument %d: "
2298 "empty macro arguments are undefined"
2300 NODE_NAME (node
), src
->val
.macro_arg
.arg_no
);
2302 /* Avoid paste on RHS (even case count == 0). */
2303 if (!pfile
->state
.in_directive
&& !(src
->flags
& PASTE_LEFT
))
2305 const cpp_token
*t
= &pfile
->avoid_paste
;
2306 tokens_buff_add_token (buff
, virt_locs
,
2307 t
, t
->src_loc
, t
->src_loc
,
2311 /* Add a new paste flag, or remove an unwanted one. */
2313 copy_paste_flag (pfile
, paste_flag
, src
);
2315 i
+= arg_tokens_count
;
2318 if (track_macro_exp
)
2319 push_extended_tokens_context (pfile
, node
, buff
, virt_locs
, first
,
2320 tokens_buff_count (buff
));
2322 push_ptoken_context (pfile
, node
, buff
, first
,
2323 tokens_buff_count (buff
));
2325 num_macro_tokens_counter
+= tokens_buff_count (buff
);
2328 /* Return a special padding token, with padding inherited from SOURCE. */
2329 static const cpp_token
*
2330 padding_token (cpp_reader
*pfile
, const cpp_token
*source
)
2332 cpp_token
*result
= _cpp_temp_token (pfile
);
2334 result
->type
= CPP_PADDING
;
2336 /* Data in GCed data structures cannot be made const so far, so we
2337 need a cast here. */
2338 result
->val
.source
= (cpp_token
*) source
;
2343 /* Get a new uninitialized context. Create a new one if we cannot
2344 re-use an old one. */
2345 static cpp_context
*
2346 next_context (cpp_reader
*pfile
)
2348 cpp_context
*result
= pfile
->context
->next
;
2352 result
= XNEW (cpp_context
);
2353 memset (result
, 0, sizeof (cpp_context
));
2354 result
->prev
= pfile
->context
;
2356 pfile
->context
->next
= result
;
2359 pfile
->context
= result
;
2363 /* Push a list of pointers to tokens. */
2365 push_ptoken_context (cpp_reader
*pfile
, cpp_hashnode
*macro
, _cpp_buff
*buff
,
2366 const cpp_token
**first
, unsigned int count
)
2368 cpp_context
*context
= next_context (pfile
);
2370 context
->tokens_kind
= TOKENS_KIND_INDIRECT
;
2371 context
->c
.macro
= macro
;
2372 context
->buff
= buff
;
2373 FIRST (context
).ptoken
= first
;
2374 LAST (context
).ptoken
= first
+ count
;
2377 /* Push a list of tokens.
2379 A NULL macro means that we should continue the current macro
2380 expansion, in essence. That means that if we are currently in a
2381 macro expansion context, we'll make the new pfile->context refer to
2382 the current macro. */
2384 _cpp_push_token_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
2385 const cpp_token
*first
, unsigned int count
)
2387 cpp_context
*context
;
2390 macro
= macro_of_context (pfile
->context
);
2392 context
= next_context (pfile
);
2393 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
2394 context
->c
.macro
= macro
;
2395 context
->buff
= NULL
;
2396 FIRST (context
).token
= first
;
2397 LAST (context
).token
= first
+ count
;
2400 /* Build a context containing a list of tokens as well as their
2401 virtual locations and push it. TOKENS_BUFF is the buffer that
2402 contains the tokens pointed to by FIRST. If TOKENS_BUFF is
2403 non-NULL, it means that the context owns it, meaning that
2404 _cpp_pop_context will free it as well as VIRT_LOCS_BUFF that
2405 contains the virtual locations.
2407 A NULL macro means that we should continue the current macro
2408 expansion, in essence. That means that if we are currently in a
2409 macro expansion context, we'll make the new pfile->context refer to
2410 the current macro. */
2412 push_extended_tokens_context (cpp_reader
*pfile
,
2413 cpp_hashnode
*macro
,
2414 _cpp_buff
*token_buff
,
2415 location_t
*virt_locs
,
2416 const cpp_token
**first
,
2419 cpp_context
*context
;
2423 macro
= macro_of_context (pfile
->context
);
2425 context
= next_context (pfile
);
2426 context
->tokens_kind
= TOKENS_KIND_EXTENDED
;
2427 context
->buff
= token_buff
;
2429 m
= XNEW (macro_context
);
2430 m
->macro_node
= macro
;
2431 m
->virt_locs
= virt_locs
;
2432 m
->cur_virt_loc
= virt_locs
;
2434 FIRST (context
).ptoken
= first
;
2435 LAST (context
).ptoken
= first
+ count
;
2438 /* Push a traditional macro's replacement text. */
2440 _cpp_push_text_context (cpp_reader
*pfile
, cpp_hashnode
*macro
,
2441 const uchar
*start
, size_t len
)
2443 cpp_context
*context
= next_context (pfile
);
2445 context
->tokens_kind
= TOKENS_KIND_DIRECT
;
2446 context
->c
.macro
= macro
;
2447 context
->buff
= NULL
;
2448 CUR (context
) = start
;
2449 RLIMIT (context
) = start
+ len
;
2450 macro
->flags
|= NODE_DISABLED
;
2453 /* Creates a buffer that holds tokens a.k.a "token buffer", usually
2454 for the purpose of storing them on a cpp_context. If VIRT_LOCS is
2455 non-null (which means that -ftrack-macro-expansion is on),
2456 *VIRT_LOCS is set to a newly allocated buffer that is supposed to
2457 hold the virtual locations of the tokens resulting from macro
2460 tokens_buff_new (cpp_reader
*pfile
, size_t len
,
2461 location_t
**virt_locs
)
2463 size_t tokens_size
= len
* sizeof (cpp_token
*);
2464 size_t locs_size
= len
* sizeof (location_t
);
2466 if (virt_locs
!= NULL
)
2467 *virt_locs
= XNEWVEC (location_t
, locs_size
);
2468 return _cpp_get_buff (pfile
, tokens_size
);
2471 /* Returns the number of tokens contained in a token buffer. The
2472 buffer holds a set of cpp_token*. */
2474 tokens_buff_count (_cpp_buff
*buff
)
2476 return (BUFF_FRONT (buff
) - buff
->base
) / sizeof (cpp_token
*);
2479 /* Return a pointer to the last token contained in the token buffer
2481 static const cpp_token
**
2482 tokens_buff_last_token_ptr (_cpp_buff
*buff
)
2484 if (BUFF_FRONT (buff
) == buff
->base
)
2486 return &((const cpp_token
**) BUFF_FRONT (buff
))[-1];
2489 /* Remove the last token contained in the token buffer TOKENS_BUFF.
2490 If VIRT_LOCS_BUFF is non-NULL, it should point at the buffer
2491 containing the virtual locations of the tokens in TOKENS_BUFF; in
2492 which case the function updates that buffer as well. */
2494 tokens_buff_remove_last_token (_cpp_buff
*tokens_buff
)
2497 if (BUFF_FRONT (tokens_buff
) > tokens_buff
->base
)
2498 BUFF_FRONT (tokens_buff
) =
2499 (unsigned char *) &((cpp_token
**) BUFF_FRONT (tokens_buff
))[-1];
2502 /* Insert a token into the token buffer at the position pointed to by
2503 DEST. Note that the buffer is not enlarged so the previous token
2504 that was at *DEST is overwritten. VIRT_LOC_DEST, if non-null,
2505 means -ftrack-macro-expansion is effect; it then points to where to
2506 insert the virtual location of TOKEN. TOKEN is the token to
2507 insert. VIRT_LOC is the virtual location of the token, i.e, the
2508 location possibly encoding its locus across macro expansion. If
2509 TOKEN is an argument of a function-like macro (inside a macro
2510 replacement list), PARM_DEF_LOC is the spelling location of the
2511 macro parameter that TOKEN is replacing, in the replacement list of
2512 the macro. If TOKEN is not an argument of a function-like macro or
2513 if it doesn't come from a macro expansion, then VIRT_LOC can just
2514 be set to the same value as PARM_DEF_LOC. If MAP is non null, it
2515 means TOKEN comes from a macro expansion and MAP is the macro map
2516 associated to the macro. MACRO_TOKEN_INDEX points to the index of
2517 the token in the macro map; it is not considered if MAP is NULL.
2519 Upon successful completion this function returns the a pointer to
2520 the position of the token coming right after the insertion
2522 static inline const cpp_token
**
2523 tokens_buff_put_token_to (const cpp_token
**dest
,
2524 location_t
*virt_loc_dest
,
2525 const cpp_token
*token
,
2526 location_t virt_loc
,
2527 location_t parm_def_loc
,
2528 const line_map_macro
*map
,
2529 unsigned int macro_token_index
)
2531 location_t macro_loc
= virt_loc
;
2532 const cpp_token
**result
;
2536 /* -ftrack-macro-expansion is on. */
2538 macro_loc
= linemap_add_macro_token (map
, macro_token_index
,
2539 virt_loc
, parm_def_loc
);
2540 *virt_loc_dest
= macro_loc
;
2548 /* Adds a token at the end of the tokens contained in BUFFER. Note
2549 that this function doesn't enlarge BUFFER when the number of tokens
2550 reaches BUFFER's size; it aborts in that situation.
2552 TOKEN is the token to append. VIRT_LOC is the virtual location of
2553 the token, i.e, the location possibly encoding its locus across
2554 macro expansion. If TOKEN is an argument of a function-like macro
2555 (inside a macro replacement list), PARM_DEF_LOC is the location of
2556 the macro parameter that TOKEN is replacing. If TOKEN doesn't come
2557 from a macro expansion, then VIRT_LOC can just be set to the same
2558 value as PARM_DEF_LOC. If MAP is non null, it means TOKEN comes
2559 from a macro expansion and MAP is the macro map associated to the
2560 macro. MACRO_TOKEN_INDEX points to the index of the token in the
2561 macro map; It is not considered if MAP is NULL. If VIRT_LOCS is
2562 non-null, it means -ftrack-macro-expansion is on; in which case
2563 this function adds the virtual location DEF_LOC to the VIRT_LOCS
2564 array, at the same index as the one of TOKEN in BUFFER. Upon
2565 successful completion this function returns the a pointer to the
2566 position of the token coming right after the insertion point. */
2567 static const cpp_token
**
2568 tokens_buff_add_token (_cpp_buff
*buffer
,
2569 location_t
*virt_locs
,
2570 const cpp_token
*token
,
2571 location_t virt_loc
,
2572 location_t parm_def_loc
,
2573 const line_map_macro
*map
,
2574 unsigned int macro_token_index
)
2576 const cpp_token
**result
;
2577 location_t
*virt_loc_dest
= NULL
;
2578 unsigned token_index
=
2579 (BUFF_FRONT (buffer
) - buffer
->base
) / sizeof (cpp_token
*);
2581 /* Abort if we pass the end the buffer. */
2582 if (BUFF_FRONT (buffer
) > BUFF_LIMIT (buffer
))
2585 if (virt_locs
!= NULL
)
2586 virt_loc_dest
= &virt_locs
[token_index
];
2589 tokens_buff_put_token_to ((const cpp_token
**) BUFF_FRONT (buffer
),
2590 virt_loc_dest
, token
, virt_loc
, parm_def_loc
,
2591 map
, macro_token_index
);
2593 BUFF_FRONT (buffer
) = (unsigned char *) result
;
2597 /* Allocate space for the function-like macro argument ARG to store
2598 the tokens resulting from the macro-expansion of the tokens that
2599 make up ARG itself. That space is allocated in ARG->expanded and
2600 needs to be freed using free. */
2602 alloc_expanded_arg_mem (cpp_reader
*pfile
, macro_arg
*arg
, size_t capacity
)
2604 gcc_checking_assert (arg
->expanded
== NULL
2605 && arg
->expanded_virt_locs
== NULL
);
2607 arg
->expanded
= XNEWVEC (const cpp_token
*, capacity
);
2608 if (CPP_OPTION (pfile
, track_macro_expansion
))
2609 arg
->expanded_virt_locs
= XNEWVEC (location_t
, capacity
);
2613 /* If necessary, enlarge ARG->expanded to so that it can contain SIZE
2616 ensure_expanded_arg_room (cpp_reader
*pfile
, macro_arg
*arg
,
2617 size_t size
, size_t *expanded_capacity
)
2619 if (size
<= *expanded_capacity
)
2625 XRESIZEVEC (const cpp_token
*, arg
->expanded
, size
);
2626 *expanded_capacity
= size
;
2628 if (CPP_OPTION (pfile
, track_macro_expansion
))
2630 if (arg
->expanded_virt_locs
== NULL
)
2631 arg
->expanded_virt_locs
= XNEWVEC (location_t
, size
);
2633 arg
->expanded_virt_locs
= XRESIZEVEC (location_t
,
2634 arg
->expanded_virt_locs
,
2639 /* Expand an argument ARG before replacing parameters in a
2640 function-like macro. This works by pushing a context with the
2641 argument's tokens, and then expanding that into a temporary buffer
2642 as if it were a normal part of the token stream. collect_args()
2643 has terminated the argument's tokens with a CPP_EOF so that we know
2644 when we have fully expanded the argument. */
2646 expand_arg (cpp_reader
*pfile
, macro_arg
*arg
)
2649 bool saved_warn_trad
;
2650 bool track_macro_exp_p
= CPP_OPTION (pfile
, track_macro_expansion
);
2653 || arg
->expanded
!= NULL
)
2656 /* Don't warn about funlike macros when pre-expanding. */
2657 saved_warn_trad
= CPP_WTRADITIONAL (pfile
);
2658 CPP_WTRADITIONAL (pfile
) = 0;
2660 /* Loop, reading in the tokens of the argument. */
2662 alloc_expanded_arg_mem (pfile
, arg
, capacity
);
2664 if (track_macro_exp_p
)
2665 push_extended_tokens_context (pfile
, NULL
, NULL
,
2670 push_ptoken_context (pfile
, NULL
, NULL
,
2671 arg
->first
, arg
->count
+ 1);
2675 const cpp_token
*token
;
2676 location_t location
;
2678 ensure_expanded_arg_room (pfile
, arg
, arg
->expanded_count
+ 1,
2681 token
= cpp_get_token_1 (pfile
, &location
);
2683 if (token
->type
== CPP_EOF
)
2686 set_arg_token (arg
, token
, location
,
2687 arg
->expanded_count
, MACRO_ARG_TOKEN_EXPANDED
,
2688 CPP_OPTION (pfile
, track_macro_expansion
));
2689 arg
->expanded_count
++;
2692 _cpp_pop_context (pfile
);
2694 CPP_WTRADITIONAL (pfile
) = saved_warn_trad
;
2697 /* Returns the macro associated to the current context if we are in
2698 the context a macro expansion, NULL otherwise. */
2699 static cpp_hashnode
*
2700 macro_of_context (cpp_context
*context
)
2702 if (context
== NULL
)
2705 return (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2706 ? context
->c
.mc
->macro_node
2710 /* Return TRUE iff we are expanding a macro or are about to start
2711 expanding one. If we are effectively expanding a macro, the
2712 function macro_of_context returns a pointer to the macro being
2715 in_macro_expansion_p (cpp_reader
*pfile
)
2720 return (pfile
->about_to_expand_macro_p
2721 || macro_of_context (pfile
->context
));
2724 /* Pop the current context off the stack, re-enabling the macro if the
2725 context represented a macro's replacement list. Initially the
2726 context structure was not freed so that we can re-use it later, but
2727 now we do free it to reduce peak memory consumption. */
2729 _cpp_pop_context (cpp_reader
*pfile
)
2731 cpp_context
*context
= pfile
->context
;
2733 /* We should not be popping the base context. */
2734 gcc_assert (context
!= &pfile
->base_context
);
2736 if (context
->c
.macro
)
2738 cpp_hashnode
*macro
;
2739 if (context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2741 macro_context
*mc
= context
->c
.mc
;
2742 macro
= mc
->macro_node
;
2743 /* If context->buff is set, it means the life time of tokens
2744 is bound to the life time of this context; so we must
2745 free the tokens; that means we must free the virtual
2746 locations of these tokens too. */
2747 if (context
->buff
&& mc
->virt_locs
)
2749 free (mc
->virt_locs
);
2750 mc
->virt_locs
= NULL
;
2753 context
->c
.mc
= NULL
;
2756 macro
= context
->c
.macro
;
2758 /* Beware that MACRO can be NULL in cases like when we are
2759 called from expand_arg. In those cases, a dummy context with
2760 tokens is pushed just for the purpose of walking them using
2761 cpp_get_token_1. In that case, no 'macro' field is set into
2762 the dummy context. */
2764 /* Several contiguous macro expansion contexts can be
2765 associated to the same macro; that means it's the same
2766 macro expansion that spans across all these (sub)
2767 contexts. So we should re-enable an expansion-disabled
2768 macro only when we are sure we are really out of that
2770 && macro_of_context (context
->prev
) != macro
)
2771 macro
->flags
&= ~NODE_DISABLED
;
2773 if (macro
== pfile
->top_most_macro_node
&& context
->prev
== NULL
)
2774 /* We are popping the context of the top-most macro node. */
2775 pfile
->top_most_macro_node
= NULL
;
2780 /* Decrease memory peak consumption by freeing the memory used
2782 _cpp_free_buff (context
->buff
);
2785 pfile
->context
= context
->prev
;
2786 /* decrease peak memory consumption by feeing the context. */
2787 pfile
->context
->next
= NULL
;
2791 /* Return TRUE if we reached the end of the set of tokens stored in
2792 CONTEXT, FALSE otherwise. */
2794 reached_end_of_context (cpp_context
*context
)
2796 if (context
->tokens_kind
== TOKENS_KIND_DIRECT
)
2797 return FIRST (context
).token
== LAST (context
).token
;
2798 else if (context
->tokens_kind
== TOKENS_KIND_INDIRECT
2799 || context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
2800 return FIRST (context
).ptoken
== LAST (context
).ptoken
;
2805 /* Consume the next token contained in the current context of PFILE,
2806 and return it in *TOKEN. It's "full location" is returned in
2807 *LOCATION. If -ftrack-macro-location is in effeect, fFull location"
2808 means the location encoding the locus of the token across macro
2809 expansion; otherwise it's just is the "normal" location of the
2810 token which (*TOKEN)->src_loc. */
2812 consume_next_token_from_context (cpp_reader
*pfile
,
2813 const cpp_token
** token
,
2814 location_t
*location
)
2816 cpp_context
*c
= pfile
->context
;
2818 if ((c
)->tokens_kind
== TOKENS_KIND_DIRECT
)
2820 *token
= FIRST (c
).token
;
2821 *location
= (*token
)->src_loc
;
2824 else if ((c
)->tokens_kind
== TOKENS_KIND_INDIRECT
)
2826 *token
= *FIRST (c
).ptoken
;
2827 *location
= (*token
)->src_loc
;
2830 else if ((c
)->tokens_kind
== TOKENS_KIND_EXTENDED
)
2832 macro_context
*m
= c
->c
.mc
;
2833 *token
= *FIRST (c
).ptoken
;
2836 *location
= *m
->cur_virt_loc
;
2840 *location
= (*token
)->src_loc
;
2847 /* In the traditional mode of the preprocessor, if we are currently in
2848 a directive, the location of a token must be the location of the
2849 start of the directive line. This function returns the proper
2850 location if we are in the traditional mode, and just returns
2851 LOCATION otherwise. */
2853 static inline location_t
2854 maybe_adjust_loc_for_trad_cpp (cpp_reader
*pfile
, location_t location
)
2856 if (CPP_OPTION (pfile
, traditional
))
2858 if (pfile
->state
.in_directive
)
2859 return pfile
->directive_line
;
2864 /* Routine to get a token as well as its location.
2866 Macro expansions and directives are transparently handled,
2867 including entering included files. Thus tokens are post-macro
2868 expansion, and after any intervening directives. External callers
2869 see CPP_EOF only at EOF. Internal callers also see it when meeting
2870 a directive inside a macro call, when at the end of a directive and
2871 state.in_directive is still 1, and at the end of argument
2874 LOC is an out parameter; *LOC is set to the location "as expected
2875 by the user". Please read the comment of
2876 cpp_get_token_with_location to learn more about the meaning of this
2878 static const cpp_token
*
2879 cpp_get_token_1 (cpp_reader
*pfile
, location_t
*location
)
2881 const cpp_token
*result
;
2882 /* This token is a virtual token that either encodes a location
2883 related to macro expansion or a spelling location. */
2884 location_t virt_loc
= 0;
2885 /* pfile->about_to_expand_macro_p can be overriden by indirect calls
2886 to functions that push macro contexts. So let's save it so that
2887 we can restore it when we are about to leave this routine. */
2888 bool saved_about_to_expand_macro
= pfile
->about_to_expand_macro_p
;
2893 cpp_context
*context
= pfile
->context
;
2895 /* Context->prev == 0 <=> base context. */
2898 result
= _cpp_lex_token (pfile
);
2899 virt_loc
= result
->src_loc
;
2901 else if (!reached_end_of_context (context
))
2903 consume_next_token_from_context (pfile
, &result
,
2905 if (result
->flags
& PASTE_LEFT
)
2907 paste_all_tokens (pfile
, result
);
2908 if (pfile
->state
.in_directive
)
2910 result
= padding_token (pfile
, result
);
2916 if (pfile
->context
->c
.macro
)
2917 ++num_expanded_macros_counter
;
2918 _cpp_pop_context (pfile
);
2919 if (pfile
->state
.in_directive
)
2921 result
= &pfile
->avoid_paste
;
2925 if (pfile
->state
.in_directive
&& result
->type
== CPP_COMMENT
)
2928 if (result
->type
!= CPP_NAME
)
2931 node
= result
->val
.node
.node
;
2933 if (node
->type
== NT_VOID
|| (result
->flags
& NO_EXPAND
))
2936 if (!(node
->flags
& NODE_USED
)
2937 && node
->type
== NT_USER_MACRO
2938 && !node
->value
.macro
2939 && !cpp_get_deferred_macro (pfile
, node
, result
->src_loc
))
2942 if (!(node
->flags
& NODE_DISABLED
))
2945 /* If not in a macro context, and we're going to start an
2946 expansion, record the location and the top level macro
2947 about to be expanded. */
2948 if (!in_macro_expansion_p (pfile
))
2950 pfile
->invocation_location
= result
->src_loc
;
2951 pfile
->top_most_macro_node
= node
;
2953 if (pfile
->state
.prevent_expansion
)
2956 /* Conditional macros require that a predicate be evaluated
2958 if ((node
->flags
& NODE_CONDITIONAL
) != 0)
2960 if (pfile
->cb
.macro_to_expand
)
2962 bool whitespace_after
;
2963 const cpp_token
*peek_tok
= cpp_peek_token (pfile
, 0);
2965 whitespace_after
= (peek_tok
->type
== CPP_PADDING
2966 || (peek_tok
->flags
& PREV_WHITE
));
2967 node
= pfile
->cb
.macro_to_expand (pfile
, result
);
2969 ret
= enter_macro_context (pfile
, node
, result
, virt_loc
);
2970 else if (whitespace_after
)
2972 /* If macro_to_expand hook returned NULL and it
2973 ate some tokens, see if we don't need to add
2974 a padding token in between this and the
2976 peek_tok
= cpp_peek_token (pfile
, 0);
2977 if (peek_tok
->type
!= CPP_PADDING
2978 && (peek_tok
->flags
& PREV_WHITE
) == 0)
2979 _cpp_push_token_context (pfile
, NULL
,
2980 padding_token (pfile
,
2986 ret
= enter_macro_context (pfile
, node
, result
, virt_loc
);
2989 if (pfile
->state
.in_directive
|| ret
== 2)
2991 result
= padding_token (pfile
, result
);
2997 /* Flag this token as always unexpandable. FIXME: move this
2998 to collect_args()?. */
2999 cpp_token
*t
= _cpp_temp_token (pfile
);
3000 t
->type
= result
->type
;
3001 t
->flags
= result
->flags
| NO_EXPAND
;
3002 t
->val
= result
->val
;
3010 if (location
!= NULL
)
3013 virt_loc
= result
->src_loc
;
3014 *location
= virt_loc
;
3016 if (!CPP_OPTION (pfile
, track_macro_expansion
)
3017 && macro_of_context (pfile
->context
) != NULL
)
3018 /* We are in a macro expansion context, are not tracking
3019 virtual location, but were asked to report the location
3020 of the expansion point of the macro being expanded. */
3021 *location
= pfile
->invocation_location
;
3023 *location
= maybe_adjust_loc_for_trad_cpp (pfile
, *location
);
3026 pfile
->about_to_expand_macro_p
= saved_about_to_expand_macro
;
3028 if (pfile
->state
.directive_file_token
3029 && !pfile
->state
.parsing_args
3030 && !(result
->type
== CPP_PADDING
|| result
->type
== CPP_COMMENT
)
3031 && !(15 & --pfile
->state
.directive_file_token
))
3033 /* Do header-name frobbery. Concatenate < ... > as approprate.
3034 Do header search if needed, and finally drop the outer <> or
3036 pfile
->state
.angled_headers
= false;
3038 /* Do angle-header reconstitution. Then do include searching.
3039 We'll always end up with a ""-quoted header-name in that
3040 case. If searching finds nothing, we emit a diagnostic and
3045 cpp_token
*tmp
= _cpp_temp_token (pfile
);
3048 tmp
->type
= CPP_HEADER_NAME
;
3049 bool need_search
= !pfile
->state
.directive_file_token
;
3050 pfile
->state
.directive_file_token
= 0;
3052 bool angle
= result
->type
!= CPP_STRING
;
3053 if (result
->type
== CPP_HEADER_NAME
3054 || (result
->type
== CPP_STRING
&& result
->val
.str
.text
[0] != 'R'))
3056 len
= result
->val
.str
.len
- 2;
3057 fname
= XNEWVEC (char, len
+ 1);
3058 memcpy (fname
, result
->val
.str
.text
+ 1, len
);
3061 else if (result
->type
== CPP_LESS
)
3062 fname
= _cpp_bracket_include (pfile
);
3066 /* We have a header-name. Look it up. This will emit an
3067 unfound diagnostic. Canonicalize the found name. */
3068 const char *found
= fname
;
3072 found
= _cpp_find_header_unit (pfile
, fname
, angle
, tmp
->src_loc
);
3075 len
= strlen (found
);
3077 /* Force a leading './' if it's not absolute. */
3078 bool dotme
= (found
[0] == '.' ? !IS_DIR_SEPARATOR (found
[1])
3079 : found
[0] && !IS_ABSOLUTE_PATH (found
));
3081 if (BUFF_ROOM (pfile
->u_buff
) < len
+ 1 + dotme
* 2)
3082 _cpp_extend_buff (pfile
, &pfile
->u_buff
, len
+ 1 + dotme
* 2);
3083 unsigned char *buf
= BUFF_FRONT (pfile
->u_buff
);
3089 /* Apparently '/' is unconditional. */
3092 memcpy (&buf
[pos
], found
, len
);
3096 tmp
->val
.str
.len
= pos
;
3097 tmp
->val
.str
.text
= buf
;
3099 tmp
->type
= CPP_HEADER_NAME
;
3109 /* External routine to get a token. Also used nearly everywhere
3110 internally, except for places where we know we can safely call
3111 _cpp_lex_token directly, such as lexing a directive name.
3113 Macro expansions and directives are transparently handled,
3114 including entering included files. Thus tokens are post-macro
3115 expansion, and after any intervening directives. External callers
3116 see CPP_EOF only at EOF. Internal callers also see it when meeting
3117 a directive inside a macro call, when at the end of a directive and
3118 state.in_directive is still 1, and at the end of argument
3121 cpp_get_token (cpp_reader
*pfile
)
3123 return cpp_get_token_1 (pfile
, NULL
);
3126 /* Like cpp_get_token, but also returns a virtual token location
3127 separate from the spelling location carried by the returned token.
3129 LOC is an out parameter; *LOC is set to the location "as expected
3130 by the user". This matters when a token results from macro
3131 expansion; in that case the token's spelling location indicates the
3132 locus of the token in the definition of the macro but *LOC
3133 virtually encodes all the other meaningful locuses associated to
3136 What? virtual location? Yes, virtual location.
3138 If the token results from macro expansion and if macro expansion
3139 location tracking is enabled its virtual location encodes (at the
3142 - the spelling location of the token
3144 - the locus of the macro expansion point
3146 - the locus of the point where the token got instantiated as part
3147 of the macro expansion process.
3149 You have to use the linemap API to get the locus you are interested
3150 in from a given virtual location.
3152 Note however that virtual locations are not necessarily ordered for
3153 relations '<' and '>'. One must use the function
3154 linemap_location_before_p instead of using the relational operator
3157 If macro expansion tracking is off and if the token results from
3158 macro expansion the virtual location is the expansion point of the
3159 macro that got expanded.
3161 When the token doesn't result from macro expansion, the virtual
3162 location is just the same thing as its spelling location. */
3165 cpp_get_token_with_location (cpp_reader
*pfile
, location_t
*loc
)
3167 return cpp_get_token_1 (pfile
, loc
);
3170 /* Returns true if we're expanding an object-like macro that was
3171 defined in a system header. Just checks the macro at the top of
3172 the stack. Used for diagnostic suppression.
3173 Also return true for builtin macros. */
3175 cpp_sys_macro_p (cpp_reader
*pfile
)
3177 cpp_hashnode
*node
= NULL
;
3179 if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
3180 node
= pfile
->context
->c
.mc
->macro_node
;
3182 node
= pfile
->context
->c
.macro
;
3186 if (cpp_builtin_macro_p (node
))
3188 return node
->value
.macro
&& node
->value
.macro
->syshdr
;
3191 /* Read each token in, until end of the current file. Directives are
3192 transparently processed. */
3194 cpp_scan_nooutput (cpp_reader
*pfile
)
3196 /* Request a CPP_EOF token at the end of this file, rather than
3197 transparently continuing with the including file. */
3198 pfile
->buffer
->return_at_eof
= true;
3200 pfile
->state
.discarding_output
++;
3201 pfile
->state
.prevent_expansion
++;
3203 if (CPP_OPTION (pfile
, traditional
))
3204 while (_cpp_read_logical_line_trad (pfile
))
3207 while (cpp_get_token (pfile
)->type
!= CPP_EOF
)
3210 pfile
->state
.discarding_output
--;
3211 pfile
->state
.prevent_expansion
--;
3214 /* Step back one or more tokens obtained from the lexer. */
3216 _cpp_backup_tokens_direct (cpp_reader
*pfile
, unsigned int count
)
3218 pfile
->lookaheads
+= count
;
3222 if (pfile
->cur_token
== pfile
->cur_run
->base
3223 /* Possible with -fpreprocessed and no leading #line. */
3224 && pfile
->cur_run
->prev
!= NULL
)
3226 pfile
->cur_run
= pfile
->cur_run
->prev
;
3227 pfile
->cur_token
= pfile
->cur_run
->limit
;
3232 /* Step back one (or more) tokens. Can only step back more than 1 if
3233 they are from the lexer, and not from macro expansion. */
3235 _cpp_backup_tokens (cpp_reader
*pfile
, unsigned int count
)
3237 if (pfile
->context
->prev
== NULL
)
3238 _cpp_backup_tokens_direct (pfile
, count
);
3243 if (pfile
->context
->tokens_kind
== TOKENS_KIND_DIRECT
)
3244 FIRST (pfile
->context
).token
--;
3245 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_INDIRECT
)
3246 FIRST (pfile
->context
).ptoken
--;
3247 else if (pfile
->context
->tokens_kind
== TOKENS_KIND_EXTENDED
)
3249 FIRST (pfile
->context
).ptoken
--;
3250 if (pfile
->context
->c
.macro
)
3252 macro_context
*m
= pfile
->context
->c
.mc
;
3254 gcc_checking_assert (m
->cur_virt_loc
>= m
->virt_locs
);
3264 /* #define directive parsing and handling. */
3266 /* Returns true if a macro redefinition warning is required. */
3268 warn_of_redefinition (cpp_reader
*pfile
, cpp_hashnode
*node
,
3269 const cpp_macro
*macro2
)
3271 /* Some redefinitions need to be warned about regardless. */
3272 if (node
->flags
& NODE_WARN
)
3275 /* Suppress warnings for builtins that lack the NODE_WARN flag,
3276 unless Wbuiltin-macro-redefined. */
3277 if (cpp_builtin_macro_p (node
))
3278 return CPP_OPTION (pfile
, warn_builtin_macro_redefined
);
3280 /* Redefinitions of conditional (context-sensitive) macros, on
3281 the other hand, must be allowed silently. */
3282 if (node
->flags
& NODE_CONDITIONAL
)
3285 if (cpp_macro
*macro1
= get_deferred_or_lazy_macro (pfile
, node
, macro2
->line
))
3286 return cpp_compare_macros (macro1
, macro2
);
3290 /* Return TRUE if MACRO1 and MACRO2 differ. */
3293 cpp_compare_macros (const cpp_macro
*macro1
, const cpp_macro
*macro2
)
3295 /* Redefinition of a macro is allowed if and only if the old and new
3296 definitions are the same. (6.10.3 paragraph 2). */
3298 /* Don't check count here as it can be different in valid
3299 traditional redefinitions with just whitespace differences. */
3300 if (macro1
->paramc
!= macro2
->paramc
3301 || macro1
->fun_like
!= macro2
->fun_like
3302 || macro1
->variadic
!= macro2
->variadic
)
3305 /* Check parameter spellings. */
3306 for (unsigned i
= macro1
->paramc
; i
--; )
3307 if (macro1
->parm
.params
[i
] != macro2
->parm
.params
[i
])
3310 /* Check the replacement text or tokens. */
3311 if (macro1
->kind
== cmk_traditional
)
3312 return _cpp_expansions_different_trad (macro1
, macro2
);
3314 if (macro1
->count
!= macro2
->count
)
3317 for (unsigned i
= macro1
->count
; i
--; )
3318 if (!_cpp_equiv_tokens (¯o1
->exp
.tokens
[i
], ¯o2
->exp
.tokens
[i
]))
3324 /* Free the definition of hashnode H. */
3326 _cpp_free_definition (cpp_hashnode
*h
)
3328 /* Macros and assertions no longer have anything to free. */
3330 h
->value
.answers
= NULL
;
3331 h
->flags
&= ~(NODE_DISABLED
| NODE_USED
);
3334 /* Save parameter NODE (spelling SPELLING) to the parameter list of
3335 macro MACRO. Returns true on success, false on failure. */
3337 _cpp_save_parameter (cpp_reader
*pfile
, unsigned n
, cpp_hashnode
*node
,
3338 cpp_hashnode
*spelling
)
3340 /* Constraint 6.10.3.6 - duplicate parameter names. */
3341 if (node
->type
== NT_MACRO_ARG
)
3343 cpp_error (pfile
, CPP_DL_ERROR
, "duplicate macro parameter \"%s\"",
3348 unsigned len
= (n
+ 1) * sizeof (struct macro_arg_saved_data
);
3349 if (len
> pfile
->macro_buffer_len
)
3352 = XRESIZEVEC (unsigned char, pfile
->macro_buffer
, len
);
3353 pfile
->macro_buffer_len
= len
;
3356 macro_arg_saved_data
*saved
= (macro_arg_saved_data
*)pfile
->macro_buffer
;
3357 saved
[n
].canonical_node
= node
;
3358 saved
[n
].value
= node
->value
;
3359 saved
[n
].type
= node
->type
;
3361 void *base
= _cpp_reserve_room (pfile
, n
* sizeof (cpp_hashnode
*),
3362 sizeof (cpp_hashnode
*));
3363 ((cpp_hashnode
**)base
)[n
] = spelling
;
3365 /* Morph into a macro arg. */
3366 node
->type
= NT_MACRO_ARG
;
3367 /* Index is 1 based. */
3368 node
->value
.arg_index
= n
+ 1;
3373 /* Restore the parameters to their previous state. */
3375 _cpp_unsave_parameters (cpp_reader
*pfile
, unsigned n
)
3377 /* Clear the fast argument lookup indices. */
3380 struct macro_arg_saved_data
*save
=
3381 &((struct macro_arg_saved_data
*) pfile
->macro_buffer
)[n
];
3383 struct cpp_hashnode
*node
= save
->canonical_node
;
3384 node
->type
= save
->type
;
3385 node
->value
= save
->value
;
3389 /* Check the syntax of the parameters in a MACRO definition. Return
3390 false on failure. Set *N_PTR and *VARADIC_PTR as appropriate.
3392 '(' parm-list ',' last-parm ')'
3402 parse_params (cpp_reader
*pfile
, unsigned *n_ptr
, bool *varadic_ptr
)
3404 unsigned nparms
= 0;
3407 for (bool prev_ident
= false;;)
3409 const cpp_token
*token
= _cpp_lex_token (pfile
);
3411 switch (token
->type
)
3414 /* Allow/ignore comments in parameter lists if we are
3415 preserving comments in macro expansions. */
3416 if (!CPP_OPTION (pfile
, discard_comments_in_macro_exp
))
3423 const char *const msgs
[5] =
3425 N_("expected parameter name, found \"%s\""),
3426 N_("expected ',' or ')', found \"%s\""),
3427 N_("expected parameter name before end of line"),
3428 N_("expected ')' before end of line"),
3429 N_("expected ')' after \"...\"")
3431 unsigned ix
= prev_ident
;
3432 const unsigned char *as_text
= NULL
;
3435 else if (token
->type
== CPP_EOF
)
3438 as_text
= cpp_token_as_text (pfile
, token
);
3439 cpp_error (pfile
, CPP_DL_ERROR
, msgs
[ix
], as_text
);
3444 if (prev_ident
|| *varadic_ptr
)
3448 if (!_cpp_save_parameter (pfile
, nparms
, token
->val
.node
.node
,
3449 token
->val
.node
.spelling
))
3454 case CPP_CLOSE_PAREN
:
3455 if (prev_ident
|| !nparms
|| *varadic_ptr
)
3463 if (!prev_ident
|| *varadic_ptr
)
3471 *varadic_ptr
= true;
3474 /* An ISO bare ellipsis. */
3475 _cpp_save_parameter (pfile
, nparms
,
3476 pfile
->spec_nodes
.n__VA_ARGS__
,
3477 pfile
->spec_nodes
.n__VA_ARGS__
);
3479 pfile
->state
.va_args_ok
= 1;
3480 if (! CPP_OPTION (pfile
, c99
)
3481 && CPP_OPTION (pfile
, cpp_pedantic
)
3482 && CPP_OPTION (pfile
, warn_variadic_macros
))
3484 (pfile
, CPP_W_VARIADIC_MACROS
,
3485 CPP_OPTION (pfile
, cplusplus
)
3486 ? N_("anonymous variadic macros were introduced in C++11")
3487 : N_("anonymous variadic macros were introduced in C99"));
3488 else if (CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) > 0
3489 && ! CPP_OPTION (pfile
, cplusplus
))
3490 cpp_error (pfile
, CPP_DL_WARNING
,
3491 "anonymous variadic macros were introduced in C99");
3493 else if (CPP_OPTION (pfile
, cpp_pedantic
)
3494 && CPP_OPTION (pfile
, warn_variadic_macros
))
3495 cpp_pedwarning (pfile
, CPP_W_VARIADIC_MACROS
,
3496 CPP_OPTION (pfile
, cplusplus
)
3497 ? N_("ISO C++ does not permit named variadic macros")
3498 : N_("ISO C does not permit named variadic macros"));
3509 /* Lex a token from the expansion of MACRO, but mark parameters as we
3510 find them and warn of traditional stringification. */
3512 lex_expansion_token (cpp_reader
*pfile
, cpp_macro
*macro
)
3514 macro
= (cpp_macro
*)_cpp_reserve_room (pfile
,
3515 sizeof (cpp_macro
) - sizeof (cpp_token
)
3516 + macro
->count
* sizeof (cpp_token
),
3517 sizeof (cpp_token
));
3518 cpp_token
*saved_cur_token
= pfile
->cur_token
;
3519 pfile
->cur_token
= ¯o
->exp
.tokens
[macro
->count
];
3520 cpp_token
*token
= _cpp_lex_direct (pfile
);
3521 pfile
->cur_token
= saved_cur_token
;
3523 /* Is this a parameter? */
3524 if (token
->type
== CPP_NAME
&& token
->val
.node
.node
->type
== NT_MACRO_ARG
)
3526 /* Morph into a parameter reference. */
3527 cpp_hashnode
*spelling
= token
->val
.node
.spelling
;
3528 token
->type
= CPP_MACRO_ARG
;
3529 token
->val
.macro_arg
.arg_no
= token
->val
.node
.node
->value
.arg_index
;
3530 token
->val
.macro_arg
.spelling
= spelling
;
3532 else if (CPP_WTRADITIONAL (pfile
) && macro
->paramc
> 0
3533 && (token
->type
== CPP_STRING
|| token
->type
== CPP_CHAR
))
3534 check_trad_stringification (pfile
, macro
, &token
->val
.str
);
3540 create_iso_definition (cpp_reader
*pfile
)
3542 bool following_paste_op
= false;
3543 const char *paste_op_error_msg
=
3544 N_("'##' cannot appear at either end of a macro expansion");
3545 unsigned int num_extra_tokens
= 0;
3546 unsigned nparms
= 0;
3547 cpp_hashnode
**params
= NULL
;
3548 bool varadic
= false;
3550 cpp_macro
*macro
= NULL
;
3552 /* Look at the first token, to see if this is a function-like
3555 cpp_token
*saved_cur_token
= pfile
->cur_token
;
3556 pfile
->cur_token
= &first
;
3557 cpp_token
*token
= _cpp_lex_direct (pfile
);
3558 pfile
->cur_token
= saved_cur_token
;
3560 if (token
->flags
& PREV_WHITE
)
3561 /* Preceeded by space, must be part of expansion. */;
3562 else if (token
->type
== CPP_OPEN_PAREN
)
3564 /* An open-paren, get a parameter list. */
3565 if (!parse_params (pfile
, &nparms
, &varadic
))
3568 params
= (cpp_hashnode
**)_cpp_commit_buff
3569 (pfile
, sizeof (cpp_hashnode
*) * nparms
);
3572 else if (token
->type
!= CPP_EOF
3573 && !(token
->type
== CPP_COMMENT
3574 && ! CPP_OPTION (pfile
, discard_comments_in_macro_exp
)))
3576 /* While ISO C99 requires whitespace before replacement text
3577 in a macro definition, ISO C90 with TC1 allows characters
3578 from the basic source character set there. */
3579 if (CPP_OPTION (pfile
, c99
))
3580 cpp_error (pfile
, CPP_DL_PEDWARN
,
3581 CPP_OPTION (pfile
, cplusplus
)
3582 ? N_("ISO C++11 requires whitespace after the macro name")
3583 : N_("ISO C99 requires whitespace after the macro name"));
3586 enum cpp_diagnostic_level warntype
= CPP_DL_WARNING
;
3587 switch (token
->type
)
3591 case CPP_OBJC_STRING
:
3592 /* '@' is not in basic character set. */
3593 warntype
= CPP_DL_PEDWARN
;
3596 /* Basic character set sans letters, digits and _. */
3597 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
3598 token
->val
.str
.text
[0]) == NULL
)
3599 warntype
= CPP_DL_PEDWARN
;
3602 /* All other tokens start with a character from basic
3606 cpp_error (pfile
, warntype
,
3607 "missing whitespace after the macro name");
3611 macro
= _cpp_new_macro (pfile
, cmk_macro
,
3612 _cpp_reserve_room (pfile
, 0, sizeof (cpp_macro
)));
3616 macro
->variadic
= varadic
;
3617 macro
->paramc
= nparms
;
3618 macro
->parm
.params
= params
;
3619 macro
->fun_like
= true;
3623 /* Preserve the token we peeked, there is already a single slot for it. */
3624 macro
->exp
.tokens
[0] = *token
;
3625 token
= ¯o
->exp
.tokens
[0];
3629 for (vaopt_state
vaopt_tracker (pfile
, macro
->variadic
, NULL
);; token
= NULL
)
3633 macro
= lex_expansion_token (pfile
, macro
);
3634 token
= ¯o
->exp
.tokens
[macro
->count
++];
3637 /* Check the stringifying # constraint 6.10.3.2.1 of
3638 function-like macros when lexing the subsequent token. */
3639 if (macro
->count
> 1 && token
[-1].type
== CPP_HASH
&& macro
->fun_like
)
3641 if (token
->type
== CPP_MACRO_ARG
3643 && token
->type
== CPP_NAME
3644 && token
->val
.node
.node
== pfile
->spec_nodes
.n__VA_OPT__
))
3646 if (token
->flags
& PREV_WHITE
)
3647 token
->flags
|= SP_PREV_WHITE
;
3648 if (token
[-1].flags
& DIGRAPH
)
3649 token
->flags
|= SP_DIGRAPH
;
3650 token
->flags
&= ~PREV_WHITE
;
3651 token
->flags
|= STRINGIFY_ARG
;
3652 token
->flags
|= token
[-1].flags
& PREV_WHITE
;
3653 token
[-1] = token
[0];
3656 /* Let assembler get away with murder. */
3657 else if (CPP_OPTION (pfile
, lang
) != CLK_ASM
)
3659 cpp_error (pfile
, CPP_DL_ERROR
,
3660 "'#' is not followed by a macro parameter");
3665 if (token
->type
== CPP_EOF
)
3667 /* Paste operator constraint 6.10.3.3.1:
3668 Token-paste ##, can appear in both object-like and
3669 function-like macros, but not at the end. */
3670 if (following_paste_op
)
3672 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
3675 if (!vaopt_tracker
.completed ())
3680 /* Paste operator constraint 6.10.3.3.1. */
3681 if (token
->type
== CPP_PASTE
)
3683 /* Token-paste ##, can appear in both object-like and
3684 function-like macros, but not at the beginning. */
3685 if (macro
->count
== 1)
3687 cpp_error (pfile
, CPP_DL_ERROR
, paste_op_error_msg
);
3691 if (following_paste_op
)
3693 /* Consecutive paste operators. This one will be moved
3696 token
->val
.token_no
= macro
->count
- 1;
3700 /* Drop the paste operator. */
3702 token
[-1].flags
|= PASTE_LEFT
;
3703 if (token
->flags
& DIGRAPH
)
3704 token
[-1].flags
|= SP_DIGRAPH
;
3705 if (token
->flags
& PREV_WHITE
)
3706 token
[-1].flags
|= SP_PREV_WHITE
;
3708 following_paste_op
= true;
3711 following_paste_op
= false;
3713 if (vaopt_tracker
.update (token
) == vaopt_state::ERROR
)
3717 /* We're committed to winning now. */
3720 /* Don't count the CPP_EOF. */
3723 macro
= (cpp_macro
*)_cpp_commit_buff
3724 (pfile
, sizeof (cpp_macro
) - sizeof (cpp_token
)
3725 + sizeof (cpp_token
) * macro
->count
);
3727 /* Clear whitespace on first token. */
3729 macro
->exp
.tokens
[0].flags
&= ~PREV_WHITE
;
3731 if (num_extra_tokens
)
3733 /* Place second and subsequent ## or %:%: tokens in sequences of
3734 consecutive such tokens at the end of the list to preserve
3735 information about where they appear, how they are spelt and
3736 whether they are preceded by whitespace without otherwise
3737 interfering with macro expansion. Remember, this is
3738 extremely rare, so efficiency is not a priority. */
3739 cpp_token
*temp
= (cpp_token
*)_cpp_reserve_room
3740 (pfile
, 0, num_extra_tokens
* sizeof (cpp_token
));
3741 unsigned extra_ix
= 0, norm_ix
= 0;
3742 cpp_token
*exp
= macro
->exp
.tokens
;
3743 for (unsigned ix
= 0; ix
!= macro
->count
; ix
++)
3744 if (exp
[ix
].type
== CPP_PASTE
)
3745 temp
[extra_ix
++] = exp
[ix
];
3747 exp
[norm_ix
++] = exp
[ix
];
3748 memcpy (&exp
[norm_ix
], temp
, num_extra_tokens
* sizeof (cpp_token
));
3750 /* Record there are extra tokens. */
3751 macro
->extra_tokens
= 1;
3755 pfile
->state
.va_args_ok
= 0;
3756 _cpp_unsave_parameters (pfile
, nparms
);
3758 return ok
? macro
: NULL
;
3762 _cpp_new_macro (cpp_reader
*pfile
, cpp_macro_kind kind
, void *placement
)
3764 cpp_macro
*macro
= (cpp_macro
*) placement
;
3766 /* Zero init all the fields. This'll tell the compiler know all the
3767 following inits are writing a virgin object. */
3768 memset (macro
, 0, offsetof (cpp_macro
, exp
));
3770 macro
->line
= pfile
->directive_line
;
3771 macro
->parm
.params
= 0;
3774 macro
->variadic
= 0;
3775 macro
->used
= !CPP_OPTION (pfile
, warn_unused_macros
);
3777 macro
->fun_like
= 0;
3778 macro
->imported_p
= false;
3779 macro
->extra_tokens
= 0;
3780 /* To suppress some diagnostics. */
3781 macro
->syshdr
= pfile
->buffer
&& pfile
->buffer
->sysp
!= 0;
3788 /* Parse a macro and save its expansion. Returns nonzero on success. */
3790 _cpp_create_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3794 if (CPP_OPTION (pfile
, traditional
))
3795 macro
= _cpp_create_trad_definition (pfile
);
3797 macro
= create_iso_definition (pfile
);
3802 if (cpp_macro_p (node
))
3804 if (CPP_OPTION (pfile
, warn_unused_macros
))
3805 _cpp_warn_if_unused_macro (pfile
, node
, NULL
);
3807 if (warn_of_redefinition (pfile
, node
, macro
))
3809 const enum cpp_warning_reason reason
3810 = (cpp_builtin_macro_p (node
) && !(node
->flags
& NODE_WARN
))
3811 ? CPP_W_BUILTIN_MACRO_REDEFINED
: CPP_W_NONE
;
3814 cpp_pedwarning_with_line (pfile
, reason
,
3815 pfile
->directive_line
, 0,
3816 "\"%s\" redefined", NODE_NAME (node
));
3818 if (warned
&& cpp_user_macro_p (node
))
3819 cpp_error_with_line (pfile
, CPP_DL_NOTE
,
3820 node
->value
.macro
->line
, 0,
3821 "this is the location of the previous definition");
3823 _cpp_free_definition (node
);
3826 /* Enter definition in hash table. */
3827 node
->type
= NT_USER_MACRO
;
3828 node
->value
.macro
= macro
;
3829 if (! ustrncmp (NODE_NAME (node
), DSC ("__STDC_"))
3830 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_FORMAT_MACROS")
3831 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
3832 in the C standard, as something that one must use in C++.
3833 However DR#593 and C++11 indicate that they play no role in C++.
3834 We special-case them anyway. */
3835 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_LIMIT_MACROS")
3836 && ustrcmp (NODE_NAME (node
), (const uchar
*) "__STDC_CONSTANT_MACROS"))
3837 node
->flags
|= NODE_WARN
;
3839 /* If user defines one of the conditional macros, remove the
3841 node
->flags
&= ~NODE_CONDITIONAL
;
3847 cpp_define_lazily (cpp_reader
*pfile
, cpp_hashnode
*node
, unsigned num
)
3849 cpp_macro
*macro
= node
->value
.macro
;
3851 gcc_checking_assert (pfile
->cb
.user_lazy_macro
&& macro
&& num
< UCHAR_MAX
);
3853 macro
->lazy
= num
+ 1;
3856 /* NODE is a deferred macro, resolve it, returning the definition
3857 (which may be NULL). */
3859 cpp_get_deferred_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
3862 gcc_checking_assert (node
->type
== NT_USER_MACRO
);
3864 node
->value
.macro
= pfile
->cb
.user_deferred_macro (pfile
, loc
, node
);
3866 if (!node
->value
.macro
)
3867 node
->type
= NT_VOID
;
3869 return node
->value
.macro
;
3873 get_deferred_or_lazy_macro (cpp_reader
*pfile
, cpp_hashnode
*node
,
3876 cpp_macro
*macro
= node
->value
.macro
;
3879 macro
= cpp_get_deferred_macro (pfile
, node
, loc
);
3880 gcc_checking_assert (!macro
|| !macro
->lazy
);
3882 else if (macro
->lazy
)
3884 pfile
->cb
.user_lazy_macro (pfile
, macro
, macro
->lazy
- 1);
3891 /* Notify the use of NODE in a macro-aware context (i.e. expanding it,
3892 or testing its existance). Also applies any lazy definition.
3893 Return FALSE if the macro isn't really there. */
3896 _cpp_notify_macro_use (cpp_reader
*pfile
, cpp_hashnode
*node
,
3899 node
->flags
|= NODE_USED
;
3903 if (!get_deferred_or_lazy_macro (pfile
, node
, loc
))
3907 case NT_BUILTIN_MACRO
:
3908 if (pfile
->cb
.used_define
)
3909 pfile
->cb
.used_define (pfile
, loc
, node
);
3913 if (pfile
->cb
.used_undef
)
3914 pfile
->cb
.used_undef (pfile
, loc
, node
);
3924 /* Warn if a token in STRING matches one of a function-like MACRO's
3927 check_trad_stringification (cpp_reader
*pfile
, const cpp_macro
*macro
,
3928 const cpp_string
*string
)
3930 unsigned int i
, len
;
3931 const uchar
*p
, *q
, *limit
;
3933 /* Loop over the string. */
3934 limit
= string
->text
+ string
->len
- 1;
3935 for (p
= string
->text
+ 1; p
< limit
; p
= q
)
3937 /* Find the start of an identifier. */
3938 while (p
< limit
&& !is_idstart (*p
))
3941 /* Find the end of the identifier. */
3943 while (q
< limit
&& is_idchar (*q
))
3948 /* Loop over the function macro arguments to see if the
3949 identifier inside the string matches one of them. */
3950 for (i
= 0; i
< macro
->paramc
; i
++)
3952 const cpp_hashnode
*node
= macro
->parm
.params
[i
];
3954 if (NODE_LEN (node
) == len
3955 && !memcmp (p
, NODE_NAME (node
), len
))
3957 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
3958 "macro argument \"%s\" would be stringified in traditional C",
3966 /* Returns the name, arguments and expansion of a macro, in a format
3967 suitable to be read back in again, and therefore also for DWARF 2
3968 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
3969 Caller is expected to generate the "#define" bit if needed. The
3970 returned text is temporary, and automatically freed later. */
3971 const unsigned char *
3972 cpp_macro_definition (cpp_reader
*pfile
, cpp_hashnode
*node
)
3974 gcc_checking_assert (cpp_user_macro_p (node
));
3976 if (const cpp_macro
*macro
= get_deferred_or_lazy_macro (pfile
, node
, 0))
3977 return cpp_macro_definition (pfile
, node
, macro
);
3981 const unsigned char *
3982 cpp_macro_definition (cpp_reader
*pfile
, cpp_hashnode
*node
,
3983 const cpp_macro
*macro
)
3985 unsigned int i
, len
;
3986 unsigned char *buffer
;
3988 /* Calculate length. */
3989 len
= NODE_LEN (node
) * 10 + 2; /* ' ' and NUL. */
3990 if (macro
->fun_like
)
3992 len
+= 4; /* "()" plus possible final ".." of named
3993 varargs (we have + 1 below). */
3994 for (i
= 0; i
< macro
->paramc
; i
++)
3995 len
+= NODE_LEN (macro
->parm
.params
[i
]) + 1; /* "," */
3998 /* This should match below where we fill in the buffer. */
3999 if (CPP_OPTION (pfile
, traditional
))
4000 len
+= _cpp_replacement_text_len (macro
);
4003 unsigned int count
= macro_real_token_count (macro
);
4004 for (i
= 0; i
< count
; i
++)
4006 const cpp_token
*token
= ¯o
->exp
.tokens
[i
];
4008 if (token
->type
== CPP_MACRO_ARG
)
4009 len
+= NODE_LEN (token
->val
.macro_arg
.spelling
);
4011 len
+= cpp_token_len (token
);
4013 if (token
->flags
& STRINGIFY_ARG
)
4015 if (token
->flags
& PASTE_LEFT
)
4016 len
+= 3; /* " ##" */
4017 if (token
->flags
& PREV_WHITE
)
4022 if (len
> pfile
->macro_buffer_len
)
4024 pfile
->macro_buffer
= XRESIZEVEC (unsigned char,
4025 pfile
->macro_buffer
, len
);
4026 pfile
->macro_buffer_len
= len
;
4029 /* Fill in the buffer. Start with the macro name. */
4030 buffer
= pfile
->macro_buffer
;
4031 buffer
= _cpp_spell_ident_ucns (buffer
, node
);
4033 /* Parameter names. */
4034 if (macro
->fun_like
)
4037 for (i
= 0; i
< macro
->paramc
; i
++)
4039 cpp_hashnode
*param
= macro
->parm
.params
[i
];
4041 if (param
!= pfile
->spec_nodes
.n__VA_ARGS__
)
4043 memcpy (buffer
, NODE_NAME (param
), NODE_LEN (param
));
4044 buffer
+= NODE_LEN (param
);
4047 if (i
+ 1 < macro
->paramc
)
4048 /* Don't emit a space after the comma here; we're trying
4049 to emit a Dwarf-friendly definition, and the Dwarf spec
4050 forbids spaces in the argument list. */
4052 else if (macro
->variadic
)
4053 *buffer
++ = '.', *buffer
++ = '.', *buffer
++ = '.';
4058 /* The Dwarf spec requires a space after the macro name, even if the
4059 definition is the empty string. */
4062 if (CPP_OPTION (pfile
, traditional
))
4063 buffer
= _cpp_copy_replacement_text (macro
, buffer
);
4064 else if (macro
->count
)
4065 /* Expansion tokens. */
4067 unsigned int count
= macro_real_token_count (macro
);
4068 for (i
= 0; i
< count
; i
++)
4070 const cpp_token
*token
= ¯o
->exp
.tokens
[i
];
4072 if (token
->flags
& PREV_WHITE
)
4074 if (token
->flags
& STRINGIFY_ARG
)
4077 if (token
->type
== CPP_MACRO_ARG
)
4080 NODE_NAME (token
->val
.macro_arg
.spelling
),
4081 NODE_LEN (token
->val
.macro_arg
.spelling
));
4082 buffer
+= NODE_LEN (token
->val
.macro_arg
.spelling
);
4085 buffer
= cpp_spell_token (pfile
, token
, buffer
, true);
4087 if (token
->flags
& PASTE_LEFT
)
4092 /* Next has PREV_WHITE; see _cpp_create_definition. */
4098 return pfile
->macro_buffer
;