From: Jakub Jelinek Date: Fri, 24 Feb 2017 23:15:56 +0000 (+0100) Subject: re PR c/79677 (Weird handling of -Werror=) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b982244362124a7f2ba907b08afe820e37aabaca;p=gcc.git re PR c/79677 (Weird handling of -Werror=) PR c/79677 * opts.h (handle_generated_option): Add GENERATED_P argument. * opts-common.c (handle_option): Adjust function comment. (handle_generated_option): Add GENERATED_P argument, pass it to handle_option. (control_warning_option): Pass false to handle_generated_option GENERATED_P. * opts.c (maybe_default_option): Pass true to handle_generated_option GENERATED_P. * optc-gen.awk: Likewise. ada/ * gcc-interface/misc.c (gnat_handle_option): Pass true to handle_generated_option GENERATED_P. testsuite/ * gcc.dg/pr79677.c: New test. From-SVN: r245728 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf24e79f263..5f0ee4f2816 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2017-02-24 Jakub Jelinek + + PR c/79677 + * opts.h (handle_generated_option): Add GENERATED_P argument. + * opts-common.c (handle_option): Adjust function comment. + (handle_generated_option): Add GENERATED_P argument, pass it to + handle_option. + (control_warning_option): Pass false to handle_generated_option + GENERATED_P. + * opts.c (maybe_default_option): Pass true to handle_generated_option + GENERATED_P. + * optc-gen.awk: Likewise. + 2017-02-24 Segher Boessenkool * config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e4ce4d52e0f..079769db942 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2017-02-24 Jakub Jelinek + + PR c/79677 + * gcc-interface/misc.c (gnat_handle_option): Pass true to + handle_generated_option GENERATED_P. + 2017-02-24 Eric Botcazou * gcc-interface/decl.c (gnat_to_gnu_field): Do not remove the wrapper diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index cdabfec09d4..1b6b3eb265a 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -149,7 +149,7 @@ gnat_handle_option (size_t scode, const char *arg, int value, int kind, handle_generated_option (&global_options, &global_options_set, OPT_Wunused, NULL, value, gnat_option_lang_mask (), kind, loc, - handlers, global_dc); + handlers, true, global_dc); warn_uninitialized = value; warn_maybe_uninitialized = value; break; diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk index cb3214a711c..3b9126ccf97 100644 --- a/gcc/optc-gen.awk +++ b/gcc/optc-gen.awk @@ -444,7 +444,7 @@ for (i = 0; i < n_enabledby; i++) { print " if (" condition ")" print " handle_generated_option (opts, opts_set," print " " opt_enum(thisenable[j]) ", NULL, " value "," - print " lang_mask, kind, loc, handlers, dc);" + print " lang_mask, kind, loc, handlers, true, dc);" } else { print "#error " thisenable[j] " does not have a Var() flag" } @@ -497,7 +497,7 @@ for (i = 0; i < n_langs; i++) { print " if (!opts_set->x_" opt_var_name ")" print " handle_generated_option (opts, opts_set," print " " opt_enum(thisenable_opt) ", NULL, " value "," - print " lang_mask, kind, loc, handlers, dc);" + print " lang_mask, kind, loc, handlers, true, dc);" } else { print "#error " thisenable_opt " does not have a Var() flag" } diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 8b924c9e1d7..f2f7385a4c7 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -959,9 +959,10 @@ keep: option for options from the source file, UNKNOWN_LOCATION otherwise. GENERATED_P is true for an option generated as part of processing another option or otherwise generated internally, false - for one explicitly passed by the user. Returns false if the switch - was invalid. DC is the diagnostic context for options affecting - diagnostics state, or NULL. */ + for one explicitly passed by the user. control_warning_option + generated options are considered explicitly passed by the user. + Returns false if the switch was invalid. DC is the diagnostic + context for options affecting diagnostics state, or NULL. */ static bool handle_option (struct gcc_options *opts, @@ -1005,13 +1006,13 @@ handle_generated_option (struct gcc_options *opts, size_t opt_index, const char *arg, int value, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc) + bool generated_p, diagnostic_context *dc) { struct cl_decoded_option decoded; generate_option (opt_index, arg, value, lang_mask, &decoded); return handle_option (opts, opts_set, &decoded, lang_mask, kind, loc, - handlers, true, dc); + handlers, generated_p, dc); } /* Fill in *DECODED with an option described by OPT_INDEX, ARG and @@ -1503,7 +1504,7 @@ control_warning_option (unsigned int opt_index, int kind, const char *arg, handle_generated_option (opts, opts_set, opt_index, arg, value, lang_mask, - kind, loc, handlers, dc); + kind, loc, handlers, false, dc); } } } diff --git a/gcc/opts.c b/gcc/opts.c index b38e9b4f3a7..c4768603ec9 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -403,13 +403,13 @@ maybe_default_option (struct gcc_options *opts, handle_generated_option (opts, opts_set, default_opt->opt_index, default_opt->arg, default_opt->value, lang_mask, DK_UNSPECIFIED, loc, - handlers, dc); + handlers, true, dc); else if (default_opt->arg == NULL && !option->cl_reject_negative) handle_generated_option (opts, opts_set, default_opt->opt_index, default_opt->arg, !default_opt->value, lang_mask, DK_UNSPECIFIED, loc, - handlers, dc); + handlers, true, dc); } /* As indicated by the optimization level LEVEL (-Os if SIZE is set, diff --git a/gcc/opts.h b/gcc/opts.h index 56ba9101c64..eb626aa90ec 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -353,7 +353,7 @@ bool handle_generated_option (struct gcc_options *opts, size_t opt_index, const char *arg, int value, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + bool generated_p, diagnostic_context *dc); void generate_option (size_t opt_index, const char *arg, int value, unsigned int lang_mask, struct cl_decoded_option *decoded); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce7a3d48058..651eb79a237 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-02-24 Jakub Jelinek + + PR c/79677 + * gcc.dg/pr79677.c: New test. + 2017-02-24 Matthew Fortune * gcc.target/mips/mips-ps-type-2.c (move): Force generation diff --git a/gcc/testsuite/gcc.dg/pr79677.c b/gcc/testsuite/gcc.dg/pr79677.c new file mode 100644 index 00000000000..53a3176453a --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr79677.c @@ -0,0 +1,15 @@ +/* PR c/79677 */ +/* { dg-do compile } */ +/* { dg-options "-Wformat -Werror=format-security -Wformat" } */ +/* { dg-message "some warnings being treated as errors" "" { target *-*-* } 0 } */ + +void foo (char *); + +int +main () +{ + char s[10] = "%s"; + foo (s); + __builtin_printf (s); /* { dg-error "format not a string literal and no format arguments" } */ + return 0; +}