From da04e4d3837e57f1bbab6a516a0d73b21176cae3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 22 Jan 2004 16:31:08 +0000 Subject: [PATCH] Bug fix: X.mergeWith(Y) was not updating Y if Y was a null node handle! llvm-svn: 10953 --- lib/Analysis/DataStructure/DataStructure.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/Analysis/DataStructure/DataStructure.cpp b/lib/Analysis/DataStructure/DataStructure.cpp index caabff8d19c..043579c72f5 100644 --- a/lib/Analysis/DataStructure/DataStructure.cpp +++ b/lib/Analysis/DataStructure/DataStructure.cpp @@ -679,13 +679,20 @@ void DSNode::MergeNodes(DSNodeHandle& CurNodeH, DSNodeHandle& NH) { // Offset indicates what offset the specified node is to be merged into the // current node. // -// The specified node may be a null pointer (in which case, nothing happens). +// The specified node may be a null pointer (in which case, we update it to +// point to this node). // void DSNode::mergeWith(const DSNodeHandle &NH, unsigned Offset) { DSNode *N = NH.getNode(); - if (N == 0 || (N == this && NH.getOffset() == Offset)) + if (N == this && NH.getOffset() == Offset) return; // Noop + // If the RHS is a null node, make it point to this node! + if (N == 0) { + NH.mergeWith(DSNodeHandle(this, Offset)); + return; + } + assert(!N->isDeadNode() && !isDeadNode()); assert(!hasNoReferrers() && "Should not try to fold a useless node!");