summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/DataStructure/DataStructure.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-11-10 07:46:08 +0000
committerChris Lattner <sabre@nondot.org>2002-11-10 07:46:08 +0000
commitd7f9f635ec4126cfd02bb9b222dcd59ac470dbe9 (patch)
treee3d188a346f25ef40ffa0731e767643369b726bd /llvm/lib/Analysis/DataStructure/DataStructure.cpp
parent952924d8811174aad18822c1cfa5d376fc56a4e3 (diff)
downloadbcm5719-llvm-d7f9f635ec4126cfd02bb9b222dcd59ac470dbe9.tar.gz
bcm5719-llvm-d7f9f635ec4126cfd02bb9b222dcd59ac470dbe9.zip
Fix a bug that could trigger when varargs call sites had non-matching number of arguments
llvm-svn: 4683
Diffstat (limited to 'llvm/lib/Analysis/DataStructure/DataStructure.cpp')
-rw-r--r--llvm/lib/Analysis/DataStructure/DataStructure.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/DataStructure/DataStructure.cpp b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
index 175cc8a3f7d..67778181ef1 100644
--- a/llvm/lib/Analysis/DataStructure/DataStructure.cpp
+++ b/llvm/lib/Analysis/DataStructure/DataStructure.cpp
@@ -773,7 +773,7 @@ static void removeRefsToGlobal(DSNode* N,
//
bool DSGraph::isNodeDead(DSNode *N) {
// Is it a trivially dead shadow node?
- return N->getReferrers().empty() && (N->NodeType & ~DSNode::DEAD) == 0
+ return N->getReferrers().empty() && (N->NodeType & ~DSNode::DEAD) == 0;
}
static inline void killIfUselessEdge(DSNodeHandle &Edge) {
@@ -831,9 +831,16 @@ static void removeIdenticalCalls(vector<DSCallSite> &Calls,
NumDuplicateCalls > 20) {
DSCallSite &OCS = Calls[i-1];
OCS.getRetVal().mergeWith(CS.getRetVal());
- for (unsigned a = 0, e = CS.getNumPtrArgs(); a != e; ++a)
+
+ for (unsigned a = 0,
+ e = std::min(CS.getNumPtrArgs(), OCS.getNumPtrArgs());
+ a != e; ++a)
OCS.getPtrArg(a).mergeWith(CS.getPtrArg(a));
// The node will now be eliminated as a duplicate!
+ if (CS.getNumPtrArgs() < OCS.getNumPtrArgs())
+ CS = OCS;
+ else if (CS.getNumPtrArgs() > OCS.getNumPtrArgs())
+ OCS = CS;
}
} else {
LastCalleeNode = CS.getCallee().getNode();
OpenPOWER on IntegriCloud