Come up with Deprecated option flag.

Message ID a58f3de7-5d6c-2e30-4910-24db839e9260@suse.cz
State New
Headers show
Series
  • Come up with Deprecated option flag.
Related show

Commit Message

Martin Liška June 8, 2018, 11:09 a.m.
Hi.

First follow-up MPX removal patch comes up with Deprecated option flag.
That prints warning for options that have no effect:

$ ./xgcc -B. /tmp/main.c -Wchkp -static-libmpxwrappers
xgcc: warning: deprecated command line option ‘-static-libmpxwrappers’
cc1: warning: deprecated command line option ‘-Wchkp’

Is the string OK, or?

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Martin

Comments

Jeff Law June 11, 2018, 7:19 p.m. | #1
On 06/08/2018 05:09 AM, Martin Liška wrote:
> Hi.

> 

> First follow-up MPX removal patch comes up with Deprecated option flag.

> That prints warning for options that have no effect:

> 

> $ ./xgcc -B. /tmp/main.c -Wchkp -static-libmpxwrappers

> xgcc: warning: deprecated command line option ‘-static-libmpxwrappers’

> cc1: warning: deprecated command line option ‘-Wchkp’

> 

> Is the string OK, or?

> 

> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

> 

> Ready to be installed?

> Martin

> 

> 

> 0001-Come-up-with-Deprecated-option-flag.patch

> 

> 

> From 0b1473e517373386e674c6736de5007960138d03 Mon Sep 17 00:00:00 2001

> From: marxin <mliska@suse.cz>

> Date: Fri, 8 Jun 2018 10:52:23 +0200

> Subject: [PATCH] Come up with Deprecated option flag.

> 

> gcc/ChangeLog:

> 

> 2018-06-08  Martin Liska  <mliska@suse.cz>

> 

> 	* config/i386/i386.opt: Make MPX-related options as Deprecated.

> 	* opt-functions.awk: Handle Deprecated flag.

> 	* opts-common.c (decode_cmdline_option): Handle cl_deprecated

>         and report error.

> 	(read_cmdline_option): Report warning for a deprecated option.

> 	* opts.h (struct cl_option): Add new field cl_deprecated.

> 	(CL_ERR_DEPRECATED): New.

> 

> gcc/c-family/ChangeLog:

> 

> 2018-06-08  Martin Liska  <mliska@suse.cz>

> 

> 	* c.opt: Make MPX-related options as Deprecated.

> 

> gcc/testsuite/ChangeLog:

> 

> 2018-06-08  Martin Liska  <mliska@suse.cz>

> 

> 	* g++.dg/opt/mpx.C: New test.

> 	* gcc.target/i386/mpx.c: New test.

OK.
jeff
Paul Koning June 11, 2018, 7:33 p.m. | #2
> On Jun 8, 2018, at 7:09 AM, Martin Liška <mliska@suse.cz> wrote:

> 

> Hi.

> 

> First follow-up MPX removal patch comes up with Deprecated option flag.

> That prints warning for options that have no effect:


Should this be mentioned in the internals manual (section 8.2)?

	paul
Martin Liška June 12, 2018, 2:22 p.m. | #3
On 06/11/2018 09:33 PM, Paul Koning wrote:
> 

> 

>> On Jun 8, 2018, at 7:09 AM, Martin Liška <mliska@suse.cz> wrote:

>>

>> Hi.

>>

>> First follow-up MPX removal patch comes up with Deprecated option flag.

>> That prints warning for options that have no effect:

> 

> Should this be mentioned in the internals manual (section 8.2)?

> 

> 	paul

> 


Thanks for noticing that.
Done and installed as r261497.

Martin

Patch

From 0b1473e517373386e674c6736de5007960138d03 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Fri, 8 Jun 2018 10:52:23 +0200
Subject: [PATCH] Come up with Deprecated option flag.

gcc/ChangeLog:

2018-06-08  Martin Liska  <mliska@suse.cz>

	* config/i386/i386.opt: Make MPX-related options as Deprecated.
	* opt-functions.awk: Handle Deprecated flag.
	* opts-common.c (decode_cmdline_option): Handle cl_deprecated
        and report error.
	(read_cmdline_option): Report warning for a deprecated option.
	* opts.h (struct cl_option): Add new field cl_deprecated.
	(CL_ERR_DEPRECATED): New.

gcc/c-family/ChangeLog:

2018-06-08  Martin Liska  <mliska@suse.cz>

	* c.opt: Make MPX-related options as Deprecated.

gcc/testsuite/ChangeLog:

2018-06-08  Martin Liska  <mliska@suse.cz>

	* g++.dg/opt/mpx.C: New test.
	* gcc.target/i386/mpx.c: New test.
---
 gcc/c-family/c.opt                  | 42 ++++++++++++++---------------
 gcc/config/i386/i386.opt            |  2 +-
 gcc/opt-functions.awk               |  3 ++-
 gcc/opts-common.c                   | 10 +++++++
 gcc/opts.h                          |  3 +++
 gcc/testsuite/g++.dg/opt/mpx.C      |  5 ++++
 gcc/testsuite/gcc.target/i386/mpx.c |  3 +++
 7 files changed, 45 insertions(+), 23 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/opt/mpx.C
 create mode 100644 gcc/testsuite/gcc.target/i386/mpx.c

diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 1d7eafff1f7..b4aefd8d5f6 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -409,7 +409,7 @@  C ObjC C++ ObjC++ Var(warn_char_subscripts) Warning LangEnabledBy(C ObjC C++ Obj
 Warn about subscripts whose type is \"char\".
 
 Wchkp
-C ObjC C++ ObjC++ Var(warn_chkp) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
+C ObjC C++ ObjC++ Var(warn_chkp) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 Wclobbered
@@ -1259,86 +1259,86 @@  C ObjC C++ ObjC++
 Where shorter, use canonicalized paths to systems headers.
 
 fcheck-pointer-bounds
-C ObjC C++ ObjC++ LTO Report Var(flag_check_pointer_bounds)
+C ObjC C++ ObjC++ LTO Report Var(flag_check_pointer_bounds) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-check-incomplete-type
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_incomplete_type) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_incomplete_type) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-zero-input-bounds-for-main
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_zero_input_bounds_for_main) Init(0)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_zero_input_bounds_for_main) Init(0) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-first-field-has-own-bounds
-C ObjC C++ ObjC++ LTO RejectNegative Report Var(flag_chkp_first_field_has_own_bounds)
+C ObjC C++ ObjC++ LTO RejectNegative Report Var(flag_chkp_first_field_has_own_bounds) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-narrow-bounds
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_narrow_bounds) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_narrow_bounds) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-narrow-to-innermost-array
-C ObjC C++ ObjC++ LTO RejectNegative Report Var(flag_chkp_narrow_to_innermost_arrray)
+C ObjC C++ ObjC++ LTO RejectNegative Report Var(flag_chkp_narrow_to_innermost_arrray) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-flexible-struct-trailing-arrays
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_flexible_struct_trailing_arrays)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_flexible_struct_trailing_arrays) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-optimize
 C ObjC C++ ObjC++ LTO Report Var(flag_chkp_optimize) Init(-1)
 
 fchkp-use-fast-string-functions
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_fast_string_functions) Init(0)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_fast_string_functions) Init(0) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-use-nochk-string-functions
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_nochk_string_functions) Init(0)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_nochk_string_functions) Init(0) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-use-static-bounds
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_static_bounds) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_static_bounds) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-use-static-const-bounds
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_static_const_bounds) Init(-1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_static_const_bounds) Init(-1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-treat-zero-dynamic-size-as-infinite
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_zero_dynamic_size_as_infinite) Init(0)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_zero_dynamic_size_as_infinite) Init(0) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-check-read
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_check_read) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_check_read) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-check-write
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_check_write) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_check_write) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-store-bounds
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_store_bounds) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_store_bounds) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-instrument-calls
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_instrument_calls) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_instrument_calls) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-instrument-marked-only
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_instrument_marked_only) Init(0)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_instrument_marked_only) Init(0) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fchkp-use-wrappers
-C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_wrappers) Init(1)
+C ObjC C++ ObjC++ LTO Report Var(flag_chkp_use_wrappers) Init(1) Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 static-libmpx
-Driver
+Driver Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 static-libmpxwrappers
-Driver
+Driver Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 fcilkplus Undocumented
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index 01a0385dfa4..a34d4acf1a2 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -951,7 +951,7 @@  Target Report Mask(ISA_RTM) Var(ix86_isa_flags) Save
 Support RTM built-in functions and code generation.
 
 mmpx
-Target Report
+Target Report Deprecated
 Deprecated in GCC 9.  This switch has no effect.
 
 mmwaitx
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
index 819a9629ab9..2c371e5a23a 100644
--- a/gcc/opt-functions.awk
+++ b/gcc/opt-functions.awk
@@ -136,7 +136,8 @@  function switch_bit_fields (flags)
 	  flag_init("UInteger", flags) \
 	  flag_init("Host_Wide_Int", hwi) \
 	  flag_init("ToLower", flags) \
-	  flag_init("Report", flags)
+	  flag_init("Report", flags) \
+	  flag_init("Deprecated", flags)
 
 	sub(", $", "", result)
 	return result
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index c6b94188b40..004da73e614 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -667,6 +667,10 @@  decode_cmdline_option (const char **argv, unsigned int lang_mask,
   if (!option_ok_for_language (option, lang_mask))
     errors |= CL_ERR_WRONG_LANG;
 
+  /* Mark all deprecated options.  */
+  if (option->cl_deprecated)
+    errors |= CL_ERR_DEPRECATED;
+
   /* Convert the argument to lowercase if appropriate.  */
   if (arg && option->cl_tolower)
     {
@@ -1250,6 +1254,12 @@  read_cmdline_option (struct gcc_options *opts,
       return;
     }
 
+  if (decoded->errors & CL_ERR_DEPRECATED)
+    {
+      warning_at (loc, 0, "deprecated command line option %qs", opt);
+      return;
+    }
+
   gcc_assert (!decoded->errors);
 
   if (!handle_option (opts, opts_set, decoded, lang_mask, DK_UNSPECIFIED,
diff --git a/gcc/opts.h b/gcc/opts.h
index 484fc1c39d9..3c4065eae92 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -100,6 +100,8 @@  struct cl_option
   BOOL_BITFIELD cl_tolower : 1;
   /* Report argument with -fverbose-asm  */
   BOOL_BITFIELD cl_report : 1;
+  /* Deprecated option  */
+  BOOL_BITFIELD cl_deprecated: 1;
   /* Offset of field for this option in struct gcc_options, or
      (unsigned short) -1 if none.  */
   unsigned short flag_var_offset;
@@ -209,6 +211,7 @@  extern const unsigned int cl_enums_count;
 #define CL_ERR_NEGATIVE		(1 << 6) /* Negative form of option
 					    not permitted (together
 					    with OPT_SPECIAL_unknown).  */
+#define CL_ERR_DEPRECATED	(1 << 7) /* Deprecated option.  */
 
 /* Structure describing the result of decoding an option.  */
 
diff --git a/gcc/testsuite/g++.dg/opt/mpx.C b/gcc/testsuite/g++.dg/opt/mpx.C
new file mode 100644
index 00000000000..6ae0cef8790
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/mpx.C
@@ -0,0 +1,5 @@ 
+// { dg-do compile }
+// { dg-options "-fcheck-pointer-bounds -fchkp-first-field-has-own-bounds" }
+
+// { dg-warning "deprecated command line option .-fcheck-pointer-bounds." "" { target *-*-* } 0 }
+// { dg-warning "deprecated command line option .-fchkp-first-field-has-own-bounds." "" { target *-*-* } 0 }
diff --git a/gcc/testsuite/gcc.target/i386/mpx.c b/gcc/testsuite/gcc.target/i386/mpx.c
new file mode 100644
index 00000000000..f152ae94ecb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mpx.c
@@ -0,0 +1,3 @@ 
+/* { dg-do compile } */
+// { dg-options "-mmpx" }
+// { dg-warning "deprecated command line option .-mmpx." "" { target *-*-* } 0 }
-- 
2.17.0