]> git.ipfire.org Git - thirdparty/gcc.git/blame - libcpp/directives.c
re PR preprocessor/36479 (Short buffer in libcpp)
[thirdparty/gcc.git] / libcpp / directives.c
CommitLineData
a949941c 1/* CPP Library. (Directive handling.)
5e7b4e25 2 Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
705e2d28 3 1999, 2000, 2001, 2002, 2003, 2004, 2005,
33ae4837 4 2007, 2008 Free Software Foundation, Inc.
4c8cc616 5 Contributed by Per Bothner, 1994-95.
d8bfa78c 6 Based on CCCP program by Paul Rubin, June 1986
7f2935c7
PB
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. */
7f2935c7 22
956d6950 23#include "config.h"
b04cd507 24#include "system.h"
956d6950 25#include "cpplib.h"
4f4e53dd 26#include "internal.h"
c6e83800 27#include "mkdeps.h"
c71f835b 28#include "obstack.h"
7f2935c7 29
88ae23e7
ZW
30/* Stack of conditionals currently in progress
31 (including both successful and failing conditionals). */
88ae23e7
ZW
32struct if_stack
33{
34 struct if_stack *next;
50410426 35 unsigned int line; /* Line where condition started. */
93c80368 36 const cpp_hashnode *mi_cmacro;/* macro name for #ifndef around entire file */
cef0d199
NB
37 bool skip_elses; /* Can future #else / #elif be skipped? */
38 bool was_skipping; /* If were skipping on entry. */
6cf87ca4 39 int type; /* Most recent conditional for diagnostics. */
88ae23e7 40};
88ae23e7 41
a5da89c6 42/* Contains a registered pragma or pragma namespace. */
6cf87ca4 43typedef void (*pragma_cb) (cpp_reader *);
a5da89c6
NB
44struct pragma_entry
45{
46 struct pragma_entry *next;
4b115ff0 47 const cpp_hashnode *pragma; /* Name and length. */
21b11495
ZW
48 bool is_nspace;
49 bool is_internal;
bc4071dd
RH
50 bool is_deferred;
51 bool allow_expansion;
a5da89c6
NB
52 union {
53 pragma_cb handler;
54 struct pragma_entry *space;
bc4071dd 55 unsigned int ident;
a5da89c6
NB
56 } u;
57};
58
93c80368
NB
59/* Values for the origin field of struct directive. KANDR directives
60 come from traditional (K&R) C. STDC89 directives come from the
61 1989 C standard. EXTENSION directives are extensions. */
62#define KANDR 0
63#define STDC89 1
64#define EXTENSION 2
65
66/* Values for the flags field of struct directive. COND indicates a
67 conditional; IF_COND an opening conditional. INCL means to treat
68 "..." and <...> as q-char and h-char sequences respectively. IN_I
69 means this directive should be handled even if -fpreprocessed is in
1a76916c
NB
70 effect (these are the directives with callback hooks).
71
d97371e0 72 EXPAND is set on directives that are always macro-expanded. */
93c80368
NB
73#define COND (1 << 0)
74#define IF_COND (1 << 1)
75#define INCL (1 << 2)
76#define IN_I (1 << 3)
1a76916c 77#define EXPAND (1 << 4)
899015a0 78#define DEPRECATED (1 << 5)
93c80368
NB
79
80/* Defines one #-directive, including how to handle it. */
6cf87ca4 81typedef void (*directive_handler) (cpp_reader *);
93c80368
NB
82typedef struct directive directive;
83struct directive
84{
85 directive_handler handler; /* Function to handle directive. */
562a5c27 86 const uchar *name; /* Name of directive. */
93c80368
NB
87 unsigned short length; /* Length of name. */
88 unsigned char origin; /* Origin of directive. */
89 unsigned char flags; /* Flags describing this directive. */
90};
91
1316f1f7
ZW
92/* Forward declarations. */
93
6cf87ca4
ZW
94static void skip_rest_of_line (cpp_reader *);
95static void check_eol (cpp_reader *);
96static void start_directive (cpp_reader *);
97static void prepare_directive_trad (cpp_reader *);
98static void end_directive (cpp_reader *, int);
99static void directive_diagnostics (cpp_reader *, const directive *, int);
100static void run_directive (cpp_reader *, int, const char *, size_t);
101static char *glue_header_name (cpp_reader *);
cbc43ae0 102static const char *parse_include (cpp_reader *, int *, const cpp_token ***);
6cf87ca4
ZW
103static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *);
104static unsigned int read_flag (cpp_reader *, unsigned int);
6cf87ca4
ZW
105static int strtoul_for_line (const uchar *, unsigned int, unsigned long *);
106static void do_diagnostic (cpp_reader *, int, int);
ee1c2a10 107static cpp_hashnode *lex_macro_node (cpp_reader *, bool);
d1bd0ded 108static int undefine_macros (cpp_reader *, cpp_hashnode *, void *);
6cf87ca4
ZW
109static void do_include_common (cpp_reader *, enum include_type);
110static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *,
111 const cpp_hashnode *);
6cf87ca4
ZW
112static int count_registered_pragmas (struct pragma_entry *);
113static char ** save_registered_pragmas (struct pragma_entry *, char **);
114static char ** restore_registered_pragmas (cpp_reader *, struct pragma_entry *,
115 char **);
116static void do_pragma_once (cpp_reader *);
117static void do_pragma_poison (cpp_reader *);
118static void do_pragma_system_header (cpp_reader *);
119static void do_pragma_dependency (cpp_reader *);
120static void do_linemarker (cpp_reader *);
121static const cpp_token *get_token_no_padding (cpp_reader *);
122static const cpp_token *get__Pragma_string (cpp_reader *);
123static void destringize_and_run (cpp_reader *, const cpp_string *);
124static int parse_answer (cpp_reader *, struct answer **, int);
125static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int);
126static struct answer ** find_answer (cpp_hashnode *, const struct answer *);
127static void handle_assertion (cpp_reader *, const char *, int);
d481b69b 128
168d3732
ZW
129/* This is the table of directive handlers. It is ordered by
130 frequency of occurrence; the numbers at the end are directive
131 counts from all the source code I have lying around (egcs and libc
132 CVS as of 1999-05-18, plus grub-0.5.91, linux-2.2.9, and
93c80368 133 pcmcia-cs-3.0.9). This is no longer important as directive lookup
899015a0
TT
134 is now O(1). All extensions other than #warning, #include_next,
135 and #import are deprecated. The name is where the extension
136 appears to have come from. */
168d3732 137
93c80368
NB
138#define DIRECTIVE_TABLE \
139D(define, T_DEFINE = 0, KANDR, IN_I) /* 270554 */ \
d97371e0 140D(include, T_INCLUDE, KANDR, INCL | EXPAND) /* 52262 */ \
93c80368
NB
141D(endif, T_ENDIF, KANDR, COND) /* 45855 */ \
142D(ifdef, T_IFDEF, KANDR, COND | IF_COND) /* 22000 */ \
1a76916c 143D(if, T_IF, KANDR, COND | IF_COND | EXPAND) /* 18162 */ \
93c80368
NB
144D(else, T_ELSE, KANDR, COND) /* 9863 */ \
145D(ifndef, T_IFNDEF, KANDR, COND | IF_COND) /* 9675 */ \
146D(undef, T_UNDEF, KANDR, IN_I) /* 4837 */ \
1a76916c
NB
147D(line, T_LINE, KANDR, EXPAND) /* 2465 */ \
148D(elif, T_ELIF, STDC89, COND | EXPAND) /* 610 */ \
93c80368
NB
149D(error, T_ERROR, STDC89, 0) /* 475 */ \
150D(pragma, T_PRAGMA, STDC89, IN_I) /* 195 */ \
151D(warning, T_WARNING, EXTENSION, 0) /* 22 */ \
d97371e0 152D(include_next, T_INCLUDE_NEXT, EXTENSION, INCL | EXPAND) /* 19 */ \
899015a0 153D(ident, T_IDENT, EXTENSION, IN_I | DEPRECATED) /* 11 */ \
d97371e0 154D(import, T_IMPORT, EXTENSION, INCL | EXPAND) /* 0 ObjC */ \
899015a0
TT
155D(assert, T_ASSERT, EXTENSION, DEPRECATED) /* 0 SVR4 */ \
156D(unassert, T_UNASSERT, EXTENSION, DEPRECATED) /* 0 SVR4 */ \
157D(sccs, T_SCCS, EXTENSION, IN_I | DEPRECATED) /* 0 SVR4? */
1ed17cd5
ZW
158
159/* #sccs is synonymous with #ident. */
160#define do_sccs do_ident
07aa0b04 161
168d3732
ZW
162/* Use the table to generate a series of prototypes, an enum for the
163 directive names, and an array of directive handlers. */
164
6cf87ca4 165#define D(name, t, o, f) static void do_##name (cpp_reader *);
168d3732
ZW
166DIRECTIVE_TABLE
167#undef D
168
041c3194 169#define D(n, tag, o, f) tag,
168d3732
ZW
170enum
171{
172 DIRECTIVE_TABLE
173 N_DIRECTIVES
7f2935c7 174};
168d3732
ZW
175#undef D
176
041c3194 177#define D(name, t, origin, flags) \
9a238586
KG
178{ do_##name, (const uchar *) #name, \
179 sizeof #name - 1, origin, flags },
93c80368 180static const directive dtable[] =
168d3732
ZW
181{
182DIRECTIVE_TABLE
183};
184#undef D
185#undef DIRECTIVE_TABLE
7f2935c7 186
dcc229e5
ZW
187/* Wrapper struct directive for linemarkers.
188 The origin is more or less true - the original K+R cpp
189 did use this notation in its preprocessed output. */
190static const directive linemarker_dir =
191{
b6baa67d 192 do_linemarker, UC"#", 1, KANDR, IN_I
dcc229e5
ZW
193};
194
1a76916c 195#define SEEN_EOL() (pfile->cur_token[-1].type == CPP_EOF)
67821e3a 196
93c80368
NB
197/* Skip any remaining tokens in a directive. */
198static void
6cf87ca4 199skip_rest_of_line (cpp_reader *pfile)
c5a04734 200{
93c80368 201 /* Discard all stacked contexts. */
8128cccf 202 while (pfile->context->prev)
93c80368
NB
203 _cpp_pop_context (pfile);
204
b528a07e 205 /* Sweep up all tokens remaining on the line. */
345894b4
NB
206 if (! SEEN_EOL ())
207 while (_cpp_lex_token (pfile)->type != CPP_EOF)
208 ;
93c80368 209}
c5a04734 210
93c80368
NB
211/* Ensure there are no stray tokens at the end of a directive. */
212static void
6cf87ca4 213check_eol (cpp_reader *pfile)
93c80368 214{
345894b4 215 if (! SEEN_EOL () && _cpp_lex_token (pfile)->type != CPP_EOF)
0527bc4e 216 cpp_error (pfile, CPP_DL_PEDWARN, "extra tokens at end of #%s directive",
ebef4e8c 217 pfile->directive->name);
93c80368
NB
218}
219
cbc43ae0
ILT
220/* Ensure there are no stray tokens other than comments at the end of
221 a directive, and gather the comments. */
222static const cpp_token **
223check_eol_return_comments (cpp_reader *pfile)
224{
225 size_t c;
226 size_t capacity = 8;
227 const cpp_token **buf;
228
229 buf = XNEWVEC (const cpp_token *, capacity);
230 c = 0;
231 if (! SEEN_EOL ())
232 {
233 while (1)
234 {
235 const cpp_token *tok;
236
237 tok = _cpp_lex_token (pfile);
238 if (tok->type == CPP_EOF)
239 break;
240 if (tok->type != CPP_COMMENT)
241 cpp_error (pfile, CPP_DL_PEDWARN,
242 "extra tokens at end of #%s directive",
243 pfile->directive->name);
244 else
245 {
246 if (c + 1 >= capacity)
247 {
248 capacity *= 2;
249 buf = XRESIZEVEC (const cpp_token *, buf, capacity);
250 }
251 buf[c] = tok;
252 ++c;
253 }
254 }
255 }
256 buf[c] = NULL;
257 return buf;
258}
259
fe6c2db9
NB
260/* Called when entering a directive, _Pragma or command-line directive. */
261static void
6cf87ca4 262start_directive (cpp_reader *pfile)
93c80368 263{
7f2f1a66
NB
264 /* Setup in-directive state. */
265 pfile->state.in_directive = 1;
266 pfile->state.save_comments = 0;
21b11495 267 pfile->directive_result.type = CPP_PADDING;
7f2f1a66 268
93c80368 269 /* Some handlers need the position of the # for diagnostics. */
500bee0a 270 pfile->directive_line = pfile->line_table->highest_line;
fe6c2db9
NB
271}
272
273/* Called when leaving a directive, _Pragma or command-line directive. */
274static void
6cf87ca4 275end_directive (cpp_reader *pfile, int skip_line)
fe6c2db9 276{
bc4071dd
RH
277 if (pfile->state.in_deferred_pragma)
278 ;
279 else if (CPP_OPTION (pfile, traditional))
1a76916c 280 {
d97371e0
NB
281 /* Revert change of prepare_directive_trad. */
282 pfile->state.prevent_expansion--;
283
b66377c1 284 if (pfile->directive != &dtable[T_DEFINE])
1a76916c
NB
285 _cpp_remove_overlay (pfile);
286 }
fe6c2db9 287 /* We don't skip for an assembler #. */
b66377c1 288 else if (skip_line)
67821e3a
NB
289 {
290 skip_rest_of_line (pfile);
bdcbe496
NB
291 if (!pfile->keep_tokens)
292 {
293 pfile->cur_run = &pfile->base_run;
294 pfile->cur_token = pfile->base_run.base;
295 }
67821e3a 296 }
fe6c2db9
NB
297
298 /* Restore state. */
fe6c2db9
NB
299 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
300 pfile->state.in_directive = 0;
d97371e0 301 pfile->state.in_expression = 0;
fe6c2db9
NB
302 pfile->state.angled_headers = 0;
303 pfile->directive = 0;
304}
305
1a76916c
NB
306/* Prepare to handle the directive in pfile->directive. */
307static void
6cf87ca4 308prepare_directive_trad (cpp_reader *pfile)
1a76916c 309{
951a0766 310 if (pfile->directive != &dtable[T_DEFINE])
1a76916c 311 {
b66377c1
NB
312 bool no_expand = (pfile->directive
313 && ! (pfile->directive->flags & EXPAND));
974c43f1 314 bool was_skipping = pfile->state.skipping;
1a76916c 315
d97371e0
NB
316 pfile->state.in_expression = (pfile->directive == &dtable[T_IF]
317 || pfile->directive == &dtable[T_ELIF]);
45f2492c
NB
318 if (pfile->state.in_expression)
319 pfile->state.skipping = false;
320
1a76916c
NB
321 if (no_expand)
322 pfile->state.prevent_expansion++;
43839642 323 _cpp_scan_out_logical_line (pfile, NULL);
1a76916c
NB
324 if (no_expand)
325 pfile->state.prevent_expansion--;
45f2492c 326
974c43f1 327 pfile->state.skipping = was_skipping;
1a76916c
NB
328 _cpp_overlay_buffer (pfile, pfile->out.base,
329 pfile->out.cur - pfile->out.base);
330 }
d97371e0
NB
331
332 /* Stop ISO C from expanding anything. */
333 pfile->state.prevent_expansion++;
1a76916c
NB
334}
335
da7d8304 336/* Output diagnostics for a directive DIR. INDENTED is nonzero if
18a9d8ff 337 the '#' was indented. */
18a9d8ff 338static void
6cf87ca4 339directive_diagnostics (cpp_reader *pfile, const directive *dir, int indented)
18a9d8ff 340{
899015a0
TT
341 /* Issue -pedantic or deprecated warnings for extensions. We let
342 -pedantic take precedence if both are applicable. */
343 if (! pfile->state.skipping)
344 {
345 if (dir->origin == EXTENSION
346 && !(dir == &dtable[T_IMPORT] && CPP_OPTION (pfile, objc))
347 && CPP_PEDANTIC (pfile))
348 cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name);
349 else if (((dir->flags & DEPRECATED) != 0
350 || (dir == &dtable[T_IMPORT] && !CPP_OPTION (pfile, objc)))
351 && CPP_OPTION (pfile, warn_deprecated))
352 cpp_error (pfile, CPP_DL_WARNING, "#%s is a deprecated GCC extension",
353 dir->name);
354 }
dcc229e5
ZW
355
356 /* Traditionally, a directive is ignored unless its # is in
357 column 1. Therefore in code intended to work with K+R
358 compilers, directives added by C89 must have their #
359 indented, and directives present in traditional C must not.
360 This is true even of directives in skipped conditional
361 blocks. #elif cannot be used at all. */
362 if (CPP_WTRADITIONAL (pfile))
18a9d8ff 363 {
dcc229e5 364 if (dir == &dtable[T_ELIF])
0527bc4e 365 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 366 "suggest not using #elif in traditional C");
dcc229e5 367 else if (indented && dir->origin == KANDR)
0527bc4e 368 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c
NB
369 "traditional C ignores #%s with the # indented",
370 dir->name);
dcc229e5 371 else if (!indented && dir->origin != KANDR)
0527bc4e 372 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c
NB
373 "suggest hiding #%s from traditional C with an indented #",
374 dir->name);
18a9d8ff
NB
375 }
376}
377
da7d8304 378/* Check if we have a known directive. INDENTED is nonzero if the
18a9d8ff 379 '#' of the directive was indented. This function is in this file
a2566ae9 380 to save unnecessarily exporting dtable etc. to lex.c. Returns
da7d8304 381 nonzero if the line of tokens has been handled, zero if we should
18a9d8ff 382 continue processing the line. */
fe6c2db9 383int
6cf87ca4 384_cpp_handle_directive (cpp_reader *pfile, int indented)
fe6c2db9 385{
fe6c2db9 386 const directive *dir = 0;
345894b4 387 const cpp_token *dname;
e808ec9c 388 bool was_parsing_args = pfile->state.parsing_args;
c6e83800 389 bool was_discarding_output = pfile->state.discarding_output;
fe6c2db9
NB
390 int skip = 1;
391
c6e83800
ZW
392 if (was_discarding_output)
393 pfile->state.prevent_expansion = 0;
394
e808ec9c
NB
395 if (was_parsing_args)
396 {
397 if (CPP_OPTION (pfile, pedantic))
0527bc4e 398 cpp_error (pfile, CPP_DL_PEDWARN,
e808ec9c
NB
399 "embedding a directive within macro arguments is not portable");
400 pfile->state.parsing_args = 0;
401 pfile->state.prevent_expansion = 0;
402 }
fe6c2db9 403 start_directive (pfile);
345894b4 404 dname = _cpp_lex_token (pfile);
0d9f234d 405
345894b4 406 if (dname->type == CPP_NAME)
0d9f234d 407 {
4977bab6
ZW
408 if (dname->val.node->is_directive)
409 dir = &dtable[dname->val.node->directive_index];
0d9f234d 410 }
05713b80 411 /* We do not recognize the # followed by a number extension in
18a9d8ff 412 assembler code. */
345894b4 413 else if (dname->type == CPP_NUMBER && CPP_OPTION (pfile, lang) != CLK_ASM)
0d9f234d 414 {
dcc229e5
ZW
415 dir = &linemarker_dir;
416 if (CPP_PEDANTIC (pfile) && ! CPP_OPTION (pfile, preprocessed)
417 && ! pfile->state.skipping)
0527bc4e 418 cpp_error (pfile, CPP_DL_PEDWARN,
ebef4e8c 419 "style of line directive is a GCC extension");
93c80368 420 }
0d9f234d 421
93c80368
NB
422 if (dir)
423 {
18a9d8ff
NB
424 /* If we have a directive that is not an opening conditional,
425 invalidate any control macro. */
426 if (! (dir->flags & IF_COND))
427 pfile->mi_valid = false;
428
429 /* Kluge alert. In order to be sure that code like this
430
431 #define HASH #
432 HASH define foo bar
433
434 does not cause '#define foo bar' to get executed when
435 compiled with -save-temps, we recognize directives in
a2566ae9 436 -fpreprocessed mode only if the # is in column 1. macro.c
ccfc4c91
OW
437 puts a space in front of any '#' at the start of a macro.
438
439 We exclude the -fdirectives-only case because macro expansion
440 has not been performed yet, and block comments can cause spaces
441 to preceed the directive. */
18a9d8ff 442 if (CPP_OPTION (pfile, preprocessed)
ccfc4c91 443 && !CPP_OPTION (pfile, directives_only)
18a9d8ff 444 && (indented || !(dir->flags & IN_I)))
6d4587f7 445 {
18a9d8ff
NB
446 skip = 0;
447 dir = 0;
6d4587f7
ZW
448 }
449 else
93c80368 450 {
18a9d8ff
NB
451 /* In failed conditional groups, all non-conditional
452 directives are ignored. Before doing that, whether
453 skipping or not, we should lex angle-bracketed headers
454 correctly, and maybe output some diagnostics. */
455 pfile->state.angled_headers = dir->flags & INCL;
a8d0ddaf 456 pfile->state.directive_wants_padding = dir->flags & INCL;
18a9d8ff
NB
457 if (! CPP_OPTION (pfile, preprocessed))
458 directive_diagnostics (pfile, dir, indented);
459 if (pfile->state.skipping && !(dir->flags & COND))
460 dir = 0;
93c80368
NB
461 }
462 }
345894b4 463 else if (dname->type == CPP_EOF)
18a9d8ff
NB
464 ; /* CPP_EOF is the "null directive". */
465 else
93c80368
NB
466 {
467 /* An unknown directive. Don't complain about it in assembly
468 source: we don't know where the comments are, and # may
469 introduce assembler pseudo-ops. Don't complain about invalid
470 directives in skipped conditional groups (6.10 p4). */
bdb05a7b 471 if (CPP_OPTION (pfile, lang) == CLK_ASM)
18a9d8ff
NB
472 skip = 0;
473 else if (!pfile->state.skipping)
0527bc4e 474 cpp_error (pfile, CPP_DL_ERROR, "invalid preprocessing directive #%s",
345894b4 475 cpp_token_as_text (pfile, dname));
0d9f234d
NB
476 }
477
d1a58688
NB
478 pfile->directive = dir;
479 if (CPP_OPTION (pfile, traditional))
480 prepare_directive_trad (pfile);
481
18a9d8ff 482 if (dir)
6cf87ca4 483 pfile->directive->handler (pfile);
18a9d8ff
NB
484 else if (skip == 0)
485 _cpp_backup_tokens (pfile, 1);
486
487 end_directive (pfile, skip);
765d600a 488 if (was_parsing_args && !pfile->state.in_deferred_pragma)
e808ec9c
NB
489 {
490 /* Restore state when within macro args. */
491 pfile->state.parsing_args = 2;
492 pfile->state.prevent_expansion = 1;
e808ec9c 493 }
c6e83800
ZW
494 if (was_discarding_output)
495 pfile->state.prevent_expansion = 1;
fe6c2db9 496 return skip;
041c3194 497}
7f2935c7 498
93c80368 499/* Directive handler wrapper used by the command line option
26aea073 500 processor. BUF is \n terminated. */
93c80368 501static void
6cf87ca4 502run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count)
3fdc651f 503{
562a5c27 504 cpp_push_buffer (pfile, (const uchar *) buf, count,
40de9f76 505 /* from_stage3 */ true);
0bda4760 506 start_directive (pfile);
26aea073
NB
507
508 /* This is a short-term fix to prevent a leading '#' being
509 interpreted as a directive. */
510 _cpp_clean_line (pfile);
511
f71aebba 512 pfile->directive = &dtable[dir_no];
1a76916c
NB
513 if (CPP_OPTION (pfile, traditional))
514 prepare_directive_trad (pfile);
6cf87ca4 515 pfile->directive->handler (pfile);
0bda4760 516 end_directive (pfile, 1);
ef6e958a 517 _cpp_pop_buffer (pfile);
93c80368
NB
518}
519
520/* Checks for validity the macro name in #define, #undef, #ifdef and
ee1c2a10
TT
521 #ifndef directives. IS_DEF_OR_UNDEF is true if this call is
522 processing a #define or #undefine directive, and false
523 otherwise. */
041c3194 524static cpp_hashnode *
ee1c2a10 525lex_macro_node (cpp_reader *pfile, bool is_def_or_undef)
041c3194 526{
1a76916c 527 const cpp_token *token = _cpp_lex_token (pfile);
ea4a453b 528
92936ecf 529 /* The token immediately after #define must be an identifier. That
b8363a24
ZW
530 identifier may not be "defined", per C99 6.10.8p4.
531 In C++, it may not be any of the "named operators" either,
532 per C++98 [lex.digraph], [lex.key].
533 Finally, the identifier may not have been poisoned. (In that case
1d63a28a 534 the lexer has issued the error message for us.) */
cbc69f84 535
1a76916c
NB
536 if (token->type == CPP_NAME)
537 {
538 cpp_hashnode *node = token->val.node;
92936ecf 539
ee1c2a10 540 if (is_def_or_undef && node == pfile->spec_nodes.n_defined)
0527bc4e 541 cpp_error (pfile, CPP_DL_ERROR,
1a76916c
NB
542 "\"defined\" cannot be used as a macro name");
543 else if (! (node->flags & NODE_POISONED))
544 return node;
ba89d661 545 }
1a76916c 546 else if (token->flags & NAMED_OP)
0527bc4e 547 cpp_error (pfile, CPP_DL_ERROR,
cbc69f84 548 "\"%s\" cannot be used as a macro name as it is an operator in C++",
1a76916c
NB
549 NODE_NAME (token->val.node));
550 else if (token->type == CPP_EOF)
0527bc4e 551 cpp_error (pfile, CPP_DL_ERROR, "no macro name given in #%s directive",
1a76916c
NB
552 pfile->directive->name);
553 else
0527bc4e 554 cpp_error (pfile, CPP_DL_ERROR, "macro names must be identifiers");
07aa0b04 555
cbc69f84 556 return NULL;
7f2935c7 557}
7f2935c7 558
a2566ae9 559/* Process a #define directive. Most work is done in macro.c. */
711b8824 560static void
6cf87ca4 561do_define (cpp_reader *pfile)
7f2935c7 562{
ee1c2a10 563 cpp_hashnode *node = lex_macro_node (pfile, true);
ff2b53ef 564
93c80368
NB
565 if (node)
566 {
1d63a28a
NB
567 /* If we have been requested to expand comments into macros,
568 then re-enable saving of comments. */
569 pfile->state.save_comments =
570 ! CPP_OPTION (pfile, discard_comments_in_macro_exp);
571
93d45d9e
JM
572 if (pfile->cb.before_define)
573 pfile->cb.before_define (pfile);
574
93c80368
NB
575 if (_cpp_create_definition (pfile, node))
576 if (pfile->cb.define)
6cf87ca4 577 pfile->cb.define (pfile, pfile->directive_line, node);
93d45d9e
JM
578
579 node->flags &= ~NODE_USED;
93c80368 580 }
041c3194
ZW
581}
582
5d8ebbd8 583/* Handle #undef. Mark the identifier NT_VOID in the hash table. */
711b8824 584static void
6cf87ca4 585do_undef (cpp_reader *pfile)
041c3194 586{
ee1c2a10 587 cpp_hashnode *node = lex_macro_node (pfile, true);
9e62c811 588
45f2492c 589 if (node)
9e62c811 590 {
93d45d9e
JM
591 if (pfile->cb.before_define)
592 pfile->cb.before_define (pfile);
593
58fea6af 594 if (pfile->cb.undef)
6cf87ca4 595 pfile->cb.undef (pfile, pfile->directive_line, node);
9e62c811 596
45f2492c
NB
597 /* 6.10.3.5 paragraph 2: [#undef] is ignored if the specified
598 identifier is not currently defined as a macro name. */
599 if (node->type == NT_MACRO)
600 {
601 if (node->flags & NODE_WARN)
602 cpp_error (pfile, CPP_DL_WARNING,
603 "undefining \"%s\"", NODE_NAME (node));
9e62c811 604
45f2492c
NB
605 if (CPP_OPTION (pfile, warn_unused_macros))
606 _cpp_warn_if_unused_macro (pfile, node, NULL);
a69cbaac 607
45f2492c
NB
608 _cpp_free_definition (node);
609 }
9e62c811 610 }
45f2492c 611
93c80368 612 check_eol (pfile);
7f2935c7
PB
613}
614
d1bd0ded
GK
615/* Undefine a single macro/assertion/whatever. */
616
617static int
c6e83800 618undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
d1bd0ded
GK
619 void *data_p ATTRIBUTE_UNUSED)
620{
c6e83800
ZW
621 /* Body of _cpp_free_definition inlined here for speed.
622 Macros and assertions no longer have anything to free. */
623 h->type = NT_VOID;
93d45d9e 624 h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED|NODE_USED);
d1bd0ded
GK
625 return 1;
626}
627
628/* Undefine all macros and assertions. */
629
630void
631cpp_undef_all (cpp_reader *pfile)
632{
633 cpp_forall_identifiers (pfile, undefine_macros, NULL);
634}
635
636
93c80368
NB
637/* Helper routine used by parse_include. Reinterpret the current line
638 as an h-char-sequence (< ... >); we are looking at the first token
74eb4b3e
NB
639 after the <. Returns a malloced filename. */
640static char *
6cf87ca4 641glue_header_name (cpp_reader *pfile)
93c80368 642{
4ed5bcfb 643 const cpp_token *token;
74eb4b3e 644 char *buffer;
2450e0b8 645 size_t len, total_len = 0, capacity = 1024;
93c80368
NB
646
647 /* To avoid lexed tokens overwriting our glued name, we can only
648 allocate from the string pool once we've lexed everything. */
c3f829c1 649 buffer = XNEWVEC (char, capacity);
93c80368
NB
650 for (;;)
651 {
a8d0ddaf 652 token = get_token_no_padding (pfile);
93c80368 653
74eb4b3e 654 if (token->type == CPP_GREATER)
93c80368 655 break;
74eb4b3e
NB
656 if (token->type == CPP_EOF)
657 {
0527bc4e 658 cpp_error (pfile, CPP_DL_ERROR, "missing terminating > character");
74eb4b3e
NB
659 break;
660 }
93c80368 661
59325650 662 len = cpp_token_len (token) + 2; /* Leading space, terminating \0. */
2450e0b8 663 if (total_len + len > capacity)
93c80368 664 {
2450e0b8 665 capacity = (capacity + len) * 2;
c3f829c1 666 buffer = XRESIZEVEC (char, buffer, capacity);
93c80368
NB
667 }
668
4ed5bcfb 669 if (token->flags & PREV_WHITE)
2450e0b8 670 buffer[total_len++] = ' ';
93c80368 671
47e20491
GK
672 total_len = (cpp_spell_token (pfile, token, (uchar *) &buffer[total_len],
673 true)
74eb4b3e 674 - (uchar *) buffer);
93c80368 675 }
041c3194 676
74eb4b3e
NB
677 buffer[total_len] = '\0';
678 return buffer;
93c80368 679}
7f2935c7 680
74eb4b3e
NB
681/* Returns the file name of #include, #include_next, #import and
682 #pragma dependency. The string is malloced and the caller should
683 free it. Returns NULL on error. */
684static const char *
cbc43ae0
ILT
685parse_include (cpp_reader *pfile, int *pangle_brackets,
686 const cpp_token ***buf)
7f2935c7 687{
74eb4b3e 688 char *fname;
4ed5bcfb 689 const cpp_token *header;
7f2935c7 690
93c80368 691 /* Allow macro expansion. */
a8d0ddaf 692 header = get_token_no_padding (pfile);
74eb4b3e 693 if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
7f2935c7 694 {
c3f829c1 695 fname = XNEWVEC (char, header->val.str.len - 1);
6338b358
NB
696 memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
697 fname[header->val.str.len - 2] = '\0';
74eb4b3e 698 *pangle_brackets = header->type == CPP_HEADER_NAME;
7f2935c7 699 }
74eb4b3e 700 else if (header->type == CPP_LESS)
7f2935c7 701 {
74eb4b3e
NB
702 fname = glue_header_name (pfile);
703 *pangle_brackets = 1;
704 }
705 else
706 {
707 const unsigned char *dir;
708
709 if (pfile->directive == &dtable[T_PRAGMA])
b6baa67d 710 dir = UC"pragma dependency";
74eb4b3e
NB
711 else
712 dir = pfile->directive->name;
0527bc4e 713 cpp_error (pfile, CPP_DL_ERROR, "#%s expects \"FILENAME\" or <FILENAME>",
74eb4b3e
NB
714 dir);
715
4ed5bcfb 716 return NULL;
7f2935c7 717 }
7f2935c7 718
cda5e672
TT
719 if (pfile->directive == &dtable[T_PRAGMA])
720 {
721 /* This pragma allows extra tokens after the file name. */
722 }
723 else if (buf == NULL || CPP_OPTION (pfile, discard_comments))
cbc43ae0
ILT
724 check_eol (pfile);
725 else
726 {
727 /* If we are not discarding comments, then gather them while
728 doing the eol check. */
729 *buf = check_eol_return_comments (pfile);
730 }
731
74eb4b3e 732 return fname;
168d3732 733}
3caee4a8 734
ba133c96 735/* Handle #include, #include_next and #import. */
711b8824 736static void
6cf87ca4 737do_include_common (cpp_reader *pfile, enum include_type type)
168d3732 738{
74eb4b3e
NB
739 const char *fname;
740 int angle_brackets;
cbc43ae0
ILT
741 const cpp_token **buf = NULL;
742
743 /* Re-enable saving of comments if requested, so that the include
744 callback can dump comments which follow #include. */
745 pfile->state.save_comments = ! CPP_OPTION (pfile, discard_comments);
74eb4b3e 746
cbc43ae0 747 fname = parse_include (pfile, &angle_brackets, &buf);
74eb4b3e 748 if (!fname)
cbc43ae0
ILT
749 {
750 if (buf)
751 XDELETEVEC (buf);
752 return;
753 }
7f2935c7 754
28303828
NN
755 if (!*fname)
756 {
757 cpp_error (pfile, CPP_DL_ERROR, "empty filename in #%s",
758 pfile->directive->name);
cbc43ae0
ILT
759 XDELETEVEC (fname);
760 if (buf)
761 XDELETEVEC (buf);
28303828
NN
762 return;
763 }
764
3963c2e0 765 /* Prevent #include recursion. */
50f59cd7 766 if (pfile->line_table->depth >= CPP_STACK_MAX)
0527bc4e 767 cpp_error (pfile, CPP_DL_ERROR, "#include nested too deeply");
74eb4b3e 768 else
09b82253 769 {
74eb4b3e
NB
770 /* Get out of macro context, if we are. */
771 skip_rest_of_line (pfile);
09b82253 772
74eb4b3e 773 if (pfile->cb.include)
6cf87ca4 774 pfile->cb.include (pfile, pfile->directive_line,
cbc43ae0
ILT
775 pfile->directive->name, fname, angle_brackets,
776 buf);
3963c2e0 777
8f9b4009 778 _cpp_stack_include (pfile, fname, angle_brackets, type);
74eb4b3e 779 }
3963c2e0 780
cbc43ae0
ILT
781 XDELETEVEC (fname);
782 if (buf)
783 XDELETEVEC (buf);
168d3732 784}
e8037d57 785
711b8824 786static void
6cf87ca4 787do_include (cpp_reader *pfile)
168d3732 788{
ba133c96
NB
789 do_include_common (pfile, IT_INCLUDE);
790}
168d3732 791
ba133c96 792static void
6cf87ca4 793do_import (cpp_reader *pfile)
ba133c96 794{
ba133c96 795 do_include_common (pfile, IT_IMPORT);
168d3732 796}
7f2935c7 797
711b8824 798static void
6cf87ca4 799do_include_next (cpp_reader *pfile)
168d3732 800{
3963c2e0
ZW
801 enum include_type type = IT_INCLUDE_NEXT;
802
803 /* If this is the primary source file, warn and use the normal
804 search logic. */
705e2d28 805 if (cpp_in_primary_file (pfile))
3963c2e0 806 {
0527bc4e 807 cpp_error (pfile, CPP_DL_WARNING,
3963c2e0
ZW
808 "#include_next in primary source file");
809 type = IT_INCLUDE;
810 }
811 do_include_common (pfile, type);
7f2935c7 812}
7f2935c7 813
dcc229e5
ZW
814/* Subroutine of do_linemarker. Read possible flags after file name.
815 LAST is the last flag seen; 0 if this is the first flag. Return the
816 flag if it is valid, 0 at the end of the directive. Otherwise
817 complain. */
642ce434 818static unsigned int
6cf87ca4 819read_flag (cpp_reader *pfile, unsigned int last)
d3a34a0a 820{
345894b4 821 const cpp_token *token = _cpp_lex_token (pfile);
d3a34a0a 822
345894b4 823 if (token->type == CPP_NUMBER && token->val.str.len == 1)
d3a34a0a 824 {
345894b4 825 unsigned int flag = token->val.str.text[0] - '0';
28e0f040
NB
826
827 if (flag > last && flag <= 4
828 && (flag != 4 || last == 3)
829 && (flag != 2 || last == 0))
830 return flag;
d3a34a0a 831 }
93c80368 832
345894b4 833 if (token->type != CPP_EOF)
0527bc4e 834 cpp_error (pfile, CPP_DL_ERROR, "invalid flag \"%s\" in line directive",
345894b4 835 cpp_token_as_text (pfile, token));
93c80368 836 return 0;
d3a34a0a
JM
837}
838
dcc229e5
ZW
839/* Subroutine of do_line and do_linemarker. Convert a number in STR,
840 of length LEN, to binary; store it in NUMP, and return 0 if the
841 number was well-formed, 1 if not. Temporary, hopefully. */
041c3194 842static int
6cf87ca4 843strtoul_for_line (const uchar *str, unsigned int len, long unsigned int *nump)
041c3194
ZW
844{
845 unsigned long reg = 0;
562a5c27 846 uchar c;
041c3194
ZW
847 while (len--)
848 {
849 c = *str++;
850 if (!ISDIGIT (c))
851 return 1;
852 reg *= 10;
853 reg += c - '0';
854 }
855 *nump = reg;
856 return 0;
857}
858
6de1e2a9 859/* Interpret #line command.
dcc229e5
ZW
860 Note that the filename string (if any) is a true string constant
861 (escapes are interpreted), unlike in #line. */
711b8824 862static void
6cf87ca4 863do_line (cpp_reader *pfile)
7f2935c7 864{
500bee0a
PB
865 const struct line_maps *line_table = pfile->line_table;
866 const struct line_map *map = &line_table->maps[line_table->used - 1];
2203a881
DP
867
868 /* skip_rest_of_line() may cause line table to be realloc()ed so note down
869 sysp right now. */
870
871 unsigned char map_sysp = map->sysp;
4ed5bcfb 872 const cpp_token *token;
12f9df4e 873 const char *new_file = map->to_file;
bb74c963 874 unsigned long new_lineno;
93c80368 875
27e2564a 876 /* C99 raised the minimum limit on #line numbers. */
dcc229e5 877 unsigned int cap = CPP_OPTION (pfile, c99) ? 2147483647 : 32767;
18a9d8ff 878
93c80368 879 /* #line commands expand macros. */
4ed5bcfb
NB
880 token = cpp_get_token (pfile);
881 if (token->type != CPP_NUMBER
882 || strtoul_for_line (token->val.str.text, token->val.str.len,
883 &new_lineno))
7f2935c7 884 {
33ae4837
TT
885 if (token->type == CPP_EOF)
886 cpp_error (pfile, CPP_DL_ERROR, "unexpected end of file after #line");
887 else
888 cpp_error (pfile, CPP_DL_ERROR,
889 "\"%s\" after #line is not a positive integer",
890 cpp_token_as_text (pfile, token));
9ec7291f 891 return;
df383483 892 }
7f2935c7 893
dcc229e5 894 if (CPP_PEDANTIC (pfile) && (new_lineno == 0 || new_lineno > cap))
0527bc4e 895 cpp_error (pfile, CPP_DL_PEDWARN, "line number out of range");
7f2935c7 896
4ed5bcfb
NB
897 token = cpp_get_token (pfile);
898 if (token->type == CPP_STRING)
5538ada6 899 {
e6cc3a24 900 cpp_string s = { 0, 0 };
423e95e2
EC
901 if (cpp_interpret_string_notranslate (pfile, &token->val.str, 1,
902 &s, false))
e6cc3a24 903 new_file = (const char *)s.text;
dcc229e5
ZW
904 check_eol (pfile);
905 }
906 else if (token->type != CPP_EOF)
907 {
0527bc4e 908 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
dcc229e5
ZW
909 cpp_token_as_text (pfile, token));
910 return;
911 }
912
913 skip_rest_of_line (pfile);
914 _cpp_do_file_change (pfile, LC_RENAME, new_file, new_lineno,
2203a881 915 map_sysp);
dcc229e5
ZW
916}
917
918/* Interpret the # 44 "file" [flags] notation, which has slightly
919 different syntax and semantics from #line: Flags are allowed,
920 and we never complain about the line number being too big. */
921static void
6cf87ca4 922do_linemarker (cpp_reader *pfile)
dcc229e5 923{
500bee0a
PB
924 const struct line_maps *line_table = pfile->line_table;
925 const struct line_map *map = &line_table->maps[line_table->used - 1];
dcc229e5 926 const cpp_token *token;
12f9df4e 927 const char *new_file = map->to_file;
dcc229e5 928 unsigned long new_lineno;
12f9df4e 929 unsigned int new_sysp = map->sysp;
dcc229e5
ZW
930 enum lc_reason reason = LC_RENAME;
931 int flag;
932
933 /* Back up so we can get the number again. Putting this in
934 _cpp_handle_directive risks two calls to _cpp_backup_tokens in
935 some circumstances, which can segfault. */
936 _cpp_backup_tokens (pfile, 1);
937
938 /* #line commands expand macros. */
939 token = cpp_get_token (pfile);
940 if (token->type != CPP_NUMBER
941 || strtoul_for_line (token->val.str.text, token->val.str.len,
942 &new_lineno))
943 {
33ae4837
TT
944 /* Unlike #line, there does not seem to be a way to get an EOF
945 here. So, it should be safe to always spell the token. */
0527bc4e
JDA
946 cpp_error (pfile, CPP_DL_ERROR,
947 "\"%s\" after # is not a positive integer",
dcc229e5
ZW
948 cpp_token_as_text (pfile, token));
949 return;
df383483 950 }
941e09b6 951
dcc229e5
ZW
952 token = cpp_get_token (pfile);
953 if (token->type == CPP_STRING)
954 {
e6cc3a24 955 cpp_string s = { 0, 0 };
423e95e2
EC
956 if (cpp_interpret_string_notranslate (pfile, &token->val.str,
957 1, &s, false))
e6cc3a24 958 new_file = (const char *)s.text;
cf551fba 959
dcc229e5
ZW
960 new_sysp = 0;
961 flag = read_flag (pfile, 0);
962 if (flag == 1)
963 {
964 reason = LC_ENTER;
965 /* Fake an include for cpp_included (). */
966 _cpp_fake_include (pfile, new_file);
967 flag = read_flag (pfile, flag);
968 }
969 else if (flag == 2)
970 {
971 reason = LC_LEAVE;
972 flag = read_flag (pfile, flag);
973 }
974 if (flag == 3)
93c80368 975 {
dcc229e5
ZW
976 new_sysp = 1;
977 flag = read_flag (pfile, flag);
978 if (flag == 4)
979 new_sysp = 2;
93c80368 980 }
9d30f270 981 pfile->buffer->sysp = new_sysp;
dcc229e5 982
fde84349 983 check_eol (pfile);
041c3194 984 }
4ed5bcfb 985 else if (token->type != CPP_EOF)
27e2564a 986 {
0527bc4e 987 cpp_error (pfile, CPP_DL_ERROR, "\"%s\" is not a valid filename",
4ed5bcfb 988 cpp_token_as_text (pfile, token));
27e2564a
NB
989 return;
990 }
7f2935c7 991
bdcbe496 992 skip_rest_of_line (pfile);
bb74c963 993 _cpp_do_file_change (pfile, reason, new_file, new_lineno, new_sysp);
27e2564a
NB
994}
995
67821e3a 996/* Arrange the file_change callback. pfile->line has changed to
47d89cf3 997 FILE_LINE of TO_FILE, for reason REASON. SYSP is 1 for a system
a1f300c0 998 header, 2 for a system header that needs to be extern "C" protected,
47d89cf3 999 and zero otherwise. */
eb1f4d9d 1000void
6cf87ca4
ZW
1001_cpp_do_file_change (cpp_reader *pfile, enum lc_reason reason,
1002 const char *to_file, unsigned int file_line,
1003 unsigned int sysp)
27e2564a 1004{
12f9df4e
PB
1005 const struct line_map *map = linemap_add (pfile->line_table, reason, sysp,
1006 to_file, file_line);
500bee0a
PB
1007 if (map != NULL)
1008 linemap_line_start (pfile->line_table, map->to_line, 127);
d82fc108 1009
eb1f4d9d 1010 if (pfile->cb.file_change)
12f9df4e 1011 pfile->cb.file_change (pfile, map);
7f2935c7 1012}
941e09b6 1013
5d8ebbd8
NB
1014/* Report a warning or error detected by the program we are
1015 processing. Use the directive's tokens in the error message. */
711b8824 1016static void
6cf87ca4 1017do_diagnostic (cpp_reader *pfile, int code, int print_dir)
7f2935c7 1018{
5d6342eb
TT
1019 const unsigned char *dir_name;
1020 unsigned char *line;
1021 source_location src_loc = pfile->cur_token[-1].src_loc;
1022
1023 if (print_dir)
1024 dir_name = pfile->directive->name;
1025 else
1026 dir_name = NULL;
1027 pfile->state.prevent_expansion++;
1028 line = cpp_output_line_to_string (pfile, dir_name);
1029 pfile->state.prevent_expansion--;
1030
1031 cpp_error_with_line (pfile, code, src_loc, 0, "%s", line);
1032 free (line);
7f2935c7
PB
1033}
1034
838f313b 1035static void
6cf87ca4 1036do_error (cpp_reader *pfile)
838f313b 1037{
0527bc4e 1038 do_diagnostic (pfile, CPP_DL_ERROR, 1);
838f313b 1039}
7f2935c7 1040
711b8824 1041static void
6cf87ca4 1042do_warning (cpp_reader *pfile)
7f2935c7 1043{
2f878973 1044 /* We want #warning diagnostics to be emitted in system headers too. */
0527bc4e 1045 do_diagnostic (pfile, CPP_DL_WARNING_SYSHDR, 1);
7f2935c7
PB
1046}
1047
a2a76ce7 1048/* Report program identification. */
711b8824 1049static void
6cf87ca4 1050do_ident (cpp_reader *pfile)
7f2935c7 1051{
4ed5bcfb 1052 const cpp_token *str = cpp_get_token (pfile);
58fea6af 1053
4ed5bcfb 1054 if (str->type != CPP_STRING)
1ed17cd5
ZW
1055 cpp_error (pfile, CPP_DL_ERROR, "invalid #%s directive",
1056 pfile->directive->name);
93c80368 1057 else if (pfile->cb.ident)
6cf87ca4 1058 pfile->cb.ident (pfile, pfile->directive_line, &str->val.str);
a2a76ce7 1059
93c80368 1060 check_eol (pfile);
7f2935c7
PB
1061}
1062
a5da89c6
NB
1063/* Lookup a PRAGMA name in a singly-linked CHAIN. Returns the
1064 matching entry, or NULL if none is found. The returned entry could
1065 be the start of a namespace chain, or a pragma. */
1066static struct pragma_entry *
6cf87ca4 1067lookup_pragma_entry (struct pragma_entry *chain, const cpp_hashnode *pragma)
82443371 1068{
4b115ff0
NB
1069 while (chain && chain->pragma != pragma)
1070 chain = chain->next;
a5da89c6
NB
1071
1072 return chain;
1073}
1074
bc4071dd
RH
1075/* Create and insert a blank pragma entry at the beginning of a
1076 singly-linked CHAIN. */
a5da89c6 1077static struct pragma_entry *
bc4071dd 1078new_pragma_entry (cpp_reader *pfile, struct pragma_entry **chain)
82443371 1079{
c3f829c1 1080 struct pragma_entry *new_entry;
58fea6af 1081
c3f829c1 1082 new_entry = (struct pragma_entry *)
8c3b2693 1083 _cpp_aligned_alloc (pfile, sizeof (struct pragma_entry));
58fea6af 1084
bc4071dd 1085 memset (new_entry, 0, sizeof (struct pragma_entry));
c3f829c1 1086 new_entry->next = *chain;
bc4071dd 1087
c3f829c1
GDR
1088 *chain = new_entry;
1089 return new_entry;
58fea6af 1090}
82443371 1091
a5da89c6 1092/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
bc4071dd
RH
1093 goes in the global namespace. */
1094static struct pragma_entry *
1095register_pragma_1 (cpp_reader *pfile, const char *space, const char *name,
1096 bool allow_name_expansion)
82443371 1097{
a5da89c6
NB
1098 struct pragma_entry **chain = &pfile->pragmas;
1099 struct pragma_entry *entry;
4b115ff0 1100 const cpp_hashnode *node;
a5da89c6 1101
a5da89c6 1102 if (space)
58fea6af 1103 {
b6baa67d 1104 node = cpp_lookup (pfile, UC space, strlen (space));
4b115ff0 1105 entry = lookup_pragma_entry (*chain, node);
a5da89c6 1106 if (!entry)
bc4071dd
RH
1107 {
1108 entry = new_pragma_entry (pfile, chain);
1109 entry->pragma = node;
1110 entry->is_nspace = true;
1111 entry->allow_expansion = allow_name_expansion;
1112 }
a5da89c6
NB
1113 else if (!entry->is_nspace)
1114 goto clash;
bc4071dd
RH
1115 else if (entry->allow_expansion != allow_name_expansion)
1116 {
1117 cpp_error (pfile, CPP_DL_ICE,
1118 "registering pragmas in namespace \"%s\" with mismatched "
1119 "name expansion", space);
1120 return NULL;
1121 }
a5da89c6 1122 chain = &entry->u.space;
58fea6af 1123 }
bc4071dd
RH
1124 else if (allow_name_expansion)
1125 {
1126 cpp_error (pfile, CPP_DL_ICE,
1127 "registering pragma \"%s\" with name expansion "
1128 "and no namespace", name);
1129 return NULL;
1130 }
58fea6af 1131
a5da89c6 1132 /* Check for duplicates. */
b6baa67d 1133 node = cpp_lookup (pfile, UC name, strlen (name));
4b115ff0 1134 entry = lookup_pragma_entry (*chain, node);
bc4071dd 1135 if (entry == NULL)
a5da89c6 1136 {
bc4071dd
RH
1137 entry = new_pragma_entry (pfile, chain);
1138 entry->pragma = node;
1139 return entry;
a5da89c6 1140 }
bc4071dd
RH
1141
1142 if (entry->is_nspace)
1143 clash:
1144 cpp_error (pfile, CPP_DL_ICE,
1145 "registering \"%s\" as both a pragma and a pragma namespace",
1146 NODE_NAME (node));
1147 else if (space)
1148 cpp_error (pfile, CPP_DL_ICE, "#pragma %s %s is already registered",
1149 space, name);
a5da89c6 1150 else
bc4071dd
RH
1151 cpp_error (pfile, CPP_DL_ICE, "#pragma %s is already registered", name);
1152
1153 return NULL;
1154}
1155
1156/* Register a cpplib internal pragma SPACE NAME with HANDLER. */
1157static void
1158register_pragma_internal (cpp_reader *pfile, const char *space,
1159 const char *name, pragma_cb handler)
1160{
1161 struct pragma_entry *entry;
1162
1163 entry = register_pragma_1 (pfile, space, name, false);
1164 entry->is_internal = true;
1165 entry->u.handler = handler;
21b11495
ZW
1166}
1167
1168/* Register a pragma NAME in namespace SPACE. If SPACE is null, it
1169 goes in the global namespace. HANDLER is the handler it will call,
b5b3e36a
DJ
1170 which must be non-NULL. If ALLOW_EXPANSION is set, allow macro
1171 expansion while parsing pragma NAME. This function is exported
1172 from libcpp. */
21b11495
ZW
1173void
1174cpp_register_pragma (cpp_reader *pfile, const char *space, const char *name,
b5b3e36a 1175 pragma_cb handler, bool allow_expansion)
21b11495 1176{
bc4071dd
RH
1177 struct pragma_entry *entry;
1178
1179 if (!handler)
1180 {
1181 cpp_error (pfile, CPP_DL_ICE, "registering pragma with NULL handler");
1182 return;
1183 }
1184
1185 entry = register_pragma_1 (pfile, space, name, false);
1186 if (entry)
1187 {
1188 entry->allow_expansion = allow_expansion;
1189 entry->u.handler = handler;
1190 }
58fea6af 1191}
a5da89c6 1192
bc4071dd
RH
1193/* Similarly, but create mark the pragma for deferred processing.
1194 When found, a CPP_PRAGMA token will be insertted into the stream
1195 with IDENT in the token->u.pragma slot. */
1196void
1197cpp_register_deferred_pragma (cpp_reader *pfile, const char *space,
1198 const char *name, unsigned int ident,
1199 bool allow_expansion, bool allow_name_expansion)
1200{
1201 struct pragma_entry *entry;
1202
1203 entry = register_pragma_1 (pfile, space, name, allow_name_expansion);
1204 if (entry)
1205 {
1206 entry->is_deferred = true;
1207 entry->allow_expansion = allow_expansion;
1208 entry->u.ident = ident;
1209 }
1210}
1211
a5da89c6 1212/* Register the pragmas the preprocessor itself handles. */
58fea6af 1213void
6cf87ca4 1214_cpp_init_internal_pragmas (cpp_reader *pfile)
58fea6af 1215{
a5da89c6 1216 /* Pragmas in the global namespace. */
bc4071dd 1217 register_pragma_internal (pfile, 0, "once", do_pragma_once);
58fea6af 1218
a5da89c6 1219 /* New GCC-specific pragmas should be put in the GCC namespace. */
bc4071dd
RH
1220 register_pragma_internal (pfile, "GCC", "poison", do_pragma_poison);
1221 register_pragma_internal (pfile, "GCC", "system_header",
1222 do_pragma_system_header);
1223 register_pragma_internal (pfile, "GCC", "dependency", do_pragma_dependency);
82443371 1224}
7f2935c7 1225
17211ab5
GK
1226/* Return the number of registered pragmas in PE. */
1227
1228static int
6cf87ca4 1229count_registered_pragmas (struct pragma_entry *pe)
17211ab5
GK
1230{
1231 int ct = 0;
1232 for (; pe != NULL; pe = pe->next)
1233 {
1234 if (pe->is_nspace)
1235 ct += count_registered_pragmas (pe->u.space);
1236 ct++;
1237 }
1238 return ct;
1239}
1240
1241/* Save into SD the names of the registered pragmas referenced by PE,
1242 and return a pointer to the next free space in SD. */
1243
1244static char **
6cf87ca4 1245save_registered_pragmas (struct pragma_entry *pe, char **sd)
17211ab5
GK
1246{
1247 for (; pe != NULL; pe = pe->next)
1248 {
1249 if (pe->is_nspace)
1250 sd = save_registered_pragmas (pe->u.space, sd);
c3f829c1
GDR
1251 *sd++ = (char *) xmemdup (HT_STR (&pe->pragma->ident),
1252 HT_LEN (&pe->pragma->ident),
1253 HT_LEN (&pe->pragma->ident) + 1);
17211ab5
GK
1254 }
1255 return sd;
1256}
1257
1258/* Return a newly-allocated array which saves the names of the
1259 registered pragmas. */
1260
1261char **
6cf87ca4 1262_cpp_save_pragma_names (cpp_reader *pfile)
17211ab5
GK
1263{
1264 int ct = count_registered_pragmas (pfile->pragmas);
72bb2c39 1265 char **result = XNEWVEC (char *, ct);
17211ab5
GK
1266 (void) save_registered_pragmas (pfile->pragmas, result);
1267 return result;
1268}
1269
1270/* Restore from SD the names of the registered pragmas referenced by PE,
1271 and return a pointer to the next unused name in SD. */
1272
1273static char **
6cf87ca4
ZW
1274restore_registered_pragmas (cpp_reader *pfile, struct pragma_entry *pe,
1275 char **sd)
17211ab5
GK
1276{
1277 for (; pe != NULL; pe = pe->next)
1278 {
1279 if (pe->is_nspace)
1280 sd = restore_registered_pragmas (pfile, pe->u.space, sd);
b6baa67d 1281 pe->pragma = cpp_lookup (pfile, UC *sd, strlen (*sd));
17211ab5
GK
1282 free (*sd);
1283 sd++;
1284 }
1285 return sd;
1286}
1287
1288/* Restore the names of the registered pragmas from SAVED. */
1289
1290void
6cf87ca4 1291_cpp_restore_pragma_names (cpp_reader *pfile, char **saved)
17211ab5
GK
1292{
1293 (void) restore_registered_pragmas (pfile, pfile->pragmas, saved);
1294 free (saved);
1295}
1296
a5da89c6
NB
1297/* Pragmata handling. We handle some, and pass the rest on to the
1298 front end. C99 defines three pragmas and says that no macro
1299 expansion is to be performed on them; whether or not macro
1300 expansion happens for other pragmas is implementation defined.
bc4071dd
RH
1301 This implementation allows for a mix of both, since GCC did not
1302 traditionally macro expand its (few) pragmas, whereas OpenMP
1303 specifies that macro expansion should happen. */
711b8824 1304static void
6cf87ca4 1305do_pragma (cpp_reader *pfile)
7f2935c7 1306{
a5da89c6 1307 const struct pragma_entry *p = NULL;
e2e1fa50 1308 const cpp_token *token, *pragma_token = pfile->cur_token;
1c90c6f9 1309 cpp_token ns_token;
a5da89c6 1310 unsigned int count = 1;
add7091b 1311
93c80368 1312 pfile->state.prevent_expansion++;
58fea6af 1313
4ed5bcfb 1314 token = cpp_get_token (pfile);
1c90c6f9 1315 ns_token = *token;
4ed5bcfb 1316 if (token->type == CPP_NAME)
0172e2bc 1317 {
4b115ff0 1318 p = lookup_pragma_entry (pfile->pragmas, token->val.node);
a5da89c6 1319 if (p && p->is_nspace)
58fea6af 1320 {
bc4071dd
RH
1321 bool allow_name_expansion = p->allow_expansion;
1322 if (allow_name_expansion)
1323 pfile->state.prevent_expansion--;
a5da89c6
NB
1324 token = cpp_get_token (pfile);
1325 if (token->type == CPP_NAME)
4b115ff0 1326 p = lookup_pragma_entry (p->u.space, token->val.node);
a5da89c6
NB
1327 else
1328 p = NULL;
bc4071dd
RH
1329 if (allow_name_expansion)
1330 pfile->state.prevent_expansion++;
1331 count = 2;
58fea6af 1332 }
58fea6af 1333 }
041c3194 1334
3da3d587 1335 if (p)
e2e1fa50 1336 {
bc4071dd
RH
1337 if (p->is_deferred)
1338 {
1339 pfile->directive_result.src_loc = pragma_token->src_loc;
1340 pfile->directive_result.type = CPP_PRAGMA;
1341 pfile->directive_result.flags = pragma_token->flags;
1342 pfile->directive_result.val.pragma = p->u.ident;
1343 pfile->state.in_deferred_pragma = true;
1344 pfile->state.pragma_allow_expansion = p->allow_expansion;
1345 if (!p->allow_expansion)
1346 pfile->state.prevent_expansion++;
1347 }
1348 else
3da3d587 1349 {
bc4071dd
RH
1350 /* Since the handler below doesn't get the line number, that
1351 it might need for diagnostics, make sure it has the right
3da3d587
ZW
1352 numbers in place. */
1353 if (pfile->cb.line_change)
1354 (*pfile->cb.line_change) (pfile, pragma_token, false);
bc4071dd 1355 if (p->allow_expansion)
b5b3e36a 1356 pfile->state.prevent_expansion--;
3da3d587 1357 (*p->u.handler) (pfile);
bc4071dd 1358 if (p->allow_expansion)
b5b3e36a 1359 pfile->state.prevent_expansion++;
3da3d587 1360 }
21b11495 1361 }
d82fc108 1362 else if (pfile->cb.def_pragma)
bdcbe496 1363 {
1c90c6f9
JJ
1364 if (count == 1 || pfile->context->prev == NULL)
1365 _cpp_backup_tokens (pfile, count);
1366 else
1367 {
1368 /* Invalid name comes from macro expansion, _cpp_backup_tokens
1369 won't allow backing 2 tokens. */
1370 /* ??? The token buffer is leaked. Perhaps if def_pragma hook
1371 reads both tokens, we could perhaps free it, but if it doesn't,
1372 we don't know the exact lifespan. */
1373 cpp_token *toks = XNEWVEC (cpp_token, 2);
1374 toks[0] = ns_token;
1375 toks[0].flags |= NO_EXPAND;
1376 toks[1] = *token;
1377 toks[1].flags |= NO_EXPAND;
1378 _cpp_push_token_context (pfile, NULL, toks, 2);
1379 }
6cf87ca4 1380 pfile->cb.def_pragma (pfile, pfile->directive_line);
bdcbe496 1381 }
a5da89c6 1382
97293897 1383 pfile->state.prevent_expansion--;
82443371
NS
1384}
1385
5d8ebbd8 1386/* Handle #pragma once. */
58fea6af 1387static void
6cf87ca4 1388do_pragma_once (cpp_reader *pfile)
a2a76ce7 1389{
705e2d28 1390 if (cpp_in_primary_file (pfile))
0527bc4e 1391 cpp_error (pfile, CPP_DL_WARNING, "#pragma once in main file");
93c80368
NB
1392
1393 check_eol (pfile);
49634b3a 1394 _cpp_mark_file_once_only (pfile, pfile->buffer->file);
a2a76ce7 1395}
fc009f96 1396
c3bf3e6e
NB
1397/* Handle #pragma GCC poison, to poison one or more identifiers so
1398 that the lexer produces a hard error for each subsequent usage. */
58fea6af 1399static void
6cf87ca4 1400do_pragma_poison (cpp_reader *pfile)
a2a76ce7 1401{
345894b4 1402 const cpp_token *tok;
f8f769ea 1403 cpp_hashnode *hp;
a2a76ce7 1404
93c80368 1405 pfile->state.poisoned_ok = 1;
a2a76ce7
ZW
1406 for (;;)
1407 {
345894b4
NB
1408 tok = _cpp_lex_token (pfile);
1409 if (tok->type == CPP_EOF)
a2a76ce7 1410 break;
345894b4 1411 if (tok->type != CPP_NAME)
fc009f96 1412 {
0527bc4e
JDA
1413 cpp_error (pfile, CPP_DL_ERROR,
1414 "invalid #pragma GCC poison directive");
93c80368 1415 break;
fc009f96
GK
1416 }
1417
345894b4 1418 hp = tok->val.node;
93c80368
NB
1419 if (hp->flags & NODE_POISONED)
1420 continue;
1421
1422 if (hp->type == NT_MACRO)
0527bc4e 1423 cpp_error (pfile, CPP_DL_WARNING, "poisoning existing macro \"%s\"",
ebef4e8c 1424 NODE_NAME (hp));
93c80368
NB
1425 _cpp_free_definition (hp);
1426 hp->flags |= NODE_POISONED | NODE_DIAGNOSTIC;
fc009f96 1427 }
93c80368 1428 pfile->state.poisoned_ok = 0;
7f2935c7 1429}
2c0b35cb
ZW
1430
1431/* Mark the current header as a system header. This will suppress
1432 some categories of warnings (notably those from -pedantic). It is
1433 intended for use in system libraries that cannot be implemented in
1434 conforming C, but cannot be certain that their headers appear in a
1435 system include directory. To prevent abuse, it is rejected in the
1436 primary source file. */
58fea6af 1437static void
6cf87ca4 1438do_pragma_system_header (cpp_reader *pfile)
2c0b35cb 1439{
705e2d28 1440 if (cpp_in_primary_file (pfile))
0527bc4e 1441 cpp_error (pfile, CPP_DL_WARNING,
ebef4e8c 1442 "#pragma system_header ignored outside include file");
2c0b35cb 1443 else
d82fc108
NB
1444 {
1445 check_eol (pfile);
bdcbe496 1446 skip_rest_of_line (pfile);
d82fc108
NB
1447 cpp_make_system_header (pfile, 1, 0);
1448 }
2c0b35cb 1449}
f3f751ad
NS
1450
1451/* Check the modified date of the current include file against a specified
1452 file. Issue a diagnostic, if the specified file is newer. We use this to
1453 determine if a fixed header should be refixed. */
58fea6af 1454static void
6cf87ca4 1455do_pragma_dependency (cpp_reader *pfile)
f3f751ad 1456{
74eb4b3e
NB
1457 const char *fname;
1458 int angle_brackets, ordering;
df383483 1459
cbc43ae0 1460 fname = parse_include (pfile, &angle_brackets, NULL);
74eb4b3e 1461 if (!fname)
58fea6af 1462 return;
041c3194 1463
74eb4b3e 1464 ordering = _cpp_compare_file_date (pfile, fname, angle_brackets);
f3f751ad 1465 if (ordering < 0)
0527bc4e 1466 cpp_error (pfile, CPP_DL_WARNING, "cannot find source file %s", fname);
f3f751ad
NS
1467 else if (ordering > 0)
1468 {
0527bc4e
JDA
1469 cpp_error (pfile, CPP_DL_WARNING,
1470 "current file is older than %s", fname);
4ed5bcfb 1471 if (cpp_get_token (pfile)->type != CPP_EOF)
bdcbe496
NB
1472 {
1473 _cpp_backup_tokens (pfile, 1);
0527bc4e 1474 do_diagnostic (pfile, CPP_DL_WARNING, 0);
bdcbe496 1475 }
f3f751ad 1476 }
74eb4b3e 1477
fad205ff 1478 free ((void *) fname);
f3f751ad
NS
1479}
1480
4ed5bcfb
NB
1481/* Get a token but skip padding. */
1482static const cpp_token *
6cf87ca4 1483get_token_no_padding (cpp_reader *pfile)
a5c3cccd 1484{
4ed5bcfb
NB
1485 for (;;)
1486 {
1487 const cpp_token *result = cpp_get_token (pfile);
1488 if (result->type != CPP_PADDING)
1489 return result;
1490 }
1491}
a5c3cccd 1492
4ed5bcfb
NB
1493/* Check syntax is "(string-literal)". Returns the string on success,
1494 or NULL on failure. */
1495static const cpp_token *
6cf87ca4 1496get__Pragma_string (cpp_reader *pfile)
4ed5bcfb
NB
1497{
1498 const cpp_token *string;
5b9a40df 1499 const cpp_token *paren;
a5c3cccd 1500
5b9a40df
TT
1501 paren = get_token_no_padding (pfile);
1502 if (paren->type == CPP_EOF)
1503 _cpp_backup_tokens (pfile, 1);
1504 if (paren->type != CPP_OPEN_PAREN)
4ed5bcfb
NB
1505 return NULL;
1506
1507 string = get_token_no_padding (pfile);
5b9a40df
TT
1508 if (string->type == CPP_EOF)
1509 _cpp_backup_tokens (pfile, 1);
b6baa67d
KVH
1510 if (string->type != CPP_STRING && string->type != CPP_WSTRING
1511 && string->type != CPP_STRING32 && string->type != CPP_STRING16)
4ed5bcfb
NB
1512 return NULL;
1513
5b9a40df
TT
1514 paren = get_token_no_padding (pfile);
1515 if (paren->type == CPP_EOF)
1516 _cpp_backup_tokens (pfile, 1);
1517 if (paren->type != CPP_CLOSE_PAREN)
4ed5bcfb 1518 return NULL;
a5c3cccd 1519
4ed5bcfb 1520 return string;
a5c3cccd
NB
1521}
1522
87062813
NB
1523/* Destringize IN into a temporary buffer, by removing the first \ of
1524 \" and \\ sequences, and process the result as a #pragma directive. */
1525static void
6cf87ca4 1526destringize_and_run (cpp_reader *pfile, const cpp_string *in)
a5c3cccd
NB
1527{
1528 const unsigned char *src, *limit;
87062813 1529 char *dest, *result;
bc4071dd
RH
1530 cpp_context *saved_context;
1531 cpp_token *saved_cur_token;
1532 tokenrun *saved_cur_run;
1533 cpp_token *toks;
1534 int count;
14ccf800 1535 const struct directive *save_directive;
a5c3cccd 1536
c3f829c1 1537 dest = result = (char *) alloca (in->len - 1);
6338b358
NB
1538 src = in->text + 1 + (in->text[0] == 'L');
1539 limit = in->text + in->len - 1;
1540 while (src < limit)
a5c3cccd
NB
1541 {
1542 /* We know there is a character following the backslash. */
1543 if (*src == '\\' && (src[1] == '\\' || src[1] == '"'))
1544 src++;
1545 *dest++ = *src++;
1546 }
26aea073 1547 *dest = '\n';
a5c3cccd 1548
8128cccf
NB
1549 /* Ugh; an awful kludge. We are really not set up to be lexing
1550 tokens when in the middle of a macro expansion. Use a new
1551 context to force cpp_get_token to lex, and so skip_rest_of_line
1552 doesn't go beyond the end of the text. Also, remember the
1553 current lexing position so we can return to it later.
1554
1555 Something like line-at-a-time lexing should remove the need for
1556 this. */
bc4071dd
RH
1557 saved_context = pfile->context;
1558 saved_cur_token = pfile->cur_token;
1559 saved_cur_run = pfile->cur_run;
79ba5e3b 1560
bc4071dd
RH
1561 pfile->context = XNEW (cpp_context);
1562 pfile->context->macro = 0;
1563 pfile->context->prev = 0;
1c90c6f9 1564 pfile->context->next = 0;
79ba5e3b 1565
bc4071dd
RH
1566 /* Inline run_directive, since we need to delay the _cpp_pop_buffer
1567 until we've read all of the tokens that we want. */
1568 cpp_push_buffer (pfile, (const uchar *) result, dest - result,
1569 /* from_stage3 */ true);
1570 /* ??? Antique Disgusting Hack. What does this do? */
1571 if (pfile->buffer->prev)
1572 pfile->buffer->file = pfile->buffer->prev->file;
79ba5e3b 1573
bc4071dd
RH
1574 start_directive (pfile);
1575 _cpp_clean_line (pfile);
14ccf800
TT
1576 save_directive = pfile->directive;
1577 pfile->directive = &dtable[T_PRAGMA];
bc4071dd
RH
1578 do_pragma (pfile);
1579 end_directive (pfile, 1);
14ccf800 1580 pfile->directive = save_directive;
79ba5e3b 1581
bc4071dd
RH
1582 /* We always insert at least one token, the directive result. It'll
1583 either be a CPP_PADDING or a CPP_PRAGMA. In the later case, we
1584 need to insert *all* of the tokens, including the CPP_PRAGMA_EOL. */
1585
1586 /* If we're not handling the pragma internally, read all of the tokens from
1587 the string buffer now, while the string buffer is still installed. */
1588 /* ??? Note that the token buffer allocated here is leaked. It's not clear
1589 to me what the true lifespan of the tokens are. It would appear that
1590 the lifespan is the entire parse of the main input stream, in which case
1591 this may not be wrong. */
1592 if (pfile->directive_result.type == CPP_PRAGMA)
1593 {
1594 int maxcount;
1595
1596 count = 1;
1597 maxcount = 50;
1598 toks = XNEWVEC (cpp_token, maxcount);
1599 toks[0] = pfile->directive_result;
79ba5e3b 1600
bc4071dd
RH
1601 do
1602 {
1603 if (count == maxcount)
1604 {
1605 maxcount = maxcount * 3 / 2;
1606 toks = XRESIZEVEC (cpp_token, toks, maxcount);
1607 }
1c90c6f9
JJ
1608 toks[count] = *cpp_get_token (pfile);
1609 /* Macros have been already expanded by cpp_get_token
1610 if the pragma allowed expansion. */
1611 toks[count++].flags |= NO_EXPAND;
bc4071dd
RH
1612 }
1613 while (toks[count-1].type != CPP_PRAGMA_EOL);
1614 }
1615 else
1616 {
1617 count = 1;
1618 toks = XNEW (cpp_token);
1619 toks[0] = pfile->directive_result;
1620
1621 /* If we handled the entire pragma internally, make sure we get the
1622 line number correct for the next token. */
1623 if (pfile->cb.line_change)
1624 pfile->cb.line_change (pfile, pfile->cur_token, false);
1625 }
1626
1627 /* Finish inlining run_directive. */
1628 pfile->buffer->file = NULL;
1629 _cpp_pop_buffer (pfile);
1630
1631 /* Reset the old macro state before ... */
1632 XDELETE (pfile->context);
1633 pfile->context = saved_context;
1634 pfile->cur_token = saved_cur_token;
1635 pfile->cur_run = saved_cur_run;
1636
1637 /* ... inserting the new tokens we collected. */
1638 _cpp_push_token_context (pfile, NULL, toks, count);
a5c3cccd
NB
1639}
1640
5b9a40df
TT
1641/* Handle the _Pragma operator. Return 0 on error, 1 if ok. */
1642int
6cf87ca4 1643_cpp_do__Pragma (cpp_reader *pfile)
a5c3cccd 1644{
4ed5bcfb 1645 const cpp_token *string = get__Pragma_string (pfile);
21b11495 1646 pfile->directive_result.type = CPP_PADDING;
a5c3cccd 1647
79ba5e3b 1648 if (string)
5b9a40df
TT
1649 {
1650 destringize_and_run (pfile, &string->val.str);
1651 return 1;
1652 }
1653 cpp_error (pfile, CPP_DL_ERROR,
1654 "_Pragma takes a parenthesized string literal");
1655 return 0;
a5c3cccd 1656}
21b11495 1657
5d8ebbd8 1658/* Handle #ifdef. */
711b8824 1659static void
6cf87ca4 1660do_ifdef (cpp_reader *pfile)
168d3732 1661{
93c80368 1662 int skip = 1;
041c3194 1663
cef0d199 1664 if (! pfile->state.skipping)
93c80368 1665 {
93d45d9e 1666 cpp_hashnode *node = lex_macro_node (pfile, false);
041c3194 1667
93c80368 1668 if (node)
a69cbaac
NB
1669 {
1670 skip = node->type != NT_MACRO;
1671 _cpp_mark_macro_used (node);
93d45d9e
JM
1672 if (!(node->flags & NODE_USED))
1673 {
1674 node->flags |= NODE_USED;
1675 if (node->type == NT_MACRO)
1676 {
1677 if (pfile->cb.used_define)
1678 pfile->cb.used_define (pfile, pfile->directive_line, node);
1679 }
1680 else
1681 {
1682 if (pfile->cb.used_undef)
1683 pfile->cb.used_undef (pfile, pfile->directive_line, node);
1684 }
1685 }
a69cbaac
NB
1686 check_eol (pfile);
1687 }
93c80368 1688 }
168d3732 1689
93c80368
NB
1690 push_conditional (pfile, skip, T_IFDEF, 0);
1691}
168d3732 1692
5d8ebbd8 1693/* Handle #ifndef. */
711b8824 1694static void
6cf87ca4 1695do_ifndef (cpp_reader *pfile)
168d3732 1696{
93c80368 1697 int skip = 1;
93d45d9e 1698 cpp_hashnode *node = 0;
168d3732 1699
cef0d199 1700 if (! pfile->state.skipping)
5af7e2c2 1701 {
ee1c2a10 1702 node = lex_macro_node (pfile, false);
b43db0b3
GK
1703
1704 if (node)
a69cbaac
NB
1705 {
1706 skip = node->type == NT_MACRO;
1707 _cpp_mark_macro_used (node);
93d45d9e
JM
1708 if (!(node->flags & NODE_USED))
1709 {
1710 node->flags |= NODE_USED;
1711 if (node->type == NT_MACRO)
1712 {
1713 if (pfile->cb.used_define)
1714 pfile->cb.used_define (pfile, pfile->directive_line, node);
1715 }
1716 else
1717 {
1718 if (pfile->cb.used_undef)
1719 pfile->cb.used_undef (pfile, pfile->directive_line, node);
1720 }
1721 }
a69cbaac
NB
1722 check_eol (pfile);
1723 }
5af7e2c2 1724 }
041c3194 1725
93c80368 1726 push_conditional (pfile, skip, T_IFNDEF, node);
7f2935c7
PB
1727}
1728
6d18adbc
NB
1729/* _cpp_parse_expr puts a macro in a "#if !defined ()" expression in
1730 pfile->mi_ind_cmacro so we can handle multiple-include
6356f892 1731 optimizations. If macro expansion occurs in the expression, we
6d18adbc
NB
1732 cannot treat it as a controlling conditional, since the expansion
1733 could change in the future. That is handled by cpp_get_token. */
711b8824 1734static void
6cf87ca4 1735do_if (cpp_reader *pfile)
7f2935c7 1736{
93c80368 1737 int skip = 1;
7f2935c7 1738
cef0d199 1739 if (! pfile->state.skipping)
d750887f 1740 skip = _cpp_parse_expr (pfile, true) == false;
93c80368 1741
6d18adbc 1742 push_conditional (pfile, skip, T_IF, pfile->mi_ind_cmacro);
7f2935c7
PB
1743}
1744
b528a07e 1745/* Flip skipping state if appropriate and continue without changing
ea4a453b
ZW
1746 if_stack; this is so that the error message for missing #endif's
1747 etc. will point to the original #if. */
711b8824 1748static void
6cf87ca4 1749do_else (cpp_reader *pfile)
ed705a82 1750{
b528a07e
NB
1751 cpp_buffer *buffer = pfile->buffer;
1752 struct if_stack *ifs = buffer->if_stack;
ff2b53ef 1753
ea4a453b 1754 if (ifs == NULL)
0527bc4e 1755 cpp_error (pfile, CPP_DL_ERROR, "#else without #if");
93c80368 1756 else
ff2b53ef 1757 {
93c80368
NB
1758 if (ifs->type == T_ELSE)
1759 {
0527bc4e
JDA
1760 cpp_error (pfile, CPP_DL_ERROR, "#else after #else");
1761 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
93c80368
NB
1762 "the conditional began here");
1763 }
b528a07e
NB
1764 ifs->type = T_ELSE;
1765
cef0d199
NB
1766 /* Skip any future (erroneous) #elses or #elifs. */
1767 pfile->state.skipping = ifs->skip_elses;
1768 ifs->skip_elses = true;
7f2935c7 1769
93c80368
NB
1770 /* Invalidate any controlling macro. */
1771 ifs->mi_cmacro = 0;
93c80368 1772
cef0d199 1773 /* Only check EOL if was not originally skipping. */
909de5da 1774 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1775 check_eol (pfile);
1776 }
7f2935c7
PB
1777}
1778
5d8ebbd8 1779/* Handle a #elif directive by not changing if_stack either. See the
93c80368 1780 comment above do_else. */
711b8824 1781static void
6cf87ca4 1782do_elif (cpp_reader *pfile)
7f2935c7 1783{
b528a07e
NB
1784 cpp_buffer *buffer = pfile->buffer;
1785 struct if_stack *ifs = buffer->if_stack;
7f2935c7 1786
ea4a453b 1787 if (ifs == NULL)
0527bc4e 1788 cpp_error (pfile, CPP_DL_ERROR, "#elif without #if");
b528a07e 1789 else
40ea76de 1790 {
b528a07e
NB
1791 if (ifs->type == T_ELSE)
1792 {
0527bc4e
JDA
1793 cpp_error (pfile, CPP_DL_ERROR, "#elif after #else");
1794 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
b528a07e
NB
1795 "the conditional began here");
1796 }
1797 ifs->type = T_ELIF;
93c80368 1798
d750887f 1799 if (! ifs->was_skipping)
b528a07e 1800 {
d750887f
TT
1801 bool value;
1802 /* The standard mandates that the expression be parsed even
1803 if we are skipping elses at this point -- the lexical
1804 restrictions on #elif only apply to skipped groups, but
1805 this group is not being skipped. Temporarily set
1806 skipping to false to get lexer warnings. */
cef0d199 1807 pfile->state.skipping = 0;
d750887f
TT
1808 value = _cpp_parse_expr (pfile, false);
1809 if (ifs->skip_elses)
1810 pfile->state.skipping = 1;
1811 else
1812 {
1813 pfile->state.skipping = ! value;
1814 ifs->skip_elses = value;
1815 }
b528a07e 1816 }
cef0d199
NB
1817
1818 /* Invalidate any controlling macro. */
1819 ifs->mi_cmacro = 0;
40ea76de 1820 }
7f2935c7
PB
1821}
1822
cef0d199 1823/* #endif pops the if stack and resets pfile->state.skipping. */
711b8824 1824static void
6cf87ca4 1825do_endif (cpp_reader *pfile)
7f2935c7 1826{
b528a07e
NB
1827 cpp_buffer *buffer = pfile->buffer;
1828 struct if_stack *ifs = buffer->if_stack;
ea4a453b 1829
ea4a453b 1830 if (ifs == NULL)
0527bc4e 1831 cpp_error (pfile, CPP_DL_ERROR, "#endif without #if");
7f2935c7
PB
1832 else
1833 {
cef0d199 1834 /* Only check EOL if was not originally skipping. */
909de5da 1835 if (!ifs->was_skipping && CPP_OPTION (pfile, warn_endif_labels))
cef0d199
NB
1836 check_eol (pfile);
1837
93c80368
NB
1838 /* If potential control macro, we go back outside again. */
1839 if (ifs->next == 0 && ifs->mi_cmacro)
1840 {
6d18adbc 1841 pfile->mi_valid = true;
93c80368
NB
1842 pfile->mi_cmacro = ifs->mi_cmacro;
1843 }
1844
b528a07e 1845 buffer->if_stack = ifs->next;
cef0d199 1846 pfile->state.skipping = ifs->was_skipping;
2a967f3d 1847 obstack_free (&pfile->buffer_ob, ifs);
7f2935c7 1848 }
93c80368 1849}
041c3194 1850
5d8ebbd8
NB
1851/* Push an if_stack entry for a preprocessor conditional, and set
1852 pfile->state.skipping to SKIP. If TYPE indicates the conditional
1853 is #if or #ifndef, CMACRO is a potentially controlling macro, and
1854 we need to check here that we are at the top of the file. */
ea4a453b 1855static void
6cf87ca4
ZW
1856push_conditional (cpp_reader *pfile, int skip, int type,
1857 const cpp_hashnode *cmacro)
ea4a453b
ZW
1858{
1859 struct if_stack *ifs;
b528a07e 1860 cpp_buffer *buffer = pfile->buffer;
ea4a453b 1861
72bb2c39 1862 ifs = XOBNEW (&pfile->buffer_ob, struct if_stack);
50410426 1863 ifs->line = pfile->directive_line;
b528a07e 1864 ifs->next = buffer->if_stack;
cef0d199
NB
1865 ifs->skip_elses = pfile->state.skipping || !skip;
1866 ifs->was_skipping = pfile->state.skipping;
ea4a453b 1867 ifs->type = type;
6d18adbc
NB
1868 /* This condition is effectively a test for top-of-file. */
1869 if (pfile->mi_valid && pfile->mi_cmacro == 0)
93c80368
NB
1870 ifs->mi_cmacro = cmacro;
1871 else
1872 ifs->mi_cmacro = 0;
ea4a453b 1873
cef0d199 1874 pfile->state.skipping = skip;
b528a07e 1875 buffer->if_stack = ifs;
782331f4 1876}
7061aa5a 1877
5d8ebbd8
NB
1878/* Read the tokens of the answer into the macro pool, in a directive
1879 of type TYPE. Only commit the memory if we intend it as permanent
1880 storage, i.e. the #assert case. Returns 0 on success, and sets
1881 ANSWERP to point to the answer. */
93c80368 1882static int
6cf87ca4 1883parse_answer (cpp_reader *pfile, struct answer **answerp, int type)
7f2935c7 1884{
4ed5bcfb 1885 const cpp_token *paren;
93c80368 1886 struct answer *answer;
8c3b2693 1887 unsigned int acount;
93c80368
NB
1888
1889 /* In a conditional, it is legal to not have an open paren. We
1890 should save the following token in this case. */
4ed5bcfb 1891 paren = cpp_get_token (pfile);
93c80368
NB
1892
1893 /* If not a paren, see if we're OK. */
4ed5bcfb 1894 if (paren->type != CPP_OPEN_PAREN)
041c3194 1895 {
93c80368
NB
1896 /* In a conditional no answer is a test for any answer. It
1897 could be followed by any token. */
1898 if (type == T_IF)
bdcbe496
NB
1899 {
1900 _cpp_backup_tokens (pfile, 1);
1901 return 0;
1902 }
93c80368
NB
1903
1904 /* #unassert with no answer is valid - it removes all answers. */
4ed5bcfb 1905 if (type == T_UNASSERT && paren->type == CPP_EOF)
93c80368 1906 return 0;
15dad1d9 1907
0527bc4e 1908 cpp_error (pfile, CPP_DL_ERROR, "missing '(' after predicate");
93c80368 1909 return 1;
041c3194 1910 }
7061aa5a 1911
8c3b2693 1912 for (acount = 0;; acount++)
041c3194 1913 {
8c3b2693
NB
1914 size_t room_needed;
1915 const cpp_token *token = cpp_get_token (pfile);
1916 cpp_token *dest;
93c80368 1917
041c3194
ZW
1918 if (token->type == CPP_CLOSE_PAREN)
1919 break;
a7abcbbf 1920
93c80368 1921 if (token->type == CPP_EOF)
041c3194 1922 {
0527bc4e 1923 cpp_error (pfile, CPP_DL_ERROR, "missing ')' to complete answer");
93c80368 1924 return 1;
041c3194 1925 }
8c3b2693
NB
1926
1927 /* struct answer includes the space for one token. */
1928 room_needed = (sizeof (struct answer) + acount * sizeof (cpp_token));
1929
1930 if (BUFF_ROOM (pfile->a_buff) < room_needed)
1931 _cpp_extend_buff (pfile, &pfile->a_buff, sizeof (struct answer));
1932
1933 dest = &((struct answer *) BUFF_FRONT (pfile->a_buff))->first[acount];
1934 *dest = *token;
1935
1936 /* Drop whitespace at start, for answer equivalence purposes. */
1937 if (acount == 0)
1938 dest->flags &= ~PREV_WHITE;
041c3194 1939 }
15dad1d9 1940
8c3b2693 1941 if (acount == 0)
7061aa5a 1942 {
0527bc4e 1943 cpp_error (pfile, CPP_DL_ERROR, "predicate's answer is empty");
93c80368 1944 return 1;
7f2935c7 1945 }
041c3194 1946
8c3b2693
NB
1947 answer = (struct answer *) BUFF_FRONT (pfile->a_buff);
1948 answer->count = acount;
1949 answer->next = NULL;
93c80368 1950 *answerp = answer;
041c3194 1951
93c80368
NB
1952 return 0;
1953}
041c3194 1954
5d8ebbd8
NB
1955/* Parses an assertion directive of type TYPE, returning a pointer to
1956 the hash node of the predicate, or 0 on error. If an answer was
1957 supplied, it is placed in ANSWERP, otherwise it is set to 0. */
93c80368 1958static cpp_hashnode *
6cf87ca4 1959parse_assertion (cpp_reader *pfile, struct answer **answerp, int type)
93c80368
NB
1960{
1961 cpp_hashnode *result = 0;
4ed5bcfb 1962 const cpp_token *predicate;
93c80368
NB
1963
1964 /* We don't expand predicates or answers. */
1965 pfile->state.prevent_expansion++;
1966
93c80368 1967 *answerp = 0;
4ed5bcfb
NB
1968 predicate = cpp_get_token (pfile);
1969 if (predicate->type == CPP_EOF)
0527bc4e 1970 cpp_error (pfile, CPP_DL_ERROR, "assertion without predicate");
4ed5bcfb 1971 else if (predicate->type != CPP_NAME)
0527bc4e 1972 cpp_error (pfile, CPP_DL_ERROR, "predicate must be an identifier");
93c80368
NB
1973 else if (parse_answer (pfile, answerp, type) == 0)
1974 {
4ed5bcfb 1975 unsigned int len = NODE_LEN (predicate->val.node);
c3f829c1 1976 unsigned char *sym = (unsigned char *) alloca (len + 1);
041c3194 1977
93c80368
NB
1978 /* Prefix '#' to get it out of macro namespace. */
1979 sym[0] = '#';
4ed5bcfb 1980 memcpy (sym + 1, NODE_NAME (predicate->val.node), len);
93c80368
NB
1981 result = cpp_lookup (pfile, sym, len + 1);
1982 }
7061aa5a 1983
93c80368
NB
1984 pfile->state.prevent_expansion--;
1985 return result;
7f2935c7 1986}
7061aa5a 1987
5d8ebbd8 1988/* Returns a pointer to the pointer to CANDIDATE in the answer chain,
041c3194 1989 or a pointer to NULL if the answer is not in the chain. */
93c80368 1990static struct answer **
6cf87ca4 1991find_answer (cpp_hashnode *node, const struct answer *candidate)
7f2935c7 1992{
93c80368 1993 unsigned int i;
041c3194 1994 struct answer **result;
7f2935c7 1995
041c3194 1996 for (result = &node->value.answers; *result; result = &(*result)->next)
93c80368
NB
1997 {
1998 struct answer *answer = *result;
1999
2000 if (answer->count == candidate->count)
2001 {
2002 for (i = 0; i < answer->count; i++)
2003 if (! _cpp_equiv_tokens (&answer->first[i], &candidate->first[i]))
2004 break;
2005
2006 if (i == answer->count)
2007 break;
2008 }
2009 }
ff2b53ef 2010
041c3194
ZW
2011 return result;
2012}
15dad1d9 2013
93c80368 2014/* Test an assertion within a preprocessor conditional. Returns
da7d8304 2015 nonzero on failure, zero on success. On success, the result of
2402645b 2016 the test is written into VALUE, otherwise the value 0. */
93c80368 2017int
6cf87ca4 2018_cpp_test_assertion (cpp_reader *pfile, unsigned int *value)
93c80368
NB
2019{
2020 struct answer *answer;
2021 cpp_hashnode *node;
2022
2023 node = parse_assertion (pfile, &answer, T_IF);
2402645b
HPN
2024
2025 /* For recovery, an erroneous assertion expression is handled as a
2026 failing assertion. */
2027 *value = 0;
2028
93c80368
NB
2029 if (node)
2030 *value = (node->type == NT_ASSERTION &&
2031 (answer == 0 || *find_answer (node, answer) != 0));
91318908
NB
2032 else if (pfile->cur_token[-1].type == CPP_EOF)
2033 _cpp_backup_tokens (pfile, 1);
93c80368
NB
2034
2035 /* We don't commit the memory for the answer - it's temporary only. */
2036 return node == 0;
2037}
2038
5d8ebbd8 2039/* Handle #assert. */
711b8824 2040static void
6cf87ca4 2041do_assert (cpp_reader *pfile)
041c3194
ZW
2042{
2043 struct answer *new_answer;
2044 cpp_hashnode *node;
df383483 2045
93c80368 2046 node = parse_assertion (pfile, &new_answer, T_ASSERT);
041c3194 2047 if (node)
ff2b53ef 2048 {
d8044160
GK
2049 size_t answer_size;
2050
93c80368
NB
2051 /* Place the new answer in the answer list. First check there
2052 is not a duplicate. */
041c3194 2053 new_answer->next = 0;
93c80368 2054 if (node->type == NT_ASSERTION)
041c3194 2055 {
93c80368
NB
2056 if (*find_answer (node, new_answer))
2057 {
0527bc4e 2058 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" re-asserted",
ebef4e8c 2059 NODE_NAME (node) + 1);
93c80368
NB
2060 return;
2061 }
041c3194
ZW
2062 new_answer->next = node->value.answers;
2063 }
8c3b2693 2064
d8044160
GK
2065 answer_size = sizeof (struct answer) + ((new_answer->count - 1)
2066 * sizeof (cpp_token));
2067 /* Commit or allocate storage for the object. */
2068 if (pfile->hash_table->alloc_subobject)
2069 {
2070 struct answer *temp_answer = new_answer;
c3f829c1
GDR
2071 new_answer = (struct answer *) pfile->hash_table->alloc_subobject
2072 (answer_size);
d8044160
GK
2073 memcpy (new_answer, temp_answer, answer_size);
2074 }
2075 else
2076 BUFF_FRONT (pfile->a_buff) += answer_size;
2077
93c80368 2078 node->type = NT_ASSERTION;
041c3194 2079 node->value.answers = new_answer;
8c3b2693 2080 check_eol (pfile);
ff2b53ef 2081 }
041c3194 2082}
15dad1d9 2083
5d8ebbd8 2084/* Handle #unassert. */
711b8824 2085static void
6cf87ca4 2086do_unassert (cpp_reader *pfile)
041c3194
ZW
2087{
2088 cpp_hashnode *node;
93c80368 2089 struct answer *answer;
df383483 2090
93c80368
NB
2091 node = parse_assertion (pfile, &answer, T_UNASSERT);
2092 /* It isn't an error to #unassert something that isn't asserted. */
2093 if (node && node->type == NT_ASSERTION)
7061aa5a 2094 {
93c80368 2095 if (answer)
15dad1d9 2096 {
93c80368 2097 struct answer **p = find_answer (node, answer), *temp;
041c3194 2098
93c80368
NB
2099 /* Remove the answer from the list. */
2100 temp = *p;
2101 if (temp)
2102 *p = temp->next;
a7abcbbf 2103
93c80368
NB
2104 /* Did we free the last answer? */
2105 if (node->value.answers == 0)
2106 node->type = NT_VOID;
8c3b2693
NB
2107
2108 check_eol (pfile);
93c80368
NB
2109 }
2110 else
2111 _cpp_free_definition (node);
041c3194 2112 }
93c80368
NB
2113
2114 /* We don't commit the memory for the answer - it's temporary only. */
7f2935c7 2115}
7f2935c7 2116
45b966db
ZW
2117/* These are for -D, -U, -A. */
2118
2119/* Process the string STR as if it appeared as the body of a #define.
2120 If STR is just an identifier, define it with value 1.
2121 If STR has anything after the identifier, then it should
ec5c56db 2122 be identifier=definition. */
0b22d65c 2123void
6cf87ca4 2124cpp_define (cpp_reader *pfile, const char *str)
0b22d65c 2125{
45b966db
ZW
2126 char *buf, *p;
2127 size_t count;
2128
df383483 2129 /* Copy the entire option so we can modify it.
45b966db 2130 Change the first "=" in the string to a space. If there is none,
86368122
NB
2131 tack " 1" on the end. */
2132
86368122 2133 count = strlen (str);
c3f829c1 2134 buf = (char *) alloca (count + 3);
86368122
NB
2135 memcpy (buf, str, count);
2136
2137 p = strchr (str, '=');
45b966db 2138 if (p)
86368122 2139 buf[p - str] = ' ';
45b966db
ZW
2140 else
2141 {
86368122
NB
2142 buf[count++] = ' ';
2143 buf[count++] = '1';
0b22d65c 2144 }
26aea073 2145 buf[count] = '\n';
cf4ed945 2146
29401c30 2147 run_directive (pfile, T_DEFINE, buf, count);
2c8f0515
ZW
2148}
2149
28f68625
DF
2150
2151/* Use to build macros to be run through cpp_define() as
2152 described above.
2153 Example: cpp_define_formatted (pfile, "MACRO=%d", value); */
2154
2155void
2156cpp_define_formatted (cpp_reader *pfile, const char *fmt, ...)
2157{
2158 char *ptr = NULL;
2159
2160 va_list ap;
2161 va_start (ap, fmt);
2162 vasprintf (&ptr, fmt, ap);
2163 va_end (ap);
2164
2165 cpp_define (pfile, ptr);
2166 free (ptr);
2167}
2168
2169
ad2a084d 2170/* Slight variant of the above for use by initialize_builtins. */
2c8f0515 2171void
6cf87ca4 2172_cpp_define_builtin (cpp_reader *pfile, const char *str)
2c8f0515 2173{
26aea073 2174 size_t len = strlen (str);
c3f829c1 2175 char *buf = (char *) alloca (len + 1);
26aea073
NB
2176 memcpy (buf, str, len);
2177 buf[len] = '\n';
2178 run_directive (pfile, T_DEFINE, buf, len);
45b966db 2179}
0f41302f 2180
45b966db
ZW
2181/* Process MACRO as if it appeared as the body of an #undef. */
2182void
6cf87ca4 2183cpp_undef (cpp_reader *pfile, const char *macro)
7f2935c7 2184{
26aea073 2185 size_t len = strlen (macro);
c3f829c1 2186 char *buf = (char *) alloca (len + 1);
26aea073
NB
2187 memcpy (buf, macro, len);
2188 buf[len] = '\n';
2189 run_directive (pfile, T_UNDEF, buf, len);
7f2935c7
PB
2190}
2191
121de39f
RH
2192/* Like lex_macro_node, but read the input from STR. */
2193static cpp_hashnode *
2194lex_macro_node_from_str (cpp_reader *pfile, const char *str)
2195{
2196 size_t len = strlen (str);
4cd97075 2197 uchar *buf = (uchar *) alloca (len + 1);
121de39f
RH
2198 cpp_hashnode *node;
2199
2200 memcpy (buf, str, len);
2201 buf[len] = '\n';
2202 cpp_push_buffer (pfile, buf, len, true);
2203 node = lex_macro_node (pfile, true);
2204 _cpp_pop_buffer (pfile);
2205
2206 return node;
2207}
2208
2209/* If STR is a defined macro, return its definition node, else return NULL. */
2210cpp_macro *
2211cpp_push_definition (cpp_reader *pfile, const char *str)
2212{
2213 cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
2214 if (node && node->type == NT_MACRO)
2215 return node->value.macro;
2216 else
2217 return NULL;
2218}
2219
2220/* Replace a previous definition DFN of the macro STR. If DFN is NULL,
2221 then the macro should be undefined. */
2222void
2223cpp_pop_definition (cpp_reader *pfile, const char *str, cpp_macro *dfn)
2224{
2225 cpp_hashnode *node = lex_macro_node_from_str (pfile, str);
2226 if (node == NULL)
2227 return;
2228
93d45d9e
JM
2229 if (pfile->cb.before_define)
2230 pfile->cb.before_define (pfile);
2231
121de39f
RH
2232 if (node->type == NT_MACRO)
2233 {
2234 if (pfile->cb.undef)
2235 pfile->cb.undef (pfile, pfile->directive_line, node);
2236 if (CPP_OPTION (pfile, warn_unused_macros))
2237 _cpp_warn_if_unused_macro (pfile, node, NULL);
2238 }
2239 if (node->type != NT_VOID)
2240 _cpp_free_definition (node);
2241
2242 if (dfn)
2243 {
2244 node->type = NT_MACRO;
2245 node->value.macro = dfn;
2246 if (! ustrncmp (NODE_NAME (node), DSC ("__STDC_")))
2247 node->flags |= NODE_WARN;
2248
2249 if (pfile->cb.define)
2250 pfile->cb.define (pfile, pfile->directive_line, node);
2251 }
2252}
2253
ec5c56db 2254/* Process the string STR as if it appeared as the body of a #assert. */
45b966db 2255void
6cf87ca4 2256cpp_assert (cpp_reader *pfile, const char *str)
45b966db 2257{
86368122 2258 handle_assertion (pfile, str, T_ASSERT);
45b966db 2259}
7f2935c7 2260
ec5c56db 2261/* Process STR as if it appeared as the body of an #unassert. */
45b966db 2262void
6cf87ca4 2263cpp_unassert (cpp_reader *pfile, const char *str)
7f2935c7 2264{
86368122 2265 handle_assertion (pfile, str, T_UNASSERT);
df383483 2266}
3fdc651f 2267
86368122
NB
2268/* Common code for cpp_assert (-A) and cpp_unassert (-A-). */
2269static void
6cf87ca4 2270handle_assertion (cpp_reader *pfile, const char *str, int type)
86368122
NB
2271{
2272 size_t count = strlen (str);
2273 const char *p = strchr (str, '=');
2274
26aea073
NB
2275 /* Copy the entire option so we can modify it. Change the first
2276 "=" in the string to a '(', and tack a ')' on the end. */
c3f829c1 2277 char *buf = (char *) alloca (count + 2);
26aea073
NB
2278
2279 memcpy (buf, str, count);
86368122
NB
2280 if (p)
2281 {
86368122
NB
2282 buf[p - str] = '(';
2283 buf[count++] = ')';
86368122 2284 }
26aea073
NB
2285 buf[count] = '\n';
2286 str = buf;
86368122 2287
29401c30 2288 run_directive (pfile, type, str, count);
86368122
NB
2289}
2290
7e96d768
NB
2291/* The number of errors for a given reader. */
2292unsigned int
6cf87ca4 2293cpp_errors (cpp_reader *pfile)
7e96d768
NB
2294{
2295 return pfile->errors;
2296}
2297
2298/* The options structure. */
2299cpp_options *
6cf87ca4 2300cpp_get_options (cpp_reader *pfile)
7e96d768
NB
2301{
2302 return &pfile->opts;
2303}
2304
2305/* The callbacks structure. */
2306cpp_callbacks *
6cf87ca4 2307cpp_get_callbacks (cpp_reader *pfile)
7e96d768
NB
2308{
2309 return &pfile->cb;
2310}
2311
2312/* Copy the given callbacks structure to our own. */
2313void
6cf87ca4 2314cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
7e96d768
NB
2315{
2316 pfile->cb = *cb;
2317}
2318
c6e83800
ZW
2319/* The dependencies structure. (Creates one if it hasn't already been.) */
2320struct deps *
2321cpp_get_deps (cpp_reader *pfile)
2322{
2323 if (!pfile->deps)
2324 pfile->deps = deps_init ();
2325 return pfile->deps;
2326}
2327
eb1f4d9d
NB
2328/* Push a new buffer on the buffer stack. Returns the new buffer; it
2329 doesn't fail. It does not generate a file change call back; that
2330 is the responsibility of the caller. */
c71f835b 2331cpp_buffer *
6cf87ca4 2332cpp_push_buffer (cpp_reader *pfile, const uchar *buffer, size_t len,
40de9f76 2333 int from_stage3)
c71f835b 2334{
c3f829c1 2335 cpp_buffer *new_buffer = XOBNEW (&pfile->buffer_ob, cpp_buffer);
93c80368 2336
fde84349 2337 /* Clears, amongst other things, if_stack and mi_cmacro. */
c3f829c1 2338 memset (new_buffer, 0, sizeof (cpp_buffer));
fde84349 2339
c3f829c1
GDR
2340 new_buffer->next_line = new_buffer->buf = buffer;
2341 new_buffer->rlimit = buffer + len;
2342 new_buffer->from_stage3 = from_stage3;
2343 new_buffer->prev = pfile->buffer;
2344 new_buffer->need_line = true;
0bda4760 2345
c3f829c1 2346 pfile->buffer = new_buffer;
cf551fba 2347
c3f829c1 2348 return new_buffer;
c71f835b
ZW
2349}
2350
af0d16cd
NB
2351/* Pops a single buffer, with a file change call-back if appropriate.
2352 Then pushes the next -include file, if any remain. */
ef6e958a 2353void
6cf87ca4 2354_cpp_pop_buffer (cpp_reader *pfile)
c71f835b 2355{
fde84349 2356 cpp_buffer *buffer = pfile->buffer;
8f9b4009 2357 struct _cpp_file *inc = buffer->file;
ad2a084d 2358 struct if_stack *ifs;
c71f835b 2359
fde84349
NB
2360 /* Walk back up the conditional stack till we reach its level at
2361 entry to this file, issuing error messages. */
2362 for (ifs = buffer->if_stack; ifs; ifs = ifs->next)
0527bc4e 2363 cpp_error_with_line (pfile, CPP_DL_ERROR, ifs->line, 0,
fde84349 2364 "unterminated #%s", dtable[ifs->type].name);
eb1f4d9d 2365
97293897 2366 /* In case of a missing #endif. */
67821e3a 2367 pfile->state.skipping = 0;
29401c30 2368
af0d16cd 2369 /* _cpp_do_file_change expects pfile->buffer to be the new one. */
29401c30
NB
2370 pfile->buffer = buffer->prev;
2371
26aea073
NB
2372 free (buffer->notes);
2373
af0d16cd
NB
2374 /* Free the buffer object now; we may want to push a new buffer
2375 in _cpp_push_next_include_file. */
2376 obstack_free (&pfile->buffer_ob, buffer);
29401c30 2377
af0d16cd
NB
2378 if (inc)
2379 {
2380 _cpp_pop_file_buffer (pfile, inc);
2381
40de9f76 2382 _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
af0d16cd 2383 }
c71f835b
ZW
2384}
2385
05713b80 2386/* Enter all recognized directives in the hash table. */
c71f835b 2387void
6cf87ca4 2388_cpp_init_directives (cpp_reader *pfile)
c71f835b 2389{
766ee681 2390 unsigned int i;
93c80368 2391 cpp_hashnode *node;
bfb9dc7f 2392
37b8524c 2393 for (i = 0; i < (unsigned int) N_DIRECTIVES; i++)
93c80368 2394 {
766ee681 2395 node = cpp_lookup (pfile, dtable[i].name, dtable[i].length);
4977bab6
ZW
2396 node->is_directive = 1;
2397 node->directive_index = i;
93c80368 2398 }
c71f835b 2399}