diff options
author | George Rimar <grimar@accesssoftek.com> | 2019-08-17 16:07:18 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2019-08-17 16:07:18 +0000 |
commit | e3fb2d549b6820ab60806240cbf69e7447e71a86 (patch) | |
tree | 66c3056c2e13dca70ecde5e5010f79a7abc1b7c9 /llvm/tools/llvm-readobj/llvm-readobj.cpp | |
parent | c35d4c900d209b57f8cf8fe9030ecda054488b71 (diff) | |
download | bcm5719-llvm-e3fb2d549b6820ab60806240cbf69e7447e71a86.tar.gz bcm5719-llvm-e3fb2d549b6820ab60806240cbf69e7447e71a86.zip |
Recommit r369190 "[llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting API."
Fix: Add a `consumeError` call removed by mistake to 'printStackSize',
this should fix the "Expected<T> must be checked before access or destruction." reported by following bot:
http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/9743/steps/stage%201%20check/logs/stdio
Original commit message:
Currently we have the following functions for error reporting:
LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg);
void reportError(Error Err, StringRef Input);
void reportWarning(Twine Msg);
void reportWarning(StringRef Input, Error Err);
void warn(llvm::Error Err);
void error(std::error_code EC);
Problems are: naming is inconsistent, arguments order is inconsistent,
some of the functions looks excessive.
After applying this patch we have:
void reportError(Error Err, StringRef Input);
void reportError(std::error_code EC, StringRef Input);
void reportWarning(Error Err, StringRef Input);
I'd be happy to remove reportError(std::error_code EC, StringRef Input) too, but it
is used by COFF heavily.
Test cases were updated, they show an improvement introduced.
Differential revision: https://reviews.llvm.org/D66286
llvm-svn: 369194
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index ec67bd52600..bc24b6a7033 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -375,52 +375,46 @@ namespace opts { namespace llvm { -LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg) { +LLVM_ATTRIBUTE_NORETURN static void error(Twine Msg) { + // Flush the standard output to print the error at a + // proper place. fouts().flush(); errs() << "\n"; WithColor::error(errs()) << Msg << "\n"; exit(1); } -void reportError(Error Err, StringRef Input) { +LLVM_ATTRIBUTE_NORETURN void reportError(Error Err, StringRef Input) { assert(Err); if (Input == "-") Input = "<stdin>"; handleAllErrors(createFileError(Input, std::move(Err)), - [&](const ErrorInfoBase &EI) { reportError(EI.message()); }); + [&](const ErrorInfoBase &EI) { error(EI.message()); }); + llvm_unreachable("error() call should never return"); } -void reportWarning(Twine Msg) { - fouts().flush(); - errs() << "\n"; - WithColor::warning(errs()) << Msg << "\n"; -} - -void reportWarning(StringRef Input, Error Err) { +void reportWarning(Error Err, StringRef Input) { + assert(Err); if (Input == "-") Input = "<stdin>"; - warn(createFileError(Input, std::move(Err))); -} - -void warn(Error Err) { - handleAllErrors(std::move(Err), [&](const ErrorInfoBase &EI) { - reportWarning(EI.message()); - }); -} -void error(std::error_code EC) { - if (!EC) - return; - reportError(EC.message()); + // Flush the standard output to print the warning at a + // proper place. + fouts().flush(); + handleAllErrors(createFileError(Input, std::move(Err)), + [&](const ErrorInfoBase &EI) { + errs() << "\n"; + WithColor::warning(errs()) << EI.message() << "\n"; + }); } -} // namespace llvm - -static void reportError(std::error_code EC, StringRef Input) { +LLVM_ATTRIBUTE_NORETURN void reportError(std::error_code EC, StringRef Input) { assert(EC != readobj_error::success); reportError(errorCodeToError(EC), Input); } +} // namespace llvm + static bool isMipsArch(unsigned Arch) { switch (Arch) { case llvm::Triple::mips: |