summaryrefslogtreecommitdiffstats
path: root/llvm/tools/sancov/sancov.cc
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/sancov/sancov.cc')
-rw-r--r--llvm/tools/sancov/sancov.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/llvm/tools/sancov/sancov.cc b/llvm/tools/sancov/sancov.cc
index 8423d29e751..55b03709dde 100644
--- a/llvm/tools/sancov/sancov.cc
+++ b/llvm/tools/sancov/sancov.cc
@@ -135,10 +135,15 @@ template <typename T> static void FailIfError(const ErrorOr<T> &E) {
FailIfError(E.getError());
}
+static void FailIfError(Error Err) {
+ if (Err) {
+ logAllUnhandledErrors(std::move(Err), errs(), "Error: ");
+ exit(1);
+ }
+}
+
template <typename T> static void FailIfError(Expected<T> &E) {
- if (E)
- return;
- logAllUnhandledErrors(E.takeError(), errs(), "Error: ");
+ FailIfError(E.takeError());
}
static void FailIfNotEmpty(const llvm::Twine &E) {
@@ -417,9 +422,8 @@ static void getObjectCoveragePoints(const object::ObjectFile &O,
static void
visitObjectFiles(const object::Archive &A,
function_ref<void(const object::ObjectFile &)> Fn) {
- for (auto &ErrorOrChild : A.children()) {
- FailIfError(ErrorOrChild);
- const object::Archive::Child &C = *ErrorOrChild;
+ Error Err;
+ for (auto &C : A.children(Err)) {
Expected<std::unique_ptr<object::Binary>> ChildOrErr = C.getAsBinary();
FailIfError(errorToErrorCode(ChildOrErr.takeError()));
if (auto *O = dyn_cast<object::ObjectFile>(&*ChildOrErr.get()))
@@ -427,6 +431,7 @@ visitObjectFiles(const object::Archive &A,
else
FailIfError(object::object_error::invalid_file_type);
}
+ FailIfError(std::move(Err));
}
static void
OpenPOWER on IntegriCloud