diff --git a/include/llvm/Analysis/LazyCallGraph.h b/include/llvm/Analysis/LazyCallGraph.h index d355b9cf5a6..82dea95e2a0 100644 --- a/include/llvm/Analysis/LazyCallGraph.h +++ b/include/llvm/Analysis/LazyCallGraph.h @@ -248,7 +248,7 @@ private: /// callees, de-duplicate and provide fast testing of whether a function is /// a callee, and facilitate iteration of child nodes in the graph. class LazyCallGraph::Node { - friend LazyCallGraph; + friend class LazyCallGraph; LazyCallGraph &G; Function &F; diff --git a/lib/Analysis/LazyCallGraph.cpp b/lib/Analysis/LazyCallGraph.cpp index b89bf70b433..7ae63e27c61 100644 --- a/lib/Analysis/LazyCallGraph.cpp +++ b/lib/Analysis/LazyCallGraph.cpp @@ -115,9 +115,9 @@ LazyCallGraph::LazyCallGraph(Module &M) : M(M) { LazyCallGraph::LazyCallGraph(const LazyCallGraph &G) : M(G.M), EntryNodeSet(G.EntryNodeSet) { - EntryNodes.reserve(EntryNodes.size()); - for (NodeVectorImplT::iterator EI = EntryNodes.begin(), - EE = EntryNodes.end(); + EntryNodes.reserve(G.EntryNodes.size()); + for (NodeVectorImplT::const_iterator EI = G.EntryNodes.begin(), + EE = G.EntryNodes.end(); EI != EE; ++EI) if (Function *Callee = EI->dyn_cast()) EntryNodes.push_back(Callee); @@ -132,12 +132,14 @@ LazyCallGraph::LazyCallGraph(const LazyCallGraph &G) LazyCallGraph::LazyCallGraph(LazyCallGraph &&G) : M(G.M), EntryNodes(std::move(G.EntryNodes)), EntryNodeSet(std::move(G.EntryNodeSet)) { - // Loop over our EntryNodes. They've been moved from another graph, but we - // need to move the Node*s to live under our bump ptr allocator. - for (NodeVectorImplT::iterator EI = EntryNodes.begin(), EE = EntryNodes.end(); + // Loop over our EntryNodes. They've been moved from another graph, so we + // need to move the Node*s to live under our bump ptr allocator. We can just + // do this in-place. + for (NodeVectorImplT::iterator EI = EntryNodes.begin(), + EE = EntryNodes.end(); EI != EE; ++EI) if (Node *EntryN = EI->dyn_cast()) - *EI = G.moveInto(std::move(*EntryN)); + *EI = moveInto(std::move(*EntryN)); } #endif