diff --git a/llvm/include/llvm/Object/SymbolicFile.h b/llvm/include/llvm/Object/SymbolicFile.h index b13588c147d9b..2c857e72c3e5a 100644 --- a/llvm/include/llvm/Object/SymbolicFile.h +++ b/llvm/include/llvm/Object/SymbolicFile.h @@ -71,7 +71,7 @@ template class content_iterator { public: using iterator_category = std::forward_iterator_tag; - using value_type = content_type; + using value_type = const content_type; using difference_type = std::ptrdiff_t; using pointer = value_type *; using reference = value_type &; diff --git a/llvm/unittests/Object/SymbolicFileTest.cpp b/llvm/unittests/Object/SymbolicFileTest.cpp index 38875ce7b8cd9..c3813b12b4476 100644 --- a/llvm/unittests/Object/SymbolicFileTest.cpp +++ b/llvm/unittests/Object/SymbolicFileTest.cpp @@ -7,8 +7,10 @@ //===----------------------------------------------------------------------===// #include "llvm/Object/SymbolicFile.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/Host.h" +#include "gmock/gmock.h" #include "gtest/gtest.h" #include @@ -38,3 +40,22 @@ TEST(Object, DataRefImplOstream) { EXPECT_EQ(Expected, s); } + +struct ProxyContent { + unsigned Index = 0; + ProxyContent(unsigned Index) : Index(Index) {}; + void moveNext() { ++Index; } + + bool operator==(const ProxyContent &Another) const { + return Index == Another.Index; + } +}; + +TEST(Object, ContentIterator) { + using Iter = llvm::object::content_iterator; + auto Sequence = llvm::make_range(Iter(0u), Iter(10u)); + auto EvenSequence = llvm::make_filter_range( + Sequence, [](auto &&PC) { return PC.Index % 2 == 0; }); + + EXPECT_THAT(EvenSequence, testing::ElementsAre(0u, 2u, 4u, 6u, 8u)); +}