Hi. The patch prints all values requested in multiple --help options.
Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Thanks, Martin gcc/ChangeLog: 2019-05-03 Martin Liska <mli...@suse.cz> PR other/90315 * opts-global.c (decode_options): Print help for all help_option_arguments. * opts.c (print_help): Add new argument. (common_handle_option): Remember all values into help_option_arguments. * opts.h (print_help): Add new argument. --- gcc/opts-global.c | 4 ++-- gcc/opts.c | 7 ++++--- gcc/opts.h | 5 +++-- 3 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/gcc/opts-global.c b/gcc/opts-global.c index e6eaeb20bf7..ce0b1f61603 100644 --- a/gcc/opts-global.c +++ b/gcc/opts-global.c @@ -317,8 +317,8 @@ decode_options (struct gcc_options *opts, struct gcc_options *opts_set, finish_options (opts, opts_set, loc); /* Print --help=* if used. */ - if (help_option_argument != NULL) - print_help (opts, lang_mask); + for (unsigned i = 0; i < help_option_arguments.length (); i++) + print_help (opts, lang_mask, help_option_arguments[i]); } /* Hold command-line options associated with stack limitation. */ diff --git a/gcc/opts.c b/gcc/opts.c index 71adc21cb26..1658046d2be 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -856,7 +856,7 @@ control_options_for_live_patching (struct gcc_options *opts, } /* --help option argument if set. */ -const char *help_option_argument = NULL; +vec<const char *> help_option_arguments; /* After all options at LOC have been read into OPTS and OPTS_SET, @@ -2061,7 +2061,8 @@ check_alignment_argument (location_t loc, const char *flag, const char *name) /* Print help when OPT__help_ is set. */ void -print_help (struct gcc_options *opts, unsigned int lang_mask) +print_help (struct gcc_options *opts, unsigned int lang_mask, + const char *help_option_argument) { const char *a = help_option_argument; unsigned int include_flags = 0; @@ -2254,7 +2255,7 @@ common_handle_option (struct gcc_options *opts, case OPT__help_: { - help_option_argument = arg; + help_option_arguments.safe_push (arg); opts->x_exit_after_options = true; break; } diff --git a/gcc/opts.h b/gcc/opts.h index a8afc2385a9..e5723a946f7 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -419,7 +419,8 @@ extern bool target_handle_option (struct gcc_options *opts, extern void finish_options (struct gcc_options *opts, struct gcc_options *opts_set, location_t loc); -extern void print_help (struct gcc_options *opts, unsigned int lang_mask); +extern void print_help (struct gcc_options *opts, unsigned int lang_mask, const + char *help_option_argument); extern void default_options_optimization (struct gcc_options *opts, struct gcc_options *opts_set, struct cl_decoded_option *decoded_options, @@ -443,7 +444,7 @@ extern const struct sanitizer_opts_s bool can_recover; } sanitizer_opts[]; -extern const char *help_option_argument; +extern vec<const char *> help_option_arguments; extern void add_misspelling_candidates (auto_vec<char *> *candidates, const struct cl_option *option,