[llvm-pdbdump] Propagate errors a little more consistently
PDBFile::getBlockData didn't really return any indication that it
failed. It merely returned an empty buffer.
llvm-svn: 275009
diff --git a/llvm/lib/DebugInfo/PDB/Raw/MappedBlockStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/MappedBlockStream.cpp
index 3463871..92b2048 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/MappedBlockStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/MappedBlockStream.cpp
@@ -139,8 +139,10 @@
uint32_t BlockSpan = Last - First + 1;
uint32_t ByteSpan =
BytesFromFirstBlock + (BlockSpan - 1) * Pdb.getBlockSize();
- Buffer = Pdb.getBlockData(BlockList[First], Pdb.getBlockSize());
- Buffer = Buffer.drop_front(OffsetInFirstBlock);
+ auto Result = Pdb.getBlockData(BlockList[First], Pdb.getBlockSize());
+ if (!Result)
+ return Result.takeError();
+ Buffer = Result->drop_front(OffsetInFirstBlock);
Buffer = ArrayRef<uint8_t>(Buffer.data(), ByteSpan);
return Error::success();
}
@@ -173,8 +175,12 @@
}
uint32_t FirstBlockAddr = BlockList[BlockNum];
- auto Data = Pdb.getBlockData(FirstBlockAddr, Pdb.getBlockSize());
- Data = Data.drop_front(OffsetInBlock);
+ auto Result = Pdb.getBlockData(FirstBlockAddr, Pdb.getBlockSize());
+ if (!Result) {
+ consumeError(Result.takeError());
+ return false;
+ }
+ auto Data = Result->drop_front(OffsetInBlock);
Buffer = ArrayRef<uint8_t>(Data.data(), Size);
return true;
}
@@ -197,8 +203,11 @@
while (BytesLeft > 0) {
uint32_t StreamBlockAddr = BlockList[BlockNum];
- auto Data = Pdb.getBlockData(StreamBlockAddr, Pdb.getBlockSize());
+ auto Result = Pdb.getBlockData(StreamBlockAddr, Pdb.getBlockSize());
+ if (!Result)
+ return Result.takeError();
+ auto Data = *Result;
const uint8_t *ChunkStart = Data.data() + OffsetInBlock;
uint32_t BytesInChunk =
std::min(BytesLeft, Pdb.getBlockSize() - OffsetInBlock);