c/86134 avoid errors for unrecognized -Wno- options

Message ID nycvar.YFH.7.76.2002141204530.18835@zhemvz.fhfr.qr
State New
Headers show
Series
  • c/86134 avoid errors for unrecognized -Wno- options
Related show

Commit Message

Richard Biener Feb. 14, 2020, 12:02 p.m.
This makes sure to not promote diagnostics about unrecognized -Wno-
options to errors and make the intent of the diagnostic clearer.

Bootstrapped and tested on x86_64-unknown-linux-gnu, OK for trunk?

Thanks,
Richard.

2020-02-14  Richard Biener  <rguenther@suse.de>

	PR c/86134
	* opts-global.c (print_ignored_options): Use inform and
	amend message.

	* gcc.dg/pr86134.c: New testcase.
	* gcc.dg/pr28322-2.c: Adjust.

Comments

Joseph Myers Feb. 14, 2020, 10:10 p.m. | #1
On Fri, 14 Feb 2020, Richard Biener wrote:

> diff --git a/gcc/opts-global.c b/gcc/opts-global.c

> index d5e308bf800..52ea083a6d5 100644

> --- a/gcc/opts-global.c

> +++ b/gcc/opts-global.c

> @@ -139,8 +139,10 @@ print_ignored_options (void)

>        const char *opt;

>  

>        opt = ignored_options.pop ();

> -      warning_at (UNKNOWN_LOCATION, 0,

> -		  "unrecognized command-line option %qs", opt);

> +      /* Use inform, not warning_at, to avoid promoting these to errors.  */

> +      inform (UNKNOWN_LOCATION,

> +	      "unrecognized command-line option %qs may have silenced "

> +	      "earlier diagnostics", opt);


I agree with the principle of the patch, but I don't like the new message 
text.  I don't think "may have silenced" is right; maybe something more 
like "may have been intended to silence".

-- 
Joseph S. Myers
joseph@codesourcery.com
Richard Biener Feb. 17, 2020, 8:31 a.m. | #2
On Fri, 14 Feb 2020, Joseph Myers wrote:

> On Fri, 14 Feb 2020, Richard Biener wrote:

> 

> > diff --git a/gcc/opts-global.c b/gcc/opts-global.c

> > index d5e308bf800..52ea083a6d5 100644

> > --- a/gcc/opts-global.c

> > +++ b/gcc/opts-global.c

> > @@ -139,8 +139,10 @@ print_ignored_options (void)

> >        const char *opt;

> >  

> >        opt = ignored_options.pop ();

> > -      warning_at (UNKNOWN_LOCATION, 0,

> > -		  "unrecognized command-line option %qs", opt);

> > +      /* Use inform, not warning_at, to avoid promoting these to errors.  */

> > +      inform (UNKNOWN_LOCATION,

> > +	      "unrecognized command-line option %qs may have silenced "

> > +	      "earlier diagnostics", opt);

> 

> I agree with the principle of the patch, but I don't like the new message 

> text.  I don't think "may have silenced" is right; maybe something more 

> like "may have been intended to silence".


I've pushed the following variant then.

Thanks,
Richard.

From b0215b75a41ffdddb8a5fd5bcc16dcc455e69006 Mon Sep 17 00:00:00 2001
From: Richard Biener <rguenther@suse.de>

Date: Fri, 14 Feb 2020 10:25:11 +0100
Subject: [PATCH] c/86134 avoid errors for unrecognized -Wno- options

This makes sure to not promote diagnostics about unrecognized -Wno-
options to errors and make the intent of the diagnostic clearer.

2020-02-17  Richard Biener  <rguenther@suse.de>

	PR c/86134
	* opts-global.c (print_ignored_options): Use inform and
	amend message.

	* gcc.dg/pr86134.c: New testcase.
	* gcc.dg/pr28322-2.c: Adjust.

diff --git a/gcc/opts-global.c b/gcc/opts-global.c
index d5e308bf800..c658805470e 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -139,8 +139,10 @@ print_ignored_options (void)
       const char *opt;
 
       opt = ignored_options.pop ();
-      warning_at (UNKNOWN_LOCATION, 0,
-		  "unrecognized command-line option %qs", opt);
+      /* Use inform, not warning_at, to avoid promoting these to errors.  */
+      inform (UNKNOWN_LOCATION,
+	      "unrecognized command-line option %qs may have been intended "
+	      "to silence earlier diagnostics", opt);
     }
 }
 
diff --git a/gcc/testsuite/gcc.dg/pr28322-2.c b/gcc/testsuite/gcc.dg/pr28322-2.c
index c9e5e228a7b..20adf5e92b8 100644
--- a/gcc/testsuite/gcc.dg/pr28322-2.c
+++ b/gcc/testsuite/gcc.dg/pr28322-2.c
@@ -8,5 +8,5 @@ int foo (void)
   return i;
 }
 
-/* { dg-warning "unrecognized command-line option .-Wno-foobar." "" { target *-*-* } 0 } */
+/* { dg-message "unrecognized command-line option .-Wno-foobar." "" { target *-*-* } 0 } */
 
diff --git a/gcc/testsuite/gcc.dg/pr86134.c b/gcc/testsuite/gcc.dg/pr86134.c
new file mode 100644
index 00000000000..3fd21a32306
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr86134.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -Werror -Wno-error=main -Wno-foobar" } */
+
+void main() {} /* { dg-warning "return type" } */
+
+/* { dg-message "unrecognized command-line option" "" { target *-*-* } 0 } */

Patch

diff --git a/gcc/opts-global.c b/gcc/opts-global.c
index d5e308bf800..52ea083a6d5 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -139,8 +139,10 @@  print_ignored_options (void)
       const char *opt;
 
       opt = ignored_options.pop ();
-      warning_at (UNKNOWN_LOCATION, 0,
-		  "unrecognized command-line option %qs", opt);
+      /* Use inform, not warning_at, to avoid promoting these to errors.  */
+      inform (UNKNOWN_LOCATION,
+	      "unrecognized command-line option %qs may have silenced "
+	      "earlier diagnostics", opt);
     }
 }
 
diff --git a/gcc/testsuite/gcc.dg/pr28322-2.c b/gcc/testsuite/gcc.dg/pr28322-2.c
index c9e5e228a7b..20adf5e92b8 100644
--- a/gcc/testsuite/gcc.dg/pr28322-2.c
+++ b/gcc/testsuite/gcc.dg/pr28322-2.c
@@ -8,5 +8,5 @@  int foo (void)
   return i;
 }
 
-/* { dg-warning "unrecognized command-line option .-Wno-foobar." "" { target *-*-* } 0 } */
+/* { dg-message "unrecognized command-line option .-Wno-foobar." "" { target *-*-* } 0 } */
 
diff --git a/gcc/testsuite/gcc.dg/pr86134.c b/gcc/testsuite/gcc.dg/pr86134.c
new file mode 100644
index 00000000000..3fd21a32306
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr86134.c
@@ -0,0 +1,6 @@ 
+/* { dg-do compile } */
+/* { dg-options "-Wall -Werror -Wno-error=main -Wno-foobar" } */
+
+void main() {} /* { dg-warning "return type" } */
+
+/* { dg-message "unrecognized command-line option" "" { target *-*-* } 0 } */