On 08/18/14 06:07, Ilya Enkovich wrote:
On 15 Aug 23:08, Jan Hubicka wrote:
Hi,
I get a segafult in decl_maybe_in_construction_p during function versioning.
We have following steps in clone creation (e.g. as in
create_version_clone_with_body):
1. Create function decl
2. Create clone of cgraph node
3. Copy function body
After the first step there is no body attached to function and
DECL_STRUCT_FUNCTION for new decl is NULL. It is initialized on the third
step. But on the second step get_polymorphic_call_info may be called for new
function; it calls decl_maybe_in_construction_p which assumes
DECL_STRUCT_FUNCTION already exists.
I firstly wanted to fix decl_maybe_in_construction_p but then realized
cgraph_clone_edge copy indirect_info from the original edge anyway and
therefore its computation is not required at all.
Following patch removes redundant indirect_info computation. Bootstrapped and
regtested on linux-x86_64. Does it look OK for trunk?
OK, plase also add testcase from
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61800
Thanks,
Honza
Here is a version with testcase to be committed.
Thanks,
Ilya
--
gcc/
2014-08-18 Ilya Enkovich <ilya.enkov...@intel.com>
PR ipa/61800
* cgraph.h (cgraph_node::create_indirect_edge): Add
compute_indirect_info param.
* cgraph.c (cgraph_node::create_indirect_edge): Compute
indirect_info only when it is required.
* cgraphclones.c (cgraph_clone_edge): Do not recompute
indirect_info fore cloned indirect edge.
Just to be 100% clear, this version is OK as well.
jeff