diff options
author | David Malcolm <dmalcolm@redhat.com> | 2016-01-19 14:35:16 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2016-01-19 14:35:16 +0000 |
commit | d6874f56624074a067b5f42bbacae030201e4520 (patch) | |
tree | d79b1923ebfa78c9386a4fa276282c145ef07993 /gcc/opts.c | |
parent | 962801c550a859cc05fd761fac09ade6beb5e34a (diff) | |
download | gcc-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.c | 14 |
1 files changed, 5 insertions, 9 deletions
@@ -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; |