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.
llvm-svn: 264924
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp
index 7d2aada..7619e4c 100644
--- a/lld/lib/Core/Resolver.cpp
+++ b/lld/lib/Core/Resolver.cpp
@@ -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 @@
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 @@
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 @@
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 @@
});
}
-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 @@
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 @@
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 @@
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;