On Fri, May 6, 2016 at 12:10 PM, Martin Liška <mli...@suse.cz> wrote:
> Hi.
>
> I've spotted couple of occurrences of following memory leak seen by valgrind:
>
>   malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
>   operator new(unsigned long) (new_op.cc:50)
>   remap_dependence_clique(copy_body_data*, unsigned short) (tree-inline.c:845)
>   remap_gimple_op_r(tree_node**, int*, void*) (tree-inline.c:954)
>   walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* 
> (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*)) (tree.c:11498)
>   walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* 
> (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*)) (tree.c:11815)
>   walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* 
> (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*)) (tree.c:11815)
>   walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* 
> (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, 
> hash_set<tree_node*, default_hash_traits<tree_node*> >*)) (tree.c:11815)
>   copy_debug_stmt (tree-inline.c:2869)
>   copy_debug_stmts (tree-inline.c:2927)
>   copy_body(copy_body_data*, long, int, basic_block_def*, basic_block_def*, 
> basic_block_def*) (tree-inline.c:2961)
>   tree_function_versioning(tree_node*, tree_node*, vec<ipa_replace_map*, 
> va_gc, vl_embed>*, bool, bitmap_head*, bool, bitmap_head*, basic_block_def*) 
> (tree-inline.c:5907)
>   save_inline_function_body (ipa-inline-transform.c:485)
>   inline_transform(cgraph_node*) (ipa-inline-transform.c:541)
>
> Problem is that the id->dependence_map is released before copy_debug_stmts is 
> called.
>
> Patch can bootstrap and survives regression tests on x86_64-linux-gnu.
> Ready for trunk?

Hmmm.  But this means debug stmt remapping calls
remap_dependence_clique which may end up bumping
cfun->last_clique and thus may change code generation.

So what debug stmts contain MEM_REFs?  If you put an assert
processing_debug_stmt == 0 in
remap_dependence_clique I'd like to see a testcase that triggers it.

Richard.

> Martin

Reply via email to