diff options
author | Martin Liska <mliska@suse.cz> | 2017-08-29 09:46:10 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2017-08-29 07:46:10 +0000 |
commit | 130fcab02f1fbb097fc52fc9a8892472e3fa0c6c (patch) | |
tree | 046ad3bcd18ba4f41c0aa0e8b5abc176198fc723 /gcc | |
parent | faa5399be693b2cdea641b976156f0fc89fa10cf (diff) | |
download | gcc-130fcab02f1fbb097fc52fc9a8892472e3fa0c6c.zip gcc-130fcab02f1fbb097fc52fc9a8892472e3fa0c6c.tar.gz gcc-130fcab02f1fbb097fc52fc9a8892472e3fa0c6c.tar.bz2 |
Fix --help=target (PR other/39851).
2017-08-29 Martin Liska <mliska@suse.cz>
PR other/39851
* gcc.c (driver_handle_option): Add new argument.
* opts-common.c (handle_option): Pass
target_option_override_hook.
* opts-global.c (lang_handle_option): Add new option.
(set_default_handlers): Add new argument.
(decode_options): Likewise.
* opts.c (target_handle_option): Likewise.
(common_handle_option): Call target_option_override_hook.
* opts.h (struct cl_option_handler_func): Add hook for
target option override.
(struct cl_option_handlers): Likewise.
(set_default_handlers): Add new argument.
(decode_options): Likewise.
(common_handle_option): Likewise.
(target_handle_option): Likewise.
* toplev.c (toplev::main): Pass targetm.target_option.override
hook.
2017-08-29 Martin Liska <mliska@suse.cz>
PR other/39851
* c-common.c (parse_optimize_options): Add argument to function
call.
* c-pragma.c (handle_pragma_diagnostic): Likewise.
From-SVN: r251400
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 2 | ||||
-rw-r--r-- | gcc/c-family/c-pragma.c | 2 | ||||
-rw-r--r-- | gcc/gcc.c | 3 | ||||
-rw-r--r-- | gcc/opts-common.c | 3 | ||||
-rw-r--r-- | gcc/opts-global.c | 12 | ||||
-rw-r--r-- | gcc/opts.c | 14 | ||||
-rw-r--r-- | gcc/opts.h | 18 | ||||
-rw-r--r-- | gcc/toplev.c | 3 |
10 files changed, 67 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 682f405..6c853d9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2017-08-29 Martin Liska <mliska@suse.cz> + + PR other/39851 + * gcc.c (driver_handle_option): Add new argument. + * opts-common.c (handle_option): Pass + target_option_override_hook. + * opts-global.c (lang_handle_option): Add new option. + (set_default_handlers): Add new argument. + (decode_options): Likewise. + * opts.c (target_handle_option): Likewise. + (common_handle_option): Call target_option_override_hook. + * opts.h (struct cl_option_handler_func): Add hook for + target option override. + (struct cl_option_handlers): Likewise. + (set_default_handlers): Add new argument. + (decode_options): Likewise. + (common_handle_option): Likewise. + (target_handle_option): Likewise. + * toplev.c (toplev::main): Pass targetm.target_option.override + hook. + 2017-08-29 Richard Biener <rguenther@suse.de> Dominik Infuehr <dominik.infuehr@theobroma-systems.com> diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 3dd5055..fc5a807 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2017-08-29 Martin Liska <mliska@suse.cz> + + PR other/39851 + * c-common.c (parse_optimize_options): Add argument to function + call. + * c-pragma.c (handle_pragma_diagnostic): Likewise. + 2017-08-24 David Malcolm <dmalcolm@redhat.com> * c-lex.c (interpret_float): Use token location diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 156c89d..f4f2819 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -5497,7 +5497,7 @@ parse_optimize_options (tree args, bool attr_p) /* And apply them. */ decode_options (&global_options, &global_options_set, decoded_options, decoded_options_count, - input_location, global_dc); + input_location, global_dc, NULL); targetm.override_options_after_change(); diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index 48b02b8..3b49aef 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -815,7 +815,7 @@ handle_pragma_diagnostic(cpp_reader *ARG_UNUSED(dummy)) } struct cl_option_handlers handlers; - set_default_handlers (&handlers); + set_default_handlers (&handlers, NULL); const char *arg = NULL; if (cl_options[option_index].flags & CL_JOINED) arg = option_string + 1 + cl_options[option_index].opt_len; @@ -3769,7 +3769,8 @@ driver_handle_option (struct gcc_options *opts, unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, location_t loc, const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, - diagnostic_context *dc) + diagnostic_context *dc, + void (*) (void)) { size_t opt_index = decoded->opt_index; const char *arg = decoded->arg; diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 0cab42a..d756814 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -993,7 +993,8 @@ handle_option (struct gcc_options *opts, { if (!handlers->handlers[i].handler (opts, opts_set, decoded, lang_mask, kind, loc, - handlers, dc)) + handlers, dc, + handlers->target_option_override_hook)) return false; } diff --git a/gcc/opts-global.c b/gcc/opts-global.c index fc55512..343dbd3 100644 --- a/gcc/opts-global.c +++ b/gcc/opts-global.c @@ -169,7 +169,8 @@ lang_handle_option (struct gcc_options *opts, unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc) + diagnostic_context *dc, + void (*) (void)) { gcc_assert (opts == &global_options); gcc_assert (opts_set == &global_options_set); @@ -269,10 +270,12 @@ decode_cmdline_options_to_array_default_mask (unsigned int argc, /* Set *HANDLERS to the default set of option handlers for use in the compilers proper (not the driver). */ void -set_default_handlers (struct cl_option_handlers *handlers) +set_default_handlers (struct cl_option_handlers *handlers, + void (*target_option_override_hook) (void)) { handlers->unknown_option_callback = unknown_option_callback; handlers->wrong_lang_callback = complain_wrong_lang; + handlers->target_option_override_hook = target_option_override_hook; handlers->num_handlers = 3; handlers->handlers[0].handler = lang_handle_option; handlers->handlers[0].mask = initial_lang_mask; @@ -290,7 +293,8 @@ void decode_options (struct gcc_options *opts, struct gcc_options *opts_set, struct cl_decoded_option *decoded_options, unsigned int decoded_options_count, - location_t loc, diagnostic_context *dc) + location_t loc, diagnostic_context *dc, + void (*target_option_override_hook) (void)) { struct cl_option_handlers handlers; @@ -298,7 +302,7 @@ decode_options (struct gcc_options *opts, struct gcc_options *opts_set, lang_mask = initial_lang_mask; - set_default_handlers (&handlers); + set_default_handlers (&handlers, target_option_override_hook); default_options_optimization (opts, opts_set, decoded_options, decoded_options_count, @@ -217,7 +217,7 @@ target_handle_option (struct gcc_options *opts, unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, location_t loc, const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, - diagnostic_context *dc) + diagnostic_context *dc, void (*) (void)) { gcc_assert (dc == global_dc); gcc_assert (kind == DK_UNSPECIFIED); @@ -1716,7 +1716,8 @@ common_handle_option (struct gcc_options *opts, unsigned int lang_mask, int kind ATTRIBUTE_UNUSED, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc) + diagnostic_context *dc, + void (*target_option_override_hook) (void)) { size_t scode = decoded->opt_index; const char *arg = decoded->arg; @@ -1743,6 +1744,7 @@ common_handle_option (struct gcc_options *opts, undoc_mask = ((opts->x_verbose_flag | opts->x_extra_warnings) ? 0 : CL_UNDOCUMENTED); + target_option_override_hook (); /* First display any single language specific options. */ for (i = 0; i < cl_lang_count; i++) print_specific_help @@ -1762,6 +1764,7 @@ common_handle_option (struct gcc_options *opts, if (lang_mask == CL_DRIVER) break; + target_option_override_hook (); print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0, opts, lang_mask); opts->x_exit_after_options = true; break; @@ -1888,8 +1891,11 @@ common_handle_option (struct gcc_options *opts, } if (include_flags) - print_specific_help (include_flags, exclude_flags, 0, opts, - lang_mask); + { + target_option_override_hook (); + print_specific_help (include_flags, exclude_flags, 0, opts, + lang_mask); + } opts->x_exit_after_options = true; break; } @@ -272,7 +272,8 @@ struct cl_option_handler_func const struct cl_decoded_option *decoded, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); /* The mask that must have some bit in common with the flags for the option for this particular handler to be used. */ @@ -294,6 +295,9 @@ struct cl_option_handlers void (*wrong_lang_callback) (const struct cl_decoded_option *decoded, unsigned int lang_mask); + /* Target option override hook. */ + void (*target_option_override_hook) (void); + /* The number of individual handlers. */ size_t num_handlers; @@ -338,13 +342,15 @@ extern void decode_cmdline_options_to_array_default_mask (unsigned int argc, const char **argv, struct cl_decoded_option **decoded_options, unsigned int *decoded_options_count); -extern void set_default_handlers (struct cl_option_handlers *handlers); +extern void set_default_handlers (struct cl_option_handlers *handlers, + void (*target_option_override_hook) (void)); extern void decode_options (struct gcc_options *opts, struct gcc_options *opts_set, struct cl_decoded_option *decoded_options, unsigned int decoded_options_count, location_t loc, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern int option_enabled (int opt_idx, void *opts); extern bool get_option_state (struct gcc_options *, int, struct cl_option_state *); @@ -391,14 +397,16 @@ extern bool common_handle_option (struct gcc_options *opts, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern bool target_handle_option (struct gcc_options *opts, struct gcc_options *opts_set, const struct cl_decoded_option *decoded, unsigned int lang_mask, int kind, location_t loc, const struct cl_option_handlers *handlers, - diagnostic_context *dc); + diagnostic_context *dc, + void (*target_option_override_hook) (void)); extern void finish_options (struct gcc_options *opts, struct gcc_options *opts_set, location_t loc); diff --git a/gcc/toplev.c b/gcc/toplev.c index d23714c..7d2b8ff 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -2149,7 +2149,8 @@ toplev::main (int argc, char **argv) enough to default flags appropriately. */ decode_options (&global_options, &global_options_set, save_decoded_options, save_decoded_options_count, - UNKNOWN_LOCATION, global_dc); + UNKNOWN_LOCATION, global_dc, + targetm.target_option.override); handle_common_deferred_options (); |