[lld] r275362 - [lld] Update LLD for Archive::child_iterator change in LLVM r275361.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 18 11:06:44 PDT 2016


Any test coverage for the new diagnostics this supports? (does it support
new diagnostics, or was the lower layer handling the diagnostics previously
& now it's just moved around but not changed behavior?)

On Wed, Jul 13, 2016 at 7:42 PM Lang Hames via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: lhames
> Date: Wed Jul 13 21:35:18 2016
> New Revision: 275362
>
> URL: http://llvm.org/viewvc/llvm-project?rev=275362&view=rev
> Log:
> [lld] Update LLD for Archive::child_iterator change in LLVM r275361.
>
> Modified:
>     lld/trunk/COFF/InputFiles.cpp
>     lld/trunk/ELF/Driver.cpp
>     lld/trunk/ELF/Error.cpp
>     lld/trunk/ELF/Error.h
>     lld/trunk/include/lld/Core/LLVM.h
>     lld/trunk/lib/ReaderWriter/FileArchive.cpp
>
> Modified: lld/trunk/COFF/InputFiles.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.cpp?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/COFF/InputFiles.cpp (original)
> +++ lld/trunk/COFF/InputFiles.cpp Wed Jul 13 21:35:18 2016
> @@ -79,11 +79,10 @@ void ArchiveFile::parse() {
>    // Seen is a map from member files to boolean values. Initially
>    // all members are mapped to false, which indicates all these files
>    // are not read yet.
> -  for (auto &ChildOrErr : File->children()) {
> -    error(ChildOrErr, "Failed to parse static library");
> -    const Archive::Child &Child = *ChildOrErr;
> +  Error Err;
> +  for (auto &Child : File->children(Err))
>      Seen[Child.getChildOffset()].clear();
> -  }
> +  error(std::move(Err), "Failed to parse static library");
>  }
>
>  // Returns a buffer pointing to a member file containing a given symbol.
>
> Modified: lld/trunk/ELF/Driver.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Driver.cpp (original)
> +++ lld/trunk/ELF/Driver.cpp Wed Jul 13 21:35:18 2016
> @@ -90,7 +90,8 @@ LinkerDriver::getArchiveMembers(MemoryBu
>        check(Archive::create(MB), "failed to parse archive");
>
>    std::vector<MemoryBufferRef> V;
> -  for (const ErrorOr<Archive::Child> &COrErr : File->children()) {
> +  Error Err;
> +  for (const ErrorOr<Archive::Child> &COrErr : File->children(Err)) {
>      Archive::Child C = check(COrErr, "could not get the child of the
> archive " +
>                                           File->getFileName());
>      MemoryBufferRef MBRef =
> @@ -99,6 +100,7 @@ LinkerDriver::getArchiveMembers(MemoryBu
>                    File->getFileName());
>      V.push_back(MBRef);
>    }
> +  check(std::move(Err));
>
>    // Take ownership of memory buffers created for members of thin
> archives.
>    for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers())
>
> Modified: lld/trunk/ELF/Error.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Error.cpp?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Error.cpp (original)
> +++ lld/trunk/ELF/Error.cpp Wed Jul 13 21:35:18 2016
> @@ -11,6 +11,7 @@
>  #include "Config.h"
>
>  #include "llvm/ADT/Twine.h"
> +#include "llvm/Support/Error.h"
>  #include "llvm/Support/raw_ostream.h"
>
>  using namespace llvm;
> @@ -57,5 +58,9 @@ void check(std::error_code EC) {
>      fatal(EC.message());
>  }
>
> +void check(Error Err) {
> +  check(errorToErrorCode(std::move(Err)));
> +}
> +
>  } // namespace elf
>  } // namespace lld
>
> Modified: lld/trunk/ELF/Error.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Error.h?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Error.h (original)
> +++ lld/trunk/ELF/Error.h Wed Jul 13 21:35:18 2016
> @@ -32,6 +32,7 @@ LLVM_ATTRIBUTE_NORETURN void fatal(const
>  LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg, const Twine &Prefix);
>
>  void check(std::error_code EC);
> +void check(Error Err);
>
>  template <class T> T check(ErrorOr<T> EO) {
>    if (EO)
> @@ -42,7 +43,7 @@ template <class T> T check(ErrorOr<T> EO
>  template <class T> T check(Expected<T> EO) {
>    if (EO)
>      return std::move(*EO);
> -  check(errorToErrorCode(EO.takeError()));
> +  check(EO.takeError());
>    return T();
>  }
>
>
> Modified: lld/trunk/include/lld/Core/LLVM.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LLVM.h?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/include/lld/Core/LLVM.h (original)
> +++ lld/trunk/include/lld/Core/LLVM.h Wed Jul 13 21:35:18 2016
> @@ -23,6 +23,7 @@
>
>  namespace llvm {
>    // ADT's.
> +  class Error;
>    class StringRef;
>    class Twine;
>    class MemoryBuffer;
> @@ -54,6 +55,7 @@ namespace lld {
>    using llvm::cast_or_null;
>
>    // ADT's.
> +  using llvm::Error;
>    using llvm::StringRef;
>    using llvm::Twine;
>    using llvm::MemoryBuffer;
>
> Modified: lld/trunk/lib/ReaderWriter/FileArchive.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/FileArchive.cpp?rev=275362&r1=275361&r2=275362&view=diff
>
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/FileArchive.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/FileArchive.cpp Wed Jul 13 21:35:18 2016
> @@ -49,12 +49,10 @@ public:
>      auto member = _symbolMemberMap.find(name);
>      if (member == _symbolMemberMap.end())
>        return nullptr;
> -    Archive::child_iterator ci = member->second;
> -    if (ci->getError())
> -      return nullptr;
> +    Archive::Child c = member->second;
>
>      // Don't return a member already returned
> -    ErrorOr<StringRef> buf = (*ci)->getBuffer();
> +    ErrorOr<StringRef> buf = c.getBuffer();
>      if (!buf)
>        return nullptr;
>      const char *memberStart = buf->data();
> @@ -63,7 +61,7 @@ public:
>      _membersInstantiated.insert(memberStart);
>
>      std::unique_ptr<File> result;
> -    if (instantiateMember(ci, result))
> +    if (instantiateMember(c, result))
>        return nullptr;
>
>      File *file = result.get();
> @@ -78,13 +76,20 @@ public:
>    parseAllMembers(std::vector<std::unique_ptr<File>> &result) override {
>      if (std::error_code ec = parse())
>        return ec;
> -    for (auto mf = _archive->child_begin(), me = _archive->child_end();
> +    llvm::Error err;
> +    for (auto mf = _archive->child_begin(err), me = _archive->child_end();
>           mf != me; ++mf) {
>        std::unique_ptr<File> file;
> -      if (std::error_code ec = instantiateMember(mf, file))
> +      if (std::error_code ec = instantiateMember(*mf, file)) {
> +        // err is Success (or we wouldn't be in the loop body) but we
> can't
> +        // return without testing or consuming it.
> +        consumeError(std::move(err));
>          return ec;
> +      }
>        result.push_back(std::move(file));
>      }
> +    if (err)
> +      return errorToErrorCode(std::move(err));
>      return std::error_code();
>    }
>
> @@ -125,12 +130,9 @@ protected:
>    }
>
>  private:
> -  std::error_code instantiateMember(Archive::child_iterator cOrErr,
> +  std::error_code instantiateMember(Archive::Child member,
>                                      std::unique_ptr<File> &result) const {
> -    if (std::error_code ec = cOrErr->getError())
> -      return ec;
> -    Archive::child_iterator member = cOrErr->get();
> -    ErrorOr<llvm::MemoryBufferRef> mbOrErr =
> (*member)->getMemoryBufferRef();
> +    ErrorOr<llvm::MemoryBufferRef> mbOrErr = member.getMemoryBufferRef();
>      if (std::error_code ec = mbOrErr.getError())
>        return ec;
>      llvm::MemoryBufferRef mb = mbOrErr.get();
> @@ -164,21 +166,21 @@ private:
>                                         << _archive->getFileName() <<
> "':\n");
>      for (const Archive::Symbol &sym : _archive->symbols()) {
>        StringRef name = sym.getName();
> -      ErrorOr<Archive::child_iterator> memberOrErr = sym.getMember();
> +      ErrorOr<Archive::Child> memberOrErr = sym.getMember();
>        if (std::error_code ec = memberOrErr.getError())
>          return ec;
> -      Archive::child_iterator member = memberOrErr.get();
> +      Archive::Child member = memberOrErr.get();
>        DEBUG_WITH_TYPE("FileArchive",
>                        llvm::dbgs()
>                            << llvm::format("0x%08llX ",
> -                                          (*member)->getBuffer()->data())
> +                                          member.getBuffer()->data())
>                            << "'" << name << "'\n");
>        _symbolMemberMap.insert(std::make_pair(name, member));
>      }
>      return std::error_code();
>    }
>
> -  typedef std::unordered_map<StringRef, Archive::child_iterator>
> MemberMap;
> +  typedef std::unordered_map<StringRef, Archive::Child> MemberMap;
>    typedef std::set<const char *> InstantiatedSet;
>
>    std::shared_ptr<MemoryBuffer> _mb;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160718/246373c8/attachment.html>


More information about the llvm-commits mailing list