diff options
-rw-r--r-- | include/llvm/Bitcode/Deserialize.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index 5f8e137..48f78bf 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -168,17 +168,20 @@ public: } template <typename T> - void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs) { - llvm::SmallVector<unsigned,20> PtrIDs; - PtrIDs.reserve(NumPtrs); - - for (unsigned i = 0; i < NumPtrs; ++i) - PtrIDs.push_back(ReadInt()); - + void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs, bool AutoRegister=true) { for (unsigned i = 0; i < NumPtrs; ++i) - Ptrs[i] = PtrIDs[i] ? SerializeTrait<T>::Materialize(*this) : NULL; - } - + reinterpret_cast<uintptr_t&>(Ptrs[i]) = ReadInt(); + + for (unsigned i = 0; i < NumPtrs; ++i) { + unsigned PtrID = reinterpret_cast<uintptr_t>(Ptrs[i]); + T* p = PtrID ? SerializeTrait<T>::Materialize(*this) : NULL; + + if (PtrID && AutoRegister) + RegisterPtr(PtrID,p); + + Ptrs[i] = p; + } + } template <typename T> void ReadPtr(T*& PtrRef, bool AllowBackpatch = true) { |