This patch adds a call to ggc_free from va_gc::release, which is called by vec_free.
authorTeresa Johnson <tejohnson@google.com>
Thu, 11 Jul 2013 21:32:14 +0000 (21:32 +0000)
committerTeresa Johnson <tejohnson@gcc.gnu.org>
Thu, 11 Jul 2013 21:32:14 +0000 (21:32 +0000)
This patch adds a call to ggc_free from va_gc::release, which is
called by vec_free. This restores the functionality of the old VEC_free
and reduces the memory footprint during compilation.

2013-07-11  Teresa Johnson  <tejohnson@google.com>

* vec.h (struct va_gc): Move release out-of-line.
(va_gc::release): Call ggc_free on released vec.

From-SVN: r200909

gcc/ChangeLog
gcc/vec.h

index 30f63c4b4da677937e96699b39869a1bf531b8ab..4454b01a50ae64421f6782af4ba9c5d879d014c1 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-11  Teresa Johnson  <tejohnson@google.com>
+
+       * vec.h (struct va_gc): Move release out-of-line.
+       (va_gc::release): Call ggc_free on released vec.
+
 2013-07-11  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
        * config/rs6000/rs6000.md (""*tls_gd_low<TLSmode:tls_abi_suffix>"):
index 3c1bb9a3d6bef44095c6814bd32554c1217c8eee..09a1d0a4d86f02cfafe0564b9c61ea7864b7d3d6 100644 (file)
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -337,10 +337,22 @@ struct va_gc
                       CXX_MEM_STAT_INFO);
 
   template<typename T, typename A>
-  static void release (vec<T, A, vl_embed> *&v) { v = NULL; }
+  static void release (vec<T, A, vl_embed> *&v);
 };
 
 
+/* Free GC memory used by V and reset V to NULL.  */
+
+template<typename T, typename A>
+inline void
+va_gc::release (vec<T, A, vl_embed> *&v)
+{
+  if (v)
+    ::ggc_free (v);
+  v = NULL;
+}
+
+
 /* Allocator for GC memory.  Ensure there are at least RESERVE free
    slots in V.  If EXACT is true, grow exactly, else grow
    exponentially.  As a special case, if the vector had not been