This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/56461] [4.8 Regression] GCC is leaking lots of memory
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 26 Feb 2013 15:53:22 +0000
- Subject: [Bug middle-end/56461] [4.8 Regression] GCC is leaking lots of memory
- Auto-submitted: auto-generated
- References: <bug-56461-4@http.gcc.gnu.org/bugzilla/>
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.