diff options
author | Fangrui Song <maskray@google.com> | 2019-05-16 11:33:48 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-05-16 11:33:48 +0000 |
commit | a076ec54bee20c423cf710ea2818d01df84e28b0 (patch) | |
tree | 9349552e719590d0d902eb3e688645141e47d9e3 /llvm/tools/llvm-cxxdump | |
parent | 671fc5f3f44986f7d20c3fcf2126cfad39b1adaf (diff) | |
download | bcm5719-llvm-a076ec54bee20c423cf710ea2818d01df84e28b0.tar.gz bcm5719-llvm-a076ec54bee20c423cf710ea2818d01df84e28b0.zip |
[Object] Change object::SectionRef::getContents() to return Expected<StringRef>
Expected<ArrayRef<uint8_t>> may be better but use Expected<StringRef> for now.
Follow-up of D61781.
llvm-svn: 360876
Diffstat (limited to 'llvm/tools/llvm-cxxdump')
-rw-r--r-- | llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp index c850815cd2f..83331265578 100644 --- a/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp +++ b/llvm/tools/llvm-cxxdump/llvm-cxxdump.cpp @@ -48,15 +48,20 @@ static void error(std::error_code EC) { exit(1); } -static void error(Error Err) { - if (!Err) - return; +LLVM_ATTRIBUTE_NORETURN static void error(Error Err) { logAllUnhandledErrors(std::move(Err), WithColor::error(outs()), "reading file: "); outs().flush(); exit(1); } +template <typename T> +T unwrapOrError(Expected<T> EO) { + if (!EO) + error(EO.takeError()); + return std::move(*EO); +} + } // namespace llvm static void reportError(StringRef Input, StringRef Message) { @@ -195,8 +200,7 @@ static void dumpCXXData(const ObjectFile *Obj) { // Skip virtual or BSS sections. if (Sec.isBSS() || Sec.isVirtual()) continue; - StringRef SecContents; - error(Sec.getContents(SecContents)); + StringRef SecContents = unwrapOrError(Sec.getContents()); Expected<uint64_t> SymAddressOrErr = Sym.getAddress(); error(errorToErrorCode(SymAddressOrErr.takeError())); uint64_t SymAddress = *SymAddressOrErr; @@ -510,7 +514,8 @@ static void dumpArchive(const Archive *Arc) { else reportError(Arc->getFileName(), cxxdump_error::unrecognized_file_format); } - error(std::move(Err)); + if (Err) + error(std::move(Err)); } static void dumpInput(StringRef File) { |