diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-12 19:46:49 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-12 19:46:49 +0000 |
commit | 3e2a04b5eaabe5eab46f35bb0ea4a06804c44f7d (patch) | |
tree | 98deba1dfe7c6b9c082beb511fe09a10db6319c8 /libcpp | |
parent | b2f42a98738cbf1cf2166d6d7d575c1a08a0d245 (diff) | |
download | gcc-3e2a04b5eaabe5eab46f35bb0ea4a06804c44f7d.tar.gz |
libcpp
PR preprocessor/28227:
* directives.c (lex_macro_node): Added 'is_def_or_undef'
argument.
(do_define): Update.
(do_undef): Update.
(do_ifdef): Update.
(do_ifndef): Update.
gcc/testsuite
PR preprocessor/28227:
* gcc.dg/cpp/pr28227.c: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120731 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp')
-rw-r--r-- | libcpp/ChangeLog | 10 | ||||
-rw-r--r-- | libcpp/directives.c | 18 |
2 files changed, 20 insertions, 8 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index ab548bb2b02..f3940814535 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,13 @@ +2007-01-12 Tom Tromey <tromey@redhat.com> + + PR preprocessor/28227: + * directives.c (lex_macro_node): Added 'is_def_or_undef' + argument. + (do_define): Update. + (do_undef): Update. + (do_ifdef): Update. + (do_ifndef): Update. + 2007-01-11 Paolo Bonzini <bonzini@gnu.org> * configure: Regenerate. diff --git a/libcpp/directives.c b/libcpp/directives.c index 2ef914a435e..d67cb5fd6d1 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -103,7 +103,7 @@ static void push_conditional (cpp_reader *, int, int, const cpp_hashnode *); static unsigned int read_flag (cpp_reader *, unsigned int); static int strtoul_for_line (const uchar *, unsigned int, unsigned long *); static void do_diagnostic (cpp_reader *, int, int); -static cpp_hashnode *lex_macro_node (cpp_reader *); +static cpp_hashnode *lex_macro_node (cpp_reader *, bool); static int undefine_macros (cpp_reader *, cpp_hashnode *, void *); static void do_include_common (cpp_reader *, enum include_type); static struct pragma_entry *lookup_pragma_entry (struct pragma_entry *, @@ -503,9 +503,11 @@ run_directive (cpp_reader *pfile, int dir_no, const char *buf, size_t count) } /* Checks for validity the macro name in #define, #undef, #ifdef and - #ifndef directives. */ + #ifndef directives. IS_DEF_OR_UNDEF is true if this call is + processing a #define or #undefine directive, and false + otherwise. */ static cpp_hashnode * -lex_macro_node (cpp_reader *pfile) +lex_macro_node (cpp_reader *pfile, bool is_def_or_undef) { const cpp_token *token = _cpp_lex_token (pfile); @@ -520,7 +522,7 @@ lex_macro_node (cpp_reader *pfile) { cpp_hashnode *node = token->val.node; - if (node == pfile->spec_nodes.n_defined) + if (is_def_or_undef && node == pfile->spec_nodes.n_defined) cpp_error (pfile, CPP_DL_ERROR, "\"defined\" cannot be used as a macro name"); else if (! (node->flags & NODE_POISONED)) @@ -543,7 +545,7 @@ lex_macro_node (cpp_reader *pfile) static void do_define (cpp_reader *pfile) { - cpp_hashnode *node = lex_macro_node (pfile); + cpp_hashnode *node = lex_macro_node (pfile, true); if (node) { @@ -562,7 +564,7 @@ do_define (cpp_reader *pfile) static void do_undef (cpp_reader *pfile) { - cpp_hashnode *node = lex_macro_node (pfile); + cpp_hashnode *node = lex_macro_node (pfile, true); if (node) { @@ -1606,7 +1608,7 @@ do_ifdef (cpp_reader *pfile) if (! pfile->state.skipping) { - const cpp_hashnode *node = lex_macro_node (pfile); + const cpp_hashnode *node = lex_macro_node (pfile, false); if (node) { @@ -1628,7 +1630,7 @@ do_ifndef (cpp_reader *pfile) if (! pfile->state.skipping) { - node = lex_macro_node (pfile); + node = lex_macro_node (pfile, false); if (node) { |