From d6874f56624074a067b5f42bbacae030201e4520 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Tue, 19 Jan 2016 14:35:16 +0000 Subject: 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 --- gcc/opts.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'gcc/opts.c') 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; -- cgit v1.1