aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2016-01-19 14:35:16 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2016-01-19 14:35:16 +0000
commitd6874f56624074a067b5f42bbacae030201e4520 (patch)
treed79b1923ebfa78c9386a4fa276282c145ef07993 /gcc/opts.c
parent962801c550a859cc05fd761fac09ade6beb5e34a (diff)
downloadgcc-d6874f56624074a067b5f42bbacae030201e4520.zip
gcc-d6874f56624074a067b5f42bbacae030201e4520.tar.gz
gcc-d6874f56624074a067b5f42bbacae030201e4520.tar.bz2
Fix memory chunk corruption for opts_obstack (PR jit/68446)
gcc/ChangeLog: PR jit/68446 * gcc.c (driver::decode_argv): Add call to init_opts_obstack before init_options_struct. * opts.c (init_opts_obstack): Remove idempotency. (init_options_struct): Replace call to init_opts_obstack with a gcc_assert to verify that it has already been called. * toplev.c (toplev::main): Add call to init_opts_obstack before calls to init_options_struct. (toplev::finalize): Move cleanup of opts_obstack next to cleanup of save_decoded_options, clearing the latter, and save_decoded_options_count. From-SVN: r232567
Diffstat (limited to 'gcc/opts.c')
-rw-r--r--gcc/opts.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/gcc/opts.c b/gcc/opts.c
index 8e8410c..b4e8144 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -266,18 +266,12 @@ add_comma_separated_to_vector (void **pvec, const char *arg)
*pvec = v;
}
-/* Initialize opts_obstack if not initialized. */
+/* Initialize opts_obstack. */
void
init_opts_obstack (void)
{
- static bool opts_obstack_initialized = false;
-
- if (!opts_obstack_initialized)
- {
- opts_obstack_initialized = true;
- gcc_obstack_init (&opts_obstack);
- }
+ gcc_obstack_init (&opts_obstack);
}
/* Initialize OPTS and OPTS_SET before using them in parsing options. */
@@ -287,7 +281,9 @@ init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set)
{
size_t num_params = get_num_compiler_params ();
- init_opts_obstack ();
+ /* Ensure that opts_obstack has already been initialized by the time
+ that we initialize any gcc_options instances (PR jit/68446). */
+ gcc_assert (opts_obstack.chunk_size > 0);
*opts = global_options_init;