From: Nathan Sidwell Date: Wed, 17 May 2023 23:27:13 +0000 (-0400) Subject: Allow plugin dumps X-Git-Tag: basepoints/gcc-15~9135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=97a36b466ba1420210294f0a1dd7002054ba3b7e;p=thirdparty%2Fgcc.git Allow plugin dumps Defer dump option parsing until plugins are initialized. This allows one to use plugin names for dumps. PR other/99451 gcc/ * opts.h (handle_deferred_dump_options): Declare. * opts-global.cc (handle_common_deferred_options): Do not handle dump options here. (handle_deferred_dump_options): New. * toplev.cc (toplev::main): Call it after plugin init. --- diff --git a/gcc/opts-global.cc b/gcc/opts-global.cc index 054169158b13..a61c701621d4 100644 --- a/gcc/opts-global.cc +++ b/gcc/opts-global.cc @@ -401,7 +401,7 @@ handle_common_deferred_options (void) break; case OPT_fdump_: - g->get_dumps ()->dump_switch_p (opt->arg); + /* Deferred until plugins initialized. */ break; case OPT_fopt_info_: @@ -494,3 +494,21 @@ handle_common_deferred_options (void) } } } + +/* Handle deferred dump options. */ + +void +handle_deferred_dump_options (void) +{ + unsigned int i; + cl_deferred_option *opt; + vec v; + + if (common_deferred_options) + v = *((vec *) common_deferred_options); + else + v = vNULL; + FOR_EACH_VEC_ELT (v, i, opt) + if (opt->opt_index == OPT_fdump_) + g->get_dumps ()->dump_switch_p (opt->arg); +} diff --git a/gcc/opts.h b/gcc/opts.h index 9959a440ca1b..00f377f9ca7e 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -425,6 +425,7 @@ extern void control_warning_option (unsigned int opt_index, int kind, extern char *write_langs (unsigned int mask); extern void print_ignored_options (void); extern void handle_common_deferred_options (void); +extern void handle_deferred_dump_options (void); unsigned int parse_sanitizer_options (const char *, location_t, int, unsigned int, int, bool); diff --git a/gcc/toplev.cc b/gcc/toplev.cc index 8aec9a2de108..6c1a6f443c16 100644 --- a/gcc/toplev.cc +++ b/gcc/toplev.cc @@ -2253,6 +2253,10 @@ toplev::main (int argc, char **argv) initialize_plugins (); + /* Handle the dump options now that plugins have had a chance to install new + passes. */ + handle_deferred_dump_options (); + if (version_flag) print_version (stderr, "", true);