diff options
author | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-11-23 10:06:07 +0000 |
---|---|---|
committer | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-11-23 10:06:07 +0000 |
commit | 6e47b422468d2ada04209b26465b7af81dcbef5b (patch) | |
tree | 08fdcd7bc342d222856765ef9f8cff24381b75a7 /libcpp | |
parent | 192b73af778e2519d6d83083fb2731fbb56c57eb (diff) | |
download | gcc-6e47b422468d2ada04209b26465b7af81dcbef5b.tar.gz |
gcc:
2016-11-23 Paolo Bonzini <bonzini@gnu.org>
* system.h (HAVE_DESIGNATED_INITIALIZERS,
HAVE_DESIGNATED_UNION_INITIALIZERS): Do not use
"defined" in macros.
* doc/cpp.texi (Defined): Mention -Wexpansion-to-defined.
* doc/cppopts.texi (Invocation): Document -Wexpansion-to-defined.
* doc/invoke.texi (Warning Options): Document -Wexpansion-to-defined.
gcc/c-family:
2016-11-23 Paolo Bonzini <bonzini@gnu.org>
* c.opt (Wexpansion-to-defined): New.
gcc/testsuite:
2016-11-23 Paolo Bonzini <bonzini@gnu.org>
* gcc.dg/cpp/defined.c: Mark newly introduced warnings and
adjust for warning->pedwarn change.
* gcc.dg/cpp/defined-syshdr.c,
gcc.dg/cpp/defined-Wexpansion-to-defined.c,
gcc.dg/cpp/defined-Wextra-Wno-expansion-to-defined.c,
gcc.dg/cpp/defined-Wextra.c,
gcc.dg/cpp/defined-Wno-expansion-to-defined.c: New testcases.
libcpp:
2016-11-23 Paolo Bonzini <bonzini@gnu.org>
* include/cpplib.h (struct cpp_options): Add new member
warn_expansion_to_defined.
(CPP_W_EXPANSION_TO_DEFINED): New enum member.
* expr.c (parse_defined): Warn for all uses of "defined"
in macros, and tie warning to CPP_W_EXPANSION_TO_DEFINED.
Make it a pedwarning instead of a warning.
* system.h (HAVE_DESIGNATED_INITIALIZERS): Do not use
"defined" in macros.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@242743 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp')
-rw-r--r-- | libcpp/ChangeLog | 11 | ||||
-rw-r--r-- | libcpp/expr.c | 8 | ||||
-rw-r--r-- | libcpp/include/cpplib.h | 7 | ||||
-rw-r--r-- | libcpp/system.h | 7 |
4 files changed, 27 insertions, 6 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 6b928078636..1a7e737cd95 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,14 @@ +2016-11-23 Paolo Bonzini <bonzini@gnu.org> + + * include/cpplib.h (struct cpp_options): Add new member + warn_expansion_to_defined. + (CPP_W_EXPANSION_TO_DEFINED): New enum member. + * expr.c (parse_defined): Warn for all uses of "defined" + in macros, and tie warning to CPP_W_EXPANSION_TO_DEFINED. + Make it a pedwarning instead of a warning. + * system.h (HAVE_DESIGNATED_INITIALIZERS): Do not use + "defined" in macros. + 2016-11-17 David Malcolm <dmalcolm@redhat.com> * charset.c (cpp_interpret_string_1): Skip locations from diff --git a/libcpp/expr.c b/libcpp/expr.c index 61bc1b21af1..a4cf7505958 100644 --- a/libcpp/expr.c +++ b/libcpp/expr.c @@ -1031,9 +1031,11 @@ parse_defined (cpp_reader *pfile) if (node) { - if (pfile->context != initial_context && CPP_PEDANTIC (pfile)) - cpp_error (pfile, CPP_DL_WARNING, - "this use of \"defined\" may not be portable"); + if ((pfile->context != initial_context + || initial_context != &pfile->base_context) + && CPP_OPTION (pfile, warn_expansion_to_defined)) + cpp_pedwarning (pfile, CPP_W_EXPANSION_TO_DEFINED, + "this use of \"defined\" may not be portable"); _cpp_mark_macro_used (node); if (!(node->flags & NODE_USED)) diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 0781c095156..56c2491d2ee 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -415,6 +415,10 @@ struct cpp_options /* Nonzero means warn if undefined identifiers are evaluated in an #if. */ unsigned char warn_undef; + /* Nonzero means warn if "defined" is encountered in a place other than + an #if. */ + unsigned char warn_expansion_to_defined; + /* Nonzero means warn of unused macros from the main file. */ unsigned char warn_unused_macros; @@ -1040,7 +1044,8 @@ enum { CPP_W_DATE_TIME, CPP_W_PEDANTIC, CPP_W_C90_C99_COMPAT, - CPP_W_CXX11_COMPAT + CPP_W_CXX11_COMPAT, + CPP_W_EXPANSION_TO_DEFINED }; /* Output a diagnostic of some kind. */ diff --git a/libcpp/system.h b/libcpp/system.h index e89131e900e..67b02bb4578 100644 --- a/libcpp/system.h +++ b/libcpp/system.h @@ -375,9 +375,12 @@ extern void abort (void); ??? C99 designated initializers are not supported by most C++ compilers, including G++. -- gdr, 2005-05-18 */ #if !defined(HAVE_DESIGNATED_INITIALIZERS) +#ifdef __cplusplus +#define HAVE_DESIGNATED_INITIALIZERS 0 +#else #define HAVE_DESIGNATED_INITIALIZERS \ - (!defined(__cplusplus) \ - && ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))) + ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L)) +#endif #endif #ifndef offsetof |