summaryrefslogtreecommitdiff
path: root/gcc/ipa-utils.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-02-01 19:46:14 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2015-02-01 18:46:14 +0000
commitb730d1c99180184db28c0711e69fb6c867840630 (patch)
tree99b37d236d334e345cdd58b1ddbbbb3bc84bb45c /gcc/ipa-utils.c
parentdfde35b359c23dd0d1542f9fbb2ddb5bad3272fe (diff)
re PR ipa/64872 (ICE: Segmentation fault during Chromium PGO build)
PR ipa/64872 * ipa-utils.c (ipa_merge_profiles): Add release argument. * ipa-icf.c (sem_function::merge): Do not release body when merging. * ipa-utils.h (ipa_merge_profiles): Update prototype. From-SVN: r220329
Diffstat (limited to 'gcc/ipa-utils.c')
-rw-r--r--gcc/ipa-utils.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
index a8bb42d4263..076d71dd0d9 100644
--- a/gcc/ipa-utils.c
+++ b/gcc/ipa-utils.c
@@ -407,11 +407,13 @@ get_base_var (tree t)
/* SRC and DST are going to be merged. Take SRC's profile and merge it into
- DST so it is not going to be lost. Destroy SRC's body on the way. */
+ DST so it is not going to be lost. Possibly destroy SRC's body on the way
+ unless PRESERVE_BODY is set. */
void
ipa_merge_profiles (struct cgraph_node *dst,
- struct cgraph_node *src)
+ struct cgraph_node *src,
+ bool preserve_body)
{
tree oldsrcdecl = src->decl;
struct function *srccfun, *dstcfun;
@@ -652,7 +654,8 @@ ipa_merge_profiles (struct cgraph_node *dst,
e->frequency = freq;
}
}
- src->release_body ();
+ if (!preserve_body)
+ src->release_body ();
inline_update_overall_summary (dst);
}
/* TODO: if there is no match, we can scale up. */