diff options
author | Fangrui Song <maskray@google.com> | 2019-05-16 13:24:04 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-05-16 13:24:04 +0000 |
commit | e183340c29db62e3c93c59c403984ad675d72c83 (patch) | |
tree | 21ec750631cf5febc8acfa3d2d6b35fc72538e96 /llvm/tools | |
parent | 1b93a24c297117c455a126f1c3e858fefe410c2f (diff) | |
download | bcm5719-llvm-e183340c29db62e3c93c59c403984ad675d72c83.tar.gz bcm5719-llvm-e183340c29db62e3c93c59c403984ad675d72c83.zip |
Recommit [Object] Change object::SectionRef::getContents() to return Expected<StringRef>
r360876 didn't fix 2 call sites in clang.
Expected<ArrayRef<uint8_t>> may be better but use Expected<StringRef> for now.
Follow-up of D61781.
llvm-svn: 360892
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/dsymutil/DwarfLinker.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/dsymutil/DwarfStreamer.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp | 10 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/TestingSupport.cpp | 13 | ||||
-rw-r--r-- | llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-dwp/llvm-dwp.cpp | 7 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 35 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp | 8 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbutil/InputFile.cpp | 9 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/COFFDumper.cpp | 26 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/MachODumper.cpp | 14 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/ObjDumper.cpp | 6 | ||||
-rw-r--r-- | llvm/tools/sancov/sancov.cpp | 6 |
14 files changed, 92 insertions, 96 deletions
diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp index c8e70eeb7cc..ab666270aa1 100644 --- a/llvm/tools/dsymutil/DwarfLinker.cpp +++ b/llvm/tools/dsymutil/DwarfLinker.cpp @@ -436,9 +436,13 @@ static bool isMachOPairedReloc(uint64_t RelocType, uint64_t Arch) { void DwarfLinker::RelocationManager::findValidRelocsMachO( const object::SectionRef &Section, const object::MachOObjectFile &Obj, const DebugMapObject &DMO) { - StringRef Contents; - Section.getContents(Contents); - DataExtractor Data(Contents, Obj.isLittleEndian(), 0); + Expected<StringRef> ContentsOrErr = Section.getContents(); + if (!ContentsOrErr) { + consumeError(ContentsOrErr.takeError()); + Linker.reportWarning("error reading section", DMO); + return; + } + DataExtractor Data(*ContentsOrErr, Obj.isLittleEndian(), 0); bool SkipNext = false; for (const object::RelocationRef &Reloc : Section.relocations()) { diff --git a/llvm/tools/dsymutil/DwarfStreamer.cpp b/llvm/tools/dsymutil/DwarfStreamer.cpp index fbea7426a52..ccc6a2c852c 100644 --- a/llvm/tools/dsymutil/DwarfStreamer.cpp +++ b/llvm/tools/dsymutil/DwarfStreamer.cpp @@ -667,10 +667,12 @@ void DwarfStreamer::translateLineTable(DataExtractor Data, uint32_t Offset, static void emitSectionContents(const object::ObjectFile &Obj, StringRef SecName, MCStreamer *MS) { - StringRef Contents; - if (auto Sec = getSectionByName(Obj, SecName)) - if (!Sec->getContents(Contents)) - MS->EmitBytes(Contents); + if (auto Sec = getSectionByName(Obj, SecName)) { + if (Expected<StringRef> E = Sec->getContents()) + MS->EmitBytes(*E); + else + consumeError(E.takeError()); + } } void DwarfStreamer::copyInvariantDebugSection(const object::ObjectFile &Obj) { diff --git a/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp b/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp index ff2ce46a01d..4bf308f87c2 100644 --- a/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp +++ b/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp @@ -453,13 +453,11 @@ Error FileAnalysis::parseCodeSections() { if (!Section.getName(SectionName) && SectionName == ".plt") continue; - StringRef SectionContents; - if (Section.getContents(SectionContents)) - return make_error<StringError>("Failed to retrieve section contents", - inconvertibleErrorCode()); + Expected<StringRef> Contents = Section.getContents(); + if (!Contents) + return Contents.takeError(); + ArrayRef<uint8_t> SectionBytes = arrayRefFromStringRef(*Contents); - ArrayRef<uint8_t> SectionBytes((const uint8_t *)SectionContents.data(), - Section.getSize()); parseSectionContents(SectionBytes, {Section.getAddress(), Section.getIndex()}); } diff --git a/llvm/tools/llvm-cov/TestingSupport.cpp b/llvm/tools/llvm-cov/TestingSupport.cpp index e2b86c0b79c..3ee318c9c64 100644 --- a/llvm/tools/llvm-cov/TestingSupport.cpp +++ b/llvm/tools/llvm-cov/TestingSupport.cpp @@ -69,9 +69,18 @@ int convertForTestingMain(int argc, const char *argv[]) { uint64_t ProfileNamesAddress = ProfileNames.getAddress(); StringRef CoverageMappingData; StringRef ProfileNamesData; - if (CoverageMapping.getContents(CoverageMappingData) || - ProfileNames.getContents(ProfileNamesData)) + if (Expected<StringRef> E = CoverageMapping.getContents()) + CoverageMappingData = *E; + else { + consumeError(E.takeError()); return 1; + } + if (Expected<StringRef> E = ProfileNames.getContents()) + ProfileNamesData = *E; + else { + consumeError(E.takeError()); + return 1; + } int FD; if (auto Err = sys::fs::openFileForWrite(OutputFilename, FD)) { diff --git a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp index c850815cd2f..83331265578 100644 --- a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp +++ b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp @@ -48,15 +48,20 @@ static void error(std::error_code EC) { exit(1); } -static void error(Error Err) { - if (!Err) - return; +LLVM_ATTRIBUTE_NORETURN static void error(Error Err) { logAllUnhandledErrors(std::move(Err), WithColor::error(outs()), "reading file: "); outs().flush(); exit(1); } +template <typename T> +T unwrapOrError(Expected<T> EO) { + if (!EO) + error(EO.takeError()); + return std::move(*EO); +} + } // namespace llvm static void reportError(StringRef Input, StringRef Message) { @@ -195,8 +200,7 @@ static void dumpCXXData(const ObjectFile *Obj) { // Skip virtual or BSS sections. if (Sec.isBSS() || Sec.isVirtual()) continue; - StringRef SecContents; - error(Sec.getContents(SecContents)); + StringRef SecContents = unwrapOrError(Sec.getContents()); Expected<uint64_t> SymAddressOrErr = Sym.getAddress(); error(errorToErrorCode(SymAddressOrErr.takeError())); uint64_t SymAddress = *SymAddressOrErr; @@ -510,7 +514,8 @@ static void dumpArchive(const Archive *Arc) { else reportError(Arc->getFileName(), cxxdump_error::unrecognized_file_format); } - error(std::move(Err)); + if (Err) + error(std::move(Err)); } static void dumpInput(StringRef File) { diff --git a/llvm/tools/llvm-dwp/llvm-dwp.cpp b/llvm/tools/llvm-dwp/llvm-dwp.cpp index 2d6bd7fdd23..9715ee32af7 100644 --- a/llvm/tools/llvm-dwp/llvm-dwp.cpp +++ b/llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -410,9 +410,10 @@ static Error handleSection( if (std::error_code Err = Section.getName(Name)) return errorCodeToError(Err); - StringRef Contents; - if (auto Err = Section.getContents(Contents)) - return errorCodeToError(Err); + Expected<StringRef> ContentsOrErr = Section.getContents(); + if (!ContentsOrErr) + return ContentsOrErr.takeError(); + StringRef Contents = *ContentsOrErr; if (auto Err = handleCompressedSection(UncompressedSections, Name, Contents)) return Err; diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 9d8161937b4..6bb30c551da 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -1482,8 +1482,8 @@ static void DumpLiteralPointerSection(MachOObjectFile *O, section_type = Sec.flags & MachO::SECTION_TYPE; } - StringRef BytesStr; - Sect->getContents(BytesStr); + StringRef BytesStr = unwrapOrError(Sect->getContents(), O->getFileName()); + const char *Contents = reinterpret_cast<const char *>(BytesStr.data()); switch (section_type) { @@ -1697,8 +1697,8 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O, } uint32_t section_type = section_flags & MachO::SECTION_TYPE; - StringRef BytesStr; - Section.getContents(BytesStr); + StringRef BytesStr = + unwrapOrError(Section.getContents(), O->getFileName()); const char *sect = reinterpret_cast<const char *>(BytesStr.data()); uint32_t sect_size = BytesStr.size(); uint64_t sect_addr = Section.getAddress(); @@ -1782,8 +1782,8 @@ static void DumpInfoPlistSectionContents(StringRef Filename, if (SegName == "__TEXT" && SectName == "__info_plist") { if (!NoLeadingHeaders) outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; - StringRef BytesStr; - Section.getContents(BytesStr); + StringRef BytesStr = + unwrapOrError(Section.getContents(), O->getFileName()); const char *sect = reinterpret_cast<const char *>(BytesStr.data()); outs() << format("%.*s", BytesStr.size(), sect) << "\n"; return; @@ -3194,8 +3194,8 @@ static const char *get_pointer_64(uint64_t Address, uint32_t &offset, S = (*(info->Sections))[SectIdx]; offset = Address - SectAddress; left = SectSize - offset; - StringRef SectContents; - ((*(info->Sections))[SectIdx]).getContents(SectContents); + StringRef SectContents = unwrapOrError( + ((*(info->Sections))[SectIdx]).getContents(), info->O->getFileName()); return SectContents.data() + offset; } } @@ -3998,8 +3998,7 @@ walk_pointer_list_64(const char *listname, const SectionRef S, StringRef SegName = O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; - StringRef BytesStr; - S.getContents(BytesStr); + StringRef BytesStr = unwrapOrError(S.getContents(), O->getFileName()); const char *Contents = reinterpret_cast<const char *>(BytesStr.data()); for (uint32_t i = 0; i < S.getSize(); i += sizeof(uint64_t)) { @@ -4049,8 +4048,7 @@ walk_pointer_list_32(const char *listname, const SectionRef S, StringRef SegName = O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; - StringRef BytesStr; - S.getContents(BytesStr); + StringRef BytesStr = unwrapOrError(S.getContents(), O->getFileName()); const char *Contents = reinterpret_cast<const char *>(BytesStr.data()); for (uint32_t i = 0; i < S.getSize(); i += sizeof(uint32_t)) { @@ -7242,8 +7240,8 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, if (SegmentName != DisSegName) continue; - StringRef BytesStr; - Sections[SectIdx].getContents(BytesStr); + StringRef BytesStr = + unwrapOrError(Sections[SectIdx].getContents(), Filename); ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr); uint64_t SectAddress = Sections[SectIdx].getAddress(); @@ -7696,9 +7694,8 @@ printMachOCompactUnwindSection(const MachOObjectFile *Obj, uint32_t PointerSize = Is64 ? sizeof(uint64_t) : sizeof(uint32_t); uint32_t EntrySize = 3 * PointerSize + 2 * sizeof(uint32_t); - StringRef Contents; - CompactUnwind.getContents(Contents); - + StringRef Contents = + unwrapOrError(CompactUnwind.getContents(), Obj->getFileName()); SmallVector<CompactUnwindEntry, 4> CompactUnwinds; // First populate the initial raw offsets, encodings and so on from the entry. @@ -7839,8 +7836,8 @@ static void printMachOUnwindInfoSection(const MachOObjectFile *Obj, outs() << "Contents of __unwind_info section:\n"; - StringRef Contents; - UnwindInfo.getContents(Contents); + StringRef Contents = + unwrapOrError(UnwindInfo.getContents(), Obj->getFileName()); ptrdiff_t Pos = 0; //===---------------------------------- diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 3fddfd2d349..de26b61697c 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1126,9 +1126,8 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, SmallString<40> Comments; raw_svector_ostream CommentStream(Comments); - StringRef BytesStr; - error(Section.getContents(BytesStr)); - ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr); + ArrayRef<uint8_t> Bytes = arrayRefFromStringRef( + unwrapOrError(Section.getContents(), Obj->getFileName())); uint64_t VMAAdjustment = 0; if (shouldAdjustVA(Section)) @@ -1561,7 +1560,6 @@ void printSectionHeaders(const ObjectFile *Obj) { void printSectionContents(const ObjectFile *Obj) { for (const SectionRef &Section : ToolSectionFilter(*Obj)) { StringRef Name; - StringRef Contents; error(Section.getName(Name)); uint64_t BaseAddr = Section.getAddress(); uint64_t Size = Section.getSize(); @@ -1576,7 +1574,7 @@ void printSectionContents(const ObjectFile *Obj) { continue; } - error(Section.getContents(Contents)); + StringRef Contents = unwrapOrError(Section.getContents(), Obj->getFileName()); // Dump out the content as hex and printable ascii characters. for (std::size_t Addr = 0, End = Contents.size(); Addr < End; Addr += 16) { @@ -1764,8 +1762,8 @@ void printRawClangAST(const ObjectFile *Obj) { if (!ClangASTSection) return; - StringRef ClangASTContents; - error(ClangASTSection.getValue().getContents(ClangASTContents)); + StringRef ClangASTContents = unwrapOrError( + ClangASTSection.getValue().getContents(), Obj->getFileName()); outs().write(ClangASTContents.data(), ClangASTContents.size()); } @@ -1801,9 +1799,8 @@ static void printFaultMaps(const ObjectFile *Obj) { return; } - StringRef FaultMapContents; - error(FaultMapSection.getValue().getContents(FaultMapContents)); - + StringRef FaultMapContents = + unwrapOrError(FaultMapSection.getValue().getContents(), Obj->getFileName()); FaultMapParser FMP(FaultMapContents.bytes_begin(), FaultMapContents.bytes_end()); diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp index 4ad26bef20c..dab1e42c3a2 100644 --- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -1376,12 +1376,12 @@ Error DumpOutputStyle::dumpTypesFromObjectFile() { else continue; - StringRef Contents; - if (auto EC = S.getContents(Contents)) - return errorCodeToError(EC); + Expected<StringRef> ContentsOrErr = S.getContents(); + if (!ContentsOrErr) + return ContentsOrErr.takeError(); uint32_t Magic; - BinaryStreamReader Reader(Contents, llvm::support::little); + BinaryStreamReader Reader(*ContentsOrErr, llvm::support::little); if (auto EC = Reader.readInteger(Magic)) return EC; if (Magic != COFF::DEBUG_SECTION_MAGIC) diff --git a/llvm/tools/llvm-pdbutil/InputFile.cpp b/llvm/tools/llvm-pdbutil/InputFile.cpp index f61d89bd70c..bd23bfdbe31 100644 --- a/llvm/tools/llvm-pdbutil/InputFile.cpp +++ b/llvm/tools/llvm-pdbutil/InputFile.cpp @@ -66,17 +66,20 @@ getModuleDebugStream(PDBFile &File, StringRef &ModuleName, uint32_t Index) { static inline bool isCodeViewDebugSubsection(object::SectionRef Section, StringRef Name, BinaryStreamReader &Reader) { - StringRef SectionName, Contents; + StringRef SectionName; if (Section.getName(SectionName)) return false; if (SectionName != Name) return false; - if (Section.getContents(Contents)) + Expected<StringRef> ContentsOrErr = Section.getContents(); + if (!ContentsOrErr) { + consumeError(ContentsOrErr.takeError()); return false; + } - Reader = BinaryStreamReader(Contents, support::little); + Reader = BinaryStreamReader(*ContentsOrErr, support::little); uint32_t Magic; if (Reader.bytesRemaining() < sizeof(uint32_t)) return false; diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index 62f2fc56b56..21ceb002857 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -933,8 +933,7 @@ void COFFDumper::initializeFileAndStringTables(BinaryStreamReader &Reader) { void COFFDumper::printCodeViewSymbolSection(StringRef SectionName, const SectionRef &Section) { - StringRef SectionContents; - error(Section.getContents(SectionContents)); + StringRef SectionContents = unwrapOrError(Section.getContents()); StringRef Data = SectionContents; SmallVector<StringRef, 10> FunctionNames; @@ -1218,8 +1217,7 @@ void COFFDumper::mergeCodeViewTypes(MergingTypeTableBuilder &CVIDs, StringRef SectionName; error(S.getName(SectionName)); if (SectionName == ".debug$T") { - StringRef Data; - error(S.getContents(Data)); + StringRef Data = unwrapOrError(S.getContents()); uint32_t Magic; error(consume(Data, Magic)); if (Magic != 4) @@ -1255,8 +1253,7 @@ void COFFDumper::printCodeViewTypeSection(StringRef SectionName, ListScope D(W, "CodeViewTypes"); W.printNumber("Section", SectionName, Obj->getSectionID(Section)); - StringRef Data; - error(Section.getContents(Data)); + StringRef Data = unwrapOrError(Section.getContents()); if (opts::CodeViewSubsectionBytes) W.printBinaryBlock("Data", Data); @@ -1316,9 +1313,7 @@ void COFFDumper::printSectionHeaders() { if (opts::SectionData && !(Section->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) { - StringRef Data; - error(Sec.getContents(Data)); - + StringRef Data = unwrapOrError(Sec.getContents()); W.printBinaryBlock("SectionData", Data); } } @@ -1660,15 +1655,13 @@ void COFFDumper::printCOFFExports() { void COFFDumper::printCOFFDirectives() { for (const SectionRef &Section : Obj->sections()) { - StringRef Contents; StringRef Name; error(Section.getName(Name)); if (Name != ".drectve") continue; - error(Section.getContents(Contents)); - + StringRef Contents = unwrapOrError(Section.getContents()); W.printString("Directive(s)", Contents); } } @@ -1707,8 +1700,7 @@ void COFFDumper::printCOFFResources() { if (!Name.startswith(".rsrc")) continue; - StringRef Ref; - error(S.getContents(Ref)); + StringRef Ref = unwrapOrError(S.getContents()); if ((Name == ".rsrc") || (Name == ".rsrc$01")) { ResourceSectionRef RSF(Ref); @@ -1834,8 +1826,7 @@ void COFFDumper::printStackMap() const { if (StackMapSection == object::SectionRef()) return; - StringRef StackMapContents; - StackMapSection.getContents(StackMapContents); + StringRef StackMapContents = unwrapOrError(StackMapSection.getContents()); ArrayRef<uint8_t> StackMapContentsArray = arrayRefFromStringRef(StackMapContents); @@ -1861,8 +1852,7 @@ void COFFDumper::printAddrsig() { if (AddrsigSection == object::SectionRef()) return; - StringRef AddrsigContents; - AddrsigSection.getContents(AddrsigContents); + StringRef AddrsigContents = unwrapOrError(AddrsigSection.getContents()); ArrayRef<uint8_t> AddrsigContentsArray(AddrsigContents.bytes_begin(), AddrsigContents.size()); diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp index 5e82f1c38f7..5149f469aa1 100644 --- a/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/llvm/tools/llvm-readobj/MachODumper.cpp @@ -483,15 +483,8 @@ void MachODumper::printSectionHeaders(const MachOObjectFile *Obj) { } } - if (opts::SectionData) { - bool IsBSS = Section.isBSS(); - if (!IsBSS) { - StringRef Data; - error(Section.getContents(Data)); - - W.printBinaryBlock("SectionData", Data); - } - } + if (opts::SectionData && !Section.isBSS()) + W.printBinaryBlock("SectionData", unwrapOrError(Section.getContents())); } } @@ -660,8 +653,7 @@ void MachODumper::printStackMap() const { if (StackMapSection == object::SectionRef()) return; - StringRef StackMapContents; - StackMapSection.getContents(StackMapContents); + StringRef StackMapContents = unwrapOrError(StackMapSection.getContents()); ArrayRef<uint8_t> StackMapContentsArray = arrayRefFromStringRef(StackMapContents); diff --git a/llvm/tools/llvm-readobj/ObjDumper.cpp b/llvm/tools/llvm-readobj/ObjDumper.cpp index 15facefaddf..4f73cbdf281 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.cpp +++ b/llvm/tools/llvm-readobj/ObjDumper.cpp @@ -73,8 +73,7 @@ void ObjDumper::printSectionAsString(const object::ObjectFile *Obj, error(E); W.startLine() << "String dump of section '" << SectionName << "':\n"; - StringRef SectionContent; - Section.getContents(SectionContent); + StringRef SectionContent = unwrapOrError(Section.getContents()); const uint8_t *SecContent = SectionContent.bytes_begin(); const uint8_t *CurrentWord = SecContent; @@ -107,8 +106,7 @@ void ObjDumper::printSectionAsHex(const object::ObjectFile *Obj, error(E); W.startLine() << "Hex dump of section '" << SectionName << "':\n"; - StringRef SectionContent; - Section.getContents(SectionContent); + StringRef SectionContent = unwrapOrError(Section.getContents()); const uint8_t *SecContent = SectionContent.bytes_begin(); const uint8_t *SecEnd = SecContent + SectionContent.size(); diff --git a/llvm/tools/sancov/sancov.cpp b/llvm/tools/sancov/sancov.cpp index 31949a7c5bc..a385890aaac 100644 --- a/llvm/tools/sancov/sancov.cpp +++ b/llvm/tools/sancov/sancov.cpp @@ -841,9 +841,9 @@ static void getObjectCoveragePoints(const object::ObjectFile &O, if (!SectSize) continue; - StringRef BytesStr; - failIfError(Section.getContents(BytesStr)); - ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr); + Expected<StringRef> BytesStr = Section.getContents(); + failIfError(BytesStr); + ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(*BytesStr); for (uint64_t Index = 0, Size = 0; Index < Section.getSize(); Index += Size) { |