diff options
author | Chris Lattner <sabre@nondot.org> | 2009-09-15 05:40:35 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-09-15 05:40:35 +0000 |
commit | a51c39cc3265f5d0d5de87b4a3ef9332c83556e1 (patch) | |
tree | 66ec9d3d0df0527cbad15e8a2b07a7826b6ea039 /lib/Transforms | |
parent | ff1147072a0c9dbe91572bbbbf93031c6451bbae (diff) | |
download | external_llvm-a51c39cc3265f5d0d5de87b4a3ef9332c83556e1.zip external_llvm-a51c39cc3265f5d0d5de87b4a3ef9332c83556e1.tar.gz external_llvm-a51c39cc3265f5d0d5de87b4a3ef9332c83556e1.tar.bz2 |
add a new CallGraphNode::replaceCallEdge method and use it from
argpromote to avoid invalidating an iterator. This fixes PR4977.
All clang tests now pass with expensive checking (on my system
at least).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81843 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/IPO/ArgumentPromotion.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index 3c584c8..5b91f3d 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -589,7 +589,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F, // Construct the new function type using the new arguments. FunctionType *NFTy = FunctionType::get(RetTy, Params, FTy->isVarArg()); - // Create the new function body and insert it into the module... + // Create the new function body and insert it into the module. Function *NF = Function::Create(NFTy, F->getLinkage(), F->getName()); NF->copyAttributesFrom(F); @@ -599,7 +599,8 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F, // Recompute the parameter attributes list based on the new arguments for // the function. - NF->setAttributes(AttrListPtr::get(AttributesVec.begin(), AttributesVec.end())); + NF->setAttributes(AttrListPtr::get(AttributesVec.begin(), + AttributesVec.end())); AttributesVec.clear(); F->getParent()->getFunctionList().insert(F, NF); @@ -729,8 +730,7 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F, // Update the callgraph to know that the callsite has been transformed. CallGraphNode *CalleeNode = CG[Call->getParent()->getParent()]; - CalleeNode->removeCallEdgeFor(Call); - CalleeNode->addCalledFunction(New, NF_CGN); + CalleeNode->replaceCallEdge(Call, New, NF_CGN); if (!Call->use_empty()) { Call->replaceAllUsesWith(New); |