diff options
author | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-05 22:26:13 +0000 |
---|---|---|
committer | neil <neil@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-11-05 22:26:13 +0000 |
commit | 51e834cb87f73c07bb96fc79dc6fd5a8bfcf8540 (patch) | |
tree | f0c6212de4e1011133e309e692cd9ad0e138101c /gcc | |
parent | 4824f42fcc260532e43f773ee7cd4db345da0970 (diff) | |
download | gcc-51e834cb87f73c07bb96fc79dc6fd5a8bfcf8540.tar.gz |
* cppexp.c (lex, parse_defined): Update warning about defined.
* gcc.dg/cpp/defined.c: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46794 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cppexp.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/defined.c | 25 |
4 files changed, 34 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06d054243a4..a1018aa46ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-11-05 Neil Booth <neil@cat.daikokuya.demon.co.uk> + + * cppexp.c (lex, parse_defined): Update warning about defined. + 2001-11-05 Geoffrey Keating <geoffk@redhat.com> * config/rs6000/rs6000.c (rs6000_select_section): Handle diff --git a/gcc/cppexp.c b/gcc/cppexp.c index c7a00da4354..ac222eebda8 100644 --- a/gcc/cppexp.c +++ b/gcc/cppexp.c @@ -219,6 +219,7 @@ parse_defined (pfile) cpp_hashnode *node = 0; const cpp_token *token; struct op op; + cpp_context *initial_context = pfile->context; /* Don't expand macros. */ pfile->state.prevent_expansion++; @@ -259,6 +260,9 @@ parse_defined (pfile) op.op = CPP_ERROR; else { + if (pfile->context != initial_context) + cpp_warning (pfile, "this use of \"defined\" may not be portable"); + op.value = node->type == NT_MACRO; op.unsignedp = 0; op.op = CPP_NUMBER; @@ -314,12 +318,7 @@ lex (pfile, skip_evaluation) case CPP_NAME: if (token->val.node == pfile->spec_nodes.n_defined) - { - if (pfile->context->prev && CPP_PEDANTIC (pfile)) - cpp_pedwarn (pfile, "\"defined\" operator appears during macro expansion"); - - return parse_defined (pfile); - } + return parse_defined (pfile); else if (CPP_OPTION (pfile, cplusplus) && (token->val.node == pfile->spec_nodes.n_true || token->val.node == pfile->spec_nodes.n_false)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 985326e596d..2badf855779 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-11-05 Neil Booth <neil@cat.daikokuya.demon.co.uk> + + * gcc.dg/cpp/defined.c: Update. + 2001-11-04 Neil Booth <neil@cat.daikokuya.demon.co.uk> * gcc.c-torture/execute/anon-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/cpp/defined.c b/gcc/testsuite/gcc.dg/cpp/defined.c index de1ef2993bc..864ef1ddd89 100644 --- a/gcc/testsuite/gcc.dg/cpp/defined.c +++ b/gcc/testsuite/gcc.dg/cpp/defined.c @@ -21,7 +21,7 @@ /* The behaviour of "defined" when it comes from a macro expansion is now documented. */ -#if is_Z_defined /* { dg-warning "macro expansion" } */ +#if is_Z_defined #error Macro expanding into defined operator test 1 #endif @@ -31,7 +31,7 @@ #error Z is defined #endif -#if !is_Z_defined /* { dg-warning "macro expansion" } */ +#if !is_Z_defined #error Macro expanding into defined operator test 2 #endif @@ -53,7 +53,7 @@ /* The behaviour of "defined" when it comes from a macro expansion is now documented. */ -#if is_Z_defined /* { dg-warning "macro expansion" } */ +#if is_Z_defined #error Macro expanding into defined operator test 1 #endif @@ -63,6 +63,23 @@ #error Z is defined #endif -#if !is_Z_defined /* { dg-warning "macro expansion" } */ +#if !is_Z_defined #error Macro expanding into defined operator test 2 #endif + +/* Use of defined in different contexts. */ + +#define bad1 defined +#if !bad1 Z /* { dg-warning "may not be portable" } */ +#error Z is defined +#endif + +#if !bad1 (Z) /* { dg-warning "may not be portable" } */ +#error Z is defined +#endif + +#define bad2 defined (Z +#if !bad2) /* { dg-warning "may not be portable" } */ +#error Z is defined +#endif + |