On Thu, 6 Feb 2014, Jan Hubicka wrote: > Hi, > according to memory stats this is relatively common reason for garbage left > after tree merging. > > Bootstrapped/regtested x86_64-linux, OK?
As CONSTRUCTOR_ELTS is a vec<, va_gc> please use if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) vec_free (CONSTRUCTOR_ELTS (scc->entries[i])); Ok with that change. Thanks, Richard. > Honza > > * lto/lto.c (unify_scc): Free also CONSTRUCTOR_ELTS. > Index: lto/lto.c > =================================================================== > --- lto/lto.c (revision 207515) > +++ lto/lto.c (working copy) > @@ -1807,8 +1807,13 @@ unify_scc (struct streamer_tree_cache_d > /* Free the tree nodes from the read SCC. */ > for (unsigned i = 0; i < len; ++i) > { > + enum tree_code code; > if (TYPE_P (scc->entries[i])) > num_merged_types++; > + code = TREE_CODE (scc->entries[i]); > + if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR) > + && CONSTRUCTOR_ELTS (scc->entries[i])) > + ggc_free (CONSTRUCTOR_ELTS (scc->entries[i])); > ggc_free (scc->entries[i]); > } > > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer