aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/gcc-interface/misc.c2
-rw-r--r--gcc/optc-gen.awk4
-rw-r--r--gcc/opts-common.c13
-rw-r--r--gcc/opts.c4
-rw-r--r--gcc/opts.h2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr79677.c15
9 files changed, 52 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf24e79..5f0ee4f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+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
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index e4ce4d5..079769d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+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
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index cdabfec..1b6b3eb 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 cb3214a..3b9126c 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 8b924c9..f2f7385 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 b38e9b4..c476860 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 56ba910..eb626aa 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 ce7a3d4..651eb79 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gcc.dg/pr79677.c b/gcc/testsuite/gcc.dg/pr79677.c
new file mode 100644
index 0000000..53a3176
--- /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;
+}