diff options
author | George Rimar <grimar@accesssoftek.com> | 2019-08-14 11:10:11 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2019-08-14 11:10:11 +0000 |
commit | bcc00e1afbdc107e05b2977fde26053a52295dd1 (patch) | |
tree | 0ad3e328d73375164f99adb046a919273a128c1c /llvm/tools/llvm-size/llvm-size.cpp | |
parent | a11d302fa00ba423b09c94491bc868cb991ff379 (diff) | |
download | bcm5719-llvm-bcc00e1afbdc107e05b2977fde26053a52295dd1.tar.gz bcm5719-llvm-bcc00e1afbdc107e05b2977fde26053a52295dd1.zip |
Recommit r368812 "[llvm/Object] - Convert SectionRef::getName() to return Expected<>"
Changes: no changes. A fix for the clang code will be landed right on top.
Original commit message:
SectionRef::getName() returns std::error_code now.
Returning Expected<> instead has multiple benefits.
For example, it forces user to check the error returned.
Also Expected<> may keep a valuable string error message,
what is more useful than having a error code.
(Object\invalid.test was updated to show the new messages printed.)
This patch makes a change for all users to switch to Expected<> version.
Note: in a few places the error returned was ignored before my changes.
In such places I left them ignored. My intention was to convert the interface
used, and not to improve and/or the existent users in this patch.
(Though I think this is good idea for a follow-ups to revisit such places
and either remove consumeError calls or comment each of them to clarify why
it is OK to have them).
Differential revision: https://reviews.llvm.org/D66089
llvm-svn: 368826
Diffstat (limited to 'llvm/tools/llvm-size/llvm-size.cpp')
-rw-r--r-- | llvm/tools/llvm-size/llvm-size.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index 89b89f06275..87df1264fbc 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -106,17 +106,6 @@ static bool HadError = false; static std::string ToolName; -/// If ec is not success, print the error and return true. -static bool error(std::error_code ec) { - if (!ec) - return false; - - HadError = true; - errs() << ToolName << ": error reading file: " << ec.message() << ".\n"; - errs().flush(); - return true; -} - static bool error(Twine Message) { HadError = true; errs() << ToolName << ": " << Message << ".\n"; @@ -397,11 +386,14 @@ static void printObjectSectionSizes(ObjectFile *Obj) { uint64_t size = Section.getSize(); total += size; - StringRef name; - if (error(Section.getName(name))) + Expected<StringRef> name_or_err = Section.getName(); + if (!name_or_err) { + error(name_or_err.takeError(), Obj->getFileName()); return; + } + uint64_t addr = Section.getAddress(); - max_name_len = std::max(max_name_len, name.size()); + max_name_len = std::max(max_name_len, name_or_err->size()); max_size_len = std::max(max_size_len, getNumLengthAsString(size)); max_addr_len = std::max(max_addr_len, getNumLengthAsString(addr)); } @@ -431,14 +423,16 @@ static void printObjectSectionSizes(ObjectFile *Obj) { for (const SectionRef &Section : Obj->sections()) { if (!considerForSize(Obj, Section)) continue; - StringRef name; - if (error(Section.getName(name))) + + Expected<StringRef> name_or_err = Section.getName(); + if (!name_or_err) { + error(name_or_err.takeError(), Obj->getFileName()); return; + } + uint64_t size = Section.getSize(); uint64_t addr = Section.getAddress(); - std::string namestr = name; - - outs() << format(fmt.str().c_str(), namestr.c_str(), size, addr); + outs() << format(fmt.str().c_str(), name_or_err->str().c_str(), size, addr); } if (ELFCommons) { |