From bc405869c272442b8d39caf1aebc74f90ed2d8c2 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Tue, 28 May 2019 14:05:50 +0200 Subject: [PATCH] Support again multiple --help options (PR other/90315). 2019-05-28 Martin Liska 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. From-SVN: r271700 --- gcc/ChangeLog | 10 ++++++++++ gcc/opts-global.c | 7 +++++-- gcc/opts.c | 7 ++++--- gcc/opts.h | 5 +++-- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4c2bb69a1c8..ad36bddd894 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-05-28 Martin Liska + + 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. + 2019-05-28 Martin Liska PR ipa/90555 diff --git a/gcc/opts-global.c b/gcc/opts-global.c index e6eaeb20bf7..4aca400b815 100644 --- a/gcc/opts-global.c +++ b/gcc/opts-global.c @@ -317,8 +317,11 @@ 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); + unsigned i; + const char *arg; + + FOR_EACH_VEC_ELT (help_option_arguments, i, arg) + print_help (opts, lang_mask, arg); } /* Hold command-line options associated with stack limitation. */ diff --git a/gcc/opts.c b/gcc/opts.c index 2e3e8b20537..9e396f85714 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 help_option_arguments; /* After all options at LOC have been read into OPTS and OPTS_SET, @@ -2062,7 +2062,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; @@ -2255,7 +2256,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 help_option_arguments; extern void add_misspelling_candidates (auto_vec *candidates, const struct cl_option *option, -- 2.30.2