mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-23 02:54:54 +08:00
re PR driver/44076 (-MT <target> behaves different as -MT<target> (w/o space))
PR driver/44076 * opts.h (struct cl_option): Add alias_arg, neg_alias_arg and alias_target fields. * opt-functions.awk (opt_sanitized_name): Don't handle finline-limit=, Wlarger-than= and ftemplate-depth= specially. * optc-gen.awk: Generate alias fields. * opth-gen.awk: Explicitly give values for OPT_* enum constants. Don't generate such constants for aliases. * opts-common.c (generate_canonical_option): New. (decode_cmdline_option): Handle aliases. Use generate_canonical_option for known options instead of copying the input option text. * doc/options.texi (Alias): Document. * common.opt (W, Wlarger-than-, aux-info=, finline-limit-, fstack-check, specs): Mark as aliases. * gcc.c (driver_handle_option): Canonicalize -L options to joined arguments. (driver_handle_option): Don't handle OPT_specs. * opts.c (common_handle_option): Don't handle options marked as aliases. (enable_warning_as_error): Handle aliases. * stor-layout.c (layout_decl): Use OPT_Wlarger_than_ instead of OPT_Wlarger_than_eq. * tree-optimize.c (tree_rest_of_compilation): Use OPT_Wlarger_than_ instead of OPT_Wlarger_than_eq. c-family: * 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 aliases. * c-common.c (option_codes): Use OPT_Wcomment instead of OPT_Wcomments. * c-opts.c (warning_as_error_callback, c_common_handle_option): Don't handle options marked as aliases. java: * lang.opt (CLASSPATH, bootclasspath, classpath, encoding, fCLASSPATH=): Mark as Java options and as aliases. * jvspec.c (jvgenmain_spec): Don't handle -fCLASSPATH*. (lang_specific_driver): Don't handle options marked as aliases. * lang.c (java_handle_option): Don't handle OPT_fCLASSPATH_. testsuite: * gcc.dg/cpp/warn-comments-3.c: New. Based on warn-comments-2.c but using -Werror=comment. * gcc.dg/cpp/warn-comments.c, gcc.dg/cpp/warn-comments-2.c: Adjust expected error messages. From-SVN: r163770
This commit is contained in:
parent
f7e4c09b54
commit
5de8299cec
@ -1,3 +1,31 @@
|
||||
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.
|
||||
* opt-functions.awk (opt_sanitized_name): Don't handle
|
||||
finline-limit=, Wlarger-than= and ftemplate-depth= specially.
|
||||
* optc-gen.awk: Generate alias fields.
|
||||
* opth-gen.awk: Explicitly give values for OPT_* enum constants.
|
||||
Don't generate such constants for aliases.
|
||||
* opts-common.c (generate_canonical_option): New.
|
||||
(decode_cmdline_option): Handle aliases. Use
|
||||
generate_canonical_option for known options instead of copying the
|
||||
input option text.
|
||||
* doc/options.texi (Alias): Document.
|
||||
* common.opt (W, Wlarger-than-, aux-info=, finline-limit-,
|
||||
fstack-check, specs): Mark as aliases.
|
||||
* gcc.c (driver_handle_option): Canonicalize -L options to joined
|
||||
arguments.
|
||||
(driver_handle_option): Don't handle OPT_specs.
|
||||
* opts.c (common_handle_option): Don't handle options marked as
|
||||
aliases.
|
||||
(enable_warning_as_error): Handle aliases.
|
||||
* stor-layout.c (layout_decl): Use OPT_Wlarger_than_ instead of
|
||||
OPT_Wlarger_than_eq.
|
||||
* tree-optimize.c (tree_rest_of_compilation): Use
|
||||
OPT_Wlarger_than_ instead of OPT_Wlarger_than_eq.
|
||||
|
||||
2010-09-02 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (nonmemory_operand): New mode attribute.
|
||||
|
@ -1,3 +1,14 @@
|
||||
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
|
||||
aliases.
|
||||
* c-common.c (option_codes): Use OPT_Wcomment instead of
|
||||
OPT_Wcomments.
|
||||
* c-opts.c (warning_as_error_callback, c_common_handle_option):
|
||||
Don't handle options marked as aliases.
|
||||
|
||||
2010-08-25 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* c-common.c (c_common_get_alias_set): Remove special
|
||||
|
@ -8150,7 +8150,7 @@ struct reason_option_codes_t
|
||||
|
||||
static const struct reason_option_codes_t option_codes[] = {
|
||||
{CPP_W_DEPRECATED, OPT_Wdeprecated},
|
||||
{CPP_W_COMMENTS, OPT_Wcomments},
|
||||
{CPP_W_COMMENTS, OPT_Wcomment},
|
||||
{CPP_W_TRIGRAPHS, OPT_Wtrigraphs},
|
||||
{CPP_W_MULTICHAR, OPT_Wmultichar},
|
||||
{CPP_W_TRADITIONAL, OPT_Wtraditional},
|
||||
|
@ -161,7 +161,6 @@ warning_as_error_callback (int option_index)
|
||||
break;
|
||||
|
||||
case OPT_Wcomment:
|
||||
case OPT_Wcomments:
|
||||
cpp_opts->warn_comments = 1;
|
||||
break;
|
||||
|
||||
@ -493,7 +492,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_Wcomment:
|
||||
case OPT_Wcomments:
|
||||
cpp_opts->warn_comments = value;
|
||||
break;
|
||||
|
||||
@ -521,13 +519,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
global_dc->warning_as_error_requested = value;
|
||||
break;
|
||||
|
||||
case OPT_Werror_implicit_function_declaration:
|
||||
/* For backward compatibility, this is the same as
|
||||
-Werror=implicit-function-declaration. */
|
||||
enable_warning_as_error ("implicit-function-declaration", value,
|
||||
CL_C | CL_ObjC, handlers);
|
||||
break;
|
||||
|
||||
case OPT_Wformat:
|
||||
set_Wformat (value);
|
||||
break;
|
||||
@ -752,8 +743,6 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
break;
|
||||
|
||||
case OPT_ftemplate_depth_:
|
||||
/* Kept for backwards compatibility. */
|
||||
case OPT_ftemplate_depth_eq:
|
||||
max_tinst_depth = value;
|
||||
break;
|
||||
|
||||
@ -865,30 +854,23 @@ c_common_handle_option (size_t scode, const char *arg, int value,
|
||||
set_std_cxx0x (code == OPT_std_c__0x /* ISO */);
|
||||
break;
|
||||
|
||||
case OPT_std_c89:
|
||||
case OPT_std_c90:
|
||||
case OPT_std_iso9899_1990:
|
||||
case OPT_std_iso9899_199409:
|
||||
if (!preprocessing_asm_p)
|
||||
set_std_c89 (code == OPT_std_iso9899_199409 /* c94 */, true /* ISO */);
|
||||
break;
|
||||
|
||||
case OPT_std_gnu89:
|
||||
case OPT_std_gnu90:
|
||||
if (!preprocessing_asm_p)
|
||||
set_std_c89 (false /* c94 */, false /* ISO */);
|
||||
break;
|
||||
|
||||
case OPT_std_c99:
|
||||
case OPT_std_c9x:
|
||||
case OPT_std_iso9899_1999:
|
||||
case OPT_std_iso9899_199x:
|
||||
if (!preprocessing_asm_p)
|
||||
set_std_c99 (true /* ISO */);
|
||||
break;
|
||||
|
||||
case OPT_std_gnu99:
|
||||
case OPT_std_gnu9x:
|
||||
if (!preprocessing_asm_p)
|
||||
set_std_c99 (false /* ISO */);
|
||||
break;
|
||||
|
@ -164,7 +164,7 @@ C ObjC C++ ObjC++ Warning
|
||||
Warn about possibly nested block comments, and C++ comments spanning more than one physical line
|
||||
|
||||
Wcomments
|
||||
C ObjC C++ ObjC++ Warning
|
||||
C ObjC C++ ObjC++ Warning Alias(Wcomment)
|
||||
Synonym for -Wcomment
|
||||
|
||||
Wconversion
|
||||
@ -216,7 +216,7 @@ C ObjC C++ ObjC++
|
||||
; Documented in common.opt
|
||||
|
||||
Werror-implicit-function-declaration
|
||||
C ObjC RejectNegative Warning
|
||||
C ObjC RejectNegative Warning Alias(Werror=, implicit-function-declaration)
|
||||
This switch is deprecated; use -Werror=implicit-function-declaration instead
|
||||
|
||||
Wfloat-equal
|
||||
@ -804,7 +804,7 @@ C ObjC C++ ObjC++ Joined RejectNegative UInteger
|
||||
-ftabstop=<number> Distance between tab stops for column reporting
|
||||
|
||||
ftemplate-depth-
|
||||
C++ ObjC++ Joined RejectNegative UInteger Undocumented
|
||||
C++ ObjC++ Joined RejectNegative Undocumented Alias(ftemplate-depth=)
|
||||
|
||||
ftemplate-depth=
|
||||
C++ ObjC++ Joined RejectNegative UInteger
|
||||
@ -972,7 +972,7 @@ C ObjC
|
||||
Conform to the ISO 201X C standard draft (experimental and incomplete support)
|
||||
|
||||
std=c89
|
||||
C ObjC
|
||||
C ObjC Alias(std=c90)
|
||||
Conform to the ISO 1990 C standard
|
||||
|
||||
std=c90
|
||||
@ -984,7 +984,7 @@ C ObjC
|
||||
Conform to the ISO 1999 C standard
|
||||
|
||||
std=c9x
|
||||
C ObjC
|
||||
C ObjC Alias(std=c99)
|
||||
Deprecated in favor of -std=c99
|
||||
|
||||
std=gnu++98
|
||||
@ -1003,7 +1003,7 @@ C ObjC
|
||||
Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)
|
||||
|
||||
std=gnu89
|
||||
C ObjC
|
||||
C ObjC Alias(std=gnu90)
|
||||
Conform to the ISO 1990 C standard with GNU extensions
|
||||
|
||||
std=gnu90
|
||||
@ -1015,11 +1015,11 @@ C ObjC
|
||||
Conform to the ISO 1999 C standard with GNU extensions
|
||||
|
||||
std=gnu9x
|
||||
C ObjC
|
||||
C ObjC Alias(std=gnu99)
|
||||
Deprecated in favor of -std=gnu99
|
||||
|
||||
std=iso9899:1990
|
||||
C ObjC
|
||||
C ObjC Alias(std=c90)
|
||||
Conform to the ISO 1990 C standard
|
||||
|
||||
std=iso9899:199409
|
||||
@ -1027,11 +1027,11 @@ C ObjC
|
||||
Conform to the ISO 1990 C standard as amended in 1994
|
||||
|
||||
std=iso9899:1999
|
||||
C ObjC
|
||||
C ObjC Alias(std=c99)
|
||||
Conform to the ISO 1999 C standard
|
||||
|
||||
std=iso9899:199x
|
||||
C ObjC
|
||||
C ObjC Alias(std=c99)
|
||||
Deprecated in favor of -std=iso9899:1999
|
||||
|
||||
traditional-cpp
|
||||
|
@ -88,7 +88,7 @@ S
|
||||
Driver
|
||||
|
||||
W
|
||||
Common RejectNegative Var(extra_warnings) Warning
|
||||
Common RejectNegative Warning Alias(Wextra)
|
||||
This switch is deprecated; use -Wextra instead
|
||||
|
||||
Wa,
|
||||
@ -153,7 +153,7 @@ Common Var(warn_inline) Warning
|
||||
Warn when an inlined function cannot be inlined
|
||||
|
||||
Wlarger-than-
|
||||
Common RejectNegative Joined UInteger Warning Undocumented
|
||||
Common RejectNegative Joined Warning Undocumented Alias(Wlarger-than=)
|
||||
|
||||
Wlarger-than=
|
||||
Common RejectNegative Joined UInteger Warning
|
||||
@ -301,7 +301,7 @@ Common Separate
|
||||
-aux-info <file> Emit declaration information into <file>
|
||||
|
||||
aux-info=
|
||||
Common Joined
|
||||
Common Joined Alias(aux-info)
|
||||
|
||||
auxbase
|
||||
Common Separate RejectDriver
|
||||
@ -750,7 +750,7 @@ Common Report Var(flag_inline_functions_called_once) Init(1) Optimization
|
||||
Integrate functions called once into their callers
|
||||
|
||||
finline-limit-
|
||||
Common RejectNegative Joined UInteger
|
||||
Common RejectNegative Joined Alias(finline-limit=)
|
||||
|
||||
finline-limit=
|
||||
Common RejectNegative Joined UInteger
|
||||
@ -1259,7 +1259,7 @@ Common Report RejectNegative Joined
|
||||
-fstack-check=[no|generic|specific] Insert stack checking code into the program
|
||||
|
||||
fstack-check
|
||||
Common Report
|
||||
Common Alias(fstack-check=, specific, no)
|
||||
Insert stack checking code into the program. Same as -fstack-check=specific
|
||||
|
||||
fstack-limit
|
||||
@ -1755,7 +1755,7 @@ shared-libgcc
|
||||
Driver
|
||||
|
||||
specs
|
||||
Driver Separate
|
||||
Driver Separate Alias(specs=)
|
||||
|
||||
specs=
|
||||
Driver Joined
|
||||
|
@ -247,6 +247,32 @@ The main purpose of this property is to support synonymous options.
|
||||
The first option should use @samp{Mask(@var{name})} and the others
|
||||
should use @samp{Mask(@var{name}) MaskExists}.
|
||||
|
||||
@item Alias(@var{opt})
|
||||
@itemx Alias(@var{opt}, @var{arg})
|
||||
@itemx Alias(@var{opt}, @var{posarg}, @var{negarg})
|
||||
The option is an alias for @option{-@var{opt}}. In the first form,
|
||||
any argument passed to the alias is considered to be passed to
|
||||
@option{-@var{opt}}, and @option{-@var{opt}} is considered to be
|
||||
negated if the alias is used in negated form. In the second form, the
|
||||
alias may not be negated or have an argument, and @var{posarg} is
|
||||
considered to be passed as an argument to @option{-@var{opt}}. In the
|
||||
third form, the alias may not have an argument, if the alias is used
|
||||
in the positive form then @var{posarg} is considered to be passed to
|
||||
@option{-@var{opt}}, and if the alias is used in the negative form
|
||||
then @var{negarg} is considered to be passed to @option{-@var{opt}}.
|
||||
|
||||
Aliases should not specify @code{Var} or @code{Mask} or
|
||||
@code{UInteger}. Aliases should normally specify the same languages
|
||||
as the target of the alias; the flags on the target will be used to
|
||||
determine any diagnostic for use of an option for the wrong language,
|
||||
while those on the alias will be used to identify what command-line
|
||||
text is the option and what text is any argument to that option.
|
||||
|
||||
When an @code{Alias} definition is used for an option, driver specs do
|
||||
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 Report
|
||||
The state of the option should be printed by @option{-fverbose-asm}.
|
||||
|
||||
|
@ -3742,6 +3742,12 @@ driver_handle_option (const struct cl_decoded_option *decoded,
|
||||
do_save = false;
|
||||
break;
|
||||
|
||||
case OPT_L:
|
||||
/* Similarly, canonicalize -L for linkers that may not accept
|
||||
separate arguments. */
|
||||
save_switch (concat ("-L", arg, NULL), 0, NULL, validated);
|
||||
return true;
|
||||
|
||||
case OPT_save_temps:
|
||||
save_temps_flag = SAVE_TEMPS_CWD;
|
||||
validated = true;
|
||||
@ -3772,7 +3778,6 @@ driver_handle_option (const struct cl_decoded_option *decoded,
|
||||
processing. */
|
||||
break;
|
||||
|
||||
case OPT_specs:
|
||||
case OPT_specs_:
|
||||
{
|
||||
struct user_specs *user = XNEW (struct user_specs);
|
||||
|
@ -1,3 +1,11 @@
|
||||
2010-09-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* lang.opt (CLASSPATH, bootclasspath, classpath, encoding,
|
||||
fCLASSPATH=): Mark as Java options and as aliases.
|
||||
* jvspec.c (jvgenmain_spec): Don't handle -fCLASSPATH*.
|
||||
(lang_specific_driver): Don't handle options marked as aliases.
|
||||
* lang.c (java_handle_option): Don't handle OPT_fCLASSPATH_.
|
||||
|
||||
2010-08-22 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* Make-lang.in (jvspec.o): Update dependencies.
|
||||
|
@ -69,7 +69,7 @@ static const char jvgenmain_spec[] =
|
||||
%<fuse-boehm-gc %<fhash-synchronization %<fjni\
|
||||
%<findirect-dispatch %<fnew-verifier\
|
||||
%<fno-store-check %<foutput-class-dir\
|
||||
%<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
|
||||
%<fclasspath* %<fbootclasspath*\
|
||||
%<fextdirs*\
|
||||
%<fuse-divide-subroutine %<fno-use-divide-subroutine\
|
||||
%<fuse-atomic-builtins %<fno-use-atomic-builtins\
|
||||
@ -299,10 +299,8 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
|
||||
saw_o = 1;
|
||||
break;
|
||||
|
||||
case OPT_classpath:
|
||||
case OPT_bootclasspath:
|
||||
case OPT_CLASSPATH:
|
||||
case OPT_encoding:
|
||||
case OPT_fclasspath_:
|
||||
case OPT_fbootclasspath_:
|
||||
case OPT_extdirs:
|
||||
added -= 1;
|
||||
break;
|
||||
@ -514,15 +512,11 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
|
||||
--j;
|
||||
continue;
|
||||
|
||||
case OPT_classpath:
|
||||
case OPT_CLASSPATH:
|
||||
case OPT_fCLASSPATH_:
|
||||
case OPT_fclasspath_:
|
||||
jcf_path_classpath_arg (decoded_options[i].arg);
|
||||
--j;
|
||||
continue;
|
||||
|
||||
case OPT_bootclasspath:
|
||||
case OPT_fbootclasspath_:
|
||||
jcf_path_bootclasspath_arg (decoded_options[i].arg);
|
||||
--j;
|
||||
@ -533,11 +527,6 @@ lang_specific_driver (struct cl_decoded_option **in_decoded_options,
|
||||
--j;
|
||||
continue;
|
||||
|
||||
case OPT_encoding:
|
||||
generate_option (OPT_fencoding_, decoded_options[i].arg, 1,
|
||||
CL_DRIVER, &new_decoded_options[j]);
|
||||
continue;
|
||||
|
||||
case OPT_L:
|
||||
if (spec_file == NULL)
|
||||
spec_file = find_spec_file (decoded_options[i].arg);
|
||||
|
@ -261,7 +261,6 @@ java_handle_option (size_t scode, const char *arg, int value,
|
||||
|
||||
case OPT_faux_classpath:
|
||||
case OPT_fclasspath_:
|
||||
case OPT_fCLASSPATH_:
|
||||
jcf_path_classpath_arg (arg);
|
||||
break;
|
||||
|
||||
|
@ -29,7 +29,7 @@ Driver
|
||||
; Java driver option in fact distinct from C-family option with the same name.
|
||||
|
||||
CLASSPATH
|
||||
Driver Separate
|
||||
Java Separate Alias(fclasspath=)
|
||||
|
||||
D
|
||||
Driver Joined Separate
|
||||
@ -88,19 +88,19 @@ Java Var(flag_redundant)
|
||||
Warn if modifiers are specified when not necessary
|
||||
|
||||
bootclasspath
|
||||
Driver Separate
|
||||
Java Separate Alias(fbootclasspath=)
|
||||
|
||||
classpath
|
||||
Driver Separate
|
||||
Java Separate Alias(fclasspath=)
|
||||
|
||||
encoding
|
||||
Driver Separate
|
||||
Java Separate Alias(fencoding=)
|
||||
|
||||
extdirs
|
||||
Driver Separate
|
||||
|
||||
fCLASSPATH=
|
||||
Java JoinedOrMissing RejectNegative
|
||||
Java JoinedOrMissing RejectNegative Alias(fclasspath=)
|
||||
--CLASSPATH Deprecated; use --classpath instead
|
||||
|
||||
faux-classpath
|
||||
|
@ -201,9 +201,6 @@ function var_ref(name, flags)
|
||||
# Given the option called NAME return a sanitized version of its name.
|
||||
function opt_sanitized_name(name)
|
||||
{
|
||||
if (name == "finline-limit=" || name == "Wlarger-than=" \
|
||||
|| name == "ftemplate-depth=")
|
||||
name = name "eq"
|
||||
if (name == "gdwarf+")
|
||||
name = "gdwarfplus"
|
||||
gsub ("[^A-Za-z0-9]", "_", name)
|
||||
|
@ -201,6 +201,36 @@ for (i = 0; i < n_opts; i++) {
|
||||
else
|
||||
missing_arg_error = quote missing_arg_error quote
|
||||
|
||||
alias_arg = opt_args("Alias", flags[i])
|
||||
if (alias_arg == "") {
|
||||
alias_data = "NULL, NULL, N_OPTS"
|
||||
} else {
|
||||
alias_opt = nth_arg(0, alias_arg)
|
||||
alias_posarg = nth_arg(1, alias_arg)
|
||||
alias_negarg = nth_arg(2, alias_arg)
|
||||
|
||||
if (var_ref(opts[i], flags[i]) != "0")
|
||||
print "#error Alias setting variable"
|
||||
|
||||
if (alias_posarg != "" && alias_negarg == "") {
|
||||
if (!flag_set_p("RejectNegative", flags[i]) \
|
||||
&& opts[i] ~ "^[Wfm]")
|
||||
print "#error Alias with single argument " \
|
||||
"allowing negative form"
|
||||
}
|
||||
|
||||
alias_opt = opt_enum(alias_opt)
|
||||
if (alias_posarg == "")
|
||||
alias_posarg = "NULL"
|
||||
else
|
||||
alias_posarg = quote alias_posarg quote
|
||||
if (alias_negarg == "")
|
||||
alias_negarg = "NULL"
|
||||
else
|
||||
alias_negarg = quote alias_negarg quote
|
||||
alias_data = alias_posarg ", " alias_negarg ", " alias_opt
|
||||
}
|
||||
|
||||
neg = opt_args("Negative", flags[i]);
|
||||
if (neg != "")
|
||||
idx = indices[neg]
|
||||
@ -216,9 +246,9 @@ 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, %u,",
|
||||
printf(" { %c-%s%c,\n %s,\n %s,\n %s, %s, %u,",
|
||||
quote, opts[i], quote, hlp, missing_arg_error,
|
||||
back_chain[i], len)
|
||||
alias_data, back_chain[i], len)
|
||||
printf(" %d,\n", idx)
|
||||
condition = opt_args("Condition", flags[i])
|
||||
cl_flags = switch_flags(flags[i])
|
||||
|
@ -321,6 +321,7 @@ print "{"
|
||||
for (i = 0; i < n_opts; i++)
|
||||
back_chain[i] = "N_OPTS";
|
||||
|
||||
enum_value = 0
|
||||
for (i = 0; i < n_opts; i++) {
|
||||
# Combine the flags of identical switches. Switches
|
||||
# appear many times if they are handled by many front
|
||||
@ -332,6 +333,12 @@ for (i = 0; i < n_opts; i++) {
|
||||
|
||||
len = length (opts[i]);
|
||||
enum = opt_enum(opts[i])
|
||||
enum_string = enum " = " enum_value ","
|
||||
|
||||
# Aliases do not get enumeration names.
|
||||
if (flag_set_p("Alias.*", flags[i])) {
|
||||
enum_string = "/* " enum_string " */"
|
||||
}
|
||||
|
||||
# If this switch takes joined arguments, back-chain all
|
||||
# subsequent switches to it for which it is a prefix. If
|
||||
@ -346,7 +353,8 @@ for (i = 0; i < n_opts; i++) {
|
||||
}
|
||||
}
|
||||
|
||||
s = substr(" ", length (enum))
|
||||
s = substr(" ",
|
||||
length (enum_string))
|
||||
if (i + 1 == n_opts)
|
||||
comma = ""
|
||||
|
||||
@ -355,7 +363,8 @@ for (i = 0; i < n_opts; i++) {
|
||||
else
|
||||
hlp = "N_(\"" help[i] "\")";
|
||||
|
||||
print " " enum "," s "/* -" opts[i] " */"
|
||||
print " " enum_string s "/* -" opts[i] " */"
|
||||
enum_value++
|
||||
}
|
||||
|
||||
print " N_OPTS,"
|
||||
|
@ -144,6 +144,58 @@ option_ok_for_language (const struct cl_option *option,
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* Fill in the canonical option part of *DECODED with an option
|
||||
described by OPT_INDEX, ARG and VALUE. */
|
||||
|
||||
static void
|
||||
generate_canonical_option (size_t opt_index, const char *arg, int value,
|
||||
struct cl_decoded_option *decoded)
|
||||
{
|
||||
const struct cl_option *option = &cl_options[opt_index];
|
||||
const char *opt_text = option->opt_text;
|
||||
|
||||
if (value == 0
|
||||
&& !(option->flags & CL_REJECT_NEGATIVE)
|
||||
&& (opt_text[1] == 'W' || opt_text[1] == 'f' || opt_text[1] == 'm'))
|
||||
{
|
||||
char *t = XNEWVEC (char, option->opt_len + 5);
|
||||
t[0] = '-';
|
||||
t[1] = opt_text[1];
|
||||
t[2] = 'n';
|
||||
t[3] = 'o';
|
||||
t[4] = '-';
|
||||
memcpy (t + 5, opt_text + 2, option->opt_len);
|
||||
opt_text = t;
|
||||
}
|
||||
|
||||
decoded->canonical_option[2] = NULL;
|
||||
decoded->canonical_option[3] = NULL;
|
||||
|
||||
if (arg)
|
||||
{
|
||||
if (option->flags & CL_SEPARATE)
|
||||
{
|
||||
decoded->canonical_option[0] = opt_text;
|
||||
decoded->canonical_option[1] = arg;
|
||||
decoded->canonical_option_num_elements = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gcc_assert (option->flags & CL_JOINED);
|
||||
decoded->canonical_option[0] = concat (opt_text, arg, NULL);
|
||||
decoded->canonical_option[1] = NULL;
|
||||
decoded->canonical_option_num_elements = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
decoded->canonical_option[0] = opt_text;
|
||||
decoded->canonical_option[1] = NULL;
|
||||
decoded->canonical_option_num_elements = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Decode the switch beginning at ARGV for the language indicated by
|
||||
LANG_MASK (including CL_COMMON and CL_TARGET if applicable), into
|
||||
the structure *DECODED. Returns the number of switches
|
||||
@ -245,13 +297,64 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
|
||||
result = 1;
|
||||
}
|
||||
|
||||
if (arg == NULL && (separate_arg_flag || joined_arg_flag))
|
||||
errors |= CL_ERR_MISSING_ARG;
|
||||
|
||||
/* Is this option an alias? */
|
||||
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)
|
||||
{
|
||||
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 disabled options. */
|
||||
if (option->flags & CL_DISABLED)
|
||||
errors |= CL_ERR_DISABLED;
|
||||
}
|
||||
|
||||
/* Check if this is a switch for a different front end. */
|
||||
if (!option_ok_for_language (option, lang_mask))
|
||||
errors |= CL_ERR_WRONG_LANG;
|
||||
|
||||
if (arg == NULL && (separate_arg_flag || joined_arg_flag))
|
||||
errors |= CL_ERR_MISSING_ARG;
|
||||
|
||||
/* If the switch takes an integer, convert it. */
|
||||
if (arg && (option->flags & CL_UINTEGER))
|
||||
{
|
||||
@ -296,12 +399,17 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
|
||||
{
|
||||
if (i < result)
|
||||
{
|
||||
decoded->canonical_option[i] = argv[i];
|
||||
if (opt_index == OPT_SPECIAL_unknown)
|
||||
decoded->canonical_option[i] = argv[i];
|
||||
else
|
||||
decoded->canonical_option[i] = NULL;
|
||||
total_len += strlen (argv[i]) + 1;
|
||||
}
|
||||
else
|
||||
decoded->canonical_option[i] = NULL;
|
||||
}
|
||||
if (opt_index != OPT_SPECIAL_unknown)
|
||||
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++)
|
||||
{
|
||||
@ -571,39 +679,26 @@ generate_option (size_t opt_index, const char *arg, int value,
|
||||
|
||||
decoded->opt_index = opt_index;
|
||||
decoded->arg = arg;
|
||||
decoded->canonical_option[2] = NULL;
|
||||
decoded->canonical_option[3] = NULL;
|
||||
decoded->value = value;
|
||||
decoded->errors = (option_ok_for_language (option, lang_mask)
|
||||
? 0
|
||||
: CL_ERR_WRONG_LANG);
|
||||
|
||||
if (arg)
|
||||
generate_canonical_option (opt_index, arg, value, decoded);
|
||||
switch (decoded->canonical_option_num_elements)
|
||||
{
|
||||
if (option->flags & CL_SEPARATE)
|
||||
{
|
||||
decoded->orig_option_with_args_text = concat (option->opt_text, " ",
|
||||
arg, NULL);
|
||||
decoded->canonical_option[0] = option->opt_text;
|
||||
decoded->canonical_option[1] = arg;
|
||||
decoded->canonical_option_num_elements = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gcc_assert (option->flags & CL_JOINED);
|
||||
decoded->orig_option_with_args_text = concat (option->opt_text, arg,
|
||||
NULL);
|
||||
decoded->canonical_option[0] = decoded->orig_option_with_args_text;
|
||||
decoded->canonical_option[1] = NULL;
|
||||
decoded->canonical_option_num_elements = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
decoded->orig_option_with_args_text = option->opt_text;
|
||||
decoded->canonical_option[0] = option->opt_text;
|
||||
decoded->canonical_option[1] = NULL;
|
||||
decoded->canonical_option_num_elements = 1;
|
||||
case 1:
|
||||
decoded->orig_option_with_args_text = decoded->canonical_option[0];
|
||||
break;
|
||||
|
||||
case 2:
|
||||
decoded->orig_option_with_args_text
|
||||
= concat (decoded->canonical_option[0], " ",
|
||||
decoded->canonical_option[1], NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
|
||||
|
22
gcc/opts.c
22
gcc/opts.c
@ -1598,11 +1598,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
|
||||
break;
|
||||
|
||||
case OPT_Wlarger_than_:
|
||||
/* This form corresponds to -Wlarger-than-.
|
||||
Kept for backward compatibility.
|
||||
Don't use it as the first argument of warning(). */
|
||||
|
||||
case OPT_Wlarger_than_eq:
|
||||
larger_than_size = value;
|
||||
warn_larger_than = value != -1;
|
||||
break;
|
||||
@ -1643,7 +1638,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
|
||||
break;
|
||||
|
||||
case OPT_aux_info:
|
||||
case OPT_aux_info_:
|
||||
aux_info_file_name = arg;
|
||||
flag_gen_aux_info = 1;
|
||||
break;
|
||||
@ -1754,7 +1748,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
|
||||
break;
|
||||
|
||||
case OPT_finline_limit_:
|
||||
case OPT_finline_limit_eq:
|
||||
set_param_value ("max-inline-insns-single", value / 2);
|
||||
set_param_value ("max-inline-insns-auto", value / 2);
|
||||
break;
|
||||
@ -1943,18 +1936,6 @@ common_handle_option (const struct cl_decoded_option *decoded,
|
||||
warning (0, "unknown stack check parameter \"%s\"", arg);
|
||||
break;
|
||||
|
||||
case OPT_fstack_check:
|
||||
/* This is the same as the "specific" mode above. */
|
||||
if (value)
|
||||
flag_stack_check = STACK_CHECK_BUILTIN
|
||||
? FULL_BUILTIN_STACK_CHECK
|
||||
: STACK_CHECK_STATIC_BUILTIN
|
||||
? STATIC_BUILTIN_STACK_CHECK
|
||||
: GENERIC_STACK_CHECK;
|
||||
else
|
||||
flag_stack_check = NO_STACK_CHECK;
|
||||
break;
|
||||
|
||||
case OPT_fstack_limit:
|
||||
/* The real switch is -fno-stack-limit. */
|
||||
if (value)
|
||||
@ -2377,8 +2358,11 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask,
|
||||
}
|
||||
else
|
||||
{
|
||||
const struct cl_option *option = &cl_options[option_index];
|
||||
const diagnostic_t kind = value ? DK_ERROR : DK_WARNING;
|
||||
|
||||
if (option->alias_target != N_OPTS)
|
||||
option_index = option->alias_target;
|
||||
diagnostic_classify_diagnostic (global_dc, option_index, kind,
|
||||
UNKNOWN_LOCATION);
|
||||
if (kind == DK_ERROR)
|
||||
|
@ -45,6 +45,9 @@ struct cl_option
|
||||
const char *opt_text;
|
||||
const char *help;
|
||||
const char *missing_argument_error;
|
||||
const char *alias_arg;
|
||||
const char *neg_alias_arg;
|
||||
unsigned short alias_target;
|
||||
unsigned short back_chain;
|
||||
unsigned char opt_len;
|
||||
int neg_index;
|
||||
|
@ -675,9 +675,9 @@ layout_decl (tree decl, unsigned int known_align)
|
||||
int size_as_int = TREE_INT_CST_LOW (size);
|
||||
|
||||
if (compare_tree_int (size, size_as_int) == 0)
|
||||
warning (OPT_Wlarger_than_eq, "size of %q+D is %d bytes", decl, size_as_int);
|
||||
warning (OPT_Wlarger_than_, "size of %q+D is %d bytes", decl, size_as_int);
|
||||
else
|
||||
warning (OPT_Wlarger_than_eq, "size of %q+D is larger than %wd bytes",
|
||||
warning (OPT_Wlarger_than_, "size of %q+D is larger than %wd bytes",
|
||||
decl, larger_than_size);
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,10 @@
|
||||
2010-09-02 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcc.dg/cpp/warn-comments-3.c: New. Based on warn-comments-2.c
|
||||
but using -Werror=comment.
|
||||
* gcc.dg/cpp/warn-comments.c, gcc.dg/cpp/warn-comments-2.c: Adjust
|
||||
expected error messages.
|
||||
|
||||
2010-09-02 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.dg/stack-usage-1.c: Adjust on i386/Darwin.
|
||||
|
@ -1,7 +1,7 @@
|
||||
// { dg-do preprocess }
|
||||
// { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comments" }
|
||||
/* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
|
||||
/* /* */ // { dg-error "\"\.\*\" within comment .-Werror=comments." }
|
||||
/* /* */ // { dg-error "\"\.\*\" within comment .-Werror=comment." }
|
||||
|
||||
// \
|
||||
// { dg-error "multi-line comment .-Werror=comments." "multi-line" { target *-*-* } 6 }
|
||||
// { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } 6 }
|
||||
|
7
gcc/testsuite/gcc.dg/cpp/warn-comments-3.c
Normal file
7
gcc/testsuite/gcc.dg/cpp/warn-comments-3.c
Normal file
@ -0,0 +1,7 @@
|
||||
// { dg-do preprocess }
|
||||
// { dg-options "-std=gnu99 -fdiagnostics-show-option -Werror=comment" }
|
||||
/* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
|
||||
/* /* */ // { dg-error "\"\.\*\" within comment .-Werror=comment." }
|
||||
|
||||
// \
|
||||
// { dg-error "multi-line comment .-Werror=comment." "multi-line" { target *-*-* } 6 }
|
@ -1,7 +1,7 @@
|
||||
// { dg-do preprocess }
|
||||
// { dg-options "-std=gnu99 -fdiagnostics-show-option -Wcomments" }
|
||||
|
||||
/* /* */ // { dg-warning "\"\.\*\" within comment .-Wcomments." }
|
||||
/* /* */ // { dg-warning "\"\.\*\" within comment .-Wcomment." }
|
||||
|
||||
// \
|
||||
// { dg-warning "multi-line comment .-Wcomments." "multi-line" { target *-*-* } 6 }
|
||||
// { dg-warning "multi-line comment .-Wcomment." "multi-line" { target *-*-* } 6 }
|
||||
|
@ -477,10 +477,10 @@ tree_rest_of_compilation (tree fndecl)
|
||||
= TREE_INT_CST_LOW (TYPE_SIZE_UNIT (ret_type));
|
||||
|
||||
if (compare_tree_int (TYPE_SIZE_UNIT (ret_type), size_as_int) == 0)
|
||||
warning (OPT_Wlarger_than_eq, "size of return value of %q+D is %u bytes",
|
||||
warning (OPT_Wlarger_than_, "size of return value of %q+D is %u bytes",
|
||||
fndecl, size_as_int);
|
||||
else
|
||||
warning (OPT_Wlarger_than_eq, "size of return value of %q+D is larger than %wd bytes",
|
||||
warning (OPT_Wlarger_than_, "size of return value of %q+D is larger than %wd bytes",
|
||||
fndecl, larger_than_size);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user