--- include/llvm/Support/CFG.h 2013/01/02 11:36:10 171366 +++ include/llvm/Support/CFG.h 2013/03/28 15:47:50 178240 @@ -27,8 +27,9 @@ template // Predecessor Iterator class PredIterator : public std::iterator { - typedef std::iterator super; + Ptr, ptrdiff_t, Ptr*, Ptr*> { + typedef std::iterator super; typedef PredIterator Self; USE_iterator It; @@ -40,6 +41,7 @@ public: typedef typename super::pointer pointer; + typedef typename super::reference reference; PredIterator() {} explicit inline PredIterator(Ptr *bb) : It(bb->use_begin()) { @@ -50,7 +52,7 @@ inline bool operator==(const Self& x) const { return It == x.It; } inline bool operator!=(const Self& x) const { return !operator==(x); } - inline pointer operator*() const { + inline reference operator*() const { assert(!It.atEnd() && "pred_iterator out of range!"); return cast(*It)->getParent(); } @@ -100,10 +102,11 @@ template // Successor Iterator class SuccIterator : public std::iterator { + BB_, ptrdiff_t, BB_*, BB_*> { const Term_ Term; unsigned idx; - typedef std::iterator super; + typedef std::iterator super; typedef SuccIterator Self; inline bool index_is_valid(int idx) { @@ -112,6 +115,7 @@ public: typedef typename super::pointer pointer; + typedef typename super::reference reference; // TODO: This can be random access iterator, only operator[] missing. explicit inline SuccIterator(Term_ T) : Term(T), idx(0) {// begin iterator @@ -142,7 +146,7 @@ inline bool operator==(const Self& x) const { return idx == x.idx; } inline bool operator!=(const Self& x) const { return !operator==(x); } - inline pointer operator*() const { return Term->getSuccessor(idx); } + inline reference operator*() const { return Term->getSuccessor(idx); } inline pointer operator->() const { return operator*(); } inline Self& operator++() { ++idx; return *this; } // Preincrement