OSDN Git Service

* opts.h (struct cl_option): Add warn_message field.
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Sep 2010 11:43:19 +0000 (11:43 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Sep 2010 11:43:19 +0000 (11:43 +0000)
(struct cl_decoded_option): Add warn_message field.
* doc/options.texi (Ignore, Warn): Document.
* opt-functions.awk (needs_state_p): Don't consider aliases or
ignored options to need state saved.
* optc-gen.awk: Handle Warn and Ignore.
* opth-gen.awk: Output OPT_SPECIAL_ignore.
* opts-common.c (decode_cmdline_option): Set warn_message field.
Handle ignored options.
(decode_cmdline_options_to_array, generate_option,
generate_option_input_file): Set warn_message field.
(read_cmdline_option): Generate warnings from warn_message field.
Handle ignored options.
* common.opt (Wunreachable-code, fargument-alias,
fargument-noalias, fargument-noalias-global,
fargument-noalias-anything, fcse-skip-blocks, fforce-addr,
floop-optimize, frerun-loop-opt, fsched2-use-traces, fsee,
fstrength-reduce, ftree-store-ccp, ftree-store-copy-prop,
ftree-salias): Mark Ignore.
* config/i386/i386.h (CC1_CPU_SPEC_1): Don't handle -mcpu,
-mintel-syntax and -mno-intel-syntax here.
* config/i386/i386.opt (mcpu=, mintel-syntax): Define as aliases
using Warn.
* opts.c (common_handle_option): Don't handle options marked as
ignored.
(enable_warning_as_error): Handle ignored options.

c-family:
* c.opt (Wimport, fall-virtual, falt-external-templates,
fdefault-inline, fenum-int-equiv, fexternal-templates,
fguiding-decls, fhonor-std, fhuge-objects, flabels-ok,
fname-mangling-version-, fnew-abi, fnonnull-objects,
foptional-diags, fsquangle, fstrict-prototype, fthis-is-variable,
fvtable-gc, fvtable-thunks, fxref): Mark with Ignore and Warn as
applicable.
(fhandle-exceptions): Mark with Alias and Warn.
* c-opts.c (c_common_handle_option): Don't handle options marked
as ignored.

po:
* exgettext: Handle {} in operand of MissingArgError.  Handle
Warn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163771 138bc75d-0d04-0410-961f-82ee72b054a4

16 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/c-family/c.opt
gcc/common.opt
gcc/config/i386/i386.h
gcc/config/i386/i386.opt
gcc/doc/options.texi
gcc/opt-functions.awk
gcc/optc-gen.awk
gcc/opth-gen.awk
gcc/opts-common.c
gcc/opts.c
gcc/opts.h
gcc/po/ChangeLog
gcc/po/exgettext

index 3baa67a..fc2ceb1 100644 (file)
@@ -1,5 +1,34 @@
 2010-09-02  Joseph Myers  <joseph@codesourcery.com>
 
+       * opts.h (struct cl_option): Add warn_message field.
+       (struct cl_decoded_option): Add warn_message field.
+       * doc/options.texi (Ignore, Warn): Document.
+       * opt-functions.awk (needs_state_p): Don't consider aliases or
+       ignored options to need state saved.
+       * optc-gen.awk: Handle Warn and Ignore.
+       * opth-gen.awk: Output OPT_SPECIAL_ignore.
+       * opts-common.c (decode_cmdline_option): Set warn_message field.
+       Handle ignored options.
+       (decode_cmdline_options_to_array, generate_option,
+       generate_option_input_file): Set warn_message field.
+       (read_cmdline_option): Generate warnings from warn_message field.
+       Handle ignored options.
+       * common.opt (Wunreachable-code, fargument-alias,
+       fargument-noalias, fargument-noalias-global,
+       fargument-noalias-anything, fcse-skip-blocks, fforce-addr,
+       floop-optimize, frerun-loop-opt, fsched2-use-traces, fsee,
+       fstrength-reduce, ftree-store-ccp, ftree-store-copy-prop,
+       ftree-salias): Mark Ignore.
+       * config/i386/i386.h (CC1_CPU_SPEC_1): Don't handle -mcpu,
+       -mintel-syntax and -mno-intel-syntax here.
+       * config/i386/i386.opt (mcpu=, mintel-syntax): Define as aliases
+       using Warn.
+       * opts.c (common_handle_option): Don't handle options marked as
+       ignored.
+       (enable_warning_as_error): Handle ignored options.
+
+2010-09-02  Joseph Myers  <joseph@codesourcery.com>
+
        PR driver/44076
        * opts.h (struct cl_option): Add alias_arg, neg_alias_arg and
        alias_target fields.
index dac0bf4..56fef0b 100644 (file)
@@ -1,5 +1,18 @@
 2010-09-02  Joseph Myers  <joseph@codesourcery.com>
 
+       * c.opt (Wimport, fall-virtual, falt-external-templates,
+       fdefault-inline, fenum-int-equiv, fexternal-templates,
+       fguiding-decls, fhonor-std, fhuge-objects, flabels-ok,
+       fname-mangling-version-, fnew-abi, fnonnull-objects,
+       foptional-diags, fsquangle, fstrict-prototype, fthis-is-variable,
+       fvtable-gc, fvtable-thunks, fxref): Mark with Ignore and Warn as
+       applicable.
+       (fhandle-exceptions): Mark with Alias and Warn.
+       * c-opts.c (c_common_handle_option): Don't handle options marked
+       as ignored.
+
+2010-09-02  Joseph Myers  <joseph@codesourcery.com>
+
        * c.opt (Wcomments, Werror-implicit-function-declaration,
        ftemplate-depth-, std=c89, std=c9x, std=gnu89, std=gnu9x,
        std=iso9899:1990, std=iso9899:1999, std=iso9899:199x): Mark as
index d9b212c..e641ad0 100644 (file)
@@ -537,10 +537,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
                                 value, c_family_lang_mask, kind, handlers);
       break;
 
-    case OPT_Wimport:
-      /* Silently ignore for now.  */
-      break;
-
     case OPT_Winvalid_pch:
       cpp_opts->warn_invalid_pch = value;
       break;
@@ -623,25 +619,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
          flag_cond_mismatch = value;
          break;
        }
-      /* Fall through.  */
-
-    case OPT_fall_virtual:
-    case OPT_falt_external_templates:
-    case OPT_fenum_int_equiv:
-    case OPT_fexternal_templates:
-    case OPT_fguiding_decls:
-    case OPT_fhonor_std:
-    case OPT_fhuge_objects:
-    case OPT_flabels_ok:
-    case OPT_fname_mangling_version_:
-    case OPT_fnew_abi:
-    case OPT_fnonnull_objects:
-    case OPT_fsquangle:
-    case OPT_fstrict_prototype:
-    case OPT_fthis_is_variable:
-    case OPT_fvtable_thunks:
-    case OPT_fxref:
-    case OPT_fvtable_gc:
       warning (0, "switch %qs is no longer supported", option->opt_text);
       break;
 
@@ -672,10 +649,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
       constant_string_class_name = arg;
       break;
 
-    case OPT_fdefault_inline:
-      /* Ignore.  */
-      break;
-
     case OPT_fextended_identifiers:
       cpp_opts->extended_identifiers = value;
       break;
@@ -684,11 +657,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
       flag_next_runtime = !value;
       break;
 
-    case OPT_fhandle_exceptions:
-      warning (0, "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)");
-      flag_exceptions = value;
-      break;
-
     case OPT_fnext_runtime:
       flag_next_runtime = value;
       break;
@@ -697,10 +665,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
       cpp_opts->operator_names = value;
       break;
 
-    case OPT_foptional_diags:
-      /* Ignore.  */
-      break;
-
     case OPT_fpch_deps:
       cpp_opts->restore_pch_deps = value;
       break;
index 5cba0de..f10cc48 100644 (file)
@@ -275,7 +275,7 @@ C ObjC Var(warn_implicit_int) Init(-1) Warning
 Warn when a declaration does not specify a type
 
 Wimport
-C ObjC C++ ObjC++ Undocumented
+C ObjC C++ ObjC++ Undocumented Ignore
 
 Wint-to-pointer-cast
 C ObjC C++ ObjC++ Var(warn_int_to_pointer_cast) Init(1) Warning
@@ -534,10 +534,10 @@ C++ ObjC++ Var(flag_access_control) Init(1)
 Enforce class member access control semantics
 
 fall-virtual
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 falt-external-templates
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 Change when template instances are emitted
 
 fasm
@@ -572,7 +572,7 @@ C++ ObjC++ Var(flag_deduce_init_list) Init(1)
 -fno-deduce-init-list  disable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list
 
 fdefault-inline
-C++ ObjC++
+C++ ObjC++ Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fdirectives-only
@@ -591,7 +591,7 @@ C++ ObjC++ Var(flag_enforce_eh_specs) Init(1)
 Generate code to check exception specifications
 
 fenum-int-equiv
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fexec-charset=
 C ObjC C++ ObjC++ Joined RejectNegative
@@ -607,7 +607,7 @@ C ObjC C++ ObjC++ Joined RejectNegative
 
 
 fexternal-templates
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 ffor-scope
 C++ ObjC++ Var(flag_new_for_scope) Init(1)
@@ -630,20 +630,20 @@ C ObjC Var(flag_gnu89_inline) Init(-1)
 Use traditional GNU semantics for inline functions
 
 fguiding-decls
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fhandle-exceptions
-C++ ObjC++ Optimization
+C++ ObjC++ Optimization Alias(fexceptions) Warn({-fhandle-exceptions has been renamed -fexceptions (and is now on by default)})
 
 fhonor-std
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fhosted
 C ObjC
 Assume normal C execution environment
 
 fhuge-objects
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 Enable support for huge objects
 
 fimplement-inlines
@@ -663,7 +663,7 @@ C++ ObjC++ Var(flag_friend_injection)
 Inject friend functions into enclosing namespace
 
 flabels-ok
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 flax-vector-conversions
 C ObjC C++ ObjC++ Var(flag_lax_vector_conversions)
@@ -674,10 +674,10 @@ C ObjC C++ ObjC++ Var(flag_ms_extensions)
 Don't warn about uses of Microsoft extensions
 
 fname-mangling-version-
-C++ ObjC++ Joined
+C++ ObjC++ Joined Ignore Warn(switch %qs is no longer supported)
 
 fnew-abi
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fnext-runtime
 ObjC ObjC++
@@ -691,7 +691,7 @@ fnonansi-builtins
 C++ ObjC++ Var(flag_no_nonansi_builtin, 0)
 
 fnonnull-objects
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fnothrow-opt
 C++ ObjC++ Optimization Var(flag_nothrow_opt)
@@ -731,7 +731,7 @@ C++ ObjC++
 Recognize C++ keywords like \"compl\" and \"xor\"
 
 foptional-diags
-C++ ObjC++
+C++ ObjC++ Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fpch-deps
@@ -786,7 +786,7 @@ C ObjC C++ ObjC++ LTO Var(flag_signed_char)
 Make \"char\" signed by default
 
 fsquangle
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fstats
 C++ ObjC++ Var(flag_detailed_statistics)
@@ -797,7 +797,7 @@ C++ ObjC++ Optimization Var(flag_strict_enums)
 Assume that values of enumeration type are always within the minimum range of that type
 
 fstrict-prototype
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 ftabstop=
 C ObjC C++ ObjC++ Joined RejectNegative UInteger
@@ -811,7 +811,7 @@ C++ ObjC++ Joined RejectNegative UInteger
 -ftemplate-depth=<number>      Specify maximum template instantiation depth
 
 fthis-is-variable
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 
 fthreadsafe-statics
 C++ ObjC++ Optimization Var(flag_threadsafe_statics) Init(1)
@@ -842,11 +842,11 @@ C++ ObjC++ Var(flag_visibility_ms_compat)
 Changes visibility to match Microsoft Visual Studio by default
 
 fvtable-gc
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 Discard unused virtual functions
 
 fvtable-thunks
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 Implement vtables using thunks
 
 fweak
@@ -862,7 +862,7 @@ C ObjC C++ ObjC++ Var(flag_working_directory) Init(-1)
 Generate a #line directive pointing at the current working directory
 
 fxref
-C++ ObjC++
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
 Emit cross referencing information
 
 fzero-link
index d30e41c..c5be49e 100644 (file)
@@ -248,7 +248,7 @@ Common Var(warn_uninitialized) Init(-1) Warning
 Warn about uninitialized automatic variables
 
 Wunreachable-code
-Common
+Common Ignore
 Does nothing. Preserved for backward compatibility.
 
 Wunused
@@ -387,19 +387,19 @@ falign-loops=
 Common RejectNegative Joined UInteger
 
 fargument-alias
-Common
+Common Ignore
 Does nothing. Preserved for backward compatibility.
 
 fargument-noalias
-Common
+Common Ignore
 Does nothing. Preserved for backward compatibility.
 
 fargument-noalias-global
-Common
+Common Ignore
 Does nothing. Preserved for backward compatibility.
 
 fargument-noalias-anything
-Common
+Common Ignore
 Does nothing. Preserved for backward compatibility.
 
 fasynchronous-unwind-tables
@@ -490,7 +490,7 @@ Common Report Var(flag_cse_follow_jumps) Optimization
 When running CSE, follow jumps to their targets
 
 fcse-skip-blocks
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fcx-limited-range
@@ -619,7 +619,7 @@ Common Report Var(flag_float_store) Optimization
 Don't allocate floats and doubles in extended-precision registers
 
 fforce-addr
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fforward-propagate
@@ -852,7 +852,7 @@ Common Report Var(flag_leading_underscore) Init(-1)
 Give external symbols a leading underscore
 
 floop-optimize
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 flto
@@ -1098,7 +1098,7 @@ Common Report Var(flag_rerun_cse_after_loop) Init(2) Optimization
 Add a common subexpression elimination pass after loop optimizations
 
 frerun-loop-opt
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 frounding-math
@@ -1134,7 +1134,7 @@ Common Report Var(flag_sched2_use_superblocks) Optimization
 If scheduling post reload, do superblock scheduling
 
 fsched2-use-traces
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fschedule-insns
@@ -1219,7 +1219,7 @@ Common Report Var(flag_section_anchors) Optimization
 Access data in the same section from shared anchor points
 
 fsee
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 fzee
@@ -1286,7 +1286,7 @@ Common RejectNegative Var(flag_stack_usage)
 Output stack usage information on a per-function basis
 
 fstrength-reduce
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 ; Nonzero if we should do (language-dependent) alias analysis.
@@ -1349,7 +1349,7 @@ Common Report Var(flag_tree_bit_ccp) Optimization
 Enable SSA-BIT-CCP optimization on trees
 
 ftree-store-ccp
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 ftree-ch
@@ -1365,7 +1365,7 @@ Common Report Var(flag_tree_copy_prop) Optimization
 Enable copy propagation on trees
 
 ftree-store-copy-prop
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 ftree-cselim
@@ -1441,7 +1441,7 @@ Common Report Var(flag_tree_reassoc) Init(1) Optimization
 Enable reassociation on tree level
 
 ftree-salias
-Common
+Common Ignore
 Does nothing.  Preserved for backward compatibility.
 
 ftree-sink
index ea36c11..5bd4153 100644 (file)
@@ -555,15 +555,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 
 #ifndef CC1_CPU_SPEC
 #define CC1_CPU_SPEC_1 "\
-%{mcpu=*:-mtune=%* \
-%n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.\n} \
-%<mcpu=* \
-%{mintel-syntax:-masm=intel \
-%n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.\n} \
 %{msse5:-mavx \
-%n'-msse5' was removed.\n} \
-%{mno-intel-syntax:-masm=att \
-%n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.\n}"
+%n'-msse5' was removed.\n}"
 
 #ifndef HAVE_LOCAL_CPU_DETECT
 #define CC1_CPU_SPEC CC1_CPU_SPEC_1
index 236082d..8009830 100644 (file)
@@ -1,6 +1,7 @@
 ; Options for the IA-32 and AMD64 ports of the compiler.
 
-; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+; Copyright (C) 2005, 2006, 2007, 2008, 2009,
+; 2010 Free Software Foundation, Inc.
 ;
 ; This file is part of GCC.
 ;
@@ -112,6 +113,9 @@ mcmodel=
 Target RejectNegative Joined Var(ix86_cmodel_string)
 Use given x86-64 code model
 
+mcpu=
+Target RejectNegative Joined Undocumented Alias(mtune=) Warn(%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead)
+
 mfancy-math-387
 Target RejectNegative Report InverseMask(NO_FANCY_MATH_387, USE_FANCY_MATH_387) Save
 Generate sin, cos, sqrt for FPU
@@ -145,7 +149,7 @@ Target Report Mask(INLINE_STRINGOPS_DYNAMICALLY) Save
 Inline memset/memcpy string operations, but perform inline version only for small blocks
 
 mintel-syntax
-Target Undocumented
+Target Undocumented Alias(masm=, intel, att) Warn(%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead)
 ;; Deprecated
 
 mms-bitfields
index 46610f0..d7a18af 100644 (file)
@@ -273,6 +273,19 @@ not need to handle it and no @samp{OPT_} enumeration value is defined
 for it; only the canonical form of the option will be seen in those
 places.
 
+@item Ignore
+This option is ignored apart from printing any warning specified using
+@code{Warn}.  The option will not be seen by specs and no @samp{OPT_}
+enumeration value is defined for it.
+
+@item Warn(@var{message})
+If this option is used, output the warning @var{message}.
+@var{message} is a format string, either taking a single operand with
+a @samp{%qs} format which is the option name, or not taking any
+operands, which is passed to the @samp{warning} function.  If an alias
+is marked @code{Warn}, the target of the alias must not also be marked
+@code{Warn}.
+
 @item Report
 The state of the option should be printed by @option{-fverbose-asm}.
 
index c57a769..94816a2 100644 (file)
@@ -114,7 +114,9 @@ function global_state_p(flags)
 # associated with it.
 function needs_state_p(flags)
 {
-       return flag_set_p("Target", flags)
+       return (flag_set_p("Target", flags) \
+               && !flag_set_p("Alias.*", flags) \
+               && !flag_set_p("Ignore", flags))
 }
 
 # If FLAGS describes an option that needs a static state variable,
index 4376d72..bee780c 100644 (file)
@@ -201,9 +201,19 @@ for (i = 0; i < n_opts; i++) {
        else
                missing_arg_error = quote missing_arg_error quote
 
+
+       warn_message = opt_args("Warn", flags[i])
+       if (warn_message == "")
+               warn_message = "0"
+       else
+               warn_message = quote warn_message quote
+
        alias_arg = opt_args("Alias", flags[i])
        if (alias_arg == "") {
-               alias_data = "NULL, NULL, N_OPTS"
+               if (flag_set_p("Ignore", flags[i]))
+                       alias_data = "NULL, NULL, OPT_SPECIAL_ignore"
+               else
+                       alias_data = "NULL, NULL, N_OPTS"
        } else {
                alias_opt = nth_arg(0, alias_arg)
                alias_posarg = nth_arg(1, alias_arg)
@@ -246,8 +256,8 @@ for (i = 0; i < n_opts; i++) {
        }
        # Split the printf after %u to work around an ia64-hp-hpux11.23
        # awk bug.
-       printf("  { %c-%s%c,\n    %s,\n    %s,\n    %s, %s, %u,",
-              quote, opts[i], quote, hlp, missing_arg_error,
+       printf("  { %c-%s%c,\n    %s,\n    %s,\n    %s,\n    %s, %s, %u,",
+              quote, opts[i], quote, hlp, missing_arg_error, warn_message,
               alias_data, back_chain[i], len)
        printf(" %d,\n", idx)
        condition = opt_args("Condition", flags[i])
index cfeccfe..9d3ea9e 100644 (file)
@@ -369,6 +369,7 @@ for (i = 0; i < n_opts; i++) {
 
 print "  N_OPTS,"
 print "  OPT_SPECIAL_unknown,"
+print "  OPT_SPECIAL_ignore,"
 print "  OPT_SPECIAL_program_name,"
 print "  OPT_SPECIAL_input_file"
 print "};"
index 0775896..40822a7 100644 (file)
@@ -214,6 +214,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
   char *p;
   const struct cl_option *option;
   int errors = 0;
+  const char *warn_message = NULL;
   bool separate_arg_flag;
   bool joined_arg_flag;
 
@@ -254,6 +255,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
       goto done;
     }
 
+  warn_message = option->warn_message;
+
   /* Check to see if the option is disabled for this configuration.  */
   if (option->flags & CL_DISABLED)
     errors |= CL_ERR_DISABLED;
@@ -300,55 +303,73 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
   if (arg == NULL && (separate_arg_flag || joined_arg_flag))
     errors |= CL_ERR_MISSING_ARG;
 
-  /* Is this option an alias?  */
+  /* Is this option an alias (or an ignored option, marked as an alias
+     of OPT_SPECIAL_ignore)?  */
   if (option->alias_target != N_OPTS)
     {
       size_t new_opt_index = option->alias_target;
-      const struct cl_option *new_option = &cl_options[new_opt_index];
-
-      /* The new option must not be an alias itself.  */
-      gcc_assert (new_option->alias_target == N_OPTS);
 
-      if (option->neg_alias_arg)
+      if (new_opt_index == OPT_SPECIAL_ignore)
        {
-         gcc_assert (option->alias_arg != NULL);
-         gcc_assert (arg == NULL);
-         if (value)
-           arg = option->alias_arg;
-         else
-           arg = option->neg_alias_arg;
+         gcc_assert (option->alias_arg == NULL);
+         gcc_assert (option->neg_alias_arg == NULL);
+         opt_index = new_opt_index;
+         arg = NULL;
          value = 1;
        }
-      else if (option->alias_arg)
+      else
        {
-         gcc_assert (value == 1);
-         gcc_assert (arg == NULL);
-         arg = option->alias_arg;
-       }
+         const struct cl_option *new_option = &cl_options[new_opt_index];
 
-      opt_index = new_opt_index;
-      option = new_option;
+         /* The new option must not be an alias itself.  */
+         gcc_assert (new_option->alias_target == N_OPTS);
 
-      if (value == 0)
-       gcc_assert (!(option->flags & CL_REJECT_NEGATIVE));
+         if (option->neg_alias_arg)
+           {
+             gcc_assert (option->alias_arg != NULL);
+             gcc_assert (arg == NULL);
+             if (value)
+               arg = option->alias_arg;
+             else
+               arg = option->neg_alias_arg;
+             value = 1;
+           }
+         else if (option->alias_arg)
+           {
+             gcc_assert (value == 1);
+             gcc_assert (arg == NULL);
+             arg = option->alias_arg;
+           }
 
-      /* Recompute what arguments are allowed.  */
-      separate_arg_flag = ((option->flags & CL_SEPARATE)
-                          && !((option->flags & CL_NO_DRIVER_ARG)
-                               && (lang_mask & CL_DRIVER)));
-      joined_arg_flag = (option->flags & CL_JOINED) != 0;
+         opt_index = new_opt_index;
+         option = new_option;
 
-      if (!(errors & CL_ERR_MISSING_ARG))
-       {
-         if (separate_arg_flag || joined_arg_flag)
-           gcc_assert (arg != NULL);
-         else
-           gcc_assert (arg == NULL);
-       }
+         if (value == 0)
+           gcc_assert (!(option->flags & CL_REJECT_NEGATIVE));
+
+         /* Recompute what arguments are allowed.  */
+         separate_arg_flag = ((option->flags & CL_SEPARATE)
+                              && !((option->flags & CL_NO_DRIVER_ARG)
+                                   && (lang_mask & CL_DRIVER)));
+         joined_arg_flag = (option->flags & CL_JOINED) != 0;
+
+         if (!(errors & CL_ERR_MISSING_ARG))
+           {
+             if (separate_arg_flag || joined_arg_flag)
+               gcc_assert (arg != NULL);
+             else
+               gcc_assert (arg == NULL);
+           }
 
-      /* Recheck for disabled options.  */
-      if (option->flags & CL_DISABLED)
-       errors |= CL_ERR_DISABLED;
+         /* Recheck for warnings and disabled options.  */
+         if (option->warn_message)
+           {
+             gcc_assert (warn_message == NULL);
+             warn_message = option->warn_message;
+           }
+         if (option->flags & CL_DISABLED)
+           errors |= CL_ERR_DISABLED;
+       }
     }
 
   /* Check if this is a switch for a different front end.  */
@@ -370,6 +391,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
   decoded->arg = arg;
   decoded->value = value;
   decoded->errors = errors;
+  decoded->warn_message = warn_message;
 
   if (opt_index == OPT_SPECIAL_unknown)
     {
@@ -408,7 +430,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
       else
        decoded->canonical_option[i] = NULL;
     }
-  if (opt_index != OPT_SPECIAL_unknown)
+  if (opt_index != OPT_SPECIAL_unknown && opt_index != OPT_SPECIAL_ignore)
     generate_canonical_option (opt_index, arg, value, decoded);
   decoded->orig_option_with_args_text = p = XNEWVEC (char, total_len);
   for (i = 0; i < result; i++)
@@ -448,6 +470,7 @@ decode_cmdline_options_to_array (unsigned int argc, const char **argv,
   opt_array = XNEWVEC (struct cl_decoded_option, argc);
 
   opt_array[0].opt_index = OPT_SPECIAL_program_name;
+  opt_array[0].warn_message = NULL;
   opt_array[0].arg = argv[0];
   opt_array[0].orig_option_with_args_text = argv[0];
   opt_array[0].canonical_option_num_elements = 1;
@@ -678,6 +701,7 @@ generate_option (size_t opt_index, const char *arg, int value,
   const struct cl_option *option = &cl_options[opt_index];
 
   decoded->opt_index = opt_index;
+  decoded->warn_message = NULL;
   decoded->arg = arg;
   decoded->value = value;
   decoded->errors = (option_ok_for_language (option, lang_mask)
@@ -709,6 +733,7 @@ generate_option_input_file (const char *file,
                            struct cl_decoded_option *decoded)
 {
   decoded->opt_index = OPT_SPECIAL_input_file;
+  decoded->warn_message = NULL;
   decoded->arg = file;
   decoded->orig_option_with_args_text = file;
   decoded->canonical_option_num_elements = 1;
@@ -729,7 +754,10 @@ read_cmdline_option (struct cl_decoded_option *decoded,
                     const struct cl_option_handlers *handlers)
 {
   const struct cl_option *option;
-  const char *opt;
+  const char *opt = decoded->orig_option_with_args_text;
+
+  if (decoded->warn_message)
+    warning (0, decoded->warn_message, opt);
 
   if (decoded->opt_index == OPT_SPECIAL_unknown)
     {
@@ -738,8 +766,10 @@ read_cmdline_option (struct cl_decoded_option *decoded,
       return;
     }
 
+  if (decoded->opt_index == OPT_SPECIAL_ignore)
+    return;
+
   option = &cl_options[decoded->opt_index];
-  opt = decoded->orig_option_with_args_text;
 
   if (decoded->errors & CL_ERR_DISABLED)
     {
index ab7b45d..e59332f 100644 (file)
@@ -2081,24 +2081,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
       global_dc->inhibit_warnings = true;
       break;
 
-    case OPT_fsee:
-    case OPT_fcse_skip_blocks:
-    case OPT_floop_optimize:
-    case OPT_frerun_loop_opt:
-    case OPT_fsched2_use_traces:
-    case OPT_fstrength_reduce:
-    case OPT_ftree_store_copy_prop:
-    case OPT_fforce_addr:
-    case OPT_ftree_salias:
-    case OPT_ftree_store_ccp:
-    case OPT_Wunreachable_code:
-    case OPT_fargument_alias:
-    case OPT_fargument_noalias:
-    case OPT_fargument_noalias_anything:
-    case OPT_fargument_noalias_global:
-      /* These are no-ops, preserved for backward compatibility.  */
-      break;
-
     case OPT_fuse_linker_plugin:
       /* No-op. Used by the driver and passed to us because it starts with f.*/
       break;
@@ -2363,6 +2345,8 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask,
 
       if (option->alias_target != N_OPTS)
        option_index = option->alias_target;
+      if (option_index == OPT_SPECIAL_ignore)
+       return;
       diagnostic_classify_diagnostic (global_dc, option_index, kind,
                                      UNKNOWN_LOCATION);
       if (kind == DK_ERROR)
index f3e0144..09e305b 100644 (file)
@@ -45,6 +45,7 @@ struct cl_option
   const char *opt_text;
   const char *help;
   const char *missing_argument_error;
+  const char *warn_message;
   const char *alias_arg;
   const char *neg_alias_arg;
   unsigned short alias_target;
@@ -117,6 +118,9 @@ struct cl_decoded_option
      non-options and unknown options.  */
   size_t opt_index;
 
+  /* Any warning to give for use of this option, or NULL if none.  */
+  const char *warn_message;
+
   /* The string argument, or NULL if none.  For OPT_SPECIAL_* cases,
      the option or non-option command-line argument.  */
   const char *arg;
index 75200f8..66d0152 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-02  Joseph Myers  <joseph@codesourcery.com>
+
+       * exgettext: Handle {} in operand of MissingArgError.  Handle
+       Warn.
+
 2010-07-27  Joseph Myers  <joseph@codesourcery.com>
 
        * exgettext: Also extract MissingArgError texts from .opt files.
index c3d9244..6cc9156 100644 (file)
@@ -226,7 +226,22 @@ echo "scanning option files..." >&2
            if ((field == 1) && /MissingArgError/) {
                line = $0
                sub(".*MissingArgError\\(", "", line)
-               sub("\\).*", "", line)
+               if (line ~ "^{") {
+                       sub("^{", "", line)
+                       sub("}\\).*", "", line)
+               } else
+                       sub("\\).*", "", line)
+               printf("#line %d \"%s\"\n", lineno, file)
+               printf("_(\"%s\")\n", line)
+           }
+           if ((field == 1) && /Warn/) {
+               line = $0
+               sub(".*Warn\\(", "", line)
+               if (line ~ "^{") {
+                       sub("^{", "", line)
+                       sub("}\\).*", "", line)
+               } else
+                       sub("\\).*", "", line)
                printf("#line %d \"%s\"\n", lineno, file)
                printf("_(\"%s\")\n", line)
            }