[lld] r275521 - ELF: Make check() always return a value.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 14 19:01:04 PDT 2016
Author: ruiu
Date: Thu Jul 14 21:01:03 2016
New Revision: 275521
URL: http://llvm.org/viewvc/llvm-project?rev=275521&view=rev
Log:
ELF: Make check() always return a value.
This patch corresponds to r275511 for COFF.
Modified:
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Error.h
lld/trunk/ELF/InputFiles.cpp
lld/trunk/ELF/LTO.cpp
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Thu Jul 14 21:01:03 2016
@@ -100,7 +100,8 @@ LinkerDriver::getArchiveMembers(MemoryBu
File->getFileName());
V.push_back(MBRef);
}
- check(std::move(Err));
+ if (Err)
+ Error(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.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Error.h?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Error.h (original)
+++ lld/trunk/ELF/Error.h Thu Jul 14 21:01:03 2016
@@ -31,33 +31,28 @@ template <typename T> void error(const E
LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg);
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)
- return std::move(*EO);
- fatal(EO.getError().message());
+template <class T> T check(ErrorOr<T> E) {
+ if (auto EC = E.getError())
+ fatal(EC.message());
+ return std::move(*E);
}
-template <class T> T check(Expected<T> EO) {
- if (EO)
- return std::move(*EO);
- check(EO.takeError());
- return T();
+template <class T> T check(Expected<T> E) {
+ if (!E)
+ fatal(errorToErrorCode(E.takeError()).message());
+ return std::move(*E);
}
-template <class T> T check(ErrorOr<T> EO, const Twine &Prefix) {
- if (EO)
- return std::move(*EO);
- fatal(EO.getError().message(), Prefix);
+template <class T> T check(ErrorOr<T> E, const Twine &Prefix) {
+ if (auto EC = E.getError())
+ fatal(EC.message(), Prefix);
+ return std::move(*E);
}
-template <class T> T check(Expected<T> EO, const Twine &Prefix) {
- if (EO)
- return std::move(*EO);
- error(errorToErrorCode(EO.takeError()), Prefix);
- return T();
+template <class T> T check(Expected<T> E, const Twine &Prefix) {
+ if (!E)
+ fatal(errorToErrorCode(E.takeError()).message(), Prefix);
+ return std::move(*E);
}
} // namespace elf
Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Thu Jul 14 21:01:03 2016
@@ -41,7 +41,8 @@ template <class ELFT>
static ELFFile<ELFT> createELFObj(MemoryBufferRef MB) {
std::error_code EC;
ELFFile<ELFT> F(MB.getBuffer(), EC);
- check(EC);
+ if (EC)
+ error(EC, "failed to read " + MB.getBufferIdentifier());
return F;
}
Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Thu Jul 14 21:01:03 2016
@@ -44,22 +44,24 @@ using namespace lld::elf;
// This is for use when debugging LTO.
static void saveLtoObjectFile(StringRef Buffer, unsigned I, bool Many) {
- SmallString<128> Filename = Config->OutputFile;
+ SmallString<128> Path = Config->OutputFile;
if (Many)
- Filename += utostr(I);
- Filename += ".lto.o";
+ Path += utostr(I);
+ Path += ".lto.o";
std::error_code EC;
- raw_fd_ostream OS(Filename, EC, sys::fs::OpenFlags::F_None);
- check(EC);
+ raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
+ if (EC)
+ error(EC, "cannot create " + Path);
OS << Buffer;
}
// This is for use when debugging LTO.
static void saveBCFile(Module &M, StringRef Suffix) {
+ std::string Path = (Config->OutputFile + Suffix).str();
std::error_code EC;
- raw_fd_ostream OS(Config->OutputFile.str() + Suffix.str(), EC,
- sys::fs::OpenFlags::F_None);
- check(EC);
+ raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
+ if (EC)
+ error(EC, "cannot create " + Path);
WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true);
}
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu Jul 14 21:01:03 2016
@@ -261,7 +261,8 @@ template <class ELFT> void Writer<ELFT>:
writeBuildId();
if (HasError)
return;
- check(Buffer->commit());
+ if (auto EC = Buffer->commit())
+ error(EC, "failed to write to the output file");
}
template <class ELFT>
More information about the llvm-commits
mailing list