Commit b9822443 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 91f66e78
2017-02-24 Jakub Jelinek <jakub@redhat.com>
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 <segher@kernel.crashing.org> 2017-02-24 Segher Boessenkool <segher@kernel.crashing.org>
* config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of * config/sh/sh.md (tstsi_t): If operands[0] is a SUBREG instead of
......
2017-02-24 Jakub Jelinek <jakub@redhat.com>
PR c/79677
* gcc-interface/misc.c (gnat_handle_option): Pass true to
handle_generated_option GENERATED_P.
2017-02-24 Eric Botcazou <ebotcazou@adacore.com> 2017-02-24 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_field): Do not remove the wrapper * gcc-interface/decl.c (gnat_to_gnu_field): Do not remove the wrapper
......
...@@ -149,7 +149,7 @@ gnat_handle_option (size_t scode, const char *arg, int value, int kind, ...@@ -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, handle_generated_option (&global_options, &global_options_set,
OPT_Wunused, NULL, value, OPT_Wunused, NULL, value,
gnat_option_lang_mask (), kind, loc, gnat_option_lang_mask (), kind, loc,
handlers, global_dc); handlers, true, global_dc);
warn_uninitialized = value; warn_uninitialized = value;
warn_maybe_uninitialized = value; warn_maybe_uninitialized = value;
break; break;
......
...@@ -444,7 +444,7 @@ for (i = 0; i < n_enabledby; i++) { ...@@ -444,7 +444,7 @@ for (i = 0; i < n_enabledby; i++) {
print " if (" condition ")" print " if (" condition ")"
print " handle_generated_option (opts, opts_set," print " handle_generated_option (opts, opts_set,"
print " " opt_enum(thisenable[j]) ", NULL, " value "," print " " opt_enum(thisenable[j]) ", NULL, " value ","
print " lang_mask, kind, loc, handlers, dc);" print " lang_mask, kind, loc, handlers, true, dc);"
} else { } else {
print "#error " thisenable[j] " does not have a Var() flag" print "#error " thisenable[j] " does not have a Var() flag"
} }
...@@ -497,7 +497,7 @@ for (i = 0; i < n_langs; i++) { ...@@ -497,7 +497,7 @@ for (i = 0; i < n_langs; i++) {
print " if (!opts_set->x_" opt_var_name ")" print " if (!opts_set->x_" opt_var_name ")"
print " handle_generated_option (opts, opts_set," print " handle_generated_option (opts, opts_set,"
print " " opt_enum(thisenable_opt) ", NULL, " value "," print " " opt_enum(thisenable_opt) ", NULL, " value ","
print " lang_mask, kind, loc, handlers, dc);" print " lang_mask, kind, loc, handlers, true, dc);"
} else { } else {
print "#error " thisenable_opt " does not have a Var() flag" print "#error " thisenable_opt " does not have a Var() flag"
} }
......
...@@ -959,9 +959,10 @@ keep: ...@@ -959,9 +959,10 @@ keep:
option for options from the source file, UNKNOWN_LOCATION option for options from the source file, UNKNOWN_LOCATION
otherwise. GENERATED_P is true for an option generated as part of otherwise. GENERATED_P is true for an option generated as part of
processing another option or otherwise generated internally, false processing another option or otherwise generated internally, false
for one explicitly passed by the user. Returns false if the switch for one explicitly passed by the user. control_warning_option
was invalid. DC is the diagnostic context for options affecting generated options are considered explicitly passed by the user.
diagnostics state, or NULL. */ Returns false if the switch was invalid. DC is the diagnostic
context for options affecting diagnostics state, or NULL. */
static bool static bool
handle_option (struct gcc_options *opts, handle_option (struct gcc_options *opts,
...@@ -1005,13 +1006,13 @@ handle_generated_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, size_t opt_index, const char *arg, int value,
unsigned int lang_mask, int kind, location_t loc, unsigned int lang_mask, int kind, location_t loc,
const struct cl_option_handlers *handlers, const struct cl_option_handlers *handlers,
diagnostic_context *dc) bool generated_p, diagnostic_context *dc)
{ {
struct cl_decoded_option decoded; struct cl_decoded_option decoded;
generate_option (opt_index, arg, value, lang_mask, &decoded); generate_option (opt_index, arg, value, lang_mask, &decoded);
return handle_option (opts, opts_set, &decoded, lang_mask, kind, loc, 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 /* 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, ...@@ -1503,7 +1504,7 @@ control_warning_option (unsigned int opt_index, int kind, const char *arg,
handle_generated_option (opts, opts_set, handle_generated_option (opts, opts_set,
opt_index, arg, value, lang_mask, opt_index, arg, value, lang_mask,
kind, loc, handlers, dc); kind, loc, handlers, false, dc);
} }
} }
} }
...@@ -403,13 +403,13 @@ maybe_default_option (struct gcc_options *opts, ...@@ -403,13 +403,13 @@ maybe_default_option (struct gcc_options *opts,
handle_generated_option (opts, opts_set, default_opt->opt_index, handle_generated_option (opts, opts_set, default_opt->opt_index,
default_opt->arg, default_opt->value, default_opt->arg, default_opt->value,
lang_mask, DK_UNSPECIFIED, loc, lang_mask, DK_UNSPECIFIED, loc,
handlers, dc); handlers, true, dc);
else if (default_opt->arg == NULL else if (default_opt->arg == NULL
&& !option->cl_reject_negative) && !option->cl_reject_negative)
handle_generated_option (opts, opts_set, default_opt->opt_index, handle_generated_option (opts, opts_set, default_opt->opt_index,
default_opt->arg, !default_opt->value, default_opt->arg, !default_opt->value,
lang_mask, DK_UNSPECIFIED, loc, lang_mask, DK_UNSPECIFIED, loc,
handlers, dc); handlers, true, dc);
} }
/* As indicated by the optimization level LEVEL (-Os if SIZE is set, /* As indicated by the optimization level LEVEL (-Os if SIZE is set,
......
...@@ -353,7 +353,7 @@ bool handle_generated_option (struct gcc_options *opts, ...@@ -353,7 +353,7 @@ bool handle_generated_option (struct gcc_options *opts,
size_t opt_index, const char *arg, int value, size_t opt_index, const char *arg, int value,
unsigned int lang_mask, int kind, location_t loc, unsigned int lang_mask, int kind, location_t loc,
const struct cl_option_handlers *handlers, 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, void generate_option (size_t opt_index, const char *arg, int value,
unsigned int lang_mask, unsigned int lang_mask,
struct cl_decoded_option *decoded); struct cl_decoded_option *decoded);
......
2017-02-24 Jakub Jelinek <jakub@redhat.com>
PR c/79677
* gcc.dg/pr79677.c: New test.
2017-02-24 Matthew Fortune <matthew.fortune@imgtec.com> 2017-02-24 Matthew Fortune <matthew.fortune@imgtec.com>
* gcc.target/mips/mips-ps-type-2.c (move): Force generation * gcc.target/mips/mips-ps-type-2.c (move): Force generation
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment