From 54d62f5148febdf714fa374a10a72c73850ed6bb Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 14 Dec 2015 17:59:05 +0100 Subject: [PATCH] re PR c/68833 (-Werror=format issues an error now) PR c/68833 * common.opt (Wmissing-noreturn): Add Warning option. * opts-common.c (control_warning_option): If opt is alias_target with alias_arg, set arg to it. * c.opt (Wmissing-format-attribute, Wnormalized): Add Warning option. * c-c++-common/pr68833-1.c: New test. * c-c++-common/pr68833-2.c: New test. From-SVN: r231624 --- gcc/ChangeLog | 7 +++++++ gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c.opt | 4 ++-- gcc/common.opt | 2 +- gcc/opts-common.c | 8 +++++++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/c-c++-common/pr68833-1.c | 22 ++++++++++++++++++++++ gcc/testsuite/c-c++-common/pr68833-2.c | 16 ++++++++++++++++ gcc/testsuite/c-c++-common/pr68833-3.c | 7 +++++++ 9 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/pr68833-1.c create mode 100644 gcc/testsuite/c-c++-common/pr68833-2.c create mode 100644 gcc/testsuite/c-c++-common/pr68833-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 14efd7a35b0..31c79d87c19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-12-14 Jakub Jelinek + + PR c/68833 + * common.opt (Wmissing-noreturn): Add Warning option. + * opts-common.c (control_warning_option): If opt is + alias_target with alias_arg, set arg to it. + 2015-12-14 Segher Boessenkool PR target/68865 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 0f557c77e61..db9a279c20f 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2015-12-14 Jakub Jelinek + + PR c/68833 + * c.opt (Wmissing-format-attribute, Wnormalized): Add Warning option. + 2014-12-12 Tobias Burnus PR fortran/68815 diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 5867de527fd..70dc91614b9 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -627,7 +627,7 @@ C++ ObjC++ Var(warn_templates) Warning Warn on primary template declaration. Wmissing-format-attribute -C ObjC C++ ObjC++ Alias(Wsuggest-attribute=format) +C ObjC C++ ObjC++ Warning Alias(Wsuggest-attribute=format) ; Wmissing-include-dirs @@ -678,7 +678,7 @@ C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wall) ; Wnormalized -C ObjC C++ ObjC++ Alias(Wnormalized=,nfc,none) +C ObjC C++ ObjC++ Warning Alias(Wnormalized=,nfc,none) ; Wnormalized= diff --git a/gcc/common.opt b/gcc/common.opt index b1591d5d49b..6264bc03bca 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -612,7 +612,7 @@ Common Var(warn_unsafe_loop_optimizations) Warning Warn if the loop cannot be optimized due to nontrivial assumptions. Wmissing-noreturn -Common Alias(Wsuggest-attribute=noreturn) +Common Warning Alias(Wsuggest-attribute=noreturn) Wodr Common Var(warn_odr_violations) Init(1) Warning diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 507358a1d17..55b631586b5 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -1361,7 +1361,13 @@ control_warning_option (unsigned int opt_index, int kind, const char *arg, diagnostic_context *dc) { if (cl_options[opt_index].alias_target != N_OPTS) - opt_index = cl_options[opt_index].alias_target; + { + gcc_assert (!cl_options[opt_index].cl_separate_alias + && !cl_options[opt_index].cl_negative_alias); + if (cl_options[opt_index].alias_arg) + arg = cl_options[opt_index].alias_arg; + opt_index = cl_options[opt_index].alias_target; + } if (opt_index == OPT_SPECIAL_ignore) return; if (dc) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 45db39a777e..2bbd9dcc2dd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-12-14 Jakub Jelinek + + PR c/68833 + * c-c++-common/pr68833-1.c: New test. + * c-c++-common/pr68833-2.c: New test. + 2015-12-14 Richard Biener PR tree-optimization/68852 diff --git a/gcc/testsuite/c-c++-common/pr68833-1.c b/gcc/testsuite/c-c++-common/pr68833-1.c new file mode 100644 index 00000000000..e0601b39ec4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr68833-1.c @@ -0,0 +1,22 @@ +/* PR c/68833 */ +/* { dg-do compile } */ +/* { dg-options "-Werror=larger-than-65536 -Werror=format -Werror=missing-noreturn" } */ + +int a[131072]; /* { dg-error "size of 'a' is \[1-9]\[0-9]* bytes" } */ +int b[1024]; /* { dg-bogus "size of 'b' is \[1-9]\[0-9]* bytes" } */ + +void +f1 (const char *fmt) +{ + __builtin_printf ("%d\n", 1.2); /* { dg-error "expects argument of type" } */ + __builtin_printf (fmt, 1.2); /* { dg-bogus "format not a string literal, argument types not checked" } */ +} + +extern void f2 (void); +void +f2 (void) /* { dg-error "candidate for attribute 'noreturn'" "detect noreturn candidate" } */ +{ + __builtin_exit (0); +} + +/* { dg-prune-output "treated as errors" } */ diff --git a/gcc/testsuite/c-c++-common/pr68833-2.c b/gcc/testsuite/c-c++-common/pr68833-2.c new file mode 100644 index 00000000000..c991b7a13c2 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr68833-2.c @@ -0,0 +1,16 @@ +/* PR c/68833 */ +/* { dg-do compile } */ +/* { dg-options "-Werror=missing-format-attribute" } */ + +#include + +void +foo (const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + __builtin_vprintf (fmt, ap); /* { dg-error "candidate" "printf attribute warning" } */ + va_end (ap); +} + +/* { dg-prune-output "treated as errors" } */ diff --git a/gcc/testsuite/c-c++-common/pr68833-3.c b/gcc/testsuite/c-c++-common/pr68833-3.c new file mode 100644 index 00000000000..c99a2c605a8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr68833-3.c @@ -0,0 +1,7 @@ +/* PR c/68833 */ +/* { dg-do preprocess } */ +/* { dg-options "-Werror=normalized" } */ + +\u0F43 // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." } + +/* { dg-prune-output "treated as errors" } */ -- 2.30.2