common.opt: Add driver options.

* common.opt: Add driver options.
	(auxbase, auxbase-strip, quiet, version): Mark RejectDriver.
	* doc/options.texi (Driver, RejectDriver): Document.
	* gcc.c (pass_exit_codes, print_search_dirs, print_file_name,
	print_prog_name, print_multi_directory, print_sysroot,
	print_multi_os_directory, print_multi_lib,
	print_sysroot_headers_suffix, report_times, combine_flag,
	use_pipes, wrapper_string): Remove.
	(save_switch, driver_unknown_option_callback,
	driver_wrong_lang_callback, driver_post_handling_callback,
	driver_handle_option): New.
	(spec_lang, last_language_n_infiles): Make file-scope static
	instead of local to process_command.
	(process_command): Use decode_cmdline_options_to_array and
	read_cmdline_option for option processing.  Compute have_c in
	prescan of decoded options.
	* opt-functions.awk (switch_flags): Handle Driver and
	RejectDriver.
	(var_type, var_type_struct): Handle Separate options as generating
	const char * variables.
	* opts-common.c (decode_cmdline_option): Expect CL_COMMON and
	CL_TARGET to be passed by caller if required.
	(decode_cmdline_options_to_array): Update comment.
	* opts.c (complain_wrong_lang): Handle options only valid for the
	driver.
	(decode_options): Update call to decode_cmdline_options_to_array.
	(print_filtered_help): Ignore driver-only options.
	(print_specific_help): Ignore CL_DRIVER.
	(common_handle_option): Don't call print_specific_help for
	CL_DRIVER.
	* opts.h (CL_DRIVER, CL_REJECT_DRIVER): Define.
	(CL_PARAMS, CL_WARNING, CL_OPTIMIZATION, CL_TARGET, CL_COMMON):
	Update values.

c-family:
	* c.opt (MDX, MMDX, lang-asm): Mark RejectDriver.

fortran:
	* lang.opt (MDX, MMDX): Mark RejectDriver.

java:
	* lang.opt (MD_, MMD_, version): Mark RejectDriver.

From-SVN: r163279
This commit is contained in:
Joseph Myers 2010-08-16 11:15:15 +01:00 committed by Joseph Myers
parent 4b228e61a9
commit 603349bf3d
14 changed files with 740 additions and 611 deletions

View File

@ -1,3 +1,39 @@
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* common.opt: Add driver options.
(auxbase, auxbase-strip, quiet, version): Mark RejectDriver.
* doc/options.texi (Driver, RejectDriver): Document.
* gcc.c (pass_exit_codes, print_search_dirs, print_file_name,
print_prog_name, print_multi_directory, print_sysroot,
print_multi_os_directory, print_multi_lib,
print_sysroot_headers_suffix, report_times, combine_flag,
use_pipes, wrapper_string): Remove.
(save_switch, driver_unknown_option_callback,
driver_wrong_lang_callback, driver_post_handling_callback,
driver_handle_option): New.
(spec_lang, last_language_n_infiles): Make file-scope static
instead of local to process_command.
(process_command): Use decode_cmdline_options_to_array and
read_cmdline_option for option processing. Compute have_c in
prescan of decoded options.
* opt-functions.awk (switch_flags): Handle Driver and
RejectDriver.
(var_type, var_type_struct): Handle Separate options as generating
const char * variables.
* opts-common.c (decode_cmdline_option): Expect CL_COMMON and
CL_TARGET to be passed by caller if required.
(decode_cmdline_options_to_array): Update comment.
* opts.c (complain_wrong_lang): Handle options only valid for the
driver.
(decode_options): Update call to decode_cmdline_options_to_array.
(print_filtered_help): Ignore driver-only options.
(print_specific_help): Ignore CL_DRIVER.
(common_handle_option): Don't call print_specific_help for
CL_DRIVER.
* opts.h (CL_DRIVER, CL_REJECT_DRIVER): Define.
(CL_PARAMS, CL_WARNING, CL_OPTIMIZATION, CL_TARGET, CL_COMMON):
Update values.
2010-08-16 Richard Guenther <rguenther@suse.de>
* tree-cfg.c (verify_types_in_gimple_reference): Verify

View File

@ -1,3 +1,7 @@
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* c.opt (MDX, MMDX, lang-asm): Mark RejectDriver.
2010-08-12 Joseph Myers <joseph@codesourcery.com>
* c.opt (MD, MMD): Change to MDX and MMDX.

View File

@ -73,7 +73,7 @@ C ObjC C++ ObjC++
Generate make dependencies
MDX
C ObjC C++ ObjC++ Separate MissingArgError(missing filename after %qs)
C ObjC C++ ObjC++ RejectDriver Separate MissingArgError(missing filename after %qs)
-MD Generate make dependencies and compile
MF
@ -89,7 +89,7 @@ C ObjC C++ ObjC++
Like -M but ignore system header files
MMDX
C ObjC C++ ObjC++ Separate MissingArgError(missing filename after %qs)
C ObjC C++ ObjC++ RejectDriver Separate MissingArgError(missing filename after %qs)
-MMD Like -MD but ignore system header files
MP
@ -926,7 +926,7 @@ C ObjC C++ ObjC++ Joined Separate
-iwithprefixbefore <dir> Add <dir> to the end of the main include path
lang-asm
C Undocumented
C Undocumented RejectDriver
nostdinc
C ObjC C++ ObjC++

View File

@ -23,39 +23,51 @@
; Please try to keep this file in ASCII collating order.
###
Driver
-help
Common
Common Driver
Display this information
-help=
Common Report Joined
Common Driver Report Joined
--help=<class> Display descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params
-target-help
Common
Common Driver
Alias for --help=target
;; The following four entries are to work around the gcc driver
;; program's insatiable desire to turn options starting with a
;; double dash (--) into options starting with a dash f (-f).
fhelp
Common Var(help_flag)
Common Driver Var(help_flag)
fhelp=
Common Joined
Common Driver Joined
ftarget-help
Common
Common Driver
fversion
Common
Common Driver
-param
Common Separate
--param <param>=<value> Set parameter <param> to value. See below for a complete list of parameters
-sysroot=
Driver JoinedOrMissing
-version
Common
Common Driver
B
Driver Joined Separate
E
Driver
O
Common JoinedOrMissing Optimization
@ -69,10 +81,22 @@ Ofast
Common Optimization
Optimize for speed disregarding exact standards compliance
S
Driver
W
Common RejectNegative Var(extra_warnings) Warning
This switch is deprecated; use -Wextra instead
Wa,
Driver JoinedOrMissing
Wl,
Driver JoinedOrMissing
Wp,
Driver JoinedOrMissing
Waggregate-return
Common Var(warn_aggregate_return) Warning
Warn about returning structures, unions or arrays
@ -260,6 +284,15 @@ Wcoverage-mismatch
Common Var(warn_coverage_mismatch) Init(1) Warning
Warn in case profiles in -fprofile-use do not match
Xassembler
Driver Separate
Xlinker
Driver Separate
Xpreprocessor
Driver Separate
aux-info
Common Separate
-aux-info <file> Emit declaration information into <file>
@ -268,10 +301,16 @@ aux-info=
Common Joined
auxbase
Common Separate
Common Separate RejectDriver
auxbase-strip
Common Separate
Common Separate RejectDriver
combine
Driver Var(combine_flag)
c
Driver
d
Common Joined
@ -285,6 +324,15 @@ dumpdir
Common Separate
-dumpdir <dir> Set the directory name to be used for dumps
dumpmachine
Driver
dumpspecs
Driver
dumpversion
Driver
; The version of the C++ ABI in use. The following values are allowed:
;
; 0: The version of the ABI believed most conformant with the C++ ABI
@ -410,12 +458,16 @@ fcommon
Common Report Var(flag_no_common,0) Optimization
Do not put uninitialized globals in the common section
fcompare-debug
Driver
; Converted by the driver to -fcompare-debug= options.
fcompare-debug=
Common JoinedOrMissing RejectNegative Var(flag_compare_debug_opt)
Common Driver JoinedOrMissing RejectNegative Var(flag_compare_debug_opt)
-fcompare-debug[=<opts>] Compile with and without e.g. -gtoggle, and compare the final-insns dump
fcompare-debug-second
Common RejectNegative Var(flag_compare_debug)
Common Driver RejectNegative Var(flag_compare_debug)
Run only the second compilation of -fcompare-debug
fconserve-stack
@ -1587,14 +1639,23 @@ iplugindir=
Common Joined Var(plugindir_string) Init(0)
-iplugindir=<dir> Set <dir> to be the default plugin directory
l
Driver Joined Separate
no-canonical-prefixes
Driver
o
Common Joined Separate MissingArgError(missing filename after %qs)
Common Driver Joined Separate MissingArgError(missing filename after %qs)
-o <file> Place output into <file>
p
Common Var(profile_flag)
Enable function profiling
pass-exit-codes
Driver Var(pass_exit_codes)
pedantic
Common Var(pedantic)
Issue warnings needed for strict compliance to the standard
@ -1603,22 +1664,92 @@ pedantic-errors
Common
Like -pedantic but issue them as errors
pipe
Driver Var(use_pipes)
print-file-name=
Driver JoinedOrMissing Var(print_file_name)
print-libgcc-file-name
Driver
print-multi-directory
Driver Var(print_multi_directory)
print-multi-lib
Driver Var(print_multi_lib)
print-multi-os-directory
Driver Var(print_multi_os_directory)
print-prog-name=
Driver JoinedOrMissing Var(print_prog_name)
print-search-dirs
Driver Var(print_search_dirs)
print-sysroot
Driver Var(print_sysroot)
print-sysroot-headers-suffix
Driver Var(print_sysroot_headers_suffix)
quiet
Common Var(quiet_flag)
Common Var(quiet_flag) RejectDriver
Do not display functions compiled or elapsed time
save-temps
Driver
save-temps=
Driver Joined
time
Driver Var(report_times)
time=
Driver JoinedOrMissing
v
Driver
version
Common Var(version_flag)
Common Var(version_flag) RejectDriver
Display the compiler's version
w
Common Var(inhibit_warnings)
Suppress warnings
wrapper
Driver Separate Var(wrapper_string)
x
Driver Joined Separate
shared
Common RejectNegative Negative(pie)
Create a shared library
shared-libgcc
Driver
specs
Driver Separate
specs=
Driver Joined
static-libgcc
Driver
static-libgfortran
Driver
; Documented for Fortran, but always accepted by driver.
static-libstdc++
Driver
pie
Common RejectNegative Negative(shared)
Create a position independent executable

View File

@ -102,6 +102,10 @@ The option is available for all languages and targets.
@item Target
The option is available for all languages but is target-specific.
@item Driver
The option is handled by the compiler driver using code not shared
with the compilers proper (@file{cc1} etc.).
@item @var{language}
The option is available when compiling for the given language.
@ -109,6 +113,10 @@ It is possible to specify several different languages for the same
option. Each @var{language} must have been declared by an earlier
@code{Language} record. @xref{Option file format}.
@item RejectDriver
The option is only handled by the compilers proper (@file{cc1} etc.)@:
and should not be accepted by the driver.
@item RejectNegative
The option does not have a ``no-'' form. All options beginning with
``f'', ``W'' or ``m'' are assumed to have a ``no-'' form unless this

View File

@ -1,3 +1,7 @@
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* lang.opt (MDX, MMDX): Mark RejectDriver.
2010-08-15 Janus Weil <janus@gcc.gnu.org>
* trans-expr.c (gfc_trans_assign_vtab_procs): Clean up (we don't have

View File

@ -61,7 +61,7 @@ Fortran
; Documented in C
MDX
Fortran Separate
Fortran Separate RejectDriver
; Documented in C
MF
@ -77,7 +77,7 @@ Fortran
; Documented in C
MMDX
Fortran Separate
Fortran Separate RejectDriver
; Documented in C
MP

1045
gcc/gcc.c

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* lang.opt (MD_, MMD_, version): Mark RejectDriver.
2010-08-05 David Daney <ddaney@caviumnetworks.com>
* class.c (build_utf8_ref): Fix code formatting from previous commit.

View File

@ -33,7 +33,7 @@ Java
; Documented for C
MD_
Java Undocumented
Java Undocumented RejectDriver
; Documented for C
MF
@ -45,7 +45,7 @@ Java
; Documented for C
MMD_
Java Undocumented
Java Undocumented RejectDriver
; Documented for C
MP
@ -209,7 +209,7 @@ Java Joined
Set the target VM version
version
Java
Java RejectDriver
;
; Warnings handled by ecj.

View File

@ -78,6 +78,8 @@ function switch_flags (flags)
result = result \
test_flag("Common", flags, " | CL_COMMON") \
test_flag("Target", flags, " | CL_TARGET") \
test_flag("Driver", flags, " | CL_DRIVER") \
test_flag("RejectDriver", flags, " | CL_REJECT_DRIVER") \
test_flag("Save", flags, " | CL_SAVE") \
test_flag("Joined", flags, " | CL_JOINED") \
test_flag("JoinedOrMissing", flags, " | CL_JOINED | CL_MISSING_OK") \
@ -128,7 +130,7 @@ function static_var(name, flags)
# Return the type of variable that should be associated with the given flags.
function var_type(flags)
{
if (!flag_set_p("Joined.*", flags))
if (!flag_set_p("Joined.*", flags) && !flag_set_p("Separate", flags))
return "int "
else if (flag_set_p("UInteger", flags))
return "int "
@ -143,7 +145,7 @@ function var_type_struct(flags)
{
if (flag_set_p("UInteger", flags))
return "int "
else if (!flag_set_p("Joined.*", flags)) {
else if (!flag_set_p("Joined.*", flags) && !flag_set_p("Separate", flags)) {
if (flag_set_p(".*Mask.*", flags))
return "int "
else

View File

@ -128,8 +128,9 @@ integral_argument (const char *arg)
}
/* Decode the switch beginning at ARGV for the language indicated by
LANG_MASK, into the structure *DECODED. Returns the number of
switches consumed. */
LANG_MASK (including CL_COMMON and CL_TARGET if applicable), into
the structure *DECODED. Returns the number of switches
consumed. */
static unsigned int
decode_cmdline_option (const char **argv, unsigned int lang_mask,
@ -147,7 +148,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
opt = argv[0];
opt_index = find_opt (opt + 1, lang_mask | CL_COMMON | CL_TARGET);
opt_index = find_opt (opt + 1, lang_mask);
if (opt_index == OPT_SPECIAL_unknown
&& (opt[1] == 'W' || opt[1] == 'f' || opt[1] == 'm')
&& opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
@ -161,7 +162,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
memcpy (dup + 2, opt + 5, len - 2 + 1);
opt = dup;
value = 0;
opt_index = find_opt (opt + 1, lang_mask | CL_COMMON | CL_TARGET);
opt_index = find_opt (opt + 1, lang_mask);
}
if (opt_index == OPT_SPECIAL_unknown)
@ -218,11 +219,11 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
}
/* Check if this is a switch for a different front end. */
if (!(option->flags & (lang_mask | CL_COMMON | CL_TARGET)))
if (!(option->flags & lang_mask))
errors |= CL_ERR_WRONG_LANG;
else if ((option->flags & CL_TARGET)
&& (option->flags & CL_LANG_ALL)
&& !(option->flags & lang_mask))
&& (option->flags & (CL_LANG_ALL | CL_DRIVER))
&& !(option->flags & (lang_mask & ~CL_COMMON & ~CL_TARGET)))
/* Complain for target flag language mismatches if any languages
are specified. */
errors |= CL_ERR_WRONG_LANG;
@ -301,8 +302,9 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
array and *DECODED_OPTIONS_COUNT to the number of entries in the
array. The first entry in the array is always one for the program
name (OPT_SPECIAL_program_name). LANG_MASK indicates the language
applicable for decoding. Do not produce any diagnostics or set
state outside of these variables. */
flags applicable for decoding (including CL_COMMON and CL_TARGET if
those options should be considered applicable). Do not produce any
diagnostics or set state outside of these variables. */
void
decode_cmdline_options_to_array (unsigned int argc, const char **argv,

View File

@ -418,17 +418,27 @@ complain_wrong_lang (const struct cl_decoded_option *decoded,
{
const struct cl_option *option = &cl_options[decoded->opt_index];
const char *text = decoded->orig_option_with_args_text;
char *ok_langs, *bad_lang;
char *ok_langs = NULL, *bad_lang = NULL;
unsigned int opt_flags = option->flags;
if (!lang_hooks.complain_wrong_lang_p (option))
return;
ok_langs = write_langs (option->flags);
bad_lang = write_langs (lang_mask);
opt_flags &= ((1U << cl_lang_count) - 1) | CL_DRIVER;
if (opt_flags != CL_DRIVER)
ok_langs = write_langs (opt_flags);
if (lang_mask != CL_DRIVER)
bad_lang = write_langs (lang_mask);
/* Eventually this should become a hard error IMO. */
warning (0, "command line option \"%s\" is valid for %s but not for %s",
text, ok_langs, bad_lang);
if (opt_flags == CL_DRIVER)
error ("command line option %qs is valid for the driver but not for %s",
text, bad_lang);
else if (lang_mask == CL_DRIVER)
gcc_unreachable ();
else
/* Eventually this should become a hard error IMO. */
warning (0, "command line option %qs is valid for %s but not for %s",
text, ok_langs, bad_lang);
free (ok_langs);
free (bad_lang);
@ -681,7 +691,8 @@ decode_options (unsigned int argc, const char **argv,
else
lang_mask = initial_lang_mask;
decode_cmdline_options_to_array (argc, argv, lang_mask,
decode_cmdline_options_to_array (argc, argv,
lang_mask | CL_COMMON | CL_TARGET,
decoded_options, decoded_options_count);
if (first_time_p)
/* Perform language-specific options initialization. */
@ -1193,6 +1204,12 @@ print_filtered_help (unsigned int include_flags,
if ((option->flags & exclude_flags) != 0)
continue;
/* The driver currently prints its own help text. */
if ((option->flags & CL_DRIVER) != 0
&& (option->flags & (((1U << cl_lang_count) - 1)
| CL_COMMON | CL_TARGET)) == 0)
continue;
found = true;
/* Skip switches that have already been printed. */
if (printed[i])
@ -1333,6 +1350,7 @@ print_specific_help (unsigned int include_flags,
switch (flag & include_flags)
{
case 0:
case CL_DRIVER:
break;
case CL_TARGET:
@ -1436,7 +1454,8 @@ common_handle_option (const struct cl_decoded_option *decoded,
print_specific_help (0, undoc_mask, all_langs_mask);
/* Then display any remaining, non-language options. */
for (i = CL_MIN_OPTION_CLASS; i <= CL_MAX_OPTION_CLASS; i <<= 1)
print_specific_help (i, undoc_mask, 0);
if (i != CL_DRIVER)
print_specific_help (i, undoc_mask, 0);
exit_after_options = true;
break;
}

View File

@ -67,11 +67,12 @@ extern const unsigned int cl_options_count;
extern const char *const lang_names[];
extern const unsigned int cl_lang_count;
#define CL_PARAMS (1 << 17) /* Fake entry. Used to display --param info with --help. */
#define CL_WARNING (1 << 18) /* Enables an (optional) warning message. */
#define CL_OPTIMIZATION (1 << 19) /* Enables an (optional) optimization. */
#define CL_TARGET (1 << 20) /* Target-specific option. */
#define CL_COMMON (1 << 21) /* Language-independent. */
#define CL_PARAMS (1 << 15) /* Fake entry. Used to display --param info with --help. */
#define CL_WARNING (1 << 16) /* Enables an (optional) warning message. */
#define CL_OPTIMIZATION (1 << 17) /* Enables an (optional) optimization. */
#define CL_DRIVER (1 << 18) /* Driver option. */
#define CL_TARGET (1 << 19) /* Target-specific option. */
#define CL_COMMON (1 << 20) /* Language-independent. */
#define CL_MIN_OPTION_CLASS CL_PARAMS
#define CL_MAX_OPTION_CLASS CL_COMMON
@ -81,6 +82,7 @@ extern const unsigned int cl_lang_count;
This distinction is important because --help will not list options
which only have these higher bits set. */
#define CL_REJECT_DRIVER (1 << 21) /* Reject this option in the driver. */
#define CL_SAVE (1 << 22) /* Target-specific option for attribute. */
#define CL_DISABLED (1 << 23) /* Disabled in this configuration. */
#define CL_REPORT (1 << 24) /* Report argument with -fverbose-asm */