<div dir="ltr">Sorry and thx for revert, 2 clang call sites were not fixed.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 16, 2019 at 8:06 PM Hans Wennborg <<a href="mailto:hans@chromium.org">hans@chromium.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Reverted in r360878.<br>
<br>
On Thu, May 16, 2019 at 1:49 PM Hans Wennborg <<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>> wrote:<br>
><br>
> Did this break Clang?<br>
><br>
> /work/chromium/src/third_party/llvm/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp:<br>
> In member function ‘virtual llvm::StringRef<br>
> clang::ObjectFilePCHContainerReader::ExtractPCH(llvm::MemoryBufferRef)<br>
> const’:<br>
> /work/chromium/src/third_party/llvm/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp:340:32:<br>
> error: no matching function for call to<br>
> ‘llvm::object::SectionRef::getContents(llvm::StringRef&) const’<br>
>          Section.getContents(PCH);<br>
>                                 ^<br>
><br>
> On Thu, May 16, 2019 at 1:31 PM Fangrui Song via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> ><br>
> > Author: maskray<br>
> > Date: Thu May 16 04:33:48 2019<br>
> > New Revision: 360876<br>
> ><br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=360876&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=360876&view=rev</a><br>
> > Log:<br>
> > [Object] Change object::SectionRef::getContents() to return Expected<StringRef><br>
> ><br>
> > Expected<ArrayRef<uint8_t>> may be better but use Expected<StringRef> for now.<br>
> ><br>
> > Follow-up of D61781.<br>
> ><br>
> > Modified:<br>
> >     llvm/trunk/include/llvm/Object/ObjectFile.h<br>
> >     llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
> >     llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp<br>
> >     llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp<br>
> >     llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp<br>
> >     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp<br>
> >     llvm/trunk/lib/Object/ELFObjectFile.cpp<br>
> >     llvm/trunk/lib/Object/IRObjectFile.cpp<br>
> >     llvm/trunk/lib/Object/Object.cpp<br>
> >     llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp<br>
> >     llvm/trunk/lib/XRay/InstrumentationMap.cpp<br>
> >     llvm/trunk/tools/dsymutil/DwarfLinker.cpp<br>
> >     llvm/trunk/tools/dsymutil/DwarfStreamer.cpp<br>
> >     llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp<br>
> >     llvm/trunk/tools/llvm-cov/TestingSupport.cpp<br>
> >     llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp<br>
> >     llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp<br>
> >     llvm/trunk/tools/llvm-objdump/MachODump.cpp<br>
> >     llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp<br>
> >     llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp<br>
> >     llvm/trunk/tools/llvm-pdbutil/InputFile.cpp<br>
> >     llvm/trunk/tools/llvm-readobj/COFFDumper.cpp<br>
> >     llvm/trunk/tools/llvm-readobj/MachODumper.cpp<br>
> >     llvm/trunk/tools/llvm-readobj/ObjDumper.cpp<br>
> >     llvm/trunk/tools/sancov/sancov.cpp<br>
> ><br>
> > Modified: llvm/trunk/include/llvm/Object/ObjectFile.h<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/include/llvm/Object/ObjectFile.h (original)<br>
> > +++ llvm/trunk/include/llvm/Object/ObjectFile.h Thu May 16 04:33:48 2019<br>
> > @@ -98,7 +98,7 @@ public:<br>
> >    uint64_t getAddress() const;<br>
> >    uint64_t getIndex() const;<br>
> >    uint64_t getSize() const;<br>
> > -  std::error_code getContents(StringRef &Result) const;<br>
> > +  Expected<StringRef> getContents() const;<br>
> ><br>
> >    /// Get the alignment of this section as the actual value (not log 2).<br>
> >    uint64_t getAlignment() const;<br>
> > @@ -454,13 +454,12 @@ inline uint64_t SectionRef::getSize() co<br>
> >    return OwningObject->getSectionSize(SectionPimpl);<br>
> >  }<br>
> ><br>
> > -inline std::error_code SectionRef::getContents(StringRef &Result) const {<br>
> > +inline Expected<StringRef> SectionRef::getContents() const {<br>
> >    Expected<ArrayRef<uint8_t>> Res =<br>
> >        OwningObject->getSectionContents(SectionPimpl);<br>
> >    if (!Res)<br>
> > -    return errorToErrorCode(Res.takeError());<br>
> > -  Result = StringRef(reinterpret_cast<const char *>(Res->data()), Res->size());<br>
> > -  return std::error_code();<br>
> > +    return Res.takeError();<br>
> > +  return StringRef(reinterpret_cast<const char *>(Res->data()), Res->size());<br>
> >  }<br>
> ><br>
> >  inline uint64_t SectionRef::getAlignment() const {<br>
> ><br>
> > Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp (original)<br>
> > +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp Thu May 16 04:33:48 2019<br>
> > @@ -1410,8 +1410,14 @@ public:<br>
> >        // Try to obtain an already relocated version of this section.<br>
> >        // Else use the unrelocated section from the object file. We'll have to<br>
> >        // apply relocations ourselves later.<br>
> > -      if (!L || !L->getLoadedSectionContents(*RelocatedSection, Data))<br>
> > -        Section.getContents(Data);<br>
> > +      if (!L || !L->getLoadedSectionContents(*RelocatedSection, Data)) {<br>
> > +        Expected<StringRef> E = Section.getContents();<br>
> > +        if (E)<br>
> > +          Data = *E;<br>
> > +        else<br>
> > +          // maybeDecompress below will error.<br>
> > +          consumeError(E.takeError());<br>
> > +      }<br>
> ><br>
> >        if (auto Err = maybeDecompress(Section, Name, Data)) {<br>
> >          ErrorPolicy EP = HandleError(createError(<br>
> ><br>
> > Modified: llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp (original)<br>
> > +++ llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp Thu May 16 04:33:48 2019<br>
> > @@ -53,13 +53,13 @@ SymbolizableObjectFile::create(object::O<br>
> >    if (Obj->getArch() == Triple::ppc64) {<br>
> >      for (section_iterator Section : Obj->sections()) {<br>
> >        StringRef Name;<br>
> > -      StringRef Data;<br>
> >        if (auto EC = Section->getName(Name))<br>
> >          return EC;<br>
> >        if (Name == ".opd") {<br>
> > -        if (auto EC = Section->getContents(Data))<br>
> > -          return EC;<br>
> > -        OpdExtractor.reset(new DataExtractor(Data, Obj->isLittleEndian(),<br>
> > +        Expected<StringRef> E = Section->getContents();<br>
> > +        if (!E)<br>
> > +          return errorToErrorCode(E.takeError());<br>
> > +        OpdExtractor.reset(new DataExtractor(*E, Obj->isLittleEndian(),<br>
> >                                               Obj->getBytesInAddress()));<br>
> >          OpdAddress = Section->getAddress();<br>
> >          break;<br>
> ><br>
> > Modified: llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp (original)<br>
> > +++ llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp Thu May 16 04:33:48 2019<br>
> > @@ -221,9 +221,12 @@ bool getGNUDebuglinkContents(const Objec<br>
> >      Section.getName(Name);<br>
> >      Name = Name.substr(Name.find_first_not_of("._"));<br>
> >      if (Name == "gnu_debuglink") {<br>
> > -      StringRef Data;<br>
> > -      Section.getContents(Data);<br>
> > -      DataExtractor DE(Data, Obj->isLittleEndian(), 0);<br>
> > +      Expected<StringRef> ContentsOrErr = Section.getContents();<br>
> > +      if (!ContentsOrErr) {<br>
> > +        consumeError(ContentsOrErr.takeError());<br>
> > +        return false;<br>
> > +      }<br>
> > +      DataExtractor DE(*ContentsOrErr, Obj->isLittleEndian(), 0);<br>
> >        uint32_t Offset = 0;<br>
> >        if (const char *DebugNameStr = DE.getCStr(&Offset)) {<br>
> >          // 4-byte align the offset.<br>
> ><br>
> > Modified: llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp (original)<br>
> > +++ llvm/trunk/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp Thu May 16 04:33:48 2019<br>
> > @@ -136,14 +136,14 @@ Error MachOAtomGraphBuilder::parseSectio<br>
> ><br>
> >      if (!SecRef.isVirtual()) {<br>
> >        // If this section has content then record it.<br>
> > -      StringRef Content;<br>
> > -      if (auto EC = SecRef.getContents(Content))<br>
> > -        return errorCodeToError(EC);<br>
> > -      if (Content.size() != SecRef.getSize())<br>
> > +      Expected<StringRef> Content = SecRef.getContents();<br>
> > +      if (!Content)<br>
> > +        return Content.takeError();<br>
> > +      if (Content->size() != SecRef.getSize())<br>
> >          return make_error<JITLinkError>("Section content size does not match "<br>
> >                                          "declared size for " +<br>
> >                                          Name);<br>
> > -      MachOSec.setContent(Content);<br>
> > +      MachOSec.setContent(*Content);<br>
> >      } else {<br>
> >        // If this is a zero-fill section then just record the size.<br>
> >        MachOSec.setZeroFill(SecRef.getSize());<br>
> ><br>
> > Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp (original)<br>
> > +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Thu May 16 04:33:48 2019<br>
> > @@ -792,8 +792,10 @@ RuntimeDyldImpl::emitSection(const Objec<br>
> >    if (!IsVirtual && !IsZeroInit) {<br>
> >      // In either case, set the location of the unrelocated section in memory,<br>
> >      // since we still process relocations for it even if we're not applying them.<br>
> > -    if (auto EC = Section.getContents(data))<br>
> > -      return errorCodeToError(EC);<br>
> > +    if (Expected<StringRef> E = Section.getContents())<br>
> > +      data = *E;<br>
> > +    else<br>
> > +      return E.takeError();<br>
> >      pData = data.data();<br>
> >    }<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/lib/Object/ELFObjectFile.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/Object/ELFObjectFile.cpp (original)<br>
> > +++ llvm/trunk/lib/Object/ELFObjectFile.cpp Thu May 16 04:33:48 2019<br>
> > @@ -377,12 +377,13 @@ ELFObjectFileBase::getPltAddresses() con<br>
> >    }<br>
> >    if (!Plt || !RelaPlt || !GotPlt)<br>
> >      return {};<br>
> > -  StringRef PltContents;<br>
> > -  if (Plt->getContents(PltContents))<br>
> > +  Expected<StringRef> PltContents = Plt->getContents();<br>
> > +  if (!PltContents) {<br>
> > +    consumeError(PltContents.takeError());<br>
> >      return {};<br>
> > -  ArrayRef<uint8_t> PltBytes((const uint8_t *)PltContents.data(),<br>
> > -                             Plt->getSize());<br>
> > -  auto PltEntries = MIA->findPltEntries(Plt->getAddress(), PltBytes,<br>
> > +  }<br>
> > +  auto PltEntries = MIA->findPltEntries(Plt->getAddress(),<br>
> > +                                        arrayRefFromStringRef(*PltContents),<br>
> >                                          GotPlt->getAddress(), Triple);<br>
> >    // Build a map from GOT entry virtual address to PLT entry virtual address.<br>
> >    DenseMap<uint64_t, uint64_t> GotToPlt;<br>
> ><br>
> > Modified: llvm/trunk/lib/Object/IRObjectFile.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/Object/IRObjectFile.cpp (original)<br>
> > +++ llvm/trunk/lib/Object/IRObjectFile.cpp Thu May 16 04:33:48 2019<br>
> > @@ -74,12 +74,12 @@ Expected<MemoryBufferRef><br>
> >  IRObjectFile::findBitcodeInObject(const ObjectFile &Obj) {<br>
> >    for (const SectionRef &Sec : Obj.sections()) {<br>
> >      if (Sec.isBitcode()) {<br>
> > -      StringRef SecContents;<br>
> > -      if (std::error_code EC = Sec.getContents(SecContents))<br>
> > -        return errorCodeToError(EC);<br>
> > -      if (SecContents.size() <= 1)<br>
> > +      Expected<StringRef> Contents = Sec.getContents();<br>
> > +      if (!Contents)<br>
> > +        return Contents.takeError();<br>
> > +      if (Contents->size() <= 1)<br>
> >          return errorCodeToError(object_error::bitcode_section_not_found);<br>
> > -      return MemoryBufferRef(SecContents, Obj.getFileName());<br>
> > +      return MemoryBufferRef(*Contents, Obj.getFileName());<br>
> >      }<br>
> >    }<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/lib/Object/Object.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Object.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Object.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/Object/Object.cpp (original)<br>
> > +++ llvm/trunk/lib/Object/Object.cpp Thu May 16 04:33:48 2019<br>
> > @@ -247,10 +247,10 @@ uint64_t LLVMGetSectionSize(LLVMSectionI<br>
> >  }<br>
> ><br>
> >  const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI) {<br>
> > -  StringRef ret;<br>
> > -  if (std::error_code ec = (*unwrap(SI))->getContents(ret))<br>
> > -    report_fatal_error(ec.message());<br>
> > -  return ret.data();<br>
> > +  if (Expected<StringRef> E = (*unwrap(SI))->getContents())<br>
> > +    return E->data();<br>
> > +  else<br>
> > +    report_fatal_error(E.takeError());<br>
> >  }<br>
> ><br>
> >  uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI) {<br>
> ><br>
> > Modified: llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp (original)<br>
> > +++ llvm/trunk/lib/ProfileData/Coverage/CoverageMappingReader.cpp Thu May 16 04:33:48 2019<br>
> > @@ -348,8 +348,10 @@ Expected<bool> RawCoverageMappingDummyCh<br>
> >  }<br>
> ><br>
> >  Error InstrProfSymtab::create(SectionRef &Section) {<br>
> > -  if (auto EC = Section.getContents(Data))<br>
> > -    return errorCodeToError(EC);<br>
> > +  Expected<StringRef> DataOrErr = Section.getContents();<br>
> > +  if (!DataOrErr)<br>
> > +    return DataOrErr.takeError();<br>
> > +  Data = *DataOrErr;<br>
> >    Address = Section.getAddress();<br>
> ><br>
> >    // If this is a linked PE/COFF file, then we have to skip over the null byte<br>
> > @@ -687,8 +689,11 @@ static Error loadBinaryFormat(MemoryBuff<br>
> >      return E;<br>
> ><br>
> >    // Get the contents of the given sections.<br>
> > -  if (auto EC = CoverageSection->getContents(CoverageMapping))<br>
> > -    return errorCodeToError(EC);<br>
> > +  if (Expected<StringRef> E = CoverageSection->getContents())<br>
> > +    CoverageMapping = *E;<br>
> > +  else<br>
> > +    return E.takeError();<br>
> > +<br>
> >    if (Error E = ProfileNames.create(*NamesSection))<br>
> >      return E;<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/lib/XRay/InstrumentationMap.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/XRay/InstrumentationMap.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/XRay/InstrumentationMap.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/lib/XRay/InstrumentationMap.cpp (original)<br>
> > +++ llvm/trunk/lib/XRay/InstrumentationMap.cpp Thu May 16 04:33:48 2019<br>
> > @@ -78,9 +78,10 @@ loadObj(StringRef Filename, object::Owni<br>
> >          "Failed to find XRay instrumentation map.",<br>
> >          std::make_error_code(std::errc::executable_format_error));<br>
> ><br>
> > -  if (I->getContents(Contents))<br>
> > -    return errorCodeToError(<br>
> > -        std::make_error_code(std::errc::executable_format_error));<br>
> > +  if (Expected<StringRef> E = I->getContents())<br>
> > +    Contents = *E;<br>
> > +  else<br>
> > +    return E.takeError();<br>
> ><br>
> >    RelocMap Relocs;<br>
> >    if (ObjFile.getBinary()->isELF()) {<br>
> ><br>
> > Modified: llvm/trunk/tools/dsymutil/DwarfLinker.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfLinker.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfLinker.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/dsymutil/DwarfLinker.cpp (original)<br>
> > +++ llvm/trunk/tools/dsymutil/DwarfLinker.cpp Thu May 16 04:33:48 2019<br>
> > @@ -436,9 +436,13 @@ static bool isMachOPairedReloc(uint64_t<br>
> >  void DwarfLinker::RelocationManager::findValidRelocsMachO(<br>
> >      const object::SectionRef &Section, const object::MachOObjectFile &Obj,<br>
> >      const DebugMapObject &DMO) {<br>
> > -  StringRef Contents;<br>
> > -  Section.getContents(Contents);<br>
> > -  DataExtractor Data(Contents, Obj.isLittleEndian(), 0);<br>
> > +  Expected<StringRef> ContentsOrErr = Section.getContents();<br>
> > +  if (!ContentsOrErr) {<br>
> > +    consumeError(ContentsOrErr.takeError());<br>
> > +    Linker.reportWarning("error reading section", DMO);<br>
> > +    return;<br>
> > +  }<br>
> > +  DataExtractor Data(*ContentsOrErr, Obj.isLittleEndian(), 0);<br>
> >    bool SkipNext = false;<br>
> ><br>
> >    for (const object::RelocationRef &Reloc : Section.relocations()) {<br>
> ><br>
> > Modified: llvm/trunk/tools/dsymutil/DwarfStreamer.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfStreamer.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/dsymutil/DwarfStreamer.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/dsymutil/DwarfStreamer.cpp (original)<br>
> > +++ llvm/trunk/tools/dsymutil/DwarfStreamer.cpp Thu May 16 04:33:48 2019<br>
> > @@ -667,10 +667,12 @@ void DwarfStreamer::translateLineTable(D<br>
> ><br>
> >  static void emitSectionContents(const object::ObjectFile &Obj,<br>
> >                                  StringRef SecName, MCStreamer *MS) {<br>
> > -  StringRef Contents;<br>
> > -  if (auto Sec = getSectionByName(Obj, SecName))<br>
> > -    if (!Sec->getContents(Contents))<br>
> > -      MS->EmitBytes(Contents);<br>
> > +  if (auto Sec = getSectionByName(Obj, SecName)) {<br>
> > +    if (Expected<StringRef> E = Sec->getContents())<br>
> > +      MS->EmitBytes(*E);<br>
> > +    else<br>
> > +      consumeError(E.takeError());<br>
> > +  }<br>
> >  }<br>
> ><br>
> >  void DwarfStreamer::copyInvariantDebugSection(const object::ObjectFile &Obj) {<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp Thu May 16 04:33:48 2019<br>
> > @@ -453,13 +453,11 @@ Error FileAnalysis::parseCodeSections()<br>
> >      if (!Section.getName(SectionName) && SectionName == ".plt")<br>
> >        continue;<br>
> ><br>
> > -    StringRef SectionContents;<br>
> > -    if (Section.getContents(SectionContents))<br>
> > -      return make_error<StringError>("Failed to retrieve section contents",<br>
> > -                                     inconvertibleErrorCode());<br>
> > +    Expected<StringRef> Contents = Section.getContents();<br>
> > +    if (!Contents)<br>
> > +      return Contents.takeError();<br>
> > +    ArrayRef<uint8_t> SectionBytes = arrayRefFromStringRef(*Contents);<br>
> ><br>
> > -    ArrayRef<uint8_t> SectionBytes((const uint8_t *)SectionContents.data(),<br>
> > -                                   Section.getSize());<br>
> >      parseSectionContents(SectionBytes,<br>
> >                           {Section.getAddress(), Section.getIndex()});<br>
> >    }<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-cov/TestingSupport.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/TestingSupport.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/TestingSupport.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-cov/TestingSupport.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-cov/TestingSupport.cpp Thu May 16 04:33:48 2019<br>
> > @@ -69,9 +69,18 @@ int convertForTestingMain(int argc, cons<br>
> >    uint64_t ProfileNamesAddress = ProfileNames.getAddress();<br>
> >    StringRef CoverageMappingData;<br>
> >    StringRef ProfileNamesData;<br>
> > -  if (CoverageMapping.getContents(CoverageMappingData) ||<br>
> > -      ProfileNames.getContents(ProfileNamesData))<br>
> > +  if (Expected<StringRef> E = CoverageMapping.getContents())<br>
> > +    CoverageMappingData = *E;<br>
> > +  else {<br>
> > +    consumeError(E.takeError());<br>
> >      return 1;<br>
> > +  }<br>
> > +  if (Expected<StringRef> E = ProfileNames.getContents())<br>
> > +    ProfileNamesData = *E;<br>
> > +  else {<br>
> > +    consumeError(E.takeError());<br>
> > +    return 1;<br>
> > +  }<br>
> ><br>
> >    int FD;<br>
> >    if (auto Err = sys::fs::openFileForWrite(OutputFilename, FD)) {<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-cxxdump/llvm-cxxdump.cpp Thu May 16 04:33:48 2019<br>
> > @@ -48,15 +48,20 @@ static void error(std::error_code EC) {<br>
> >    exit(1);<br>
> >  }<br>
> ><br>
> > -static void error(Error Err) {<br>
> > -  if (!Err)<br>
> > -    return;<br>
> > +LLVM_ATTRIBUTE_NORETURN static void error(Error Err) {<br>
> >    logAllUnhandledErrors(std::move(Err), WithColor::error(outs()),<br>
> >                          "reading file: ");<br>
> >    outs().flush();<br>
> >    exit(1);<br>
> >  }<br>
> ><br>
> > +template <typename T><br>
> > +T unwrapOrError(Expected<T> EO) {<br>
> > +  if (!EO)<br>
> > +    error(EO.takeError());<br>
> > +  return std::move(*EO);<br>
> > +}<br>
> > +<br>
> >  } // namespace llvm<br>
> ><br>
> >  static void reportError(StringRef Input, StringRef Message) {<br>
> > @@ -195,8 +200,7 @@ static void dumpCXXData(const ObjectFile<br>
> >      // Skip virtual or BSS sections.<br>
> >      if (Sec.isBSS() || Sec.isVirtual())<br>
> >        continue;<br>
> > -    StringRef SecContents;<br>
> > -    error(Sec.getContents(SecContents));<br>
> > +    StringRef SecContents = unwrapOrError(Sec.getContents());<br>
> >      Expected<uint64_t> SymAddressOrErr = Sym.getAddress();<br>
> >      error(errorToErrorCode(SymAddressOrErr.takeError()));<br>
> >      uint64_t SymAddress = *SymAddressOrErr;<br>
> > @@ -510,7 +514,8 @@ static void dumpArchive(const Archive *A<br>
> >      else<br>
> >        reportError(Arc->getFileName(), cxxdump_error::unrecognized_file_format);<br>
> >    }<br>
> > -  error(std::move(Err));<br>
> > +  if (Err)<br>
> > +    error(std::move(Err));<br>
> >  }<br>
> ><br>
> >  static void dumpInput(StringRef File) {<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp Thu May 16 04:33:48 2019<br>
> > @@ -410,9 +410,10 @@ static Error handleSection(<br>
> >    if (std::error_code Err = Section.getName(Name))<br>
> >      return errorCodeToError(Err);<br>
> ><br>
> > -  StringRef Contents;<br>
> > -  if (auto Err = Section.getContents(Contents))<br>
> > -    return errorCodeToError(Err);<br>
> > +  Expected<StringRef> ContentsOrErr = Section.getContents();<br>
> > +  if (!ContentsOrErr)<br>
> > +    return ContentsOrErr.takeError();<br>
> > +  StringRef Contents = *ContentsOrErr;<br>
> ><br>
> >    if (auto Err = handleCompressedSection(UncompressedSections, Name, Contents))<br>
> >      return Err;<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-objdump/MachODump.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/MachODump.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/MachODump.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-objdump/MachODump.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-objdump/MachODump.cpp Thu May 16 04:33:48 2019<br>
> > @@ -1482,8 +1482,8 @@ static void DumpLiteralPointerSection(Ma<br>
> >        section_type = Sec.flags & MachO::SECTION_TYPE;<br>
> >      }<br>
> ><br>
> > -    StringRef BytesStr;<br>
> > -    Sect->getContents(BytesStr);<br>
> > +    StringRef BytesStr = unwrapOrError(Sect->getContents(), O->getFileName());<br>
> > +<br>
> >      const char *Contents = reinterpret_cast<const char *>(BytesStr.data());<br>
> ><br>
> >      switch (section_type) {<br>
> > @@ -1697,8 +1697,8 @@ static void DumpSectionContents(StringRe<br>
> >          }<br>
> >          uint32_t section_type = section_flags & MachO::SECTION_TYPE;<br>
> ><br>
> > -        StringRef BytesStr;<br>
> > -        Section.getContents(BytesStr);<br>
> > +        StringRef BytesStr =<br>
> > +            unwrapOrError(Section.getContents(), O->getFileName());<br>
> >          const char *sect = reinterpret_cast<const char *>(BytesStr.data());<br>
> >          uint32_t sect_size = BytesStr.size();<br>
> >          uint64_t sect_addr = Section.getAddress();<br>
> > @@ -1782,8 +1782,8 @@ static void DumpInfoPlistSectionContents<br>
> >      if (SegName == "__TEXT" && SectName == "__info_plist") {<br>
> >        if (!NoLeadingHeaders)<br>
> >          outs() << "Contents of (" << SegName << "," << SectName << ") section\n";<br>
> > -      StringRef BytesStr;<br>
> > -      Section.getContents(BytesStr);<br>
> > +      StringRef BytesStr =<br>
> > +          unwrapOrError(Section.getContents(), O->getFileName());<br>
> >        const char *sect = reinterpret_cast<const char *>(BytesStr.data());<br>
> >        outs() << format("%.*s", BytesStr.size(), sect) << "\n";<br>
> >        return;<br>
> > @@ -3194,8 +3194,8 @@ static const char *get_pointer_64(uint64<br>
> >        S = (*(info->Sections))[SectIdx];<br>
> >        offset = Address - SectAddress;<br>
> >        left = SectSize - offset;<br>
> > -      StringRef SectContents;<br>
> > -      ((*(info->Sections))[SectIdx]).getContents(SectContents);<br>
> > +      StringRef SectContents = unwrapOrError(<br>
> > +          ((*(info->Sections))[SectIdx]).getContents(), info->O->getFileName());<br>
> >        return SectContents.data() + offset;<br>
> >      }<br>
> >    }<br>
> > @@ -3998,8 +3998,7 @@ walk_pointer_list_64(const char *listnam<br>
> >    StringRef SegName = O->getSectionFinalSegmentName(Ref);<br>
> >    outs() << "Contents of (" << SegName << "," << SectName << ") section\n";<br>
> ><br>
> > -  StringRef BytesStr;<br>
> > -  S.getContents(BytesStr);<br>
> > +  StringRef BytesStr = unwrapOrError(S.getContents(), O->getFileName());<br>
> >    const char *Contents = reinterpret_cast<const char *>(BytesStr.data());<br>
> ><br>
> >    for (uint32_t i = 0; i < S.getSize(); i += sizeof(uint64_t)) {<br>
> > @@ -4049,8 +4048,7 @@ walk_pointer_list_32(const char *listnam<br>
> >    StringRef SegName = O->getSectionFinalSegmentName(Ref);<br>
> >    outs() << "Contents of (" << SegName << "," << SectName << ") section\n";<br>
> ><br>
> > -  StringRef BytesStr;<br>
> > -  S.getContents(BytesStr);<br>
> > +  StringRef BytesStr = unwrapOrError(S.getContents(), O->getFileName());<br>
> >    const char *Contents = reinterpret_cast<const char *>(BytesStr.data());<br>
> ><br>
> >    for (uint32_t i = 0; i < S.getSize(); i += sizeof(uint32_t)) {<br>
> > @@ -7242,8 +7240,8 @@ static void DisassembleMachO(StringRef F<br>
> >      if (SegmentName != DisSegName)<br>
> >        continue;<br>
> ><br>
> > -    StringRef BytesStr;<br>
> > -    Sections[SectIdx].getContents(BytesStr);<br>
> > +    StringRef BytesStr =<br>
> > +        unwrapOrError(Sections[SectIdx].getContents(), Filename);<br>
> >      ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr);<br>
> >      uint64_t SectAddress = Sections[SectIdx].getAddress();<br>
> ><br>
> > @@ -7696,9 +7694,8 @@ printMachOCompactUnwindSection(const Mac<br>
> >    uint32_t PointerSize = Is64 ? sizeof(uint64_t) : sizeof(uint32_t);<br>
> >    uint32_t EntrySize = 3 * PointerSize + 2 * sizeof(uint32_t);<br>
> ><br>
> > -  StringRef Contents;<br>
> > -  CompactUnwind.getContents(Contents);<br>
> > -<br>
> > +  StringRef Contents =<br>
> > +      unwrapOrError(CompactUnwind.getContents(), Obj->getFileName());<br>
> >    SmallVector<CompactUnwindEntry, 4> CompactUnwinds;<br>
> ><br>
> >    // First populate the initial raw offsets, encodings and so on from the entry.<br>
> > @@ -7839,8 +7836,8 @@ static void printMachOUnwindInfoSection(<br>
> ><br>
> >    outs() << "Contents of __unwind_info section:\n";<br>
> ><br>
> > -  StringRef Contents;<br>
> > -  UnwindInfo.getContents(Contents);<br>
> > +  StringRef Contents =<br>
> > +      unwrapOrError(UnwindInfo.getContents(), Obj->getFileName());<br>
> >    ptrdiff_t Pos = 0;<br>
> ><br>
> >    //===----------------------------------<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Thu May 16 04:33:48 2019<br>
> > @@ -1126,9 +1126,8 @@ static void disassembleObject(const Targ<br>
> >      SmallString<40> Comments;<br>
> >      raw_svector_ostream CommentStream(Comments);<br>
> ><br>
> > -    StringRef BytesStr;<br>
> > -    error(Section.getContents(BytesStr));<br>
> > -    ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr);<br>
> > +    ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(<br>
> > +        unwrapOrError(Section.getContents(), Obj->getFileName()));<br>
> ><br>
> >      uint64_t VMAAdjustment = 0;<br>
> >      if (shouldAdjustVA(Section))<br>
> > @@ -1561,7 +1560,6 @@ void printSectionHeaders(const ObjectFil<br>
> >  void printSectionContents(const ObjectFile *Obj) {<br>
> >    for (const SectionRef &Section : ToolSectionFilter(*Obj)) {<br>
> >      StringRef Name;<br>
> > -    StringRef Contents;<br>
> >      error(Section.getName(Name));<br>
> >      uint64_t BaseAddr = Section.getAddress();<br>
> >      uint64_t Size = Section.getSize();<br>
> > @@ -1576,7 +1574,7 @@ void printSectionContents(const ObjectFi<br>
> >        continue;<br>
> >      }<br>
> ><br>
> > -    error(Section.getContents(Contents));<br>
> > +    StringRef Contents = unwrapOrError(Section.getContents(), Obj->getFileName());<br>
> ><br>
> >      // Dump out the content as hex and printable ascii characters.<br>
> >      for (std::size_t Addr = 0, End = Contents.size(); Addr < End; Addr += 16) {<br>
> > @@ -1764,8 +1762,8 @@ void printRawClangAST(const ObjectFile *<br>
> >    if (!ClangASTSection)<br>
> >      return;<br>
> ><br>
> > -  StringRef ClangASTContents;<br>
> > -  error(ClangASTSection.getValue().getContents(ClangASTContents));<br>
> > +  StringRef ClangASTContents = unwrapOrError(<br>
> > +      ClangASTSection.getValue().getContents(), Obj->getFileName());<br>
> >    outs().write(ClangASTContents.data(), ClangASTContents.size());<br>
> >  }<br>
> ><br>
> > @@ -1801,9 +1799,8 @@ static void printFaultMaps(const ObjectF<br>
> >      return;<br>
> >    }<br>
> ><br>
> > -  StringRef FaultMapContents;<br>
> > -  error(FaultMapSection.getValue().getContents(FaultMapContents));<br>
> > -<br>
> > +  StringRef FaultMapContents =<br>
> > +      unwrapOrError(FaultMapSection.getValue().getContents(), Obj->getFileName());<br>
> >    FaultMapParser FMP(FaultMapContents.bytes_begin(),<br>
> >                       FaultMapContents.bytes_end());<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp Thu May 16 04:33:48 2019<br>
> > @@ -1376,12 +1376,12 @@ Error DumpOutputStyle::dumpTypesFromObje<br>
> >      else<br>
> >        continue;<br>
> ><br>
> > -    StringRef Contents;<br>
> > -    if (auto EC = S.getContents(Contents))<br>
> > -      return errorCodeToError(EC);<br>
> > +    Expected<StringRef> ContentsOrErr = S.getContents();<br>
> > +    if (!ContentsOrErr)<br>
> > +      return ContentsOrErr.takeError();<br>
> ><br>
> >      uint32_t Magic;<br>
> > -    BinaryStreamReader Reader(Contents, llvm::support::little);<br>
> > +    BinaryStreamReader Reader(*ContentsOrErr, llvm::support::little);<br>
> >      if (auto EC = Reader.readInteger(Magic))<br>
> >        return EC;<br>
> >      if (Magic != COFF::DEBUG_SECTION_MAGIC)<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-pdbutil/InputFile.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/InputFile.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/InputFile.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-pdbutil/InputFile.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-pdbutil/InputFile.cpp Thu May 16 04:33:48 2019<br>
> > @@ -66,17 +66,20 @@ getModuleDebugStream(PDBFile &File, Stri<br>
> >  static inline bool isCodeViewDebugSubsection(object::SectionRef Section,<br>
> >                                               StringRef Name,<br>
> >                                               BinaryStreamReader &Reader) {<br>
> > -  StringRef SectionName, Contents;<br>
> > +  StringRef SectionName;<br>
> >    if (Section.getName(SectionName))<br>
> >      return false;<br>
> ><br>
> >    if (SectionName != Name)<br>
> >      return false;<br>
> ><br>
> > -  if (Section.getContents(Contents))<br>
> > +  Expected<StringRef> ContentsOrErr = Section.getContents();<br>
> > +  if (!ContentsOrErr) {<br>
> > +    consumeError(ContentsOrErr.takeError());<br>
> >      return false;<br>
> > +  }<br>
> ><br>
> > -  Reader = BinaryStreamReader(Contents, support::little);<br>
> > +  Reader = BinaryStreamReader(*ContentsOrErr, support::little);<br>
> >    uint32_t Magic;<br>
> >    if (Reader.bytesRemaining() < sizeof(uint32_t))<br>
> >      return false;<br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Thu May 16 04:33:48 2019<br>
> > @@ -933,8 +933,7 @@ void COFFDumper::initializeFileAndString<br>
> ><br>
> >  void COFFDumper::printCodeViewSymbolSection(StringRef SectionName,<br>
> >                                              const SectionRef &Section) {<br>
> > -  StringRef SectionContents;<br>
> > -  error(Section.getContents(SectionContents));<br>
> > +  StringRef SectionContents = unwrapOrError(Section.getContents());<br>
> >    StringRef Data = SectionContents;<br>
> ><br>
> >    SmallVector<StringRef, 10> FunctionNames;<br>
> > @@ -1218,8 +1217,7 @@ void COFFDumper::mergeCodeViewTypes(Merg<br>
> >      StringRef SectionName;<br>
> >      error(S.getName(SectionName));<br>
> >      if (SectionName == ".debug$T") {<br>
> > -      StringRef Data;<br>
> > -      error(S.getContents(Data));<br>
> > +      StringRef Data = unwrapOrError(S.getContents());<br>
> >        uint32_t Magic;<br>
> >        error(consume(Data, Magic));<br>
> >        if (Magic != 4)<br>
> > @@ -1255,8 +1253,7 @@ void COFFDumper::printCodeViewTypeSectio<br>
> >    ListScope D(W, "CodeViewTypes");<br>
> >    W.printNumber("Section", SectionName, Obj->getSectionID(Section));<br>
> ><br>
> > -  StringRef Data;<br>
> > -  error(Section.getContents(Data));<br>
> > +  StringRef Data = unwrapOrError(Section.getContents());<br>
> >    if (opts::CodeViewSubsectionBytes)<br>
> >      W.printBinaryBlock("Data", Data);<br>
> ><br>
> > @@ -1316,9 +1313,7 @@ void COFFDumper::printSectionHeaders() {<br>
> ><br>
> >      if (opts::SectionData &&<br>
> >          !(Section->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) {<br>
> > -      StringRef Data;<br>
> > -      error(Sec.getContents(Data));<br>
> > -<br>
> > +      StringRef Data = unwrapOrError(Sec.getContents());<br>
> >        W.printBinaryBlock("SectionData", Data);<br>
> >      }<br>
> >    }<br>
> > @@ -1660,15 +1655,13 @@ void COFFDumper::printCOFFExports() {<br>
> ><br>
> >  void COFFDumper::printCOFFDirectives() {<br>
> >    for (const SectionRef &Section : Obj->sections()) {<br>
> > -    StringRef Contents;<br>
> >      StringRef Name;<br>
> ><br>
> >      error(Section.getName(Name));<br>
> >      if (Name != ".drectve")<br>
> >        continue;<br>
> ><br>
> > -    error(Section.getContents(Contents));<br>
> > -<br>
> > +    StringRef Contents = unwrapOrError(Section.getContents());<br>
> >      W.printString("Directive(s)", Contents);<br>
> >    }<br>
> >  }<br>
> > @@ -1707,8 +1700,7 @@ void COFFDumper::printCOFFResources() {<br>
> >      if (!Name.startswith(".rsrc"))<br>
> >        continue;<br>
> ><br>
> > -    StringRef Ref;<br>
> > -    error(S.getContents(Ref));<br>
> > +    StringRef Ref = unwrapOrError(S.getContents());<br>
> ><br>
> >      if ((Name == ".rsrc") || (Name == ".rsrc$01")) {<br>
> >        ResourceSectionRef RSF(Ref);<br>
> > @@ -1834,8 +1826,7 @@ void COFFDumper::printStackMap() const {<br>
> >    if (StackMapSection == object::SectionRef())<br>
> >      return;<br>
> ><br>
> > -  StringRef StackMapContents;<br>
> > -  StackMapSection.getContents(StackMapContents);<br>
> > +  StringRef StackMapContents = unwrapOrError(StackMapSection.getContents());<br>
> >    ArrayRef<uint8_t> StackMapContentsArray =<br>
> >        arrayRefFromStringRef(StackMapContents);<br>
> ><br>
> > @@ -1861,8 +1852,7 @@ void COFFDumper::printAddrsig() {<br>
> >    if (AddrsigSection == object::SectionRef())<br>
> >      return;<br>
> ><br>
> > -  StringRef AddrsigContents;<br>
> > -  AddrsigSection.getContents(AddrsigContents);<br>
> > +  StringRef AddrsigContents = unwrapOrError(AddrsigSection.getContents());<br>
> >    ArrayRef<uint8_t> AddrsigContentsArray(AddrsigContents.bytes_begin(),<br>
> >                                           AddrsigContents.size());<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-readobj/MachODumper.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/MachODumper.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-readobj/MachODumper.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-readobj/MachODumper.cpp Thu May 16 04:33:48 2019<br>
> > @@ -483,15 +483,8 @@ void MachODumper::printSectionHeaders(co<br>
> >        }<br>
> >      }<br>
> ><br>
> > -    if (opts::SectionData) {<br>
> > -      bool IsBSS = Section.isBSS();<br>
> > -      if (!IsBSS) {<br>
> > -        StringRef Data;<br>
> > -        error(Section.getContents(Data));<br>
> > -<br>
> > -        W.printBinaryBlock("SectionData", Data);<br>
> > -      }<br>
> > -    }<br>
> > +    if (opts::SectionData && !Section.isBSS())<br>
> > +      W.printBinaryBlock("SectionData", unwrapOrError(Section.getContents()));<br>
> >    }<br>
> >  }<br>
> ><br>
> > @@ -660,8 +653,7 @@ void MachODumper::printStackMap() const<br>
> >    if (StackMapSection == object::SectionRef())<br>
> >      return;<br>
> ><br>
> > -  StringRef StackMapContents;<br>
> > -  StackMapSection.getContents(StackMapContents);<br>
> > +  StringRef StackMapContents = unwrapOrError(StackMapSection.getContents());<br>
> >    ArrayRef<uint8_t> StackMapContentsArray =<br>
> >        arrayRefFromStringRef(StackMapContents);<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/tools/llvm-readobj/ObjDumper.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ObjDumper.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/llvm-readobj/ObjDumper.cpp (original)<br>
> > +++ llvm/trunk/tools/llvm-readobj/ObjDumper.cpp Thu May 16 04:33:48 2019<br>
> > @@ -73,8 +73,7 @@ void ObjDumper::printSectionAsString(con<br>
> >      error(E);<br>
> >    W.startLine() << "String dump of section '" << SectionName << "':\n";<br>
> ><br>
> > -  StringRef SectionContent;<br>
> > -  Section.getContents(SectionContent);<br>
> > +  StringRef SectionContent = unwrapOrError(Section.getContents());<br>
> ><br>
> >    const uint8_t *SecContent = SectionContent.bytes_begin();<br>
> >    const uint8_t *CurrentWord = SecContent;<br>
> > @@ -107,8 +106,7 @@ void ObjDumper::printSectionAsHex(const<br>
> >      error(E);<br>
> >    W.startLine() << "Hex dump of section '" << SectionName << "':\n";<br>
> ><br>
> > -  StringRef SectionContent;<br>
> > -  Section.getContents(SectionContent);<br>
> > +  StringRef SectionContent = unwrapOrError(Section.getContents());<br>
> >    const uint8_t *SecContent = SectionContent.bytes_begin();<br>
> >    const uint8_t *SecEnd = SecContent + SectionContent.size();<br>
> ><br>
> ><br>
> > Modified: llvm/trunk/tools/sancov/sancov.cpp<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cpp?rev=360876&r1=360875&r2=360876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/sancov/sancov.cpp?rev=360876&r1=360875&r2=360876&view=diff</a><br>
> > ==============================================================================<br>
> > --- llvm/trunk/tools/sancov/sancov.cpp (original)<br>
> > +++ llvm/trunk/tools/sancov/sancov.cpp Thu May 16 04:33:48 2019<br>
> > @@ -841,9 +841,9 @@ static void getObjectCoveragePoints(cons<br>
> >      if (!SectSize)<br>
> >        continue;<br>
> ><br>
> > -    StringRef BytesStr;<br>
> > -    failIfError(Section.getContents(BytesStr));<br>
> > -    ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(BytesStr);<br>
> > +    Expected<StringRef> BytesStr = Section.getContents();<br>
> > +    failIfError(BytesStr);<br>
> > +    ArrayRef<uint8_t> Bytes = arrayRefFromStringRef(*BytesStr);<br>
> ><br>
> >      for (uint64_t Index = 0, Size = 0; Index < Section.getSize();<br>
> >           Index += Size) {<br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > llvm-commits mailing list<br>
> > <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> > <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">宋方睿</div></div>