1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 19:52:54 +01:00

Fix a bug that could trigger when varargs call sites had non-matching number of arguments

llvm-svn: 4683
This commit is contained in:
Chris Lattner 2002-11-10 07:46:08 +00:00
parent 82609bbc7c
commit 0fe1af497d

View File

@ -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();