diff options
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/gcc.c | 2 | ||||
-rw-r--r-- | gcc/lto-wrapper.c | 2 | ||||
-rw-r--r-- | gcc/opts.c | 16 | ||||
-rw-r--r-- | gcc/opts.h | 1 |
6 files changed, 32 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e5471c..4770f0f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,17 @@ 2015-11-12 Martin Liska <mliska@suse.cz> + * config/i386/i386.c (ix86_valid_target_attribute_p): + Finalize options at the of the function. + * gcc.c (driver_get_configure_time_options): Call newly + introduced init_opts_obstack. + * lto-wrapper.c (main): Likewise. + * opts.c (init_opts_obstack): New function. + (init_options_struct): Call newly + introduced init_opts_obstack. + * opts.h (init_options_struct): Declare. + +2015-11-12 Martin Liska <mliska@suse.cz> + PR ipa/68035 * ipa-icf.c (void sem_item::set_hash): New function. (sem_function::get_hash): Use renamed m_hash member variable. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1a6b2fd..805f7a8 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -6237,6 +6237,8 @@ ix86_valid_target_attribute_p (tree fndecl, DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl) = new_optimize; } + finalize_options_struct (&func_options); + return ret; } @@ -9915,7 +9915,7 @@ driver_get_configure_time_options (void (*cb) (const char *option, size_t i; obstack_init (&obstack); - gcc_obstack_init (&opts_obstack); + init_opts_obstack (); n_switches = 0; for (i = 0; i < ARRAY_SIZE (option_default_specs); i++) diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 20e67ed..b9ac535 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -1355,7 +1355,7 @@ main (int argc, char *argv[]) { const char *p; - gcc_obstack_init (&opts_obstack); + init_opts_obstack (); p = argv[0] + strlen (argv[0]); while (p != argv[0] && !IS_DIR_SEPARATOR (p[-1])) @@ -266,6 +266,20 @@ add_comma_separated_to_vector (void **pvec, const char *arg) *pvec = v; } +/* Initialize opts_obstack if not initialized. */ + +void +init_opts_obstack (void) +{ + static bool opts_obstack_initialized = false; + + if (!opts_obstack_initialized) + { + opts_obstack_initialized = true; + gcc_obstack_init (&opts_obstack); + } +} + /* Initialize OPTS and OPTS_SET before using them in parsing options. */ void @@ -273,7 +287,7 @@ init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set) { size_t num_params = get_num_compiler_params (); - gcc_obstack_init (&opts_obstack); + init_opts_obstack (); *opts = global_options_init; @@ -323,6 +323,7 @@ extern void decode_cmdline_options_to_array (unsigned int argc, extern void init_options_once (void); extern void init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set); +extern void init_opts_obstack (void); extern void finalize_options_struct (struct gcc_options *opts); extern void decode_cmdline_options_to_array_default_mask (unsigned int argc, const char **argv, |