]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/macro.c
re PR preprocessor/36479 (Short buffer in libcpp)
[thirdparty/gcc.git] / libcpp / macro.c
CommitLineData
93c80368 1/* Part of CPP library. (Macro and #define handling.)
711b8824 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
ee380365 3 1999, 2000, 2001, 2002, 2003, 2004, 2005,
ec46053b 4 2006, 2007, 2008 Free Software Foundation, Inc.
711b8824
ZW
5 Written by Per Bothner, 1994.
6 Based on CCCP program by Paul Rubin, June 1986
7 Adapted to ANSI C, Richard Stallman, Jan 1987
8
9This program is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
11Free Software Foundation; either version 2, or (at your option) any
12later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
200031d1 21Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
711b8824
ZW
22
23 In other words, you are welcome to use, share and improve this program.
24 You are forbidden to forbid anyone else to use, share and improve
25 what you give them. Help stamp out software-hoarding! */
26
27#include "config.h"
28#include "system.h"
29#include "cpplib.h"
4f4e53dd 30#include "internal.h"
711b8824 31
93c80368
NB
32typedef struct macro_arg macro_arg;
33struct macro_arg
34{
4ed5bcfb 35 const cpp_token **first; /* First token in unexpanded argument. */
6d2f8887 36 const cpp_token **expanded; /* Macro-expanded argument. */
4ed5bcfb 37 const cpp_token *stringified; /* Stringified argument. */
93c80368
NB
38 unsigned int count; /* # of tokens in argument. */
39 unsigned int expanded_count; /* # of tokens in expanded argument. */
711b8824
ZW
40};
41
93c80368
NB
42/* Macro expansion. */
43
765d600a
JJ
44static int enter_macro_context (cpp_reader *, cpp_hashnode *,
45 const cpp_token *);
6cf87ca4 46static int builtin_macro (cpp_reader *, cpp_hashnode *);
6cf87ca4
ZW
47static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
48 const cpp_token **, unsigned int);
765d600a
JJ
49static _cpp_buff *collect_args (cpp_reader *, const cpp_hashnode *,
50 _cpp_buff **);
6cf87ca4
ZW
51static cpp_context *next_context (cpp_reader *);
52static const cpp_token *padding_token (cpp_reader *, const cpp_token *);
53static void expand_arg (cpp_reader *, macro_arg *);
54static const cpp_token *new_string_token (cpp_reader *, uchar *, unsigned int);
55static const cpp_token *stringify_arg (cpp_reader *, macro_arg *);
56static void paste_all_tokens (cpp_reader *, const cpp_token *);
57static bool paste_tokens (cpp_reader *, const cpp_token **, const cpp_token *);
58static void replace_args (cpp_reader *, cpp_hashnode *, cpp_macro *,
59 macro_arg *);
765d600a
JJ
60static _cpp_buff *funlike_invocation_p (cpp_reader *, cpp_hashnode *,
61 _cpp_buff **);
6cf87ca4 62static bool create_iso_definition (cpp_reader *, cpp_macro *);
93c80368 63
93c80368
NB
64/* #define directive parsing and handling. */
65
6cf87ca4
ZW
66static cpp_token *alloc_expansion_token (cpp_reader *, cpp_macro *);
67static cpp_token *lex_expansion_token (cpp_reader *, cpp_macro *);
68static bool warn_of_redefinition (cpp_reader *, const cpp_hashnode *,
69 const cpp_macro *);
70static bool parse_params (cpp_reader *, cpp_macro *);
71static void check_trad_stringification (cpp_reader *, const cpp_macro *,
72 const cpp_string *);
711b8824 73
a69cbaac
NB
74/* Emits a warning if NODE is a macro defined in the main file that
75 has not been used. */
76int
6cf87ca4
ZW
77_cpp_warn_if_unused_macro (cpp_reader *pfile, cpp_hashnode *node,
78 void *v ATTRIBUTE_UNUSED)
a69cbaac
NB
79{
80 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
81 {
82 cpp_macro *macro = node->value.macro;
83
84 if (!macro->used
50f59cd7 85 && MAIN_FILE_P (linemap_lookup (pfile->line_table, macro->line)))
0527bc4e 86 cpp_error_with_line (pfile, CPP_DL_WARNING, macro->line, 0,
a69cbaac
NB
87 "macro \"%s\" is not used", NODE_NAME (node));
88 }
89
90 return 1;
91}
92
4ed5bcfb
NB
93/* Allocates and returns a CPP_STRING token, containing TEXT of length
94 LEN, after null-terminating it. TEXT must be in permanent storage. */
95static const cpp_token *
6cf87ca4 96new_string_token (cpp_reader *pfile, unsigned char *text, unsigned int len)
93c80368 97{
4ed5bcfb 98 cpp_token *token = _cpp_temp_token (pfile);
93c80368 99
4ed5bcfb 100 text[len] = '\0';
93c80368 101 token->type = CPP_STRING;
4ed5bcfb
NB
102 token->val.str.len = len;
103 token->val.str.text = text;
93c80368 104 token->flags = 0;
4ed5bcfb 105 return token;
93c80368
NB
106}
107
93c80368
NB
108static const char * const monthnames[] =
109{
110 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
111 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
112};
113
21b11495
ZW
114/* Helper function for builtin_macro. Returns the text generated by
115 a builtin macro. */
278c4662 116const uchar *
6cf87ca4 117_cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
93c80368 118{
12f9df4e 119 const struct line_map *map;
278c4662
NB
120 const uchar *result = NULL;
121 unsigned int number = 1;
644eddaa 122
93c80368
NB
123 switch (node->value.builtin)
124 {
4ed5bcfb 125 default:
0527bc4e 126 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
ebef4e8c 127 NODE_NAME (node));
278c4662 128 break;
4ed5bcfb 129
be8ac3e2
GZ
130 case BT_TIMESTAMP:
131 {
132 cpp_buffer *pbuffer = cpp_get_buffer (pfile);
133 if (pbuffer->timestamp == NULL)
134 {
135 /* Initialize timestamp value of the assotiated file. */
136 struct _cpp_file *file = cpp_get_file (pbuffer);
137 if (file)
138 {
139 /* Generate __TIMESTAMP__ string, that represents
140 the date and time of the last modification
141 of the current source file. The string constant
142 looks like "Sun Sep 16 01:03:52 1973". */
143 struct tm *tb = NULL;
144 struct stat *st = _cpp_get_file_stat (file);
145 if (st)
146 tb = localtime (&st->st_mtime);
147 if (tb)
148 {
149 char *str = asctime (tb);
150 size_t len = strlen (str);
151 unsigned char *buf = _cpp_unaligned_alloc (pfile, len + 2);
152 buf[0] = '"';
153 strcpy ((char *) buf + 1, str);
154 buf[len] = '"';
155 pbuffer->timestamp = buf;
156 }
157 else
158 {
159 cpp_errno (pfile, CPP_DL_WARNING,
160 "could not determine file timestamp");
b6baa67d 161 pbuffer->timestamp = UC"\"??? ??? ?? ??:??:?? ????\"";
be8ac3e2
GZ
162 }
163 }
164 }
165 result = pbuffer->timestamp;
166 }
167 break;
93c80368
NB
168 case BT_FILE:
169 case BT_BASE_FILE:
711b8824 170 {
4ed5bcfb 171 unsigned int len;
0bda4760 172 const char *name;
562a5c27 173 uchar *buf;
500bee0a 174 map = linemap_lookup (pfile->line_table, pfile->line_table->highest_line);
0bda4760
NB
175
176 if (node->value.builtin == BT_BASE_FILE)
bb74c963 177 while (! MAIN_FILE_P (map))
50f59cd7 178 map = INCLUDED_FROM (pfile->line_table, map);
0bda4760 179
bb74c963 180 name = map->to_file;
4ed5bcfb 181 len = strlen (name);
651ed942 182 buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
278c4662
NB
183 result = buf;
184 *buf = '"';
185 buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
186 *buf++ = '"';
187 *buf = '\0';
711b8824 188 }
644eddaa
NB
189 break;
190
93c80368 191 case BT_INCLUDE_LEVEL:
d8693c6f
NB
192 /* The line map depth counts the primary source as level 1, but
193 historically __INCLUDE_DEPTH__ has called the primary source
194 level 0. */
50f59cd7 195 number = pfile->line_table->depth - 1;
644eddaa 196 break;
93c80368
NB
197
198 case BT_SPECLINE:
500bee0a 199 map = &pfile->line_table->maps[pfile->line_table->used-1];
93c80368
NB
200 /* If __LINE__ is embedded in a macro, it must expand to the
201 line of the macro's invocation, not its definition.
202 Otherwise things like assert() will not work properly. */
278c4662 203 if (CPP_OPTION (pfile, traditional))
500bee0a 204 number = pfile->line_table->highest_line;
278c4662 205 else
12f9df4e
PB
206 number = pfile->cur_token[-1].src_loc;
207 number = SOURCE_LINE (map, number);
644eddaa 208 break;
93c80368 209
5279d739
ZW
210 /* __STDC__ has the value 1 under normal circumstances.
211 However, if (a) we are in a system header, (b) the option
2a1dc0d8
ZW
212 stdc_0_in_system_headers is true (set by target config), and
213 (c) we are not in strictly conforming mode, then it has the
83900997 214 value 0. (b) and (c) are already checked in cpp_init_builtins. */
93c80368 215 case BT_STDC:
83900997
JJ
216 if (cpp_in_system_header (pfile))
217 number = 0;
218 else
219 number = 1;
644eddaa 220 break;
711b8824 221
93c80368
NB
222 case BT_DATE:
223 case BT_TIME:
278c4662 224 if (pfile->date == NULL)
93c80368 225 {
4ed5bcfb
NB
226 /* Allocate __DATE__ and __TIME__ strings from permanent
227 storage. We only do this once, and don't generate them
228 at init time, because time() and localtime() are very
229 slow on some systems. */
56da7207
ZW
230 time_t tt;
231 struct tm *tb = NULL;
232
233 /* (time_t) -1 is a legitimate value for "number of seconds
234 since the Epoch", so we have to do a little dance to
235 distinguish that from a genuine error. */
236 errno = 0;
237 tt = time(NULL);
238 if (tt != (time_t)-1 || errno == 0)
239 tb = localtime (&tt);
240
241 if (tb)
242 {
243 pfile->date = _cpp_unaligned_alloc (pfile,
244 sizeof ("\"Oct 11 1347\""));
245 sprintf ((char *) pfile->date, "\"%s %2d %4d\"",
6cf87ca4
ZW
246 monthnames[tb->tm_mon], tb->tm_mday,
247 tb->tm_year + 1900);
56da7207
ZW
248
249 pfile->time = _cpp_unaligned_alloc (pfile,
250 sizeof ("\"12:34:56\""));
251 sprintf ((char *) pfile->time, "\"%02d:%02d:%02d\"",
252 tb->tm_hour, tb->tm_min, tb->tm_sec);
253 }
254 else
255 {
0527bc4e 256 cpp_errno (pfile, CPP_DL_WARNING,
56da7207
ZW
257 "could not determine date and time");
258
b6baa67d
KVH
259 pfile->date = UC"\"??? ?? ????\"";
260 pfile->time = UC"\"??:??:??\"";
56da7207 261 }
93c80368 262 }
93c80368 263
644eddaa 264 if (node->value.builtin == BT_DATE)
278c4662 265 result = pfile->date;
644eddaa 266 else
278c4662 267 result = pfile->time;
644eddaa 268 break;
a702045a
OW
269
270 case BT_COUNTER:
ccfc4c91
OW
271 if (CPP_OPTION (pfile, directives_only) && pfile->state.in_directive)
272 cpp_error (pfile, CPP_DL_ERROR,
273 "__COUNTER__ expanded inside directive with -fdirectives-only");
a702045a
OW
274 number = pfile->counter++;
275 break;
278c4662
NB
276 }
277
278 if (result == NULL)
279 {
280 /* 21 bytes holds all NUL-terminated unsigned 64-bit numbers. */
281 result = _cpp_unaligned_alloc (pfile, 21);
282 sprintf ((char *) result, "%u", number);
283 }
284
285 return result;
286}
287
288/* Convert builtin macros like __FILE__ to a token and push it on the
21b11495
ZW
289 context stack. Also handles _Pragma, for which a new token may not
290 be created. Returns 1 if it generates a new token context, 0 to
278c4662
NB
291 return the token to the caller. */
292static int
6cf87ca4 293builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
278c4662
NB
294{
295 const uchar *buf;
26aea073
NB
296 size_t len;
297 char *nbuf;
644eddaa 298
278c4662
NB
299 if (node->value.builtin == BT_PRAGMA)
300 {
644eddaa
NB
301 /* Don't interpret _Pragma within directives. The standard is
302 not clear on this, but to me this makes most sense. */
303 if (pfile->state.in_directive)
304 return 0;
305
5b9a40df 306 return _cpp_do__Pragma (pfile);
93c80368 307 }
644eddaa 308
278c4662 309 buf = _cpp_builtin_macro_text (pfile, node);
26aea073 310 len = ustrlen (buf);
c3f829c1 311 nbuf = (char *) alloca (len + 1);
26aea073
NB
312 memcpy (nbuf, buf, len);
313 nbuf[len]='\n';
278c4662 314
40de9f76 315 cpp_push_buffer (pfile, (uchar *) nbuf, len, /* from_stage3 */ true);
26aea073 316 _cpp_clean_line (pfile);
278c4662
NB
317
318 /* Set pfile->cur_token as required by _cpp_lex_direct. */
319 pfile->cur_token = _cpp_temp_token (pfile);
bc4071dd 320 _cpp_push_token_context (pfile, NULL, _cpp_lex_direct (pfile), 1);
278c4662 321 if (pfile->buffer->cur != pfile->buffer->rlimit)
0527bc4e 322 cpp_error (pfile, CPP_DL_ICE, "invalid built-in macro \"%s\"",
278c4662
NB
323 NODE_NAME (node));
324 _cpp_pop_buffer (pfile);
325
644eddaa 326 return 1;
711b8824
ZW
327}
328
d15a58c0 329/* Copies SRC, of length LEN, to DEST, adding backslashes before all
651ed942
AP
330 backslashes and double quotes. DEST must be of sufficient size.
331 Returns a pointer to the end of the string. */
562a5c27 332uchar *
6cf87ca4 333cpp_quote_string (uchar *dest, const uchar *src, unsigned int len)
93c80368
NB
334{
335 while (len--)
336 {
562a5c27 337 uchar c = *src++;
711b8824 338
93c80368
NB
339 if (c == '\\' || c == '"')
340 {
341 *dest++ = '\\';
342 *dest++ = c;
343 }
344 else
651ed942 345 *dest++ = c;
93c80368 346 }
711b8824 347
93c80368
NB
348 return dest;
349}
711b8824 350
d15a58c0
NB
351/* Convert a token sequence ARG to a single string token according to
352 the rules of the ISO C #-operator. */
4ed5bcfb 353static const cpp_token *
6cf87ca4 354stringify_arg (cpp_reader *pfile, macro_arg *arg)
93c80368 355{
6338b358 356 unsigned char *dest;
ece54d54 357 unsigned int i, escape_it, backslash_count = 0;
4ed5bcfb 358 const cpp_token *source = NULL;
ece54d54 359 size_t len;
711b8824 360
6338b358
NB
361 if (BUFF_ROOM (pfile->u_buff) < 3)
362 _cpp_extend_buff (pfile, &pfile->u_buff, 3);
363 dest = BUFF_FRONT (pfile->u_buff);
364 *dest++ = '"';
365
93c80368
NB
366 /* Loop, reading in the argument's tokens. */
367 for (i = 0; i < arg->count; i++)
368 {
4ed5bcfb 369 const cpp_token *token = arg->first[i];
4ed5bcfb
NB
370
371 if (token->type == CPP_PADDING)
372 {
373 if (source == NULL)
374 source = token->val.source;
375 continue;
376 }
711b8824 377
b6baa67d
KVH
378 escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR
379 || token->type == CPP_WSTRING || token->type == CPP_STRING
380 || token->type == CPP_STRING32 || token->type == CPP_CHAR32
381 || token->type == CPP_STRING16 || token->type == CPP_CHAR16);
711b8824 382
ece54d54 383 /* Room for each char being written in octal, initial space and
6338b358 384 final quote and NUL. */
4ed5bcfb 385 len = cpp_token_len (token);
93c80368 386 if (escape_it)
93c80368 387 len *= 4;
6338b358 388 len += 3;
711b8824 389
ece54d54 390 if ((size_t) (BUFF_LIMIT (pfile->u_buff) - dest) < len)
93c80368 391 {
ece54d54 392 size_t len_so_far = dest - BUFF_FRONT (pfile->u_buff);
8c3b2693 393 _cpp_extend_buff (pfile, &pfile->u_buff, len);
ece54d54 394 dest = BUFF_FRONT (pfile->u_buff) + len_so_far;
93c80368 395 }
711b8824 396
4ed5bcfb 397 /* Leading white space? */
6338b358 398 if (dest - 1 != BUFF_FRONT (pfile->u_buff))
4ed5bcfb
NB
399 {
400 if (source == NULL)
401 source = token;
402 if (source->flags & PREV_WHITE)
403 *dest++ = ' ';
404 }
405 source = NULL;
711b8824 406
93c80368
NB
407 if (escape_it)
408 {
ece54d54
NB
409 _cpp_buff *buff = _cpp_get_buff (pfile, len);
410 unsigned char *buf = BUFF_FRONT (buff);
47e20491 411 len = cpp_spell_token (pfile, token, buf, true) - buf;
dcc229e5 412 dest = cpp_quote_string (dest, buf, len);
ece54d54 413 _cpp_release_buff (pfile, buff);
93c80368
NB
414 }
415 else
47e20491 416 dest = cpp_spell_token (pfile, token, dest, true);
93c80368 417
1067694a 418 if (token->type == CPP_OTHER && token->val.str.text[0] == '\\')
93c80368
NB
419 backslash_count++;
420 else
421 backslash_count = 0;
422 }
423
424 /* Ignore the final \ of invalid string literals. */
425 if (backslash_count & 1)
426 {
0527bc4e 427 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 428 "invalid string literal, ignoring final '\\'");
ece54d54 429 dest--;
93c80368
NB
430 }
431
4ed5bcfb 432 /* Commit the memory, including NUL, and return the token. */
6338b358 433 *dest++ = '"';
ece54d54
NB
434 len = dest - BUFF_FRONT (pfile->u_buff);
435 BUFF_FRONT (pfile->u_buff) = dest + 1;
436 return new_string_token (pfile, dest - len, len);
93c80368
NB
437}
438
da7d8304 439/* Try to paste two tokens. On success, return nonzero. In any
c9e7a609
NB
440 case, PLHS is updated to point to the pasted token, which is
441 guaranteed to not have the PASTE_LEFT flag set. */
442static bool
6cf87ca4 443paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
d63eefbf 444{
de000d22 445 unsigned char *buf, *end, *lhsend;
fca35e1b 446 cpp_token *lhs;
c9e7a609 447 unsigned int len;
c9e7a609 448
fca35e1b 449 len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
c3f829c1 450 buf = (unsigned char *) alloca (len);
fca35e1b 451 end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
c9e7a609
NB
452
453 /* Avoid comment headers, since they are still processed in stage 3.
454 It is simpler to insert a space here, rather than modifying the
455 lexer to ignore comments in some circumstances. Simply returning
456 false doesn't work, since we want to clear the PASTE_LEFT flag. */
fca35e1b 457 if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
c9e7a609 458 *end++ = ' ';
f373b44d
TT
459 /* In one obscure case we might see padding here. */
460 if (rhs->type != CPP_PADDING)
461 end = cpp_spell_token (pfile, rhs, end, false);
26aea073 462 *end = '\n';
c9e7a609 463
40de9f76 464 cpp_push_buffer (pfile, buf, end - buf, /* from_stage3 */ true);
26aea073 465 _cpp_clean_line (pfile);
c9e7a609
NB
466
467 /* Set pfile->cur_token as required by _cpp_lex_direct. */
468 pfile->cur_token = _cpp_temp_token (pfile);
fca35e1b 469 lhs = _cpp_lex_direct (pfile);
de000d22
JJ
470 if (pfile->buffer->cur != pfile->buffer->rlimit)
471 {
fca35e1b
TT
472 source_location saved_loc = lhs->src_loc;
473
de000d22
JJ
474 _cpp_pop_buffer (pfile);
475 _cpp_backup_tokens (pfile, 1);
476 *lhsend = '\0';
477
fca35e1b
TT
478 /* We have to remove the PASTE_LEFT flag from the old lhs, but
479 we want to keep the new location. */
480 *lhs = **plhs;
481 *plhs = lhs;
482 lhs->src_loc = saved_loc;
483 lhs->flags &= ~PASTE_LEFT;
484
de000d22
JJ
485 /* Mandatory error for all apart from assembler. */
486 if (CPP_OPTION (pfile, lang) != CLK_ASM)
487 cpp_error (pfile, CPP_DL_ERROR,
488 "pasting \"%s\" and \"%s\" does not give a valid preprocessing token",
489 buf, cpp_token_as_text (pfile, rhs));
490 return false;
491 }
c9e7a609 492
fca35e1b 493 *plhs = lhs;
de000d22
JJ
494 _cpp_pop_buffer (pfile);
495 return true;
d63eefbf
NB
496}
497
d15a58c0
NB
498/* Handles an arbitrarily long sequence of ## operators, with initial
499 operand LHS. This implementation is left-associative,
500 non-recursive, and finishes a paste before handling succeeding
501 ones. If a paste fails, we back up to the RHS of the failing ##
502 operator before pushing the context containing the result of prior
503 successful pastes, with the effect that the RHS appears in the
504 output stream after the pasted LHS normally. */
93c80368 505static void
6cf87ca4 506paste_all_tokens (cpp_reader *pfile, const cpp_token *lhs)
93c80368 507{
4ed5bcfb
NB
508 const cpp_token *rhs;
509 cpp_context *context = pfile->context;
510
93c80368
NB
511 do
512 {
513 /* Take the token directly from the current context. We can do
514 this, because we are in the replacement list of either an
515 object-like macro, or a function-like macro with arguments
516 inserted. In either case, the constraints to #define
d63eefbf 517 guarantee we have at least one more token. */
4ed5bcfb 518 if (context->direct_p)
82eda77e 519 rhs = FIRST (context).token++;
4ed5bcfb 520 else
82eda77e 521 rhs = *FIRST (context).ptoken++;
4ed5bcfb
NB
522
523 if (rhs->type == CPP_PADDING)
f373b44d
TT
524 {
525 if (rhs->flags & PASTE_LEFT)
526 abort ();
527 }
c9e7a609 528 if (!paste_tokens (pfile, &lhs, rhs))
de000d22 529 break;
93c80368
NB
530 }
531 while (rhs->flags & PASTE_LEFT);
532
c9e7a609 533 /* Put the resulting token in its own context. */
bc4071dd 534 _cpp_push_token_context (pfile, NULL, lhs, 1);
93c80368
NB
535}
536
1ce676a0
NB
537/* Returns TRUE if the number of arguments ARGC supplied in an
538 invocation of the MACRO referenced by NODE is valid. An empty
539 invocation to a macro with no parameters should pass ARGC as zero.
540
541 Note that MACRO cannot necessarily be deduced from NODE, in case
542 NODE was redefined whilst collecting arguments. */
543bool
6cf87ca4 544_cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node, unsigned int argc)
1ce676a0
NB
545{
546 if (argc == macro->paramc)
547 return true;
548
549 if (argc < macro->paramc)
550 {
551 /* As an extension, a rest argument is allowed to not appear in
552 the invocation at all.
553 e.g. #define debug(format, args...) something
554 debug("string");
555
556 This is exactly the same as if there had been an empty rest
557 argument - debug("string", ). */
558
559 if (argc + 1 == macro->paramc && macro->variadic)
560 {
561 if (CPP_PEDANTIC (pfile) && ! macro->syshdr)
0527bc4e 562 cpp_error (pfile, CPP_DL_PEDWARN,
1ce676a0
NB
563 "ISO C99 requires rest arguments to be used");
564 return true;
565 }
566
0527bc4e 567 cpp_error (pfile, CPP_DL_ERROR,
1ce676a0
NB
568 "macro \"%s\" requires %u arguments, but only %u given",
569 NODE_NAME (node), macro->paramc, argc);
570 }
571 else
0527bc4e 572 cpp_error (pfile, CPP_DL_ERROR,
1ce676a0
NB
573 "macro \"%s\" passed %u arguments, but takes just %u",
574 NODE_NAME (node), argc, macro->paramc);
575
576 return false;
577}
578
d15a58c0
NB
579/* Reads and returns the arguments to a function-like macro
580 invocation. Assumes the opening parenthesis has been processed.
581 If there is an error, emits an appropriate diagnostic and returns
582 NULL. Each argument is terminated by a CPP_EOF token, for the
765d600a
JJ
583 future benefit of expand_arg(). If there are any deferred
584 #pragma directives among macro arguments, store pointers to the
585 CPP_PRAGMA ... CPP_PRAGMA_EOL tokens into *PRAGMA_BUFF buffer. */
b8af0ca5 586static _cpp_buff *
765d600a
JJ
587collect_args (cpp_reader *pfile, const cpp_hashnode *node,
588 _cpp_buff **pragma_buff)
93c80368 589{
b8af0ca5
NB
590 _cpp_buff *buff, *base_buff;
591 cpp_macro *macro;
592 macro_arg *args, *arg;
593 const cpp_token *token;
594 unsigned int argc;
b8af0ca5
NB
595
596 macro = node->value.macro;
597 if (macro->paramc)
598 argc = macro->paramc;
599 else
600 argc = 1;
601 buff = _cpp_get_buff (pfile, argc * (50 * sizeof (cpp_token *)
602 + sizeof (macro_arg)));
603 base_buff = buff;
604 args = (macro_arg *) buff->base;
605 memset (args, 0, argc * sizeof (macro_arg));
ece54d54 606 buff->cur = (unsigned char *) &args[argc];
b8af0ca5
NB
607 arg = args, argc = 0;
608
609 /* Collect the tokens making up each argument. We don't yet know
610 how many arguments have been supplied, whether too many or too
611 few. Hence the slightly bizarre usage of "argc" and "arg". */
612 do
93c80368 613 {
b8af0ca5
NB
614 unsigned int paren_depth = 0;
615 unsigned int ntokens = 0;
93c80368 616
b8af0ca5
NB
617 argc++;
618 arg->first = (const cpp_token **) buff->cur;
711b8824 619
b8af0ca5
NB
620 for (;;)
621 {
622 /* Require space for 2 new tokens (including a CPP_EOF). */
ece54d54 623 if ((unsigned char *) &arg->first[ntokens + 2] > buff->limit)
b8af0ca5 624 {
8c3b2693
NB
625 buff = _cpp_append_extend_buff (pfile, buff,
626 1000 * sizeof (cpp_token *));
b8af0ca5
NB
627 arg->first = (const cpp_token **) buff->cur;
628 }
4ed5bcfb 629
b8af0ca5 630 token = cpp_get_token (pfile);
711b8824 631
b8af0ca5
NB
632 if (token->type == CPP_PADDING)
633 {
634 /* Drop leading padding. */
635 if (ntokens == 0)
636 continue;
637 }
638 else if (token->type == CPP_OPEN_PAREN)
639 paren_depth++;
640 else if (token->type == CPP_CLOSE_PAREN)
641 {
642 if (paren_depth-- == 0)
643 break;
644 }
645 else if (token->type == CPP_COMMA)
646 {
647 /* A comma does not terminate an argument within
648 parentheses or as part of a variable argument. */
649 if (paren_depth == 0
650 && ! (macro->variadic && argc == macro->paramc))
651 break;
652 }
653 else if (token->type == CPP_EOF
654 || (token->type == CPP_HASH && token->flags & BOL))
655 break;
765d600a
JJ
656 else if (token->type == CPP_PRAGMA)
657 {
658 cpp_token *newtok = _cpp_temp_token (pfile);
659
660 /* CPP_PRAGMA token lives in directive_result, which will
661 be overwritten on the next directive. */
662 *newtok = *token;
663 token = newtok;
664 do
665 {
666 if (*pragma_buff == NULL
667 || BUFF_ROOM (*pragma_buff) < sizeof (cpp_token *))
668 {
669 _cpp_buff *next;
670 if (*pragma_buff == NULL)
671 *pragma_buff
672 = _cpp_get_buff (pfile, 32 * sizeof (cpp_token *));
673 else
674 {
675 next = *pragma_buff;
676 *pragma_buff
677 = _cpp_get_buff (pfile,
678 (BUFF_FRONT (*pragma_buff)
679 - (*pragma_buff)->base) * 2);
680 (*pragma_buff)->next = next;
681 }
682 }
683 *(const cpp_token **) BUFF_FRONT (*pragma_buff) = token;
684 BUFF_FRONT (*pragma_buff) += sizeof (cpp_token *);
685 if (token->type == CPP_PRAGMA_EOL)
686 break;
687 token = cpp_get_token (pfile);
688 }
689 while (token->type != CPP_EOF);
690
691 /* In deferred pragmas parsing_args and prevent_expansion
692 had been changed, reset it. */
693 pfile->state.parsing_args = 2;
694 pfile->state.prevent_expansion = 1;
695
696 if (token->type == CPP_EOF)
697 break;
698 else
699 continue;
700 }
93c80368 701
b8af0ca5
NB
702 arg->first[ntokens++] = token;
703 }
93c80368 704
b8af0ca5
NB
705 /* Drop trailing padding. */
706 while (ntokens > 0 && arg->first[ntokens - 1]->type == CPP_PADDING)
707 ntokens--;
93c80368 708
b8af0ca5
NB
709 arg->count = ntokens;
710 arg->first[ntokens] = &pfile->eof;
93c80368 711
b8af0ca5
NB
712 /* Terminate the argument. Excess arguments loop back and
713 overwrite the final legitimate argument, before failing. */
714 if (argc <= macro->paramc)
715 {
ece54d54 716 buff->cur = (unsigned char *) &arg->first[ntokens + 1];
b8af0ca5
NB
717 if (argc != macro->paramc)
718 arg++;
719 }
93c80368 720 }
e808ec9c 721 while (token->type != CPP_CLOSE_PAREN && token->type != CPP_EOF);
93c80368 722
e808ec9c 723 if (token->type == CPP_EOF)
93c80368 724 {
ece54d54
NB
725 /* We still need the CPP_EOF to end directives, and to end
726 pre-expansion of a macro argument. Step back is not
727 unconditional, since we don't want to return a CPP_EOF to our
728 callers at the end of an -include-d file. */
e808ec9c 729 if (pfile->context->prev || pfile->state.in_directive)
b8af0ca5 730 _cpp_backup_tokens (pfile, 1);
0527bc4e 731 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 732 "unterminated argument list invoking macro \"%s\"",
a28c5035 733 NODE_NAME (node));
93c80368 734 }
1ce676a0 735 else
93c80368 736 {
1ce676a0
NB
737 /* A single empty argument is counted as no argument. */
738 if (argc == 1 && macro->paramc == 0 && args[0].count == 0)
739 argc = 0;
740 if (_cpp_arguments_ok (pfile, macro, node, argc))
58551c23
NB
741 {
742 /* GCC has special semantics for , ## b where b is a varargs
743 parameter: we remove the comma if b was omitted entirely.
744 If b was merely an empty argument, the comma is retained.
745 If the macro takes just one (varargs) parameter, then we
746 retain the comma only if we are standards conforming.
747
748 If FIRST is NULL replace_args () swallows the comma. */
749 if (macro->variadic && (argc < macro->paramc
750 || (argc == 1 && args[0].count == 0
751 && !CPP_OPTION (pfile, std))))
752 args[macro->paramc - 1].first = NULL;
753 return base_buff;
754 }
93c80368
NB
755 }
756
1ce676a0 757 /* An error occurred. */
b8af0ca5
NB
758 _cpp_release_buff (pfile, base_buff);
759 return NULL;
93c80368
NB
760}
761
d6da836d
NB
762/* Search for an opening parenthesis to the macro of NODE, in such a
763 way that, if none is found, we don't lose the information in any
764 intervening padding tokens. If we find the parenthesis, collect
765d600a
JJ
765 the arguments and return the buffer containing them. PRAGMA_BUFF
766 argument is the same as in collect_args. */
d6da836d 767static _cpp_buff *
765d600a
JJ
768funlike_invocation_p (cpp_reader *pfile, cpp_hashnode *node,
769 _cpp_buff **pragma_buff)
93c80368 770{
d6da836d 771 const cpp_token *token, *padding = NULL;
4ed5bcfb 772
d6da836d 773 for (;;)
bdcbe496 774 {
d6da836d
NB
775 token = cpp_get_token (pfile);
776 if (token->type != CPP_PADDING)
777 break;
778 if (padding == NULL
779 || (!(padding->flags & PREV_WHITE) && token->val.source == NULL))
780 padding = token;
bdcbe496 781 }
93c80368 782
d6da836d 783 if (token->type == CPP_OPEN_PAREN)
93c80368 784 {
d6da836d 785 pfile->state.parsing_args = 2;
765d600a 786 return collect_args (pfile, node, pragma_buff);
93c80368
NB
787 }
788
9ac3b1be
NB
789 /* CPP_EOF can be the end of macro arguments, or the end of the
790 file. We mustn't back up over the latter. Ugh. */
791 if (token->type != CPP_EOF || token == &pfile->eof)
792 {
793 /* Back up. We may have skipped padding, in which case backing
794 up more than one token when expanding macros is in general
795 too difficult. We re-insert it in its own context. */
796 _cpp_backup_tokens (pfile, 1);
797 if (padding)
bc4071dd 798 _cpp_push_token_context (pfile, NULL, padding, 1);
9ac3b1be 799 }
d6da836d
NB
800
801 return NULL;
93c80368
NB
802}
803
d15a58c0
NB
804/* Push the context of a macro with hash entry NODE onto the context
805 stack. If we can successfully expand the macro, we push a context
806 containing its yet-to-be-rescanned replacement list and return one.
765d600a
JJ
807 If there were additionally any unexpanded deferred #pragma directives
808 among macro arguments, push another context containing the
809 pragma tokens before the yet-to-be-rescanned replacement list
810 and return two. Otherwise, we don't push a context and return zero. */
711b8824 811static int
765d600a
JJ
812enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
813 const cpp_token *result)
711b8824 814{
d15a58c0 815 /* The presence of a macro invalidates a file's controlling macro. */
644eddaa
NB
816 pfile->mi_valid = false;
817
3620711b
NB
818 pfile->state.angled_headers = false;
819
93d45d9e
JM
820 if ((node->flags & NODE_BUILTIN) && !(node->flags & NODE_USED))
821 {
822 node->flags |= NODE_USED;
823 if (pfile->cb.used_define)
824 pfile->cb.used_define (pfile, pfile->directive_line, node);
825 }
826
d15a58c0 827 /* Handle standard macros. */
644eddaa 828 if (! (node->flags & NODE_BUILTIN))
711b8824 829 {
4ed5bcfb 830 cpp_macro *macro = node->value.macro;
765d600a 831 _cpp_buff *pragma_buff = NULL;
4c2b647d 832
d6da836d
NB
833 if (macro->fun_like)
834 {
835 _cpp_buff *buff;
836
837 pfile->state.prevent_expansion++;
838 pfile->keep_tokens++;
839 pfile->state.parsing_args = 1;
765d600a 840 buff = funlike_invocation_p (pfile, node, &pragma_buff);
d6da836d
NB
841 pfile->state.parsing_args = 0;
842 pfile->keep_tokens--;
843 pfile->state.prevent_expansion--;
844
845 if (buff == NULL)
846 {
847 if (CPP_WTRADITIONAL (pfile) && ! node->value.macro->syshdr)
0527bc4e 848 cpp_error (pfile, CPP_DL_WARNING,
d6da836d 849 "function-like macro \"%s\" must be used with arguments in traditional C",
ebef4e8c 850 NODE_NAME (node));
d6da836d 851
765d600a
JJ
852 if (pragma_buff)
853 _cpp_release_buff (pfile, pragma_buff);
854
d6da836d
NB
855 return 0;
856 }
857
e808ec9c
NB
858 if (macro->paramc > 0)
859 replace_args (pfile, node, macro, (macro_arg *) buff->base);
d6da836d
NB
860 _cpp_release_buff (pfile, buff);
861 }
93c80368 862
4ed5bcfb 863 /* Disable the macro within its expansion. */
644eddaa 864 node->flags |= NODE_DISABLED;
93c80368 865
93d45d9e
JM
866 if (!(node->flags & NODE_USED))
867 {
868 node->flags |= NODE_USED;
869 if (pfile->cb.used_define)
870 pfile->cb.used_define (pfile, pfile->directive_line, node);
871 }
872
a69cbaac
NB
873 macro->used = 1;
874
4ed5bcfb 875 if (macro->paramc == 0)
bc4071dd 876 _cpp_push_token_context (pfile, node, macro->exp.tokens, macro->count);
644eddaa 877
765d600a
JJ
878 if (pragma_buff)
879 {
880 if (!pfile->state.in_directive)
881 _cpp_push_token_context (pfile, NULL,
882 padding_token (pfile, result), 1);
883 do
884 {
885 _cpp_buff *tail = pragma_buff->next;
886 pragma_buff->next = NULL;
887 push_ptoken_context (pfile, NULL, pragma_buff,
888 (const cpp_token **) pragma_buff->base,
889 ((const cpp_token **) BUFF_FRONT (pragma_buff)
890 - (const cpp_token **) pragma_buff->base));
891 pragma_buff = tail;
892 }
893 while (pragma_buff != NULL);
894 return 2;
895 }
896
644eddaa 897 return 1;
711b8824 898 }
644eddaa 899
d15a58c0 900 /* Handle built-in macros and the _Pragma operator. */
644eddaa 901 return builtin_macro (pfile, node);
93c80368
NB
902}
903
d15a58c0
NB
904/* Replace the parameters in a function-like macro of NODE with the
905 actual ARGS, and place the result in a newly pushed token context.
906 Expand each argument before replacing, unless it is operated upon
907 by the # or ## operators. */
93c80368 908static void
6cf87ca4 909replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg *args)
93c80368
NB
910{
911 unsigned int i, total;
912 const cpp_token *src, *limit;
4ed5bcfb 913 const cpp_token **dest, **first;
93c80368 914 macro_arg *arg;
1e013d2e 915 _cpp_buff *buff;
93c80368 916
93c80368 917 /* First, fully macro-expand arguments, calculating the number of
1e013d2e
NB
918 tokens in the final expansion as we go. The ordering of the if
919 statements below is subtle; we must handle stringification before
920 pasting. */
4ed5bcfb 921 total = macro->count;
601328bb 922 limit = macro->exp.tokens + macro->count;
4ed5bcfb 923
601328bb 924 for (src = macro->exp.tokens; src < limit; src++)
93c80368
NB
925 if (src->type == CPP_MACRO_ARG)
926 {
4ed5bcfb
NB
927 /* Leading and trailing padding tokens. */
928 total += 2;
929
93c80368
NB
930 /* We have an argument. If it is not being stringified or
931 pasted it is macro-replaced before insertion. */
6c53ebff 932 arg = &args[src->val.arg_no - 1];
4c2b647d 933
93c80368
NB
934 if (src->flags & STRINGIFY_ARG)
935 {
936 if (!arg->stringified)
4ed5bcfb 937 arg->stringified = stringify_arg (pfile, arg);
93c80368
NB
938 }
939 else if ((src->flags & PASTE_LEFT)
601328bb 940 || (src > macro->exp.tokens && (src[-1].flags & PASTE_LEFT)))
93c80368
NB
941 total += arg->count - 1;
942 else
943 {
944 if (!arg->expanded)
4ed5bcfb 945 expand_arg (pfile, arg);
93c80368
NB
946 total += arg->expanded_count - 1;
947 }
948 }
949
4ed5bcfb
NB
950 /* Now allocate space for the expansion, copy the tokens and replace
951 the arguments. */
1e013d2e
NB
952 buff = _cpp_get_buff (pfile, total * sizeof (cpp_token *));
953 first = (const cpp_token **) buff->base;
4ed5bcfb 954 dest = first;
93c80368 955
601328bb 956 for (src = macro->exp.tokens; src < limit; src++)
4ed5bcfb
NB
957 {
958 unsigned int count;
959 const cpp_token **from, **paste_flag;
93c80368 960
4ed5bcfb
NB
961 if (src->type != CPP_MACRO_ARG)
962 {
963 *dest++ = src;
964 continue;
965 }
93c80368 966
4ed5bcfb
NB
967 paste_flag = 0;
968 arg = &args[src->val.arg_no - 1];
969 if (src->flags & STRINGIFY_ARG)
970 count = 1, from = &arg->stringified;
971 else if (src->flags & PASTE_LEFT)
972 count = arg->count, from = arg->first;
601328bb 973 else if (src != macro->exp.tokens && (src[-1].flags & PASTE_LEFT))
4ed5bcfb
NB
974 {
975 count = arg->count, from = arg->first;
976 if (dest != first)
977 {
4ed5bcfb
NB
978 if (dest[-1]->type == CPP_COMMA
979 && macro->variadic
980 && src->val.arg_no == macro->paramc)
981 {
58551c23
NB
982 /* Swallow a pasted comma if from == NULL, otherwise
983 drop the paste flag. */
984 if (from == NULL)
4ed5bcfb
NB
985 dest--;
986 else
987 paste_flag = dest - 1;
988 }
989 /* Remove the paste flag if the RHS is a placemarker. */
990 else if (count == 0)
991 paste_flag = dest - 1;
992 }
993 }
994 else
995 count = arg->expanded_count, from = arg->expanded;
4c2b647d 996
4ed5bcfb 997 /* Padding on the left of an argument (unless RHS of ##). */
a8d0ddaf 998 if ((!pfile->state.in_directive || pfile->state.directive_wants_padding)
601328bb 999 && src != macro->exp.tokens && !(src[-1].flags & PASTE_LEFT))
4ed5bcfb 1000 *dest++ = padding_token (pfile, src);
93c80368 1001
4ed5bcfb
NB
1002 if (count)
1003 {
1004 memcpy (dest, from, count * sizeof (cpp_token *));
1005 dest += count;
93c80368 1006
4ed5bcfb
NB
1007 /* With a non-empty argument on the LHS of ##, the last
1008 token should be flagged PASTE_LEFT. */
1009 if (src->flags & PASTE_LEFT)
1010 paste_flag = dest - 1;
1011 }
26ec42ee 1012
4ed5bcfb
NB
1013 /* Avoid paste on RHS (even case count == 0). */
1014 if (!pfile->state.in_directive && !(src->flags & PASTE_LEFT))
1015 *dest++ = &pfile->avoid_paste;
93c80368 1016
4ed5bcfb
NB
1017 /* Add a new paste flag, or remove an unwanted one. */
1018 if (paste_flag)
1019 {
1020 cpp_token *token = _cpp_temp_token (pfile);
1021 token->type = (*paste_flag)->type;
73096711 1022 token->val = (*paste_flag)->val;
4ed5bcfb
NB
1023 if (src->flags & PASTE_LEFT)
1024 token->flags = (*paste_flag)->flags | PASTE_LEFT;
1025 else
1026 token->flags = (*paste_flag)->flags & ~PASTE_LEFT;
1027 *paste_flag = token;
1028 }
1029 }
4c2b647d 1030
93c80368
NB
1031 /* Free the expanded arguments. */
1032 for (i = 0; i < macro->paramc; i++)
4ed5bcfb
NB
1033 if (args[i].expanded)
1034 free (args[i].expanded);
1035
644eddaa 1036 push_ptoken_context (pfile, node, buff, first, dest - first);
4ed5bcfb
NB
1037}
1038
1039/* Return a special padding token, with padding inherited from SOURCE. */
1040static const cpp_token *
6cf87ca4 1041padding_token (cpp_reader *pfile, const cpp_token *source)
4ed5bcfb
NB
1042{
1043 cpp_token *result = _cpp_temp_token (pfile);
1044
1045 result->type = CPP_PADDING;
be0f1e54
PB
1046
1047 /* Data in GCed data structures cannot be made const so far, so we
1048 need a cast here. */
1049 result->val.source = (cpp_token *) source;
4ed5bcfb
NB
1050 result->flags = 0;
1051 return result;
1052}
1053
d15a58c0
NB
1054/* Get a new uninitialized context. Create a new one if we cannot
1055 re-use an old one. */
4ed5bcfb 1056static cpp_context *
6cf87ca4 1057next_context (cpp_reader *pfile)
4ed5bcfb
NB
1058{
1059 cpp_context *result = pfile->context->next;
1060
1061 if (result == 0)
711b8824 1062 {
72bb2c39 1063 result = XNEW (cpp_context);
4ed5bcfb
NB
1064 result->prev = pfile->context;
1065 result->next = 0;
1066 pfile->context->next = result;
93c80368 1067 }
4ed5bcfb
NB
1068
1069 pfile->context = result;
1070 return result;
93c80368
NB
1071}
1072
4ed5bcfb
NB
1073/* Push a list of pointers to tokens. */
1074static void
6cf87ca4
ZW
1075push_ptoken_context (cpp_reader *pfile, cpp_hashnode *macro, _cpp_buff *buff,
1076 const cpp_token **first, unsigned int count)
93c80368
NB
1077{
1078 cpp_context *context = next_context (pfile);
93c80368 1079
4ed5bcfb
NB
1080 context->direct_p = false;
1081 context->macro = macro;
1e013d2e 1082 context->buff = buff;
82eda77e
NB
1083 FIRST (context).ptoken = first;
1084 LAST (context).ptoken = first + count;
4ed5bcfb
NB
1085}
1086
1087/* Push a list of tokens. */
bc4071dd
RH
1088void
1089_cpp_push_token_context (cpp_reader *pfile, cpp_hashnode *macro,
1090 const cpp_token *first, unsigned int count)
4ed5bcfb
NB
1091{
1092 cpp_context *context = next_context (pfile);
1093
1094 context->direct_p = true;
1095 context->macro = macro;
1e013d2e 1096 context->buff = NULL;
82eda77e
NB
1097 FIRST (context).token = first;
1098 LAST (context).token = first + count;
93c80368
NB
1099}
1100
cbc69f84
NB
1101/* Push a traditional macro's replacement text. */
1102void
6cf87ca4
ZW
1103_cpp_push_text_context (cpp_reader *pfile, cpp_hashnode *macro,
1104 const uchar *start, size_t len)
cbc69f84
NB
1105{
1106 cpp_context *context = next_context (pfile);
1107
1108 context->direct_p = true;
1109 context->macro = macro;
1110 context->buff = NULL;
1111 CUR (context) = start;
1ce676a0 1112 RLIMIT (context) = start + len;
974c43f1 1113 macro->flags |= NODE_DISABLED;
cbc69f84
NB
1114}
1115
d15a58c0
NB
1116/* Expand an argument ARG before replacing parameters in a
1117 function-like macro. This works by pushing a context with the
1118 argument's tokens, and then expanding that into a temporary buffer
1119 as if it were a normal part of the token stream. collect_args()
1120 has terminated the argument's tokens with a CPP_EOF so that we know
1121 when we have fully expanded the argument. */
93c80368 1122static void
6cf87ca4 1123expand_arg (cpp_reader *pfile, macro_arg *arg)
93c80368 1124{
4ed5bcfb 1125 unsigned int capacity;
56941bf2 1126 bool saved_warn_trad;
4ed5bcfb 1127
4ed5bcfb
NB
1128 if (arg->count == 0)
1129 return;
93c80368 1130
56941bf2
NB
1131 /* Don't warn about funlike macros when pre-expanding. */
1132 saved_warn_trad = CPP_WTRADITIONAL (pfile);
1133 CPP_WTRADITIONAL (pfile) = 0;
1134
93c80368 1135 /* Loop, reading in the arguments. */
4ed5bcfb 1136 capacity = 256;
c3f829c1 1137 arg->expanded = XNEWVEC (const cpp_token *, capacity);
93c80368 1138
1e013d2e 1139 push_ptoken_context (pfile, NULL, NULL, arg->first, arg->count + 1);
4ed5bcfb 1140 for (;;)
93c80368 1141 {
4ed5bcfb
NB
1142 const cpp_token *token;
1143
1144 if (arg->expanded_count + 1 >= capacity)
711b8824 1145 {
93c80368 1146 capacity *= 2;
c3f829c1
GDR
1147 arg->expanded = XRESIZEVEC (const cpp_token *, arg->expanded,
1148 capacity);
93c80368 1149 }
93c80368 1150
4ed5bcfb 1151 token = cpp_get_token (pfile);
93c80368 1152
4ed5bcfb
NB
1153 if (token->type == CPP_EOF)
1154 break;
1155
1156 arg->expanded[arg->expanded_count++] = token;
1157 }
1158
1e013d2e 1159 _cpp_pop_context (pfile);
56941bf2
NB
1160
1161 CPP_WTRADITIONAL (pfile) = saved_warn_trad;
93c80368
NB
1162}
1163
d15a58c0
NB
1164/* Pop the current context off the stack, re-enabling the macro if the
1165 context represented a macro's replacement list. The context
1166 structure is not freed so that we can re-use it later. */
93c80368 1167void
6cf87ca4 1168_cpp_pop_context (cpp_reader *pfile)
93c80368 1169{
1e013d2e
NB
1170 cpp_context *context = pfile->context;
1171
1e013d2e 1172 if (context->macro)
644eddaa 1173 context->macro->flags &= ~NODE_DISABLED;
1e013d2e
NB
1174
1175 if (context->buff)
1176 _cpp_release_buff (pfile, context->buff);
93c80368 1177
1e013d2e 1178 pfile->context = context->prev;
93c80368
NB
1179}
1180
48c4721e 1181/* External routine to get a token. Also used nearly everywhere
7f2f1a66 1182 internally, except for places where we know we can safely call
48c4721e 1183 _cpp_lex_token directly, such as lexing a directive name.
7f2f1a66
NB
1184
1185 Macro expansions and directives are transparently handled,
1186 including entering included files. Thus tokens are post-macro
1187 expansion, and after any intervening directives. External callers
1188 see CPP_EOF only at EOF. Internal callers also see it when meeting
1189 a directive inside a macro call, when at the end of a directive and
1190 state.in_directive is still 1, and at the end of argument
1191 pre-expansion. */
4ed5bcfb 1192const cpp_token *
6cf87ca4 1193cpp_get_token (cpp_reader *pfile)
93c80368 1194{
4ed5bcfb 1195 const cpp_token *result;
5ffeb913
TT
1196 bool can_set = pfile->set_invocation_location;
1197 pfile->set_invocation_location = false;
4ed5bcfb 1198
29b10746 1199 for (;;)
93c80368 1200 {
4ed5bcfb 1201 cpp_hashnode *node;
93c80368
NB
1202 cpp_context *context = pfile->context;
1203
93c80368 1204 /* Context->prev == 0 <=> base context. */
bdcbe496 1205 if (!context->prev)
4ed5bcfb 1206 result = _cpp_lex_token (pfile);
82eda77e 1207 else if (FIRST (context).token != LAST (context).token)
29b10746 1208 {
4ed5bcfb 1209 if (context->direct_p)
82eda77e 1210 result = FIRST (context).token++;
4ed5bcfb 1211 else
82eda77e 1212 result = *FIRST (context).ptoken++;
4ed5bcfb
NB
1213
1214 if (result->flags & PASTE_LEFT)
ec1a23e6 1215 {
4ed5bcfb
NB
1216 paste_all_tokens (pfile, result);
1217 if (pfile->state.in_directive)
1218 continue;
1219 return padding_token (pfile, result);
ec1a23e6 1220 }
29b10746 1221 }
93c80368
NB
1222 else
1223 {
bdcbe496 1224 _cpp_pop_context (pfile);
4ed5bcfb
NB
1225 if (pfile->state.in_directive)
1226 continue;
1227 return &pfile->avoid_paste;
93c80368 1228 }
93c80368 1229
477cdac7
JT
1230 if (pfile->state.in_directive && result->type == CPP_COMMENT)
1231 continue;
1232
4ed5bcfb 1233 if (result->type != CPP_NAME)
93c80368
NB
1234 break;
1235
4ed5bcfb
NB
1236 node = result->val.node;
1237
644eddaa
NB
1238 if (node->type != NT_MACRO || (result->flags & NO_EXPAND))
1239 break;
df383483 1240
644eddaa 1241 if (!(node->flags & NODE_DISABLED))
93c80368 1242 {
765d600a 1243 int ret;
5ffeb913
TT
1244 /* If not in a macro context, and we're going to start an
1245 expansion, record the location. */
1246 if (can_set && !context->macro)
1247 pfile->invocation_location = result->src_loc;
765d600a
JJ
1248 if (pfile->state.prevent_expansion)
1249 break;
1250 ret = enter_macro_context (pfile, node, result);
1251 if (ret)
bd969772 1252 {
765d600a 1253 if (pfile->state.in_directive || ret == 2)
4ed5bcfb
NB
1254 continue;
1255 return padding_token (pfile, result);
bd969772 1256 }
93c80368 1257 }
644eddaa
NB
1258 else
1259 {
d15a58c0
NB
1260 /* Flag this token as always unexpandable. FIXME: move this
1261 to collect_args()?. */
644eddaa
NB
1262 cpp_token *t = _cpp_temp_token (pfile);
1263 t->type = result->type;
1264 t->flags = result->flags | NO_EXPAND;
73096711 1265 t->val = result->val;
644eddaa
NB
1266 result = t;
1267 }
a5c3cccd 1268
644eddaa 1269 break;
93c80368 1270 }
4ed5bcfb
NB
1271
1272 return result;
93c80368
NB
1273}
1274
5ffeb913
TT
1275/* Like cpp_get_token, but also returns a location separate from the
1276 one provided by the returned token. LOC is an out parameter; *LOC
1277 is set to the location "as expected by the user". This matters
1278 when a token results from macro expansion -- the token's location
1279 will indicate where the macro is defined, but *LOC will be the
1280 location of the start of the expansion. */
1281const cpp_token *
1282cpp_get_token_with_location (cpp_reader *pfile, source_location *loc)
1283{
1284 const cpp_token *result;
1285
1286 pfile->set_invocation_location = true;
1287 result = cpp_get_token (pfile);
1288 if (pfile->context->macro)
1289 *loc = pfile->invocation_location;
1290 else
1291 *loc = result->src_loc;
1292
1293 return result;
1294}
1295
7065e130
NB
1296/* Returns true if we're expanding an object-like macro that was
1297 defined in a system header. Just checks the macro at the top of
1298 the stack. Used for diagnostic suppression. */
1299int
6cf87ca4 1300cpp_sys_macro_p (cpp_reader *pfile)
7065e130 1301{
644eddaa 1302 cpp_hashnode *node = pfile->context->macro;
7065e130 1303
644eddaa 1304 return node && node->value.macro && node->value.macro->syshdr;
7065e130
NB
1305}
1306
af0d16cd
NB
1307/* Read each token in, until end of the current file. Directives are
1308 transparently processed. */
93c80368 1309void
6cf87ca4 1310cpp_scan_nooutput (cpp_reader *pfile)
93c80368 1311{
22234f56
PB
1312 /* Request a CPP_EOF token at the end of this file, rather than
1313 transparently continuing with the including file. */
1314 pfile->buffer->return_at_eof = true;
1315
c6e83800
ZW
1316 pfile->state.discarding_output++;
1317 pfile->state.prevent_expansion++;
1318
590e1987
NB
1319 if (CPP_OPTION (pfile, traditional))
1320 while (_cpp_read_logical_line_trad (pfile))
1321 ;
1322 else
1323 while (cpp_get_token (pfile)->type != CPP_EOF)
1324 ;
c6e83800
ZW
1325
1326 pfile->state.discarding_output--;
1327 pfile->state.prevent_expansion--;
93c80368
NB
1328}
1329
1c90c6f9 1330/* Step back one (or more) tokens. Can only step back more than 1 if
bdcbe496 1331 they are from the lexer, and not from macro expansion. */
b528a07e 1332void
6cf87ca4 1333_cpp_backup_tokens (cpp_reader *pfile, unsigned int count)
93c80368 1334{
bdcbe496 1335 if (pfile->context->prev == NULL)
93c80368 1336 {
bdcbe496
NB
1337 pfile->lookaheads += count;
1338 while (count--)
1339 {
3293c3e3
NB
1340 pfile->cur_token--;
1341 if (pfile->cur_token == pfile->cur_run->base
1342 /* Possible with -fpreprocessed and no leading #line. */
1343 && pfile->cur_run->prev != NULL)
bdcbe496 1344 {
bdcbe496
NB
1345 pfile->cur_run = pfile->cur_run->prev;
1346 pfile->cur_token = pfile->cur_run->limit;
1347 }
1348 }
93c80368 1349 }
bdcbe496 1350 else
93c80368 1351 {
bdcbe496
NB
1352 if (count != 1)
1353 abort ();
4ed5bcfb 1354 if (pfile->context->direct_p)
82eda77e 1355 FIRST (pfile->context).token--;
4ed5bcfb 1356 else
82eda77e 1357 FIRST (pfile->context).ptoken--;
93c80368
NB
1358 }
1359}
711b8824 1360
93c80368
NB
1361/* #define directive parsing and handling. */
1362
da7d8304 1363/* Returns nonzero if a macro redefinition warning is required. */
cbc69f84 1364static bool
6cf87ca4
ZW
1365warn_of_redefinition (cpp_reader *pfile, const cpp_hashnode *node,
1366 const cpp_macro *macro2)
93c80368
NB
1367{
1368 const cpp_macro *macro1;
1369 unsigned int i;
1370
618cdda7
NB
1371 /* Some redefinitions need to be warned about regardless. */
1372 if (node->flags & NODE_WARN)
cbc69f84 1373 return true;
93c80368 1374
618cdda7 1375 /* Redefinition of a macro is allowed if and only if the old and new
ec5c56db 1376 definitions are the same. (6.10.3 paragraph 2). */
93c80368
NB
1377 macro1 = node->value.macro;
1378
6618c5d4
NB
1379 /* Don't check count here as it can be different in valid
1380 traditional redefinitions with just whitespace differences. */
1381 if (macro1->paramc != macro2->paramc
93c80368 1382 || macro1->fun_like != macro2->fun_like
28e0f040 1383 || macro1->variadic != macro2->variadic)
cbc69f84 1384 return true;
93c80368
NB
1385
1386 /* Check parameter spellings. */
1387 for (i = 0; i < macro1->paramc; i++)
1388 if (macro1->params[i] != macro2->params[i])
cbc69f84 1389 return true;
93c80368 1390
cbc69f84
NB
1391 /* Check the replacement text or tokens. */
1392 if (CPP_OPTION (pfile, traditional))
6618c5d4 1393 return _cpp_expansions_different_trad (macro1, macro2);
cbc69f84 1394
a7f36da3
DD
1395 if (macro1->count != macro2->count)
1396 return true;
1397
1398 for (i = 0; i < macro1->count; i++)
1399 if (!_cpp_equiv_tokens (&macro1->exp.tokens[i], &macro2->exp.tokens[i]))
1400 return true;
cbc69f84
NB
1401
1402 return false;
93c80368
NB
1403}
1404
1405/* Free the definition of hashnode H. */
711b8824 1406void
6cf87ca4 1407_cpp_free_definition (cpp_hashnode *h)
711b8824 1408{
93c80368
NB
1409 /* Macros and assertions no longer have anything to free. */
1410 h->type = NT_VOID;
1411 /* Clear builtin flag in case of redefinition. */
93d45d9e 1412 h->flags &= ~(NODE_BUILTIN | NODE_DISABLED | NODE_USED);
93c80368
NB
1413}
1414
14baae01 1415/* Save parameter NODE to the parameter list of macro MACRO. Returns
da7d8304 1416 zero on success, nonzero if the parameter is a duplicate. */
c70f6ed3 1417bool
6cf87ca4 1418_cpp_save_parameter (cpp_reader *pfile, cpp_macro *macro, cpp_hashnode *node)
93c80368 1419{
4977bab6 1420 unsigned int len;
93c80368 1421 /* Constraint 6.10.3.6 - duplicate parameter names. */
4977bab6 1422 if (node->flags & NODE_MACRO_ARG)
709e9e50 1423 {
0527bc4e 1424 cpp_error (pfile, CPP_DL_ERROR, "duplicate macro parameter \"%s\"",
ebef4e8c 1425 NODE_NAME (node));
23ff0223 1426 return true;
93c80368 1427 }
709e9e50 1428
8c3b2693
NB
1429 if (BUFF_ROOM (pfile->a_buff)
1430 < (macro->paramc + 1) * sizeof (cpp_hashnode *))
1431 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_hashnode *));
709e9e50 1432
8c3b2693 1433 ((cpp_hashnode **) BUFF_FRONT (pfile->a_buff))[macro->paramc++] = node;
4977bab6
ZW
1434 node->flags |= NODE_MACRO_ARG;
1435 len = macro->paramc * sizeof (union _cpp_hashnode_value);
1436 if (len > pfile->macro_buffer_len)
1437 {
c3f829c1
GDR
1438 pfile->macro_buffer = XRESIZEVEC (unsigned char, pfile->macro_buffer,
1439 len);
4977bab6
ZW
1440 pfile->macro_buffer_len = len;
1441 }
1442 ((union _cpp_hashnode_value *) pfile->macro_buffer)[macro->paramc - 1]
1443 = node->value;
1444
1445 node->value.arg_index = macro->paramc;
23ff0223 1446 return false;
711b8824
ZW
1447}
1448
23ff0223
NB
1449/* Check the syntax of the parameters in a MACRO definition. Returns
1450 false if an error occurs. */
1451static bool
6cf87ca4 1452parse_params (cpp_reader *pfile, cpp_macro *macro)
711b8824 1453{
93c80368 1454 unsigned int prev_ident = 0;
711b8824 1455
93c80368 1456 for (;;)
711b8824 1457 {
345894b4 1458 const cpp_token *token = _cpp_lex_token (pfile);
711b8824 1459
345894b4 1460 switch (token->type)
711b8824 1461 {
93c80368 1462 default:
477cdac7
JT
1463 /* Allow/ignore comments in parameter lists if we are
1464 preserving comments in macro expansions. */
1465 if (token->type == CPP_COMMENT
1466 && ! CPP_OPTION (pfile, discard_comments_in_macro_exp))
1467 continue;
1468
0527bc4e 1469 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 1470 "\"%s\" may not appear in macro parameter list",
345894b4 1471 cpp_token_as_text (pfile, token));
23ff0223 1472 return false;
93c80368 1473
711b8824 1474 case CPP_NAME:
93c80368
NB
1475 if (prev_ident)
1476 {
0527bc4e 1477 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 1478 "macro parameters must be comma-separated");
23ff0223 1479 return false;
93c80368
NB
1480 }
1481 prev_ident = 1;
1482
c70f6ed3 1483 if (_cpp_save_parameter (pfile, macro, token->val.node))
23ff0223 1484 return false;
93c80368 1485 continue;
711b8824 1486
93c80368
NB
1487 case CPP_CLOSE_PAREN:
1488 if (prev_ident || macro->paramc == 0)
23ff0223 1489 return true;
711b8824 1490
93c80368
NB
1491 /* Fall through to pick up the error. */
1492 case CPP_COMMA:
1493 if (!prev_ident)
1494 {
0527bc4e 1495 cpp_error (pfile, CPP_DL_ERROR, "parameter name missing");
23ff0223 1496 return false;
93c80368
NB
1497 }
1498 prev_ident = 0;
711b8824
ZW
1499 continue;
1500
93c80368 1501 case CPP_ELLIPSIS:
28e0f040 1502 macro->variadic = 1;
93c80368
NB
1503 if (!prev_ident)
1504 {
c70f6ed3
NB
1505 _cpp_save_parameter (pfile, macro,
1506 pfile->spec_nodes.n__VA_ARGS__);
93c80368 1507 pfile->state.va_args_ok = 1;
e5b79219
RH
1508 if (! CPP_OPTION (pfile, c99)
1509 && CPP_OPTION (pfile, pedantic)
1510 && CPP_OPTION (pfile, warn_variadic_macros))
0527bc4e 1511 cpp_error (pfile, CPP_DL_PEDWARN,
ebef4e8c 1512 "anonymous variadic macros were introduced in C99");
93c80368 1513 }
e5b79219
RH
1514 else if (CPP_OPTION (pfile, pedantic)
1515 && CPP_OPTION (pfile, warn_variadic_macros))
0527bc4e 1516 cpp_error (pfile, CPP_DL_PEDWARN,
ebef4e8c 1517 "ISO C does not permit named variadic macros");
711b8824 1518
93c80368 1519 /* We're at the end, and just expect a closing parenthesis. */
345894b4
NB
1520 token = _cpp_lex_token (pfile);
1521 if (token->type == CPP_CLOSE_PAREN)
23ff0223 1522 return true;
93c80368 1523 /* Fall through. */
711b8824 1524
93c80368 1525 case CPP_EOF:
0527bc4e 1526 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in macro parameter list");
23ff0223 1527 return false;
711b8824 1528 }
711b8824 1529 }
93c80368
NB
1530}
1531
14baae01 1532/* Allocate room for a token from a macro's replacement list. */
93c80368 1533static cpp_token *
6cf87ca4 1534alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
93c80368 1535{
8c3b2693
NB
1536 if (BUFF_ROOM (pfile->a_buff) < (macro->count + 1) * sizeof (cpp_token))
1537 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (cpp_token));
711b8824 1538
8c3b2693 1539 return &((cpp_token *) BUFF_FRONT (pfile->a_buff))[macro->count++];
14baae01
NB
1540}
1541
d15a58c0
NB
1542/* Lex a token from the expansion of MACRO, but mark parameters as we
1543 find them and warn of traditional stringification. */
14baae01 1544static cpp_token *
6cf87ca4 1545lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
14baae01 1546{
ee380365 1547 cpp_token *token, *saved_cur_token;
14baae01 1548
ee380365 1549 saved_cur_token = pfile->cur_token;
14baae01
NB
1550 pfile->cur_token = alloc_expansion_token (pfile, macro);
1551 token = _cpp_lex_direct (pfile);
ee380365 1552 pfile->cur_token = saved_cur_token;
93c80368 1553
d15a58c0 1554 /* Is this a parameter? */
4977bab6
ZW
1555 if (token->type == CPP_NAME
1556 && (token->val.node->flags & NODE_MACRO_ARG) != 0)
93c80368
NB
1557 {
1558 token->type = CPP_MACRO_ARG;
4977bab6 1559 token->val.arg_no = token->val.node->value.arg_index;
93c80368
NB
1560 }
1561 else if (CPP_WTRADITIONAL (pfile) && macro->paramc > 0
1562 && (token->type == CPP_STRING || token->type == CPP_CHAR))
1563 check_trad_stringification (pfile, macro, &token->val.str);
1564
1565 return token;
711b8824
ZW
1566}
1567
cbc69f84 1568static bool
6cf87ca4 1569create_iso_definition (cpp_reader *pfile, cpp_macro *macro)
711b8824 1570{
cbc69f84 1571 cpp_token *token;
14baae01 1572 const cpp_token *ctoken;
126e073b
SM
1573 bool following_paste_op = false;
1574 const char *paste_op_error_msg =
1575 N_("'##' cannot appear at either end of a macro expansion");
93c80368
NB
1576
1577 /* Get the first token of the expansion (or the '(' of a
1578 function-like macro). */
14baae01
NB
1579 ctoken = _cpp_lex_token (pfile);
1580
1581 if (ctoken->type == CPP_OPEN_PAREN && !(ctoken->flags & PREV_WHITE))
93c80368 1582 {
cbc69f84 1583 bool ok = parse_params (pfile, macro);
8c3b2693
NB
1584 macro->params = (cpp_hashnode **) BUFF_FRONT (pfile->a_buff);
1585 if (!ok)
cbc69f84 1586 return false;
8c3b2693 1587
d8044160
GK
1588 /* Success. Commit or allocate the parameter array. */
1589 if (pfile->hash_table->alloc_subobject)
1590 {
c3f829c1
GDR
1591 cpp_hashnode **params =
1592 (cpp_hashnode **) pfile->hash_table->alloc_subobject
1593 (sizeof (cpp_hashnode *) * macro->paramc);
be0f1e54
PB
1594 memcpy (params, macro->params,
1595 sizeof (cpp_hashnode *) * macro->paramc);
1596 macro->params = params;
d8044160
GK
1597 }
1598 else
1599 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->params[macro->paramc];
93c80368 1600 macro->fun_like = 1;
93c80368 1601 }
14baae01 1602 else if (ctoken->type != CPP_EOF && !(ctoken->flags & PREV_WHITE))
cae064e7
JJ
1603 {
1604 /* While ISO C99 requires whitespace before replacement text
1605 in a macro definition, ISO C90 with TC1 allows there characters
1606 from the basic source character set. */
1607 if (CPP_OPTION (pfile, c99))
1608 cpp_error (pfile, CPP_DL_PEDWARN,
1609 "ISO C99 requires whitespace after the macro name");
1610 else
1611 {
1612 int warntype = CPP_DL_WARNING;
1613 switch (ctoken->type)
1614 {
1615 case CPP_ATSIGN:
1616 case CPP_AT_NAME:
1617 case CPP_OBJC_STRING:
1618 /* '@' is not in basic character set. */
1619 warntype = CPP_DL_PEDWARN;
1620 break;
1621 case CPP_OTHER:
1622 /* Basic character set sans letters, digits and _. */
1623 if (strchr ("!\"#%&'()*+,-./:;<=>?[\\]^{|}~",
1624 ctoken->val.str.text[0]) == NULL)
1625 warntype = CPP_DL_PEDWARN;
1626 break;
1627 default:
1628 /* All other tokens start with a character from basic
1629 character set. */
1630 break;
1631 }
1632 cpp_error (pfile, warntype,
1633 "missing whitespace after the macro name");
1634 }
1635 }
711b8824 1636
14baae01
NB
1637 if (macro->fun_like)
1638 token = lex_expansion_token (pfile, macro);
1639 else
1640 {
1641 token = alloc_expansion_token (pfile, macro);
1642 *token = *ctoken;
1643 }
711b8824 1644
93c80368
NB
1645 for (;;)
1646 {
1647 /* Check the stringifying # constraint 6.10.3.2.1 of
1648 function-like macros when lexing the subsequent token. */
1649 if (macro->count > 1 && token[-1].type == CPP_HASH && macro->fun_like)
1650 {
1651 if (token->type == CPP_MACRO_ARG)
1652 {
1653 token->flags &= ~PREV_WHITE;
1654 token->flags |= STRINGIFY_ARG;
1655 token->flags |= token[-1].flags & PREV_WHITE;
1656 token[-1] = token[0];
1657 macro->count--;
1658 }
1659 /* Let assembler get away with murder. */
bdb05a7b 1660 else if (CPP_OPTION (pfile, lang) != CLK_ASM)
93c80368 1661 {
0527bc4e 1662 cpp_error (pfile, CPP_DL_ERROR,
ebef4e8c 1663 "'#' is not followed by a macro parameter");
cbc69f84 1664 return false;
93c80368
NB
1665 }
1666 }
1667
1668 if (token->type == CPP_EOF)
126e073b
SM
1669 {
1670 /* Paste operator constraint 6.10.3.3.1:
1671 Token-paste ##, can appear in both object-like and
1672 function-like macros, but not at the end. */
1673 if (following_paste_op)
1674 {
1675 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
1676 return false;
1677 }
1678 break;
1679 }
93c80368
NB
1680
1681 /* Paste operator constraint 6.10.3.3.1. */
1682 if (token->type == CPP_PASTE)
1683 {
1684 /* Token-paste ##, can appear in both object-like and
126e073b
SM
1685 function-like macros, but not at the beginning. */
1686 if (macro->count == 1)
93c80368 1687 {
126e073b 1688 cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
cbc69f84 1689 return false;
93c80368 1690 }
711b8824 1691
126e073b 1692 --macro->count;
93c80368 1693 token[-1].flags |= PASTE_LEFT;
93c80368
NB
1694 }
1695
126e073b 1696 following_paste_op = (token->type == CPP_PASTE);
93c80368
NB
1697 token = lex_expansion_token (pfile, macro);
1698 }
1699
601328bb 1700 macro->exp.tokens = (cpp_token *) BUFF_FRONT (pfile->a_buff);
d8044160 1701 macro->traditional = 0;
8c3b2693 1702
4c2b647d
NB
1703 /* Don't count the CPP_EOF. */
1704 macro->count--;
93c80368 1705
d15a58c0 1706 /* Clear whitespace on first token for warn_of_redefinition(). */
8c3b2693 1707 if (macro->count)
601328bb 1708 macro->exp.tokens[0].flags &= ~PREV_WHITE;
8c3b2693 1709
d8044160
GK
1710 /* Commit or allocate the memory. */
1711 if (pfile->hash_table->alloc_subobject)
1712 {
c3f829c1
GDR
1713 cpp_token *tokns =
1714 (cpp_token *) pfile->hash_table->alloc_subobject (sizeof (cpp_token)
1715 * macro->count);
d8044160
GK
1716 memcpy (tokns, macro->exp.tokens, sizeof (cpp_token) * macro->count);
1717 macro->exp.tokens = tokns;
1718 }
1719 else
1720 BUFF_FRONT (pfile->a_buff) = (uchar *) &macro->exp.tokens[macro->count];
8c3b2693 1721
cbc69f84
NB
1722 return true;
1723}
1724
da7d8304 1725/* Parse a macro and save its expansion. Returns nonzero on success. */
cbc69f84 1726bool
6cf87ca4 1727_cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
cbc69f84
NB
1728{
1729 cpp_macro *macro;
1730 unsigned int i;
1731 bool ok;
44ed91a1 1732
d8044160 1733 if (pfile->hash_table->alloc_subobject)
c3f829c1
GDR
1734 macro = (cpp_macro *) pfile->hash_table->alloc_subobject
1735 (sizeof (cpp_macro));
d8044160
GK
1736 else
1737 macro = (cpp_macro *) _cpp_aligned_alloc (pfile, sizeof (cpp_macro));
cbc69f84
NB
1738 macro->line = pfile->directive_line;
1739 macro->params = 0;
1740 macro->paramc = 0;
1741 macro->variadic = 0;
23345bbb 1742 macro->used = !CPP_OPTION (pfile, warn_unused_macros);
cbc69f84
NB
1743 macro->count = 0;
1744 macro->fun_like = 0;
7065e130 1745 /* To suppress some diagnostics. */
12f9df4e 1746 macro->syshdr = pfile->buffer && pfile->buffer->sysp != 0;
7065e130 1747
cbc69f84
NB
1748 if (CPP_OPTION (pfile, traditional))
1749 ok = _cpp_create_trad_definition (pfile, macro);
1750 else
1751 {
cbc69f84
NB
1752 ok = create_iso_definition (pfile, macro);
1753
ee380365 1754 /* We set the type for SEEN_EOL() in directives.c.
cbc69f84
NB
1755
1756 Longer term we should lex the whole line before coming here,
1757 and just copy the expansion. */
cbc69f84
NB
1758
1759 /* Stop the lexer accepting __VA_ARGS__. */
1760 pfile->state.va_args_ok = 0;
1761 }
1762
1763 /* Clear the fast argument lookup indices. */
1764 for (i = macro->paramc; i-- > 0; )
4977bab6
ZW
1765 {
1766 struct cpp_hashnode *node = macro->params[i];
1767 node->flags &= ~ NODE_MACRO_ARG;
1768 node->value = ((union _cpp_hashnode_value *) pfile->macro_buffer)[i];
1769 }
cbc69f84
NB
1770
1771 if (!ok)
1772 return ok;
1773
c2734e05 1774 if (node->type == NT_MACRO)
711b8824 1775 {
a69cbaac
NB
1776 if (CPP_OPTION (pfile, warn_unused_macros))
1777 _cpp_warn_if_unused_macro (pfile, node, NULL);
1778
cbc69f84 1779 if (warn_of_redefinition (pfile, node, macro))
711b8824 1780 {
0527bc4e 1781 cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->directive_line, 0,
ebef4e8c 1782 "\"%s\" redefined", NODE_NAME (node));
93c80368 1783
618cdda7 1784 if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
0527bc4e 1785 cpp_error_with_line (pfile, CPP_DL_PEDWARN,
cbc69f84
NB
1786 node->value.macro->line, 0,
1787 "this is the location of the previous definition");
711b8824 1788 }
711b8824
ZW
1789 }
1790
c2734e05
NB
1791 if (node->type != NT_VOID)
1792 _cpp_free_definition (node);
1793
711b8824 1794 /* Enter definition in hash table. */
93c80368
NB
1795 node->type = NT_MACRO;
1796 node->value.macro = macro;
607f74e9 1797 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_"))
ec46053b
TT
1798 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_FORMAT_MACROS")
1799 /* __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS are mentioned
1800 in the C standard, as something that one must use in C++.
1801 However DR#593 indicates that these aren't actually mentioned
1802 in the C++ standard. We special-case them anyway. */
1803 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_LIMIT_MACROS")
1804 && ustrcmp (NODE_NAME (node), (const uchar *) "__STDC_CONSTANT_MACROS"))
618cdda7 1805 node->flags |= NODE_WARN;
711b8824 1806
93c80368 1807 return ok;
711b8824
ZW
1808}
1809
d15a58c0
NB
1810/* Warn if a token in STRING matches one of a function-like MACRO's
1811 parameters. */
e1aa5140 1812static void
6cf87ca4
ZW
1813check_trad_stringification (cpp_reader *pfile, const cpp_macro *macro,
1814 const cpp_string *string)
e1aa5140 1815{
93c80368 1816 unsigned int i, len;
6338b358 1817 const uchar *p, *q, *limit;
df383483 1818
e1aa5140 1819 /* Loop over the string. */
6338b358
NB
1820 limit = string->text + string->len - 1;
1821 for (p = string->text + 1; p < limit; p = q)
e1aa5140 1822 {
e1aa5140 1823 /* Find the start of an identifier. */
61c16b10
GM
1824 while (p < limit && !is_idstart (*p))
1825 p++;
e1aa5140
KG
1826
1827 /* Find the end of the identifier. */
1828 q = p;
61c16b10
GM
1829 while (q < limit && is_idchar (*q))
1830 q++;
93c80368
NB
1831
1832 len = q - p;
1833
e1aa5140
KG
1834 /* Loop over the function macro arguments to see if the
1835 identifier inside the string matches one of them. */
93c80368
NB
1836 for (i = 0; i < macro->paramc; i++)
1837 {
1838 const cpp_hashnode *node = macro->params[i];
e1aa5140 1839
2a967f3d
NB
1840 if (NODE_LEN (node) == len
1841 && !memcmp (p, NODE_NAME (node), len))
e1aa5140 1842 {
0527bc4e 1843 cpp_error (pfile, CPP_DL_WARNING,
f458d1d5 1844 "macro argument \"%s\" would be stringified in traditional C",
ebef4e8c 1845 NODE_NAME (node));
e1aa5140
KG
1846 break;
1847 }
1848 }
1849 }
1850}
93c80368 1851
7096171b
NB
1852/* Returns the name, arguments and expansion of a macro, in a format
1853 suitable to be read back in again, and therefore also for DWARF 2
1854 debugging info. e.g. "PASTE(X, Y) X ## Y", or "MACNAME EXPANSION".
1855 Caller is expected to generate the "#define" bit if needed. The
93c80368 1856 returned text is temporary, and automatically freed later. */
93c80368 1857const unsigned char *
6cf87ca4 1858cpp_macro_definition (cpp_reader *pfile, const cpp_hashnode *node)
93c80368
NB
1859{
1860 unsigned int i, len;
1861 const cpp_macro *macro = node->value.macro;
1862 unsigned char *buffer;
1863
1864 if (node->type != NT_MACRO || (node->flags & NODE_BUILTIN))
1865 {
0527bc4e 1866 cpp_error (pfile, CPP_DL_ICE,
ebef4e8c 1867 "invalid hash type %d in cpp_macro_definition", node->type);
93c80368
NB
1868 return 0;
1869 }
1870
1871 /* Calculate length. */
8dc901de 1872 len = NODE_LEN (node) + 2; /* ' ' and NUL. */
93c80368
NB
1873 if (macro->fun_like)
1874 {
64d08263
JB
1875 len += 4; /* "()" plus possible final ".." of named
1876 varargs (we have + 1 below). */
93c80368 1877 for (i = 0; i < macro->paramc; i++)
64d08263 1878 len += NODE_LEN (macro->params[i]) + 1; /* "," */
93c80368
NB
1879 }
1880
6da55c00 1881 /* This should match below where we fill in the buffer. */
278c4662
NB
1882 if (CPP_OPTION (pfile, traditional))
1883 len += _cpp_replacement_text_len (macro);
1884 else
93c80368 1885 {
278c4662
NB
1886 for (i = 0; i < macro->count; i++)
1887 {
1888 cpp_token *token = &macro->exp.tokens[i];
93c80368 1889
278c4662
NB
1890 if (token->type == CPP_MACRO_ARG)
1891 len += NODE_LEN (macro->params[token->val.arg_no - 1]);
1892 else
6da55c00
EC
1893 len += cpp_token_len (token);
1894
278c4662
NB
1895 if (token->flags & STRINGIFY_ARG)
1896 len++; /* "#" */
1897 if (token->flags & PASTE_LEFT)
1898 len += 3; /* " ##" */
6da55c00
EC
1899 if (token->flags & PREV_WHITE)
1900 len++; /* " " */
278c4662 1901 }
93c80368
NB
1902 }
1903
1904 if (len > pfile->macro_buffer_len)
4b49c365 1905 {
c3f829c1
GDR
1906 pfile->macro_buffer = XRESIZEVEC (unsigned char,
1907 pfile->macro_buffer, len);
4b49c365
AO
1908 pfile->macro_buffer_len = len;
1909 }
7096171b
NB
1910
1911 /* Fill in the buffer. Start with the macro name. */
93c80368 1912 buffer = pfile->macro_buffer;
7096171b
NB
1913 memcpy (buffer, NODE_NAME (node), NODE_LEN (node));
1914 buffer += NODE_LEN (node);
93c80368
NB
1915
1916 /* Parameter names. */
1917 if (macro->fun_like)
1918 {
1919 *buffer++ = '(';
1920 for (i = 0; i < macro->paramc; i++)
1921 {
1922 cpp_hashnode *param = macro->params[i];
1923
1924 if (param != pfile->spec_nodes.n__VA_ARGS__)
1925 {
a28c5035
NB
1926 memcpy (buffer, NODE_NAME (param), NODE_LEN (param));
1927 buffer += NODE_LEN (param);
93c80368
NB
1928 }
1929
1930 if (i + 1 < macro->paramc)
df383483
KH
1931 /* Don't emit a space after the comma here; we're trying
1932 to emit a Dwarf-friendly definition, and the Dwarf spec
1933 forbids spaces in the argument list. */
64d08263 1934 *buffer++ = ',';
28e0f040 1935 else if (macro->variadic)
93c80368
NB
1936 *buffer++ = '.', *buffer++ = '.', *buffer++ = '.';
1937 }
1938 *buffer++ = ')';
1939 }
1940
e37b38d7
JB
1941 /* The Dwarf spec requires a space after the macro name, even if the
1942 definition is the empty string. */
1943 *buffer++ = ' ';
1944
278c4662
NB
1945 if (CPP_OPTION (pfile, traditional))
1946 buffer = _cpp_copy_replacement_text (macro, buffer);
1947 else if (macro->count)
93c80368 1948 /* Expansion tokens. */
93c80368 1949 {
93c80368
NB
1950 for (i = 0; i < macro->count; i++)
1951 {
601328bb 1952 cpp_token *token = &macro->exp.tokens[i];
93c80368
NB
1953
1954 if (token->flags & PREV_WHITE)
1955 *buffer++ = ' ';
1956 if (token->flags & STRINGIFY_ARG)
1957 *buffer++ = '#';
1958
1959 if (token->type == CPP_MACRO_ARG)
1960 {
a28c5035 1961 memcpy (buffer,
6da55c00
EC
1962 NODE_NAME (macro->params[token->val.arg_no - 1]),
1963 NODE_LEN (macro->params[token->val.arg_no - 1]));
1964 buffer += NODE_LEN (macro->params[token->val.arg_no - 1]);
93c80368
NB
1965 }
1966 else
47e20491 1967 buffer = cpp_spell_token (pfile, token, buffer, false);
93c80368
NB
1968
1969 if (token->flags & PASTE_LEFT)
1970 {
1971 *buffer++ = ' ';
1972 *buffer++ = '#';
1973 *buffer++ = '#';
1974 /* Next has PREV_WHITE; see _cpp_create_definition. */
1975 }
1976 }
1977 }
1978
1979 *buffer = '\0';
1980 return pfile->macro_buffer;
1981}