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