Index: include/llvm/ADT/DepthFirstIterator.h =================================================================== --- include/llvm/ADT/DepthFirstIterator.h +++ include/llvm/ADT/DepthFirstIterator.h @@ -64,13 +64,9 @@ llvm::SmallPtrSet::NodeRef, 8>, bool ExtStorage = false, class GT = GraphTraits> class df_iterator - : public std::iterator, + : public std::iterator, public df_iterator_storage { - typedef std::iterator - super; + typedef std::iterator super; typedef typename GT::NodeRef NodeRef; typedef typename GT::ChildIteratorType ChildItTy; @@ -145,7 +141,7 @@ } bool operator!=(const df_iterator &x) const { return !(*this == x); } - NodeRef operator*() const { return VisitStack.back().first; } + const NodeRef &operator*() const { return VisitStack.back().first; } // This is a nonstandard operator-> that dereferences the pointer an extra // time... so that you can actually call methods ON the Node, because Index: include/llvm/Analysis/RegionInfo.h =================================================================== --- include/llvm/Analysis/RegionInfo.h +++ include/llvm/Analysis/RegionInfo.h @@ -568,10 +568,10 @@ public: typedef block_iterator_wrapper Self; - typedef typename super::pointer pointer; + typedef typename super::value_type value_type; // Construct the begin iterator. - block_iterator_wrapper(pointer Entry, pointer Exit) + block_iterator_wrapper(value_type Entry, value_type Exit) : super(df_begin(Entry)) { // Mark the exit of the region as visited, so that the children of the // exit and the exit itself, i.e. the block outside the region will never @@ -580,7 +580,7 @@ } // Construct the end iterator. - block_iterator_wrapper() : super(df_end((BlockT *)nullptr)) {} + block_iterator_wrapper() : super(df_end((BlockT *)nullptr)) {} /*implicit*/ block_iterator_wrapper(super I) : super(I) {}