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