From: Martin Liska Date: Tue, 18 Mar 2014 16:10:39 +0000 (+0100) Subject: cgraph.c (cgraph_update_edges_for_call_stmt_node): Added case when gimple call statem... X-Git-Tag: releases/gcc-4.9.0~404 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb14a79f3588e22985d793cfd1eaf13eea1f955f;p=thirdparty%2Fgcc.git cgraph.c (cgraph_update_edges_for_call_stmt_node): Added case when gimple call statement is update. * cgraph.c (cgraph_update_edges_for_call_stmt_node): Added case when gimple call statement is update. * gimple-fold.c (gimple_fold_call): Changed order for GIMPLE_ASSIGN and GIMPLE_CALL, where gsi iterator still points to GIMPLE CALL. From-SVN: r208654 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0289142a0bba..a6a5851ac397 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-03-18 Martin Liska + + * cgraph.c (cgraph_update_edges_for_call_stmt_node): Added case when + gimple call statement is update. + * gimple-fold.c (gimple_fold_call): Changed order for GIMPLE_ASSIGN and + GIMPLE_CALL, where gsi iterator still points to GIMPLE CALL. + 2014-03-18 Jakub Jelinek PR sanitizer/60557 diff --git a/gcc/cgraph.c b/gcc/cgraph.c index a15b6bc7cfcb..577352faa9d9 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1519,7 +1519,10 @@ cgraph_update_edges_for_call_stmt_node (struct cgraph_node *node, { if (callee->decl == new_call || callee->former_clone_of == new_call) - return; + { + cgraph_set_call_stmt (e, new_stmt); + return; + } callee = callee->clone_of; } } diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index eafdb2dd5149..267c1fdad479 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -1153,8 +1153,13 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) { tree var = create_tmp_var (TREE_TYPE (lhs), NULL); tree def = get_or_create_ssa_default_def (cfun, var); - gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); + + /* To satisfy condition for + cgraph_update_edges_for_call_stmt_node, + we need to preserve GIMPLE_CALL statement + at position of GSI iterator. */ update_call_from_tree (gsi, def); + gsi_insert_before (gsi, new_stmt, GSI_NEW_STMT); } else gsi_replace (gsi, new_stmt, true);