opts.h (struct cl_option): Add warn_message field.

* 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.

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.

From-SVN: r163771
This commit is contained in:
Joseph Myers 2010-09-02 12:43:19 +01:00 committed by Joseph Myers
parent 5de8299cec
commit 2d2bd949ea
16 changed files with 215 additions and 148 deletions

View File

@ -1,3 +1,32 @@
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

View File

@ -1,3 +1,16 @@
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,

View 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;

View 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

View 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

View 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

View 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

View 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}.

View 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,

View 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])

View 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 "};"

View 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];
/* The new option must not be an alias itself. */
gcc_assert (new_option->alias_target == N_OPTS);
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;
}
opt_index = new_opt_index;
option = new_option;
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 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;
}
opt_index = new_opt_index;
option = new_option;
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;
}
/* 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)
{

View 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)

View 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;

View 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.

View 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)
}