diff options
-rw-r--r-- | lld/COFF/DriverUtils.cpp | 6 | ||||
-rw-r--r-- | lld/COFF/InputFiles.cpp | 3 | ||||
-rw-r--r-- | lld/ELF/Error.h | 7 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/FileArchive.cpp | 7 |
4 files changed, 16 insertions, 7 deletions
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index ff8729df198..13ec6a80f15 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -706,9 +706,9 @@ static std::string replace(StringRef S, StringRef From, StringRef To) { // import files to that file. void writeImportLibrary() { std::unique_ptr<MemoryBuffer> Buf = createEmptyImportLibrary(); - std::error_code EC; - object::Archive Archive(Buf->getMemBufferRef(), EC); - error(EC, "Error reading an empty import file"); + llvm::Error Err; + object::Archive Archive(Buf->getMemBufferRef(), Err); + error(errorToErrorCode(std::move(Err)), "Error reading an empty import file"); std::vector<NewArchiveIterator> Members = readMembers(Archive); std::string DLLName = llvm::sys::path::filename(Config->OutputFile); diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 4a40382a60e..7fd9b84ae5e 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -64,7 +64,8 @@ std::string InputFile::getShortName() { void ArchiveFile::parse() { // Parse a MemoryBufferRef as an archive file. auto ArchiveOrErr = Archive::create(MB); - error(ArchiveOrErr, "Failed to parse static library"); + error(errorToErrorCode(ArchiveOrErr.takeError()), + "Failed to parse static library"); File = std::move(*ArchiveOrErr); // Allocate a buffer for Lazy objects. diff --git a/lld/ELF/Error.h b/lld/ELF/Error.h index 45d9113cbd8..f0faf1b79ed 100644 --- a/lld/ELF/Error.h +++ b/lld/ELF/Error.h @@ -52,6 +52,13 @@ template <class T> T check(ErrorOr<T> EO, const Twine &Prefix) { fatal(EO.getError().message(), Prefix); } +template <class T> T check(Expected<T> EO, const Twine &Prefix) { + if (EO) + return std::move(*EO); + error(errorToErrorCode(EO.takeError()), Prefix); + return T(); +} + } // namespace elf } // namespace lld diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp index 33b953f189f..4ba515b84e5 100644 --- a/lld/lib/ReaderWriter/FileArchive.cpp +++ b/lld/lib/ReaderWriter/FileArchive.cpp @@ -114,10 +114,11 @@ public: protected: std::error_code doParse() override { // Make Archive object which will be owned by FileArchive object. + llvm::Error Err; + _archive.reset(new Archive(_mb->getMemBufferRef(), Err)); + if (Err) + return errorToErrorCode(std::move(Err)); std::error_code ec; - _archive.reset(new Archive(_mb->getMemBufferRef(), ec)); - if (ec) - return ec; if ((ec = buildTableOfContents())) return ec; return std::error_code(); |