This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/56461] [4.8 Regression] GCC is leaking lots of memory


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56461

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-26 15:53:22 UTC ---
Created attachment 29541
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29541
gcc48-pr56461.patch

The biggest leak there is:
==31825== 1,491,200 bytes in 11,650 blocks are definitely lost in loss record
2,736 of 2,737
==31825==    at 0x4A0881C: malloc (vg_replace_malloc.c:270)
==31825==    by 0x131514F: xrealloc (xmalloc.c:177)
==31825==    by 0xE13FA4: void
va_heap::reserve<_edge_var_map>(vec<_edge_var_map, va_heap, vl_embed>*&,
unsigned int, bool) (vec.h:300)
==31825==    by 0xE13DF9: vec<_edge_var_map, va_heap, vl_ptr>::reserve(unsigned
int, bool) (vec.h:1468)
==31825==    by 0xE13D9A: vec<_edge_var_map, va_heap,
vl_ptr>::reserve_exact(unsigned int) (vec.h:1482)
==31825==    by 0xE13CEE: vec<_edge_var_map, va_heap, vl_ptr>::create(unsigned
int) (vec.h:1497)
==31825==    by 0xE0D5BE: redirect_edge_var_map_add(edge_def*, tree_node*,
tree_node*, unsigned int) (tree-ssa.c:64)
==31825==    by 0xE0D8A5: ssa_redirect_edge(edge_def*, basic_block_def*)
(tree-ssa.c:198)
==31825==    by 0xC7862B: gimple_redirect_edge_and_branch(edge_def*,
basic_block_def*) (tree-cfg.c:5304)
==31825==    by 0x85EC9A: redirect_edge_and_branch(edge_def*, basic_block_def*)
(cfghooks.c:333)
==31825==    by 0xC6F03D: gimple_split_edge(edge_def*) (tree-cfg.c:2475)
==31825==    by 0x85F51A: split_edge(edge_def*) (cfghooks.c:592)
==31825== 
==31825== 2,430,848 bytes in 18,991 blocks are definitely lost in loss record
2,737 of 2,737
==31825==    at 0x4A0881C: malloc (vg_replace_malloc.c:270)
==31825==    by 0x131514F: xrealloc (xmalloc.c:177)
==31825==    by 0xE13FA4: void
va_heap::reserve<_edge_var_map>(vec<_edge_var_map, va_heap, vl_embed>*&,
unsigned int, bool) (vec.h:300)
==31825==    by 0xE13DF9: vec<_edge_var_map, va_heap, vl_ptr>::reserve(unsigned
int, bool) (vec.h:1468)
==31825==    by 0xE13D9A: vec<_edge_var_map, va_heap,
vl_ptr>::reserve_exact(unsigned int) (vec.h:1482)
==31825==    by 0xE13CEE: vec<_edge_var_map, va_heap, vl_ptr>::create(unsigned
int) (vec.h:1497)
==31825==    by 0xE0D5BE: redirect_edge_var_map_add(edge_def*, tree_node*,
tree_node*, unsigned int) (tree-ssa.c:64)
==31825==    by 0xE0D8A5: ssa_redirect_edge(edge_def*, basic_block_def*)
(tree-ssa.c:198)
==31825==    by 0xC7862B: gimple_redirect_edge_and_branch(edge_def*,
basic_block_def*) (tree-cfg.c:5304)
==31825==    by 0x85EC9A: redirect_edge_and_branch(edge_def*, basic_block_def*)
(cfghooks.c:333)
==31825==    by 0xE00E36: ssa_redirect_edges(redirection_data**,
ssa_local_info_t*) (tree-ssa-threadupdate.c:527)
==31825==    by 0xE02F85: void hash_table<redirection_data,
xcallocator>::traverse_noresize<ssa_local_info_t*,
&(ssa_redirect_edges(redirection_data**,
ssa_local_info_t*))>(ssa_local_info_t*) (hash-table.h:859)

Untested fix attached, I think it is a mistake to use a space efficient vector
here (as that means extra heap allocation of void * sized object) and
furthermore the code doesn't care to actually free what it points to.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]