[lld] r264924 - Convert file handle* methods to llvm::Error instead of std::error_code. NFC.
Pete Cooper via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 30 13:56:54 PDT 2016
Author: pete
Date: Wed Mar 30 15:56:54 2016
New Revision: 264924
URL: http://llvm.org/viewvc/llvm-project?rev=264924&view=rev
Log:
Convert file handle* methods to llvm::Error instead of std::error_code. NFC.
This updates most of the file handling methods in the linking context and
resolver to use the new API.
Modified:
lld/trunk/include/lld/Core/LinkingContext.h
lld/trunk/include/lld/Core/Resolver.h
lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
lld/trunk/lib/Core/Resolver.cpp
lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
Modified: lld/trunk/include/lld/Core/LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/LinkingContext.h (original)
+++ lld/trunk/include/lld/Core/LinkingContext.h Wed Mar 30 15:56:54 2016
@@ -208,7 +208,7 @@ public:
/// errors for any differences between the context state and a loaded file.
/// For example, we can error if we try to load a file which is a different
/// arch from that being linked.
- virtual std::error_code handleLoadedFile(File &file) = 0;
+ virtual llvm::Error handleLoadedFile(File &file) = 0;
/// @}
protected:
Modified: lld/trunk/include/lld/Core/Resolver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Resolver.h (original)
+++ lld/trunk/include/lld/Core/Resolver.h Wed Mar 30 15:56:54 2016
@@ -42,13 +42,13 @@ public:
// Handle files, this adds atoms from the current file thats
// being processed by the resolver
- ErrorOr<bool> handleFile(File &);
+ llvm::Expected<bool> handleFile(File &);
// Handle an archive library file.
- ErrorOr<bool> handleArchiveFile(File &);
+ llvm::Expected<bool> handleArchiveFile(File &);
// Handle a shared library file.
- std::error_code handleSharedLibrary(File &);
+ llvm::Error handleSharedLibrary(File &);
/// @brief do work of merging and resolving and return list
bool resolve();
@@ -56,7 +56,7 @@ public:
std::unique_ptr<SimpleFile> resultFile() { return std::move(_result); }
private:
- typedef std::function<ErrorOr<bool>(StringRef)> UndefCallback;
+ typedef std::function<llvm::Expected<bool>(StringRef)> UndefCallback;
bool undefinesAdded(int begin, int end);
File *getFile(int &index);
@@ -67,7 +67,7 @@ private:
void deadStripOptimize();
bool checkUndefines();
void removeCoalescedAwayAtoms();
- ErrorOr<bool> forEachUndefines(File &file, UndefCallback callback);
+ llvm::Expected<bool> forEachUndefines(File &file, UndefCallback callback);
void markLive(const Atom *atom);
Modified: lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h Wed Mar 30 15:56:54 2016
@@ -407,7 +407,7 @@ public:
void finalizeInputFiles() override;
- std::error_code handleLoadedFile(File &file) override;
+ llvm::Error handleLoadedFile(File &file) override;
bool customAtomOrderer(const DefinedAtom *left, const DefinedAtom *right,
bool &leftBeforeRight) const;
Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Wed Mar 30 15:56:54 2016
@@ -19,6 +19,7 @@
#include "lld/Core/UndefinedAtom.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Debug.h"
+#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
@@ -29,9 +30,9 @@
namespace lld {
-ErrorOr<bool> Resolver::handleFile(File &file) {
+llvm::Expected<bool> Resolver::handleFile(File &file) {
if (auto ec = _ctx.handleLoadedFile(file))
- return ec;
+ return std::move(ec);
bool undefAdded = false;
for (auto &atom : file.defined().owning_ptrs())
doDefinedAtom(std::move(atom));
@@ -46,7 +47,8 @@ ErrorOr<bool> Resolver::handleFile(File
return undefAdded;
}
-ErrorOr<bool> Resolver::forEachUndefines(File &file, UndefCallback callback) {
+llvm::Expected<bool> Resolver::forEachUndefines(File &file,
+ UndefCallback callback) {
size_t i = _undefineIndex[&file];
bool undefAdded = false;
do {
@@ -61,8 +63,8 @@ ErrorOr<bool> Resolver::forEachUndefines
continue;
}
auto undefAddedOrError = callback(undefName);
- if (undefAddedOrError.getError())
- return undefAddedOrError;
+ if (auto ec = undefAddedOrError.takeError())
+ return std::move(ec);
undefAdded |= undefAddedOrError.get();
}
} while (i < _undefines.size());
@@ -70,9 +72,10 @@ ErrorOr<bool> Resolver::forEachUndefines
return undefAdded;
}
-ErrorOr<bool> Resolver::handleArchiveFile(File &file) {
+llvm::Expected<bool> Resolver::handleArchiveFile(File &file) {
ArchiveLibraryFile *archiveFile = cast<ArchiveLibraryFile>(&file);
- return forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+ return forEachUndefines(file,
+ [&](StringRef undefName) -> llvm::Expected<bool> {
if (File *member = archiveFile->find(undefName)) {
member->setOrdinal(_ctx.getNextOrdinalAndIncrement());
return handleFile(*member);
@@ -81,23 +84,23 @@ ErrorOr<bool> Resolver::handleArchiveFil
});
}
-std::error_code Resolver::handleSharedLibrary(File &file) {
+llvm::Error Resolver::handleSharedLibrary(File &file) {
// Add all the atoms from the shared library
SharedLibraryFile *sharedLibrary = cast<SharedLibraryFile>(&file);
auto undefAddedOrError = handleFile(*sharedLibrary);
- if (undefAddedOrError.getError())
- return undefAddedOrError.getError();
+ if (auto ec = undefAddedOrError.takeError())
+ return std::move(ec);
undefAddedOrError =
- forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+ forEachUndefines(file, [&](StringRef undefName) -> llvm::Expected<bool> {
auto atom = sharedLibrary->exports(undefName);
if (atom.get())
doSharedLibraryAtom(std::move(atom));
return false;
});
- if (undefAddedOrError.getError())
- return undefAddedOrError.getError();
- return std::error_code();
+ if (auto ec = undefAddedOrError.takeError())
+ return std::move(ec);
+ return llvm::Error();
}
bool Resolver::doUndefinedAtom(OwningAtomPtr<UndefinedAtom> atom) {
@@ -247,9 +250,11 @@ bool Resolver::resolveUndefines() {
assert(!file->hasOrdinal());
file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
auto undefAddedOrError = handleFile(*file);
- if (undefAddedOrError.getError()) {
- llvm::errs() << "Error in " + file->path()
- << ": " << undefAddedOrError.getError().message() << "\n";
+ if (auto EC = undefAddedOrError.takeError()) {
+ // FIXME: This should be passed to logAllUnhandledErrors but it needs
+ // to be passed a Twine instead of a string.
+ llvm::errs() << "Error in " + file->path() << ": ";
+ logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
return false;
}
undefAdded = undefAddedOrError.get();
@@ -259,9 +264,11 @@ bool Resolver::resolveUndefines() {
if (!file->hasOrdinal())
file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
auto undefAddedOrError = handleArchiveFile(*file);
- if (undefAddedOrError.getError()) {
- llvm::errs() << "Error in " + file->path()
- << ": " << undefAddedOrError.getError().message() << "\n";
+ if (auto EC = undefAddedOrError.takeError()) {
+ // FIXME: This should be passed to logAllUnhandledErrors but it needs
+ // to be passed a Twine instead of a string.
+ llvm::errs() << "Error in " + file->path() << ": ";
+ logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
return false;
}
undefAdded = undefAddedOrError.get();
@@ -271,8 +278,10 @@ bool Resolver::resolveUndefines() {
if (!file->hasOrdinal())
file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
if (auto EC = handleSharedLibrary(*file)) {
- llvm::errs() << "Error in " + file->path()
- << ": " << EC.message() << "\n";
+ // FIXME: This should be passed to logAllUnhandledErrors but it needs
+ // to be passed a Twine instead of a string.
+ llvm::errs() << "Error in " + file->path() << ": ";
+ logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
return false;
}
break;
Modified: lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp Wed Mar 30 15:56:54 2016
@@ -1040,10 +1040,10 @@ void MachOLinkingContext::finalizeInputF
elements.push_back(llvm::make_unique<GroupEnd>(numLibs));
}
-std::error_code MachOLinkingContext::handleLoadedFile(File &file) {
+llvm::Error MachOLinkingContext::handleLoadedFile(File &file) {
auto *machoFile = dyn_cast<MachOFile>(&file);
if (!machoFile)
- return std::error_code();
+ return llvm::Error();
// Check that the arch of the context matches that of the file.
// Also set the arch of the context if it didn't have one.
@@ -1051,7 +1051,7 @@ std::error_code MachOLinkingContext::han
_arch = machoFile->arch();
} else if (machoFile->arch() != arch_unknown && machoFile->arch() != _arch) {
// Archs are different.
- return make_dynamic_error_code(file.path() +
+ return llvm::make_error<GenericError>(file.path() +
Twine(" cannot be linked due to incompatible architecture"));
}
@@ -1061,7 +1061,7 @@ std::error_code MachOLinkingContext::han
_os = machoFile->OS();
} else if (machoFile->OS() != OS::unknown && machoFile->OS() != _os) {
// OSes are different.
- return make_dynamic_error_code(file.path() +
+ return llvm::make_error<GenericError>(file.path() +
Twine(" cannot be linked due to incompatible operating systems"));
}
@@ -1078,7 +1078,7 @@ std::error_code MachOLinkingContext::han
// The file is built with simulator objc, so make sure that the context
// is also building with simulator support.
if (_os != OS::iOS_simulator)
- return make_dynamic_error_code(file.path() +
+ return llvm::make_error<GenericError>(file.path() +
Twine(" cannot be linked. It contains ObjC built for the simulator"
" while we are linking a non-simulator target"));
assert((_objcConstraint == objc_unknown ||
@@ -1090,7 +1090,7 @@ std::error_code MachOLinkingContext::han
// The file is built without simulator objc, so make sure that the
// context is also building without simulator support.
if (_os == OS::iOS_simulator)
- return make_dynamic_error_code(file.path() +
+ return llvm::make_error<GenericError>(file.path() +
Twine(" cannot be linked. It contains ObjC built for a non-simulator"
" target while we are linking a simulator target"));
assert((_objcConstraint == objc_unknown ||
@@ -1107,10 +1107,10 @@ std::error_code MachOLinkingContext::han
} else if (machoFile->swiftVersion() &&
machoFile->swiftVersion() != _swiftVersion) {
// Swift versions are different.
- return make_dynamic_error_code("different swift versions");
+ return llvm::make_error<GenericError>("different swift versions");
}
- return std::error_code();
+ return llvm::Error();
}
} // end namespace lld
More information about the llvm-commits
mailing list