diff --git a/llvm/lib/DebugInfo/PDB/Native/GlobalsStream.cpp b/llvm/lib/DebugInfo/PDB/Native/GlobalsStream.cpp index 1fe35a691c35b347386a299209a984a10e5fe7e1..97bbbebd575f256beba2a973205e708340114440 100644 --- a/llvm/lib/DebugInfo/PDB/Native/GlobalsStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/GlobalsStream.cpp @@ -117,7 +117,8 @@ Error GSIHashTable::read(BinaryStreamReader &Reader) { return EC; if (auto EC = readGSIHashRecords(HashRecords, HashHdr, Reader)) return EC; - if (auto EC = readGSIHashBuckets(HashBuckets, HashBitmap, HashHdr, Reader)) - return EC; + if (HashHdr->HrSize > 0) + if (auto EC = readGSIHashBuckets(HashBuckets, HashBitmap, HashHdr, Reader)) + return EC; return Error::success(); } diff --git a/llvm/test/DebugInfo/PDB/Inputs/pdbdump-globals-empty.pdb b/llvm/test/DebugInfo/PDB/Inputs/pdbdump-globals-empty.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a688d399895b6ad333f4e9fcfa0bc7b79cff37ad Binary files /dev/null and b/llvm/test/DebugInfo/PDB/Inputs/pdbdump-globals-empty.pdb differ diff --git a/llvm/test/DebugInfo/PDB/pdbdump-globals-empty.test b/llvm/test/DebugInfo/PDB/pdbdump-globals-empty.test new file mode 100644 index 0000000000000000000000000000000000000000..59a06ea5e85575cb29d5dff1adc37d8d91acf1ed --- /dev/null +++ b/llvm/test/DebugInfo/PDB/pdbdump-globals-empty.test @@ -0,0 +1,6 @@ +RUN: llvm-pdbutil dump -globals %S/Inputs/pdbdump-globals-empty.pdb | FileCheck %s + +CHECK: Global Symbols +CHECK: ============================================================ +CHECK: Records +CHECK-NOT: S_ diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp index 8a4d21b27ba6bbad6e513b8b5ba4254602ee8e2d..5b02d68bc7a7cce75955d8b9f1e648e9a7e692f2 100644 --- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -639,9 +639,11 @@ Error DumpOutputStyle::dumpUdtStats() { } auto &SymbolRecords = cantFail(getPdb().getPDBSymbolStream()); - auto &Globals = cantFail(getPdb().getPDBGlobalsStream()); + auto ExpGlobals = getPdb().getPDBGlobalsStream(); + if (!ExpGlobals) + return ExpGlobals.takeError(); - for (uint32_t PubSymOff : Globals.getGlobalsTable()) { + for (uint32_t PubSymOff : ExpGlobals->getGlobalsTable()) { CVSymbol Sym = SymbolRecords.readRecord(PubSymOff); HandleOneSymbol(Sym); }