Support again multiple --help options (PR other/90315).
authorMartin Liska <mliska@suse.cz>
Tue, 28 May 2019 12:05:50 +0000 (14:05 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 28 May 2019 12:05:50 +0000 (12:05 +0000)
2019-05-28  Martin Liska  <mliska@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.

From-SVN: r271700

gcc/ChangeLog
gcc/opts-global.c
gcc/opts.c
gcc/opts.h

index 4c2bb69a1c833b8305d65c555c8de0ee5003c126..ad36bddd894952f2fb538f57b5e1b6c33d962039 100644 (file)
@@ -1,3 +1,13 @@
+2019-05-28  Martin Liska  <mliska@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.
+
 2019-05-28  Martin Liska  <mliska@suse.cz>
 
        PR ipa/90555
index e6eaeb20bf74603a6c1327363387ae8f5497d872..4aca400b815ff5a042da3dcb837f716e142ff046 100644 (file)
@@ -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.  */
index 2e3e8b20537f6b034813bc506e1d6a8d11261f59..9e396f8571478e4cee4a38b5fa7fef59528b2292 100644 (file)
@@ -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,
@@ -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;
       }
index a8afc2385a9ad386faebe1a34e00aee678bf0c53..e5723a946f7b4417c4cecf4773df683783aa82ff 100644 (file)
@@ -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,