From 258dc25c121c2af07444cd657a0160dc52fdebbc Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Mon, 2 Nov 2015 20:49:29 +0000 Subject: [PATCH] [Support] Assert that reported key+data lenghts match reality This found a bug in Clang's PTH implementation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251829 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/OnDiskHashTable.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/llvm/Support/OnDiskHashTable.h b/include/llvm/Support/OnDiskHashTable.h index 48ec40ffbaf..c47134f46c8 100644 --- a/include/llvm/Support/OnDiskHashTable.h +++ b/include/llvm/Support/OnDiskHashTable.h @@ -171,8 +171,22 @@ public: LE.write(I->Hash); const std::pair &Len = InfoObj.EmitKeyDataLength(Out, I->Key, I->Data); +#ifdef NDEBUG InfoObj.EmitKey(Out, I->Key, Len.first); InfoObj.EmitData(Out, I->Key, I->Data, Len.second); +#else + // In asserts mode, check that the users length matches the data they + // wrote. + uint64_t KeyStart = Out.tell(); + InfoObj.EmitKey(Out, I->Key, Len.first); + uint64_t DataStart = Out.tell(); + InfoObj.EmitData(Out, I->Key, I->Data, Len.second); + uint64_t End = Out.tell(); + assert(offset_type(DataStart - KeyStart) == Len.first && + "key length does not match bytes written"); + assert(offset_type(End - DataStart) == Len.second && + "data length does not match bytes written"); +#endif } } -- 2.34.1