summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2016-07-12 03:25:03 +0000
committerRui Ueyama <ruiu@google.com>2016-07-12 03:25:03 +0000
commitef5ec2da4a32ec5633f135f2adcf0eaa078777e1 (patch)
tree79a543d9990d0395aa7ccbfe1cca49a9867bff08 /llvm/lib/DebugInfo
parent7b4c18e8f38a0139e1f2ece643df9f7c21246b39 (diff)
downloadbcm5719-llvm-ef5ec2da4a32ec5633f135f2adcf0eaa078777e1.tar.gz
bcm5719-llvm-ef5ec2da4a32ec5633f135f2adcf0eaa078777e1.zip
Re-enable TPI hash verification for enum records.
We didn't read unique names correctly. As a result, we computed hashes on (non-)unique names instead of unique names. llvm-svn: 275150
Diffstat (limited to 'llvm/lib/DebugInfo')
-rw-r--r--llvm/lib/DebugInfo/CodeView/TypeRecord.cpp8
-rw-r--r--llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp2
2 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/DebugInfo/CodeView/TypeRecord.cpp b/llvm/lib/DebugInfo/CodeView/TypeRecord.cpp
index 40f963fe25a..f63371e8c14 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeRecord.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeRecord.cpp
@@ -166,12 +166,14 @@ ErrorOr<EnumRecord> EnumRecord::deserialize(TypeRecordKind Kind,
ArrayRef<uint8_t> &Data) {
const Layout *L = nullptr;
StringRef Name;
- CV_DESERIALIZE(Data, L, Name);
+ StringRef UniqueName;
+ CV_DESERIALIZE(Data, L, Name,
+ CV_CONDITIONAL_FIELD(UniqueName, L->hasUniqueName()));
uint16_t P = L->Properties;
ClassOptions Options = static_cast<ClassOptions>(P);
- return EnumRecord(L->NumEnumerators, Options, L->FieldListType, Name, Name,
- L->UnderlyingType);
+ return EnumRecord(L->NumEnumerators, Options, L->FieldListType, Name,
+ UniqueName, L->UnderlyingType);
}
ErrorOr<BitFieldRecord> BitFieldRecord::deserialize(TypeRecordKind Kind,
diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
index 8b44ec1b35e..5617e57ccf6 100644
--- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
+++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp
@@ -105,7 +105,7 @@ public:
}
Error visitClass(ClassRecord &Rec) override { return verify(Rec); }
- Error visitEnum(EnumRecord &Rec) override { return Error::success(); }
+ Error visitEnum(EnumRecord &Rec) override { return verify(Rec); }
Error visitUnion(UnionRecord &Rec) override { return verify(Rec); }
Error visitTypeBegin(const CVRecord<TypeLeafKind> &Rec) override {
OpenPOWER on IntegriCloud