From 300dc0bc90aff13b5a27ce893cf571ed438d65ef Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 19 Mar 2005 21:02:12 +0000 Subject: [PATCH] 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. llvm-svn: 20692 --- llvm/include/llvm/ADT/EquivalenceClasses.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/ADT/EquivalenceClasses.h b/llvm/include/llvm/ADT/EquivalenceClasses.h index ca9ca63ada90..f1882fb046d8 100644 --- a/llvm/include/llvm/ADT/EquivalenceClasses.h +++ b/llvm/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; }