diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h @@ -55,8 +55,6 @@ /// reflect the absolute address of this pointer. Optional getEncodedPointer(uint64_t *Offset, uint8_t Encoding, uint64_t AbsPosOffset = 0) const; - - size_t size() const { return Section == nullptr ? 0 : Section->Data.size(); } }; } // end namespace llvm diff --git a/llvm/include/llvm/Support/DataExtractor.h b/llvm/include/llvm/Support/DataExtractor.h --- a/llvm/include/llvm/Support/DataExtractor.h +++ b/llvm/include/llvm/Support/DataExtractor.h @@ -534,14 +534,14 @@ /// error state of the cursor. The only way both eof and error states can be /// true is if one attempts a read while the cursor is at the very end of the /// data buffer. - bool eof(const Cursor &C) const { return Data.size() == C.Offset; } + bool eof(const Cursor &C) const { return size() == C.Offset; } /// Test the validity of \a offset. /// /// @return /// \b true if \a offset is a valid offset into the data in this /// object, \b false otherwise. - bool isValidOffset(uint64_t offset) const { return Data.size() > offset; } + bool isValidOffset(uint64_t offset) const { return size() > offset; } /// Test the availability of \a length bytes of data from \a offset. /// @@ -563,6 +563,9 @@ return isValidOffsetForDataOfSize(offset, AddressSize); } + /// Return the number of bytes in the underlying buffer. + size_t size() const { return Data.size(); } + protected: // Make it possible for subclasses to access these fields without making them // public. diff --git a/llvm/unittests/Support/DataExtractorTest.cpp b/llvm/unittests/Support/DataExtractorTest.cpp --- a/llvm/unittests/Support/DataExtractorTest.cpp +++ b/llvm/unittests/Support/DataExtractorTest.cpp @@ -269,4 +269,13 @@ EXPECT_TRUE(DE.eof(C)); EXPECT_THAT_ERROR(C.takeError(), Succeeded()); } + +TEST(DataExtractorTest, size) { + uint8_t Data[] = {'A', 'B', 'C', 'D'}; + DataExtractor DE1(StringRef(reinterpret_cast(Data), sizeof(Data)), + false, 8); + EXPECT_EQ(DE1.size(), sizeof(Data)); + DataExtractor DE2(ArrayRef(Data), false, 8); + EXPECT_EQ(DE2.size(), sizeof(Data)); +} }