Fixed hack in BatchReadOwnedPtrs to no longer use the array of pointers passed in for
authorTed Kremenek <kremenek@apple.com>
Sat, 10 Nov 2007 19:28:49 +0000 (19:28 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 10 Nov 2007 19:28:49 +0000 (19:28 +0000)
deserialization as a temporary location for storing serialized pointer identifiers. The
definition of SerializedPtrID will likely change significantly in the future, and the
current implementation caused compilation errors on some 64-bit machines.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43983 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/Deserialize.h

index 8a9be99199ff39fae24705b67354b65004e95697..87d0f12728aa79c9bd7e383181d7560d08eb5487 100644 (file)
@@ -126,6 +126,7 @@ private:
   unsigned AbbrevNo;
   unsigned RecordCode;
   Location StreamStart;
+  std::vector<SerializedPtrID> BatchIDVec;
   
   //===----------------------------------------------------------===//
   // Public Interface.
@@ -213,10 +214,11 @@ public:
   template <typename T>
   void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, bool AutoRegister=true) {
     for (unsigned i = 0; i < NumPtrs; ++i)
-      reinterpret_cast<SerializedPtrID&>(Ptrs[i]) = ReadPtrID();
+      BatchIDVec.push_back(ReadPtrID());
     
     for (unsigned i = 0; i < NumPtrs; ++i) {
-      SerializedPtrID PtrID = reinterpret_cast<SerializedPtrID>(Ptrs[i]);
+      SerializedPtrID& PtrID = BatchIDVec[i];
+      
       T* p = PtrID ? SerializeTrait<T>::Materialize(*this) : NULL;
       
       if (PtrID && AutoRegister)