diff options
| author | Kevin Enderby <enderby@apple.com> | 2016-07-29 17:44:13 +0000 |
|---|---|---|
| committer | Kevin Enderby <enderby@apple.com> | 2016-07-29 17:44:13 +0000 |
| commit | f4586039f6c620864227f50917d3c488ec95e6be (patch) | |
| tree | d63675cf10720b06d4aaa6b3b8de26031a7df140 /llvm/tools/llvm-size | |
| parent | a51575ffa215c0a3558740694b3831b773498d15 (diff) | |
| download | bcm5719-llvm-f4586039f6c620864227f50917d3c488ec95e6be.tar.gz bcm5719-llvm-f4586039f6c620864227f50917d3c488ec95e6be.zip | |
The next step along the way to getting good error messages for bad archives.
As mentioned in commit log for r276686 this next step is adding a new
method in the ArchiveMemberHeader class to get the full name that
does proper error checking, and can be use for error messages.
To do this the name of ArchiveMemberHeader::getName() is changed to
ArchiveMemberHeader::getRawName() to be consistent with
Archive::Child::getRawName(). Then the “new” method is the addition
of a new implementation of ArchiveMemberHeader::getName() which gets
the full name and provides proper error checking. Which is mostly a rewrite
of what was Archive::Child::getName() and cleaning up incorrect uses of
llvm_unreachable() in the code which were actually just cases of errors
in the input Archives.
Then Archive::Child::getName() is changed to return Expected<> and use
the new implementation of ArchiveMemberHeader::getName() .
Also needed to change Archive::getMemoryBufferRef() with these
changes to return Expected<> as well to propagate Errors up.
As well as changing Archive::isThinMember() to return Expected<> .
llvm-svn: 277177
Diffstat (limited to 'llvm/tools/llvm-size')
| -rw-r--r-- | llvm/tools/llvm-size/llvm-size.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index c5966ead4b6..4ecfcc2df10 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -114,13 +114,14 @@ static void error(llvm::Error E, StringRef FileName, const Archive::Child &C, HadError = true; errs() << ToolName << ": " << FileName; - ErrorOr<StringRef> NameOrErr = C.getName(); + Expected<StringRef> NameOrErr = C.getName(); // TODO: if we have a error getting the name then it would be nice to print // the index of which archive member this is and or its offset in the // archive instead of "???" as the name. - if (NameOrErr.getError()) + if (!NameOrErr) { + consumeError(NameOrErr.takeError()); errs() << "(" << "???" << ")"; - else + } else errs() << "(" << NameOrErr.get() << ")"; if (!ArchitectureName.empty()) |

