aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-03-19 21:02:12 +0000
committerChris Lattner <sabre@nondot.org>2005-03-19 21:02:12 +0000
commit1f377fefb745002a7aacb1ec87a4beb7bd87856e (patch)
tree5534e8cfa54ba98782a512dd88e8c189887c79c2
parent67823970461ba101fbb3704b016182e19bc5e2df (diff)
downloadexternal_llvm-1f377fefb745002a7aacb1ec87a4beb7bd87856e.zip
external_llvm-1f377fefb745002a7aacb1ec87a4beb7bd87856e.tar.gz
external_llvm-1f377fefb745002a7aacb1ec87a4beb7bd87856e.tar.bz2
Two fixes for the copy ctor/operator=:
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
-rw-r--r--include/llvm/ADT/EquivalenceClasses.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/include/llvm/ADT/EquivalenceClasses.h b/include/llvm/ADT/EquivalenceClasses.h
index ca9ca63..f1882fb 100644
--- a/include/llvm/ADT/EquivalenceClasses.h
+++ b/include/llvm/ADT/EquivalenceClasses.h
@@ -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;
}