aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2014-06-03 14:12:51 +0000
committerTeresa Johnson <tejohnson@gcc.gnu.org>2014-06-03 14:12:51 +0000
commit878d361864946a4295aa94bbc2f84ed4a6e37814 (patch)
tree973ce379d62e88084c3ec2bf5419dba8327cd11d /gcc/tree-sra.c
parent010bc40a6cfa58463775350be648271155683361 (diff)
downloadgcc-878d361864946a4295aa94bbc2f84ed4a6e37814.zip
gcc-878d361864946a4295aa94bbc2f84ed4a6e37814.tar.gz
gcc-878d361864946a4295aa94bbc2f84ed4a6e37814.tar.bz2
tree-sra.c (modify_function): Record caller nodes after rebuild.
2014-06-03 Teresa Johnson <tejohnson@google.com> * tree-sra.c (modify_function): Record caller nodes after rebuild. From-SVN: r211180
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index db91c8b..0afa197 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -4926,12 +4926,15 @@ modify_function (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments)
{
struct cgraph_node *new_node;
bool cfg_changed;
- vec<cgraph_edge_p> redirect_callers = collect_callers_of_node (node);
rebuild_cgraph_edges ();
free_dominance_info (CDI_DOMINATORS);
pop_cfun ();
+ /* This must be done after rebuilding cgraph edges for node above.
+ Otherwise any recursive calls to node that are recorded in
+ redirect_callers will be corrupted. */
+ vec<cgraph_edge_p> redirect_callers = collect_callers_of_node (node);
new_node = cgraph_function_versioning (node, redirect_callers,
NULL,
NULL, false, NULL, NULL, "isra");