From 7323259de884f4576d78e6492b93fc2455617ef5 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Tue, 30 Oct 2018 18:25:28 +0000 Subject: [PATCH] [DebugInfo] Define base function on DWARFDie reverse iterators This defines member function base on the specialization of std::reverse_iterator for DWARFDie::iterator as required by C++ [reverse.iter.conv]. This fixes unit test DWARFDebugInfoTest.cpp under EXPENSIVE_CHECKS which currently can't be built due to GNU C++ Library calling this member function in debug mode. This fixes https://llvm.org/PR38785 Patch by: Eugene Sharygin Differential revision: https://reviews.llvm.org/D53792 llvm-svn: 345621 --- llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h | 4 ++++ llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h index c77034f6348f..baa47c2bfa58 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFDie.h @@ -404,6 +404,10 @@ public: Die = Die.getPreviousSibling(); } + llvm::DWARFDie::iterator base() const { + return llvm::DWARFDie::iterator(AtEnd ? Die : Die.getSibling()); + } + reverse_iterator &operator++() { assert(!AtEnd && "Incrementing rend"); llvm::DWARFDie D = Die.getPreviousSibling(); diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp index 1be0363adb00..ffbde2df2bc9 100644 --- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp +++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp @@ -1227,6 +1227,10 @@ TEST(DWARFDebugInfo, TestRelations) { EXPECT_THAT(std::vector(A.rbegin(), A.rend()), testing::ElementsAre(D, C, B)); + // Make sure conversion from reverse iterator works as expected. + EXPECT_EQ(A.rbegin().base(), A.end()); + EXPECT_EQ(A.rend().base(), A.begin()); + // Make sure iterator is bidirectional. { auto Begin = A.begin();