From 73b0b2f55503e6b72e6525a115965a184e1a1dd7 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Thu, 16 Jun 2016 18:09:04 +0000 Subject: Revert "[pdb] Change type visitor pattern to be dynamic." This reverts commit fb0dd311e1ad945827b8ffd5354f4810e2be1579. This breaks some llvm-readobj tests. llvm-svn: 272927 --- llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | 40 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp') diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp index 46717f2..99e5037 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp @@ -84,44 +84,39 @@ template static uint32_t getTpiHash(T &Rec) { } namespace { -class TpiHashVerifier : public TypeVisitorCallbacks { +class TpiHashVerifier : public CVTypeVisitor { public: TpiHashVerifier(FixedStreamArray &HashValues, uint32_t NumHashBuckets) : HashValues(HashValues), NumHashBuckets(NumHashBuckets) {} - Error visitUdtSourceLine(UdtSourceLineRecord &Rec) override { - return verifySourceLine(Rec); - } + void visitUdtSourceLine(UdtSourceLineRecord &Rec) { verifySourceLine(Rec); } - Error visitUdtModSourceLine(UdtModSourceLineRecord &Rec) override { - return verifySourceLine(Rec); + void visitUdtModSourceLine(UdtModSourceLineRecord &Rec) { + verifySourceLine(Rec); } - Error visitClass(ClassRecord &Rec) override { return verify(Rec); } - Error visitEnum(EnumRecord &Rec) override { return verify(Rec); } - Error visitUnion(UnionRecord &Rec) override { return verify(Rec); } + void visitClass(ClassRecord &Rec) { verify(Rec); } + void visitEnum(EnumRecord &Rec) { verify(Rec); } + void visitInterface(ClassRecord &Rec) { verify(Rec); } + void visitStruct(ClassRecord &Rec) { verify(Rec); } + void visitUnion(UnionRecord &Rec) { verify(Rec); } - Error visitTypeEnd(const CVRecord &Record) override { - ++Index; - return Error::success(); - } + void visitTypeEnd(const CVRecord &Record) { ++Index; } private: - template Error verify(T &Rec) { + template void verify(T &Rec) { uint32_t Hash = getTpiHash(Rec); if (Hash && Hash % NumHashBuckets != HashValues[Index]) - return make_error(raw_error_code::invalid_tpi_hash); - return Error::success(); + parseError(); } - template Error verifySourceLine(T &Rec) { + template void verifySourceLine(T &Rec) { char Buf[4]; support::endian::write32le(Buf, Rec.getUDT().getIndex()); uint32_t Hash = hashStringV1(StringRef(Buf, 4)); if (Hash % NumHashBuckets != HashValues[Index]) - return make_error(raw_error_code::invalid_tpi_hash); - return Error::success(); + parseError(); } FixedStreamArray HashValues; @@ -134,8 +129,11 @@ private: // Currently we only verify SRC_LINE records. Error TpiStream::verifyHashValues() { TpiHashVerifier Verifier(HashValues, Header->NumHashBuckets); - CVTypeVisitor Visitor(Verifier); - return Visitor.visitTypeStream(TypeRecords); + Verifier.visitTypeStream(TypeRecords); + if (Verifier.hadError()) + return make_error(raw_error_code::corrupt_file, + "Corrupt TPI hash table."); + return Error::success(); } Error TpiStream::reload() { -- cgit v1.1