diff options
author | Chris Lattner <sabre@nondot.org> | 2005-03-19 21:02:12 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-03-19 21:02:12 +0000 |
commit | 1f377fefb745002a7aacb1ec87a4beb7bd87856e (patch) | |
tree | 5534e8cfa54ba98782a512dd88e8c189887c79c2 | |
parent | 67823970461ba101fbb3704b016182e19bc5e2df (diff) | |
download | external_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.h | 11 |
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; } |