summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-15 08:18:34 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-15 08:18:34 +0000
commit4972d77dcbe0c4186dabc67a0edb7f3f2df4e646 (patch)
tree52b944846d4102b01d2dda2cded3528f46832540
parent4cbd124028447e34139698f4cabf8dc6e444ebd4 (diff)
downloadgcc-4972d77dcbe0c4186dabc67a0edb7f3f2df4e646.tar.gz
Subject: Backport r251400
2017-09-15 Martin Liska <mliska@suse.cz> Backport from mainline 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-09-15 Martin Liska <mliska@suse.cz> Backport from mainline 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@252787 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/c-family/ChangeLog10
-rw-r--r--gcc/c-family/c-common.c2
-rw-r--r--gcc/c-family/c-pragma.c2
-rw-r--r--gcc/gcc.c3
-rw-r--r--gcc/opts-common.c3
-rw-r--r--gcc/opts-global.c12
-rw-r--r--gcc/opts.c14
-rw-r--r--gcc/opts.h18
-rw-r--r--gcc/toplev.c3
10 files changed, 73 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3888c147431..afebdb8f7a1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,6 +1,30 @@
2017-09-15 Martin Liska <mliska@suse.cz>
Backport from mainline
+ 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-09-15 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
2017-08-10 Martin Liska <mliska@suse.cz>
PR c++/81355
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index ef191fee5b2..587f199add1 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,6 +1,16 @@
2017-09-15 Martin Liska <mliska@suse.cz>
Backport from mainline
+ 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-09-15 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
2017-06-28 Martin Liska <mliska@suse.cz>
PR ipa/81128
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 0a7f673cbb1..aa8675514d3 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -5597,7 +5597,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 55c2b68865c..d8ef48beed8 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;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 9a6f3ee700e..c48178f1aa3 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3742,7 +3742,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 f2f7385a4c7..3c2553368ac 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -988,7 +988,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 50bad77c347..bfa2afb1987 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -167,7 +167,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);
@@ -267,10 +268,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;
@@ -288,7 +291,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;
@@ -296,7 +300,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,
diff --git a/gcc/opts.c b/gcc/opts.c
index 3f919c8ba95..f03b57aa343 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -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);
@@ -1678,7 +1678,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;
@@ -1705,6 +1706,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
@@ -1724,6 +1726,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;
@@ -1850,8 +1853,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;
}
diff --git a/gcc/opts.h b/gcc/opts.h
index eb626aa90ec..41847195065 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -267,7 +267,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. */
@@ -289,6 +290,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;
@@ -333,13 +337,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 *);
@@ -384,14 +390,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 f1384fc2fda..f7a753b9cbe 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2115,7 +2115,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 ();