diff options
Diffstat (limited to 'llvm/tools/sancov/sancov.cc')
| -rw-r--r-- | llvm/tools/sancov/sancov.cc | 17 |
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 |

