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