Return an ErrorOr<Binary *> from createBinary.
I did write a version returning ErrorOr<OwningPtr<Binary> >, but it is too
cumbersome to use without std::move. I will keep the patch locally and submit
when we switch to c++11.
llvm-svn: 199326
diff --git a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
index 751453c..c522c0d 100644
--- a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
+++ b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
@@ -301,9 +301,9 @@
return I->second;
Binary *Bin = 0;
Binary *DbgBin = 0;
- OwningPtr<Binary> ParsedBinary;
- OwningPtr<Binary> ParsedDbgBinary;
- if (!error(createBinary(Path, ParsedBinary))) {
+ ErrorOr<Binary *> BinaryOrErr = createBinary(Path);
+ if (!error(BinaryOrErr.getError())) {
+ OwningPtr<Binary> ParsedBinary(BinaryOrErr.get());
// Check if it's a universal binary.
Bin = ParsedBinary.take();
ParsedBinariesAndObjects.push_back(Bin);
@@ -312,9 +312,10 @@
// resource directory.
const std::string &ResourcePath =
getDarwinDWARFResourceForPath(Path);
- error_code EC = createBinary(ResourcePath, ParsedDbgBinary);
+ BinaryOrErr = createBinary(ResourcePath);
+ error_code EC = BinaryOrErr.getError();
if (EC != errc::no_such_file_or_directory && !error(EC)) {
- DbgBin = ParsedDbgBinary.take();
+ DbgBin = BinaryOrErr.get();
ParsedBinariesAndObjects.push_back(DbgBin);
}
}
@@ -324,10 +325,12 @@
uint32_t CRCHash;
std::string DebugBinaryPath;
if (getGNUDebuglinkContents(Bin, DebuglinkName, CRCHash) &&
- findDebugBinary(Path, DebuglinkName, CRCHash, DebugBinaryPath) &&
- !error(createBinary(DebugBinaryPath, ParsedDbgBinary))) {
- DbgBin = ParsedDbgBinary.take();
- ParsedBinariesAndObjects.push_back(DbgBin);
+ findDebugBinary(Path, DebuglinkName, CRCHash, DebugBinaryPath)) {
+ BinaryOrErr = createBinary(DebugBinaryPath);
+ if (!error(BinaryOrErr.getError())) {
+ DbgBin = BinaryOrErr.get();
+ ParsedBinariesAndObjects.push_back(DbgBin);
+ }
}
}
}