Fixed serious bug in BatchReadOwnedPtrs where in a chain of calls to

deserialize objects if BatchReadOwnedPtrs was called more than once in the
same call chain then the second call would overwrite the SerializedPtrIDs
being used by the first call. Solved this problem by making the vector that
holds the pointer IDs local to a function call. Now BatchReadOwnedPtrs is
reentrant.

llvm-svn: 44152
This commit is contained in:
Ted Kremenek 2007-11-15 00:05:03 +00:00
parent 909d666681
commit c5f3e5371c
1 changed files with 4 additions and 5 deletions

View File

@ -126,7 +126,6 @@ private:
unsigned AbbrevNo;
unsigned RecordCode;
Location StreamStart;
std::vector<SerializedPtrID> BatchIDVec;
//===----------------------------------------------------------===//
// Public Interface.
@ -213,7 +212,7 @@ public:
template <typename T>
void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, bool AutoRegister=true) {
BatchIDVec.clear();
llvm::SmallVector<SerializedPtrID,10> BatchIDVec;
for (unsigned i = 0; i < NumPtrs; ++i)
BatchIDVec.push_back(ReadPtrID());
@ -234,8 +233,8 @@ public:
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2,
bool A1=true, bool A2=true) {
BatchIDVec.clear();
llvm::SmallVector<SerializedPtrID,10> BatchIDVec;
for (unsigned i = 0; i < NumT1Ptrs; ++i)
BatchIDVec.push_back(ReadPtrID());
@ -261,7 +260,7 @@ public:
T2*& P2, T3*& P3,
bool A1=true, bool A2=true, bool A3=true) {
BatchIDVec.clear();
llvm::SmallVector<SerializedPtrID,10> BatchIDVec;
for (unsigned i = 0; i < NumT1Ptrs; ++i)
BatchIDVec.push_back(ReadPtrID());