Thread Expected<...> up from libObject’s getType() for symbols to allow llvm-objdump to produce a good error message.

Produce another specific error message for a malformed Mach-O file when a symbol’s
section index is more than the number of sections.  The existing test case in test/Object/macho-invalid.test
for macho-invalid-section-index-getSectionRawName now reports the error with the message indicating
that a symbol at a specific index has a bad section index and that bad section index value.

Again converting interfaces to Expected<> from ErrorOr<> does involve
touching a number of places. Where the existing code reported the error with a
string message or an error code it was converted to do the same.

Also there some were bugs in the existing code that did not deal with the
old ErrorOr<> return values.  So now with Expected<> since they must be
checked and the error handled, I added a TODO and a comment:
"// TODO: Actually report errors helpfully" and a call something like
consumeError(NameOrErr.takeError()) so the buggy code will not crash
since needed to deal with the Error.

llvm-svn: 268298
This commit is contained in:
Kevin Enderby
2016-05-02 20:28:12 +00:00
parent 34c549ea02
commit 7bd8d99497
26 changed files with 229 additions and 106 deletions

View File

@@ -29,9 +29,12 @@ ObjectFile::ObjectFile(unsigned int Type, MemoryBufferRef Source)
: SymbolicFile(Type, Source) {}
bool SectionRef::containsSymbol(SymbolRef S) const {
ErrorOr<section_iterator> SymSec = S.getSection();
if (!SymSec)
Expected<section_iterator> SymSec = S.getSection();
if (!SymSec) {
// TODO: Actually report errors helpfully.
consumeError(SymSec.takeError());
return false;
}
return *this == **SymSec;
}