[LCG] Stop playing fast and loose with reference members and assignment.
authorChandler Carruth <chandlerc@gmail.com>
Wed, 16 Apr 2014 11:14:28 +0000 (11:14 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 16 Apr 2014 11:14:28 +0000 (11:14 +0000)
It doesn't work. I'm still cleaning up all the places where I blindly
followed this pattern. There are more to come in this code too.

As a benefit, this lets the default copy and move operations Just Work.

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

include/llvm/Analysis/LazyCallGraph.h

index 74b0c8e9184ceebb17165d58a910f3c4e29ec060..d5785e740aebc54915bf663e54f4ad198990cb83 100644 (file)
@@ -119,25 +119,18 @@ public:
     /// \brief Nonce type to select the constructor for the end iterator.
     struct IsAtEndT {};
 
-    LazyCallGraph &G;
+    LazyCallGraph *G;
     NodeVectorImplT::iterator NI;
 
     // Build the begin iterator for a node.
     explicit iterator(LazyCallGraph &G, NodeVectorImplT &Nodes)
-        : G(G), NI(Nodes.begin()) {}
+        : G(&G), NI(Nodes.begin()) {}
 
     // Build the end iterator for a node. This is selected purely by overload.
     iterator(LazyCallGraph &G, NodeVectorImplT &Nodes, IsAtEndT /*Nonce*/)
-        : G(G), NI(Nodes.end()) {}
+        : G(&G), NI(Nodes.end()) {}
 
   public:
-    iterator(const iterator &Arg) : G(Arg.G), NI(Arg.NI) {}
-    iterator(iterator &&Arg) : G(Arg.G), NI(std::move(Arg.NI)) {}
-    iterator &operator=(iterator Arg) {
-      std::swap(Arg, *this);
-      return *this;
-    }
-
     bool operator==(const iterator &Arg) { return NI == Arg.NI; }
     bool operator!=(const iterator &Arg) { return !operator==(Arg); }
 
@@ -146,7 +139,7 @@ public:
         return NI->get<Node *>();
 
       Function *F = NI->get<Function *>();
-      Node *ChildN = G.get(*F);
+      Node *ChildN = G->get(*F);
       *NI = ChildN;
       return ChildN;
     }