Two fixes for the copy ctor/operator=:
authorChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 21:02:12 +0000 (21:02 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 19 Mar 2005 21:02:12 +0000 (21:02 +0000)
  1. Make sure to clear() 'this' before adding elements to it
  2. Make sure that the leaders of the RHS EC are the leaders of the LHS EC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20692 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/EquivalenceClasses.h

index ca9ca63ada9011d66a8e8690fa338656358f3065..f1882fb046d881f4943b954168b8b0205b6bf68b 100644 (file)
@@ -118,11 +118,14 @@ public:
   }
 
   const EquivalenceClasses &operator=(const EquivalenceClasses &RHS) {
+    TheMapping.clear();
     for (iterator I = RHS.begin(), E = RHS.end(); I != E; ++I)
-      if (I->isLeader())
-        insert(I->getData());
-      else
-        unionSets(I->getData(), *RHS.findLeader(I));
+      if (I->isLeader()) {
+        member_iterator MI = RHS.member_begin(I);
+        member_iterator LeaderIt = member_begin(insert(*MI));
+        for (++MI; MI != member_end(); ++MI)
+          unionSets(LeaderIt, member_begin(insert(*MI)));
+      }
     return *this;
   }