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