From b559c810f381052a959568a414813bb050b14ea5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Tue, 9 Sep 2014 22:17:54 +0000 Subject: [PATCH] opth-gen.awk: Generate mapping from cpp message reasons to the options that enable them. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gcc/ChangeLog: 2014-09-09 Manuel López-Ibáñez * opth-gen.awk: Generate mapping from cpp message reasons to the options that enable them. * doc/options.texi (CppReason): Document. gcc/c-family/ChangeLog: 2014-09-09 Manuel López-Ibáñez * c.opt: Add CppReason to various flags. (Wdate-time): Re-sort. * c-common.c: Include c-common.h earlier. (struct reason_option_codes_t): Delete. (c_option_controlling_cpp_error): Prefix global type and struct with cpp_. From-SVN: r215095 --- gcc/ChangeLog | 6 ++++++ gcc/c-family/ChangeLog | 9 ++++++++ gcc/c-family/c-common.c | 38 +++----------------------------- gcc/c-family/c.opt | 48 ++++++++++++++++++++++------------------- gcc/doc/options.texi | 5 +++++ gcc/opth-gen.awk | 27 +++++++++++++++++++++++ 6 files changed, 76 insertions(+), 57 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de1d1a9006e..f7a5401b7e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-09-09 Manuel López-Ibáñez + + * opth-gen.awk: Generate mapping from cpp message reasons to the + options that enable them. + * doc/options.texi (CppReason): Document. + 2014-09-09 Manuel López-Ibáñez * doc/invoke.texi (Wnormalized=): Update. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 81e253d03bd..a09ce72514d 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,12 @@ +2014-09-09 Manuel López-Ibáñez + + * c.opt: Add CppReason to various flags. + (Wdate-time): Re-sort. + * c-common.c: Include c-common.h earlier. + (struct reason_option_codes_t): Delete. + (c_option_controlling_cpp_error): Prefix global type and struct + with cpp_. + 2014-09-09 Manuel López-Ibáñez * c.opt (Wnormalized): New. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index baa8415a507..39be9569395 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" +#include "c-common.h" #include "tm.h" #include "intl.h" #include "tree.h" @@ -32,7 +33,6 @@ along with GCC; see the file COPYING3. If not see #include "trans-mem.h" #include "flags.h" #include "c-pragma.h" -#include "c-common.h" #include "c-objc.h" #include "tm_p.h" #include "obstack.h" @@ -9666,47 +9666,15 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type, #undef catenate_messages } -/* Mapping for cpp message reasons to the options that enable them. */ - -struct reason_option_codes_t -{ - const int reason; /* cpplib message reason. */ - const int option_code; /* gcc option that controls this message. */ -}; - -static const struct reason_option_codes_t option_codes[] = { - {CPP_W_BUILTIN_MACRO_REDEFINED, OPT_Wbuiltin_macro_redefined}, - {CPP_W_C90_C99_COMPAT, OPT_Wc90_c99_compat}, - {CPP_W_COMMENTS, OPT_Wcomment}, - {CPP_W_CXX_OPERATOR_NAMES, OPT_Wc___compat}, - {CPP_W_DATE_TIME, OPT_Wdate_time}, - {CPP_W_DEPRECATED, OPT_Wdeprecated}, - {CPP_W_ENDIF_LABELS, OPT_Wendif_labels}, - {CPP_W_INVALID_PCH, OPT_Winvalid_pch}, - {CPP_W_LITERAL_SUFFIX, OPT_Wliteral_suffix}, - {CPP_W_LONG_LONG, OPT_Wlong_long}, - {CPP_W_MISSING_INCLUDE_DIRS, OPT_Wmissing_include_dirs}, - {CPP_W_MULTICHAR, OPT_Wmultichar}, - {CPP_W_NORMALIZE, OPT_Wnormalized_}, - {CPP_W_PEDANTIC, OPT_Wpedantic}, - {CPP_W_TRADITIONAL, OPT_Wtraditional}, - {CPP_W_TRIGRAPHS, OPT_Wtrigraphs}, - {CPP_W_UNDEF, OPT_Wundef}, - {CPP_W_UNUSED_MACROS, OPT_Wunused_macros}, - {CPP_W_VARIADIC_MACROS, OPT_Wvariadic_macros}, - {CPP_W_WARNING_DIRECTIVE, OPT_Wcpp}, - {CPP_W_NONE, 0} -}; - /* Return the gcc option code associated with the reason for a cpp message, or 0 if none. */ static int c_option_controlling_cpp_error (int reason) { - const struct reason_option_codes_t *entry; + const struct cpp_reason_option_codes_t *entry; - for (entry = option_codes; entry->reason != CPP_W_NONE; entry++) + for (entry = cpp_reason_option_codes; entry->reason != CPP_W_NONE; entry++) { if (entry->reason == reason) return entry->option_code; diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 11703b92aaf..5e6182b2f4b 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -292,11 +292,11 @@ C ObjC C++ ObjC++ Var(warn_bool_compare) Warning LangEnabledBy(C ObjC C++ ObjC++ Warn about boolean expression compared with an integer value different from true/false Wbuiltin-macro-redefined -C ObjC C++ ObjC++ CPP(warn_builtin_macro_redefined) Var(cpp_warn_builtin_macro_redefined) Init(1) Warning +C ObjC C++ ObjC++ CPP(warn_builtin_macro_redefined) CppReason(CPP_W_BUILTIN_MACRO_REDEFINED) Var(cpp_warn_builtin_macro_redefined) Init(1) Warning Warn when a built-in preprocessor macro is undefined or redefined Wc90-c99-compat -C ObjC CPP(cpp_warn_c90_c99_compat) Var(warn_c90_c99_compat) Init(-1) Warning +C ObjC CPP(cpp_warn_c90_c99_compat) CppReason(CPP_W_C90_C99_COMPAT) Var(warn_c90_c99_compat) Init(-1) Warning Warn about features not present in ISO C90, but present in ISO C99 Wc99-c11-compat @@ -304,7 +304,7 @@ C ObjC Var(warn_c99_c11_compat) Init(-1) Warning Warn about features not present in ISO C99, but present in ISO C11 Wc++-compat -C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) Init(0) Warning +C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) CppReason(CPP_W_CXX_OPERATOR_NAMES) Init(0) Warning Warn about C constructs that are not in the common subset of C and C++ Wc++0x-compat @@ -328,7 +328,7 @@ C ObjC C++ ObjC++ Var(warn_clobbered) Warning EnabledBy(Wextra) Warn about variables that might be changed by \"longjmp\" or \"vfork\" Wcomment -C ObjC C++ ObjC++ CPP(warn_comments) Var(cpp_warn_comment) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) +C ObjC C++ ObjC++ CPP(warn_comments) CppReason(CPP_W_COMMENTS) Var(cpp_warn_comment) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Warn about possibly nested block comments, and C++ comments spanning more than one physical line Wcomments @@ -347,10 +347,18 @@ Wconversion-null C++ ObjC++ Var(warn_conversion_null) Init(1) Warning Warn for converting NULL from/to a non-pointer type +Wcpp +C ObjC C++ ObjC++ CppReason(CPP_W_WARNING_DIRECTIVE) +; Documented in common.opt + Wctor-dtor-privacy C++ ObjC++ Var(warn_ctor_dtor_privacy) Warning Warn when all constructors and destructors are private +Wdate-time +C ObjC C++ ObjC++ CPP(warn_date_time) CppReason(CPP_W_DATE_TIME) Var(cpp_warn_date_time) Init(0) Warning +Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage + Wdeclaration-after-statement C ObjC Var(warn_declaration_after_statement) Init(-1) Warning Warn when a declaration is found after a statement @@ -368,7 +376,7 @@ LangEnabledBy(C++ ObjC++,Weffc++) ; Wdeprecated -C C++ ObjC ObjC++ CPP(cpp_warn_deprecated) Var(warn_deprecated) Init(1) Warning +C C++ ObjC ObjC++ CPP(cpp_warn_deprecated) CppReason(CPP_W_DEPRECATED) Var(warn_deprecated) Init(1) Warning Warn if a deprecated compiler feature, class, method, or field is used Wdesignated-init @@ -392,7 +400,7 @@ C ObjC C++ ObjC++ Var(warn_empty_body) Warning EnabledBy(Wextra) Warn about an empty body in an if or else statement Wendif-labels -C ObjC C++ ObjC++ CPP(warn_endif_labels) Var(cpp_warn_endif_labels) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) +C ObjC C++ ObjC++ CPP(warn_endif_labels) CppReason(CPP_W_ENDIF_LABELS) Var(cpp_warn_endif_labels) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) Warn about stray tokens after #elif and #endif Wenum-compare @@ -503,7 +511,7 @@ C++ ObjC++ Var(warn_invalid_offsetof) Init(1) Warning Warn about invalid uses of the \"offsetof\" macro Winvalid-pch -C ObjC C++ ObjC++ CPP(warn_invalid_pch) Var(cpp_warn_invalid_pch) Init(0) Warning +C ObjC C++ ObjC++ CPP(warn_invalid_pch) CppReason(CPP_W_INVALID_PCH) Var(cpp_warn_invalid_pch) Init(0) Warning Warn about PCH files that are found but not used Wjump-misses-init @@ -511,7 +519,7 @@ C ObjC Var(warn_jump_misses_init) Warning LangEnabledby(C ObjC,Wc++-compat) Warn when a jump misses a variable initialization Wliteral-suffix -C++ ObjC++ CPP(warn_literal_suffix) Var(cpp_warn_literal_suffix) Init(1) Warning +C++ ObjC++ CPP(warn_literal_suffix) CppReason(CPP_W_LITERAL_SUFFIX) Var(cpp_warn_literal_suffix) Init(1) Warning Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore. Wlogical-op @@ -523,7 +531,7 @@ C ObjC C++ ObjC++ Var(warn_logical_not_paren) Warning LangEnabledBy(C ObjC C++ O Warn when logical not is used on the left hand side operand of a comparison Wlong-long -C ObjC C++ ObjC++ CPP(cpp_warn_long_long) Var(warn_long_long) Init(-1) Warning LangEnabledBy(C ObjC,Wc90-c99-compat) +C ObjC C++ ObjC++ CPP(cpp_warn_long_long) CppReason(CPP_W_LONG_LONG) Var(warn_long_long) Init(-1) Warning LangEnabledBy(C ObjC,Wc90-c99-compat) Do not warn about using \"long long\" when -pedantic Wmain @@ -583,7 +591,7 @@ C ObjC C++ ObjC++ Alias(Wsuggest-attribute=format) ; Wmissing-include-dirs -C ObjC C++ ObjC++ CPP(warn_missing_include_dirs) Var(cpp_warn_missing_include_dirs) Init(0) Warning +C ObjC C++ ObjC++ CPP(warn_missing_include_dirs) CppReason(CPP_W_MISSING_INCLUDE_DIRS) Var(cpp_warn_missing_include_dirs) Init(0) Warning Warn about user-specified include directories that do not exist Wmissing-parameter-type @@ -598,7 +606,7 @@ Wmudflap C ObjC C++ ObjC++ Ignore Warn(switch %qs is no longer supported) Wmultichar -C ObjC C++ ObjC++ CPP(warn_multichar) Var(cpp_warn_multichar) Init(0) Warning +C ObjC C++ ObjC++ CPP(warn_multichar) CppReason(CPP_W_MULTICHAR) Var(cpp_warn_multichar) Init(0) Warning Warn about use of multi-character character constants Wnarrowing @@ -638,7 +646,7 @@ C ObjC C++ ObjC++ Alias(Wnormalized=,nfc,none) ; Wnormalized= -C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(warn_normalize) Init(normalized_C) Var(cpp_warn_normalize) Enum(cpp_normalize_level) +C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(warn_normalize) CppReason(CPP_W_NORMALIZE) Init(normalized_C) Var(cpp_warn_normalize) Enum(cpp_normalize_level) -Wnormalized= Warn about non-normalised Unicode strings ; Required for these enum values. @@ -697,7 +705,7 @@ C ObjC C++ ObjC++ Var(warn_parentheses) Warning LangEnabledBy(C ObjC C++ ObjC++, Warn about possibly missing parentheses Wpedantic -C ObjC C++ ObjC++ CPP(cpp_pedantic) Warning +C ObjC C++ ObjC++ CPP(cpp_pedantic) CppReason(CPP_W_PEDANTIC) Warning ; Documented in common.opt Wpmf-conversions @@ -724,10 +732,6 @@ Wpragmas C ObjC C++ ObjC++ Var(warn_pragmas) Init(1) Warning Warn about misuses of pragmas -Wdate-time -C ObjC C++ ObjC++ CPP(warn_date_time) Var(cpp_warn_date_time) Init(0) Warning -Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage - Wproperty-assign-default ObjC ObjC++ Var(warn_property_assign_default) Init(1) Warning Warn if a property for an Objective-C object has no assign semantics specified @@ -809,7 +813,7 @@ C ObjC C++ ObjC++ Warning ; Documented in common.opt Wtraditional -C ObjC CPP(cpp_warn_traditional) Var(warn_traditional) Init(0) Warning +C ObjC CPP(cpp_warn_traditional) CppReason(CPP_W_TRADITIONAL) Var(warn_traditional) Init(0) Warning Warn about features not present in traditional C Wtraditional-conversion @@ -817,7 +821,7 @@ C ObjC Var(warn_traditional_conversion) Warning Warn of prototypes causing type conversions different from what would happen in the absence of prototype Wtrigraphs -C ObjC C++ ObjC++ CPP(warn_trigraphs) Var(cpp_warn_trigraphs) Init(2) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) +C ObjC C++ ObjC++ CPP(warn_trigraphs) CppReason(CPP_W_TRIGRAPHS) Var(cpp_warn_trigraphs) Init(2) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Warn if trigraphs are encountered that might affect the meaning of the program Wundeclared-selector @@ -825,7 +829,7 @@ ObjC ObjC++ Var(warn_undeclared_selector) Warning Warn about @selector()s without previously declared methods Wundef -C ObjC C++ ObjC++ CPP(warn_undef) Var(cpp_warn_undef) Init(0) Warning +C ObjC C++ ObjC++ CPP(warn_undef) CppReason(CPP_W_UNDEF) Var(cpp_warn_undef) Init(0) Warning Warn if an undefined macro is used in an #if directive Wuninitialized @@ -853,7 +857,7 @@ C ObjC C++ ObjC++ Var(warn_unused_local_typedefs) Warning EnabledBy(Wunused) Warn when typedefs locally defined in a function are not used Wunused-macros -C ObjC C++ ObjC++ Var(cpp_warn_unused_macros) Warning +C ObjC C++ ObjC++ CppReason(CPP_W_UNUSED_MACROS) Var(cpp_warn_unused_macros) Warning Warn about macros defined in the main file that are not used Wunused-result @@ -861,7 +865,7 @@ C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value Wvariadic-macros -C ObjC C++ ObjC++ CPP(warn_variadic_macros) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) +C ObjC C++ ObjC++ CPP(warn_variadic_macros) CppReason(CPP_W_VARIADIC_MACROS) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) Warn about using variadic macros Wvariadic-macros diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index df52cdbfab3..bcffdf86aaa 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -488,4 +488,9 @@ The state of this option should be kept in sync with the preprocessor option @var{var}. If this property is set, then properties @code{Var} and @code{Init} must be set as well. +@item CppReason(@var{CPP_W_Enum}) +This warning option corresponds to @code{cpplib.h} warning reason code +@var{CPP_W_Enum}. This should only be used for warning options of the +C-family front-ends. + @end table diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index 4e8f21f406b..cbc7ab53b88 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -479,5 +479,32 @@ print " OPT_SPECIAL_program_name," print " OPT_SPECIAL_input_file" print "};" print "" +print "#ifdef GCC_C_COMMON_H" +print "/* Mapping from cpp message reasons to the options that enable them. */" +print "#include " +print "struct cpp_reason_option_codes_t" +print "{" +print " const int reason; /* cpplib message reason. */" +print " const int option_code; /* gcc option that controls this message. */" +print "};" +print "" +print "static const struct cpp_reason_option_codes_t cpp_reason_option_codes[] = {" +for (i = 0; i < n_opts; i++) { + # With identical flags, pick only the last one. The + # earlier loop ensured that it has all flags merged, + # and a nonempty help text if one of the texts was nonempty. + while( i + 1 != n_opts && opts[i] == opts[i + 1] ) { + i++; + } + cpp_reason = nth_arg(0, opt_args("CppReason", flags[i])); + if (cpp_reason != "") { + cpp_reason = cpp_reason ","; + printf(" {%-40s %s},\n", cpp_reason, opt_enum(opts[i])) + } +} +printf(" {%-40s 0},\n", "CPP_W_NONE,") +print "};" +print "#endif" +print "" print "#endif /* OPTIONS_H */" } -- 2.30.2