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>
* 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>
* 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,
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;
......
......@@ -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"
}
......
......@@ -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);
}
}
}
......@@ -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,
......
......@@ -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);
......
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>
* 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