Skip to content

Commit

Permalink
[llvm] Remove uses of deprecated std::iterator
Browse files Browse the repository at this point in the history
std::iterator has been deprecated in C++17 and some standard library implementations such as MS STL or libc++ emit deperecation messages when using the class.
Since LLVM has now switched to C++17 these will emit warnings on these implementations, or worse, errors in build configurations using -Werror.

This patch fixes these issues by replacing them with LLVMs own llvm::iterator_facade_base which offers a superset of functionality of std::iterator.

Differential Revision: https://reviews.llvm.org/D131320
  • Loading branch information
zero9178 committed Aug 6, 2022
1 parent 1c5a50e commit f7b73b7
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
14 changes: 5 additions & 9 deletions llvm/include/llvm/Transforms/IPO/SampleContextTracker.h
Expand Up @@ -17,6 +17,7 @@

#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator.h"
#include "llvm/ProfileData/SampleProf.h"
#include <map>
#include <queue>
Expand Down Expand Up @@ -143,8 +144,9 @@ class SampleContextTracker {
return FuncToCtxtProfiles;
}

class Iterator : public std::iterator<std::forward_iterator_tag,
const ContextTrieNode *> {
class Iterator : public llvm::iterator_facade_base<
Iterator, std::forward_iterator_tag, ContextTrieNode *,
std::ptrdiff_t, ContextTrieNode **, ContextTrieNode *> {
std::queue<ContextTrieNode *> NodeQueue;

public:
Expand All @@ -159,20 +161,14 @@ class SampleContextTracker {
return *this;
}

Iterator operator++(int) {
assert(!NodeQueue.empty() && "Iterator already at the end");
Iterator Ret = *this;
++(*this);
return Ret;
}
bool operator==(const Iterator &Other) const {
if (NodeQueue.empty() && Other.NodeQueue.empty())
return true;
if (NodeQueue.empty() || Other.NodeQueue.empty())
return false;
return NodeQueue.front() == Other.NodeQueue.front();
}
bool operator!=(const Iterator &Other) const { return !(*this == Other); }

ContextTrieNode *operator*() const {
assert(!NodeQueue.empty() && "Invalid access to end iterator");
return NodeQueue.front();
Expand Down
9 changes: 4 additions & 5 deletions llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCInstrInfo.h
Expand Up @@ -15,6 +15,7 @@

#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/MC/MCInst.h"
#include "llvm/Support/MathExtras.h"
Expand All @@ -41,8 +42,9 @@ class DuplexCandidate {

namespace Hexagon {

class PacketIterator : public std::iterator<std::forward_iterator_tag,
PacketIterator> {
class PacketIterator
: public llvm::iterator_facade_base<
PacketIterator, std::forward_iterator_tag, const MCInst> {
MCInstrInfo const &MCII;
MCInst::const_iterator BundleCurrent;
MCInst::const_iterator BundleEnd;
Expand All @@ -56,9 +58,6 @@ class PacketIterator : public std::iterator<std::forward_iterator_tag,
PacketIterator &operator++();
MCInst const &operator*() const;
bool operator==(PacketIterator const &Other) const;
bool operator!=(PacketIterator const &Other) const {
return !(*this == Other);
}
};

} // end namespace Hexagon
Expand Down
5 changes: 3 additions & 2 deletions llvm/unittests/ADT/IteratorTest.cpp
Expand Up @@ -19,8 +19,9 @@ namespace {

template <int> struct Shadow;

struct WeirdIter : std::iterator<std::input_iterator_tag, Shadow<0>, Shadow<1>,
Shadow<2>, Shadow<3>> {};
struct WeirdIter
: llvm::iterator_facade_base<WeirdIter, std::input_iterator_tag, Shadow<0>,
Shadow<1>, Shadow<2>, Shadow<3>> {};

struct AdaptedIter : iterator_adaptor_base<AdaptedIter, WeirdIter> {};

Expand Down

0 comments on commit f7b73b7

Please sign in to comment.