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
>From 0b1473e517373386e674c6736de5007960138d03 Mon Sep 17 00:00:00 2001 From: marxin <mli...@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 <mli...@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 <mli...@suse.cz> * c.opt: Make MPX-related options as Deprecated. gcc/testsuite/ChangeLog: 2018-06-08 Martin Liska <mli...@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