Bug fix: X.mergeWith(Y) was not updating Y if Y was a null node handle!
authorChris Lattner <sabre@nondot.org>
Thu, 22 Jan 2004 16:31:08 +0000 (16:31 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 22 Jan 2004 16:31:08 +0000 (16:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10953 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/DataStructure.cpp

index caabff8d19cb7c20a8947bfb047419c89884186c..043579c72f52245889f83d281e83b99eed83bf3c 100644 (file)
@@ -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!");