Commit 603349bf by Joseph Myers Committed by Joseph Myers

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
parent 4b228e61
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> 2010-08-16 Richard Guenther <rguenther@suse.de>
* tree-cfg.c (verify_types_in_gimple_reference): Verify * tree-cfg.c (verify_types_in_gimple_reference): Verify
......
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* c.opt (MDX, MMDX, lang-asm): Mark RejectDriver.
2010-08-12 Joseph Myers <joseph@codesourcery.com> 2010-08-12 Joseph Myers <joseph@codesourcery.com>
* c.opt (MD, MMD): Change to MDX and MMDX. * c.opt (MD, MMD): Change to MDX and MMDX.
......
...@@ -73,7 +73,7 @@ C ObjC C++ ObjC++ ...@@ -73,7 +73,7 @@ C ObjC C++ ObjC++
Generate make dependencies Generate make dependencies
MDX 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 -MD Generate make dependencies and compile
MF MF
...@@ -89,7 +89,7 @@ C ObjC C++ ObjC++ ...@@ -89,7 +89,7 @@ C ObjC C++ ObjC++
Like -M but ignore system header files Like -M but ignore system header files
MMDX 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 -MMD Like -MD but ignore system header files
MP MP
...@@ -926,7 +926,7 @@ C ObjC C++ ObjC++ Joined Separate ...@@ -926,7 +926,7 @@ C ObjC C++ ObjC++ Joined Separate
-iwithprefixbefore <dir> Add <dir> to the end of the main include path -iwithprefixbefore <dir> Add <dir> to the end of the main include path
lang-asm lang-asm
C Undocumented C Undocumented RejectDriver
nostdinc nostdinc
C ObjC C++ ObjC++ C ObjC C++ ObjC++
......
...@@ -23,39 +23,51 @@ ...@@ -23,39 +23,51 @@
; Please try to keep this file in ASCII collating order. ; Please try to keep this file in ASCII collating order.
###
Driver
-help -help
Common Common Driver
Display this information Display this information
-help= -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 --help=<class> Display descriptions of a specific class of options. <class> is one or more of optimizers, target, warnings, undocumented, params
-target-help -target-help
Common Common Driver
Alias for --help=target Alias for --help=target
;; The following four entries are to work around the gcc driver ;; The following four entries are to work around the gcc driver
;; program's insatiable desire to turn options starting with a ;; program's insatiable desire to turn options starting with a
;; double dash (--) into options starting with a dash f (-f). ;; double dash (--) into options starting with a dash f (-f).
fhelp fhelp
Common Var(help_flag) Common Driver Var(help_flag)
fhelp= fhelp=
Common Joined Common Driver Joined
ftarget-help ftarget-help
Common Common Driver
fversion fversion
Common Common Driver
-param -param
Common Separate Common Separate
--param <param>=<value> Set parameter <param> to value. See below for a complete list of parameters --param <param>=<value> Set parameter <param> to value. See below for a complete list of parameters
-sysroot=
Driver JoinedOrMissing
-version -version
Common Common Driver
B
Driver Joined Separate
E
Driver
O O
Common JoinedOrMissing Optimization Common JoinedOrMissing Optimization
...@@ -69,10 +81,22 @@ Ofast ...@@ -69,10 +81,22 @@ Ofast
Common Optimization Common Optimization
Optimize for speed disregarding exact standards compliance Optimize for speed disregarding exact standards compliance
S
Driver
W W
Common RejectNegative Var(extra_warnings) Warning Common RejectNegative Var(extra_warnings) Warning
This switch is deprecated; use -Wextra instead This switch is deprecated; use -Wextra instead
Wa,
Driver JoinedOrMissing
Wl,
Driver JoinedOrMissing
Wp,
Driver JoinedOrMissing
Waggregate-return Waggregate-return
Common Var(warn_aggregate_return) Warning Common Var(warn_aggregate_return) Warning
Warn about returning structures, unions or arrays Warn about returning structures, unions or arrays
...@@ -260,6 +284,15 @@ Wcoverage-mismatch ...@@ -260,6 +284,15 @@ Wcoverage-mismatch
Common Var(warn_coverage_mismatch) Init(1) Warning Common Var(warn_coverage_mismatch) Init(1) Warning
Warn in case profiles in -fprofile-use do not match Warn in case profiles in -fprofile-use do not match
Xassembler
Driver Separate
Xlinker
Driver Separate
Xpreprocessor
Driver Separate
aux-info aux-info
Common Separate Common Separate
-aux-info <file> Emit declaration information into <file> -aux-info <file> Emit declaration information into <file>
...@@ -268,10 +301,16 @@ aux-info= ...@@ -268,10 +301,16 @@ aux-info=
Common Joined Common Joined
auxbase auxbase
Common Separate Common Separate RejectDriver
auxbase-strip auxbase-strip
Common Separate Common Separate RejectDriver
combine
Driver Var(combine_flag)
c
Driver
d d
Common Joined Common Joined
...@@ -285,6 +324,15 @@ dumpdir ...@@ -285,6 +324,15 @@ dumpdir
Common Separate Common Separate
-dumpdir <dir> Set the directory name to be used for dumps -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: ; 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 ; 0: The version of the ABI believed most conformant with the C++ ABI
...@@ -410,12 +458,16 @@ fcommon ...@@ -410,12 +458,16 @@ fcommon
Common Report Var(flag_no_common,0) Optimization Common Report Var(flag_no_common,0) Optimization
Do not put uninitialized globals in the common section Do not put uninitialized globals in the common section
fcompare-debug
Driver
; Converted by the driver to -fcompare-debug= options.
fcompare-debug= 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[=<opts>] Compile with and without e.g. -gtoggle, and compare the final-insns dump
fcompare-debug-second fcompare-debug-second
Common RejectNegative Var(flag_compare_debug) Common Driver RejectNegative Var(flag_compare_debug)
Run only the second compilation of -fcompare-debug Run only the second compilation of -fcompare-debug
fconserve-stack fconserve-stack
...@@ -1587,14 +1639,23 @@ iplugindir= ...@@ -1587,14 +1639,23 @@ iplugindir=
Common Joined Var(plugindir_string) Init(0) Common Joined Var(plugindir_string) Init(0)
-iplugindir=<dir> Set <dir> to be the default plugin directory -iplugindir=<dir> Set <dir> to be the default plugin directory
l
Driver Joined Separate
no-canonical-prefixes
Driver
o o
Common Joined Separate MissingArgError(missing filename after %qs) Common Driver Joined Separate MissingArgError(missing filename after %qs)
-o <file> Place output into <file> -o <file> Place output into <file>
p p
Common Var(profile_flag) Common Var(profile_flag)
Enable function profiling Enable function profiling
pass-exit-codes
Driver Var(pass_exit_codes)
pedantic pedantic
Common Var(pedantic) Common Var(pedantic)
Issue warnings needed for strict compliance to the standard Issue warnings needed for strict compliance to the standard
...@@ -1603,22 +1664,92 @@ pedantic-errors ...@@ -1603,22 +1664,92 @@ pedantic-errors
Common Common
Like -pedantic but issue them as errors 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 quiet
Common Var(quiet_flag) Common Var(quiet_flag) RejectDriver
Do not display functions compiled or elapsed time 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 version
Common Var(version_flag) Common Var(version_flag) RejectDriver
Display the compiler's version Display the compiler's version
w w
Common Var(inhibit_warnings) Common Var(inhibit_warnings)
Suppress warnings Suppress warnings
wrapper
Driver Separate Var(wrapper_string)
x
Driver Joined Separate
shared shared
Common RejectNegative Negative(pie) Common RejectNegative Negative(pie)
Create a shared library 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 pie
Common RejectNegative Negative(shared) Common RejectNegative Negative(shared)
Create a position independent executable Create a position independent executable
......
...@@ -102,6 +102,10 @@ The option is available for all languages and targets. ...@@ -102,6 +102,10 @@ The option is available for all languages and targets.
@item Target @item Target
The option is available for all languages but is target-specific. 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} @item @var{language}
The option is available when compiling for the given 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 ...@@ -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 option. Each @var{language} must have been declared by an earlier
@code{Language} record. @xref{Option file format}. @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 @item RejectNegative
The option does not have a ``no-'' form. All options beginning with 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 ``f'', ``W'' or ``m'' are assumed to have a ``no-'' form unless this
......
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* lang.opt (MDX, MMDX): Mark RejectDriver.
2010-08-15 Janus Weil <janus@gcc.gnu.org> 2010-08-15 Janus Weil <janus@gcc.gnu.org>
* trans-expr.c (gfc_trans_assign_vtab_procs): Clean up (we don't have * trans-expr.c (gfc_trans_assign_vtab_procs): Clean up (we don't have
......
...@@ -61,7 +61,7 @@ Fortran ...@@ -61,7 +61,7 @@ Fortran
; Documented in C ; Documented in C
MDX MDX
Fortran Separate Fortran Separate RejectDriver
; Documented in C ; Documented in C
MF MF
...@@ -77,7 +77,7 @@ Fortran ...@@ -77,7 +77,7 @@ Fortran
; Documented in C ; Documented in C
MMDX MMDX
Fortran Separate Fortran Separate RejectDriver
; Documented in C ; Documented in C
MP MP
......
2010-08-16 Joseph Myers <joseph@codesourcery.com>
* lang.opt (MD_, MMD_, version): Mark RejectDriver.
2010-08-05 David Daney <ddaney@caviumnetworks.com> 2010-08-05 David Daney <ddaney@caviumnetworks.com>
* class.c (build_utf8_ref): Fix code formatting from previous commit. * class.c (build_utf8_ref): Fix code formatting from previous commit.
......
...@@ -33,7 +33,7 @@ Java ...@@ -33,7 +33,7 @@ Java
; Documented for C ; Documented for C
MD_ MD_
Java Undocumented Java Undocumented RejectDriver
; Documented for C ; Documented for C
MF MF
...@@ -45,7 +45,7 @@ Java ...@@ -45,7 +45,7 @@ Java
; Documented for C ; Documented for C
MMD_ MMD_
Java Undocumented Java Undocumented RejectDriver
; Documented for C ; Documented for C
MP MP
...@@ -209,7 +209,7 @@ Java Joined ...@@ -209,7 +209,7 @@ Java Joined
Set the target VM version Set the target VM version
version version
Java Java RejectDriver
; ;
; Warnings handled by ecj. ; Warnings handled by ecj.
......
...@@ -78,6 +78,8 @@ function switch_flags (flags) ...@@ -78,6 +78,8 @@ function switch_flags (flags)
result = result \ result = result \
test_flag("Common", flags, " | CL_COMMON") \ test_flag("Common", flags, " | CL_COMMON") \
test_flag("Target", flags, " | CL_TARGET") \ 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("Save", flags, " | CL_SAVE") \
test_flag("Joined", flags, " | CL_JOINED") \ test_flag("Joined", flags, " | CL_JOINED") \
test_flag("JoinedOrMissing", flags, " | CL_JOINED | CL_MISSING_OK") \ test_flag("JoinedOrMissing", flags, " | CL_JOINED | CL_MISSING_OK") \
...@@ -128,7 +130,7 @@ function static_var(name, flags) ...@@ -128,7 +130,7 @@ function static_var(name, flags)
# Return the type of variable that should be associated with the given flags. # Return the type of variable that should be associated with the given flags.
function var_type(flags) function var_type(flags)
{ {
if (!flag_set_p("Joined.*", flags)) if (!flag_set_p("Joined.*", flags) && !flag_set_p("Separate", flags))
return "int " return "int "
else if (flag_set_p("UInteger", flags)) else if (flag_set_p("UInteger", flags))
return "int " return "int "
...@@ -143,7 +145,7 @@ function var_type_struct(flags) ...@@ -143,7 +145,7 @@ function var_type_struct(flags)
{ {
if (flag_set_p("UInteger", flags)) if (flag_set_p("UInteger", flags))
return "int " 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)) if (flag_set_p(".*Mask.*", flags))
return "int " return "int "
else else
......
...@@ -128,8 +128,9 @@ integral_argument (const char *arg) ...@@ -128,8 +128,9 @@ integral_argument (const char *arg)
} }
/* Decode the switch beginning at ARGV for the language indicated by /* Decode the switch beginning at ARGV for the language indicated by
LANG_MASK, into the structure *DECODED. Returns the number of LANG_MASK (including CL_COMMON and CL_TARGET if applicable), into
switches consumed. */ the structure *DECODED. Returns the number of switches
consumed. */
static unsigned int static unsigned int
decode_cmdline_option (const char **argv, unsigned int lang_mask, decode_cmdline_option (const char **argv, unsigned int lang_mask,
...@@ -147,7 +148,7 @@ 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 = 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 if (opt_index == OPT_SPECIAL_unknown
&& (opt[1] == 'W' || opt[1] == 'f' || opt[1] == 'm') && (opt[1] == 'W' || opt[1] == 'f' || opt[1] == 'm')
&& opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-') && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
...@@ -161,7 +162,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, ...@@ -161,7 +162,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask,
memcpy (dup + 2, opt + 5, len - 2 + 1); memcpy (dup + 2, opt + 5, len - 2 + 1);
opt = dup; opt = dup;
value = 0; 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) if (opt_index == OPT_SPECIAL_unknown)
...@@ -218,11 +219,11 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, ...@@ -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. */ /* 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; errors |= CL_ERR_WRONG_LANG;
else if ((option->flags & CL_TARGET) else if ((option->flags & CL_TARGET)
&& (option->flags & CL_LANG_ALL) && (option->flags & (CL_LANG_ALL | CL_DRIVER))
&& !(option->flags & lang_mask)) && !(option->flags & (lang_mask & ~CL_COMMON & ~CL_TARGET)))
/* Complain for target flag language mismatches if any languages /* Complain for target flag language mismatches if any languages
are specified. */ are specified. */
errors |= CL_ERR_WRONG_LANG; errors |= CL_ERR_WRONG_LANG;
...@@ -301,8 +302,9 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, ...@@ -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 and *DECODED_OPTIONS_COUNT to the number of entries in the
array. The first entry in the array is always one for the program array. The first entry in the array is always one for the program
name (OPT_SPECIAL_program_name). LANG_MASK indicates the language name (OPT_SPECIAL_program_name). LANG_MASK indicates the language
applicable for decoding. Do not produce any diagnostics or set flags applicable for decoding (including CL_COMMON and CL_TARGET if
state outside of these variables. */ those options should be considered applicable). Do not produce any
diagnostics or set state outside of these variables. */
void void
decode_cmdline_options_to_array (unsigned int argc, const char **argv, decode_cmdline_options_to_array (unsigned int argc, const char **argv,
......
...@@ -418,17 +418,27 @@ complain_wrong_lang (const struct cl_decoded_option *decoded, ...@@ -418,17 +418,27 @@ complain_wrong_lang (const struct cl_decoded_option *decoded,
{ {
const struct cl_option *option = &cl_options[decoded->opt_index]; const struct cl_option *option = &cl_options[decoded->opt_index];
const char *text = decoded->orig_option_with_args_text; 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)) if (!lang_hooks.complain_wrong_lang_p (option))
return; return;
ok_langs = write_langs (option->flags); opt_flags &= ((1U << cl_lang_count) - 1) | CL_DRIVER;
bad_lang = write_langs (lang_mask); if (opt_flags != CL_DRIVER)
ok_langs = write_langs (opt_flags);
/* Eventually this should become a hard error IMO. */ if (lang_mask != CL_DRIVER)
warning (0, "command line option \"%s\" is valid for %s but not for %s", bad_lang = write_langs (lang_mask);
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 (ok_langs);
free (bad_lang); free (bad_lang);
...@@ -681,7 +691,8 @@ decode_options (unsigned int argc, const char **argv, ...@@ -681,7 +691,8 @@ decode_options (unsigned int argc, const char **argv,
else else
lang_mask = initial_lang_mask; 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); decoded_options, decoded_options_count);
if (first_time_p) if (first_time_p)
/* Perform language-specific options initialization. */ /* Perform language-specific options initialization. */
...@@ -1193,6 +1204,12 @@ print_filtered_help (unsigned int include_flags, ...@@ -1193,6 +1204,12 @@ print_filtered_help (unsigned int include_flags,
if ((option->flags & exclude_flags) != 0) if ((option->flags & exclude_flags) != 0)
continue; 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; found = true;
/* Skip switches that have already been printed. */ /* Skip switches that have already been printed. */
if (printed[i]) if (printed[i])
...@@ -1333,6 +1350,7 @@ print_specific_help (unsigned int include_flags, ...@@ -1333,6 +1350,7 @@ print_specific_help (unsigned int include_flags,
switch (flag & include_flags) switch (flag & include_flags)
{ {
case 0: case 0:
case CL_DRIVER:
break; break;
case CL_TARGET: case CL_TARGET:
...@@ -1436,7 +1454,8 @@ common_handle_option (const struct cl_decoded_option *decoded, ...@@ -1436,7 +1454,8 @@ common_handle_option (const struct cl_decoded_option *decoded,
print_specific_help (0, undoc_mask, all_langs_mask); print_specific_help (0, undoc_mask, all_langs_mask);
/* Then display any remaining, non-language options. */ /* Then display any remaining, non-language options. */
for (i = CL_MIN_OPTION_CLASS; i <= CL_MAX_OPTION_CLASS; i <<= 1) 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; exit_after_options = true;
break; break;
} }
......
...@@ -67,11 +67,12 @@ extern const unsigned int cl_options_count; ...@@ -67,11 +67,12 @@ extern const unsigned int cl_options_count;
extern const char *const lang_names[]; extern const char *const lang_names[];
extern const unsigned int cl_lang_count; extern const unsigned int cl_lang_count;
#define CL_PARAMS (1 << 17) /* Fake entry. Used to display --param info with --help. */ #define CL_PARAMS (1 << 15) /* Fake entry. Used to display --param info with --help. */
#define CL_WARNING (1 << 18) /* Enables an (optional) warning message. */ #define CL_WARNING (1 << 16) /* Enables an (optional) warning message. */
#define CL_OPTIMIZATION (1 << 19) /* Enables an (optional) optimization. */ #define CL_OPTIMIZATION (1 << 17) /* Enables an (optional) optimization. */
#define CL_TARGET (1 << 20) /* Target-specific option. */ #define CL_DRIVER (1 << 18) /* Driver option. */
#define CL_COMMON (1 << 21) /* Language-independent. */ #define CL_TARGET (1 << 19) /* Target-specific option. */
#define CL_COMMON (1 << 20) /* Language-independent. */
#define CL_MIN_OPTION_CLASS CL_PARAMS #define CL_MIN_OPTION_CLASS CL_PARAMS
#define CL_MAX_OPTION_CLASS CL_COMMON #define CL_MAX_OPTION_CLASS CL_COMMON
...@@ -81,6 +82,7 @@ extern const unsigned int cl_lang_count; ...@@ -81,6 +82,7 @@ extern const unsigned int cl_lang_count;
This distinction is important because --help will not list options This distinction is important because --help will not list options
which only have these higher bits set. */ 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_SAVE (1 << 22) /* Target-specific option for attribute. */
#define CL_DISABLED (1 << 23) /* Disabled in this configuration. */ #define CL_DISABLED (1 << 23) /* Disabled in this configuration. */
#define CL_REPORT (1 << 24) /* Report argument with -fverbose-asm */ #define CL_REPORT (1 << 24) /* Report argument with -fverbose-asm */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment