PR jit/63854: Fix memory leak within gcc_options
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 19 Nov 2014 19:08:29 +0000 (19:08 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 19 Nov 2014 19:08:29 +0000 (19:08 +0000)
gcc/ChangeLog:
PR jit/63854
* opts.c (finalize_options_struct): New.
* opts.h (finalize_options_struct): New.
* toplev.c (toplev::finalize): Call finalize_options_struct
on global_options and global_options_set.

From-SVN: r217791

gcc/ChangeLog
gcc/opts.c
gcc/opts.h
gcc/toplev.c

index 15010a091a814f180a9c88baeb5f5da1889a42dd..90e86f6de00cb7f85af5027aedb56533f2b9c615 100644 (file)
@@ -1,3 +1,11 @@
+2014-11-19  David Malcolm  <dmalcolm@redhat.com>
+
+       PR jit/63854
+       * opts.c (finalize_options_struct): New.
+       * opts.h (finalize_options_struct): New.
+       * toplev.c (toplev::finalize): Call finalize_options_struct
+       on global_options and global_options_set.
+
 2014-11-19  Manuel López-Ibáñez  <manu@gcc.gnu.org>
            Jakub Jelinek  <jakub@redhat.com>
 
index a83345b91e21fd5a02dd69252385695dedbc9a1a..f3deb4046a8ca2a206096c40fef095bc8054a6b2 100644 (file)
@@ -307,6 +307,14 @@ init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set)
   targetm_common.option_init_struct (opts);
 }
 
+/* Release any allocations owned by OPTS.  */
+
+void
+finalize_options_struct (struct gcc_options *opts)
+{
+  XDELETEVEC (opts->x_param_values);
+}
+
 /* If indicated by the optimization level LEVEL (-Os if SIZE is set,
    -Ofast if FAST is set, -Og if DEBUG is set), apply the option DEFAULT_OPT
    to OPTS and OPTS_SET, diagnostic context DC, location LOC, with language
index f6940823403912f85d13b93edbea066fc2e9892e..c3ec94241fba0fded20e86d0282be9cdd89f7068 100644 (file)
@@ -325,6 +325,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 finalize_options_struct (struct gcc_options *opts);
 extern void decode_cmdline_options_to_array_default_mask (unsigned int argc,
                                                          const char **argv, 
                                                          struct cl_decoded_option **decoded_options,
index 86c4b81b3aeefd6793cf9dbef03f3961a59411ed..6021807834cea2e18111daada3a29756d03a420e 100644 (file)
@@ -2170,4 +2170,7 @@ toplev::finalize (void)
   ipa_cp_c_finalize ();
   ipa_reference_c_finalize ();
   params_c_finalize ();
+
+  finalize_options_struct (&global_options);
+  finalize_options_struct (&global_options_set);
 }