Hi!

On Tue, Dec 08, 2015 at 12:56:20PM +0100, Bernd Schmidt wrote:
> On 12/07/2015 11:41 PM, Jakub Jelinek wrote:
> >On Mon, Dec 07, 2015 at 04:11:48PM +0100, Bernd Schmidt wrote:
> >>Let's document arguments; for the ones identical to read_cmdline_option an
> >>explicit pointer there is sufficient, but errors is new.
> >
> >>This also needs an update to the function comment.
> >>
> >>Other than that I'm ok with this. This area could probably be restructured a
> >>bit but for now I think this is good enough.
> >
> >So like this?  Bootstrapped/regtested on x86_64-linux and i686-linux.
> 
> Yes, thanks.

Unfortunately, my patch broke some cases with warning aliases that happened
to work (by accident) and left some other warning alias cases broken.

This patch attempts to fix that (and add Warning keyword to two warning
aliases that didn't have it), so that -Werror= works even for them again.
As we do nothing beyond cancelling -Werror for -Wno-error=, there is no need
to deal with neg_alias_arg, just alias_arg is enough.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2015-12-11  Jakub Jelinek  <ja...@redhat.com>

        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.

--- gcc/common.opt.jj   2015-12-08 14:25:19.000000000 +0100
+++ gcc/common.opt      2015-12-11 16:29:30.257521500 +0100
@@ -612,7 +612,7 @@ Common Var(warn_unsafe_loop_optimization
 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
--- gcc/opts-common.c.jj        2015-12-08 14:25:19.000000000 +0100
+++ gcc/opts-common.c   2015-12-11 16:11:16.499755495 +0100
@@ -1361,7 +1361,13 @@ control_warning_option (unsigned int opt
                        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)
--- gcc/c-family/c.opt.jj       2015-12-11 09:24:38.000000000 +0100
+++ gcc/c-family/c.opt  2015-12-11 16:30:40.150547817 +0100
@@ -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
 ;
 
 Wnormalized
-C ObjC C++ ObjC++ Alias(Wnormalized=,nfc,none)
+C ObjC C++ ObjC++ Warning Alias(Wnormalized=,nfc,none)
 ;
 
 Wnormalized=
--- gcc/testsuite/c-c++-common/pr68833-1.c.jj   2015-12-11 16:15:14.053446857 
+0100
+++ gcc/testsuite/c-c++-common/pr68833-1.c      2015-12-11 16:33:41.593020133 
+0100
@@ -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" } */
--- gcc/testsuite/c-c++-common/pr68833-2.c.jj   2015-12-11 16:27:32.571160818 
+0100
+++ gcc/testsuite/c-c++-common/pr68833-2.c      2015-12-11 16:28:15.296565741 
+0100
@@ -0,0 +1,16 @@
+/* PR c/68833 */
+/* { dg-do compile } */
+/* { dg-options "-Werror=missing-format-attribute" } */
+
+#include <stdarg.h>
+
+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" } */
--- gcc/testsuite/c-c++-common/pr68833-3.c.jj   2015-12-11 16:38:53.803670711 
+0100
+++ gcc/testsuite/c-c++-common/pr68833-3.c      2015-12-11 16:41:28.699512849 
+0100
@@ -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" } */


        Jakub

Reply via email to